inode, confronto dello spazio consumato per molti piccoli file (xfs, btrfs, ext4)


9

Ho una partizione ext4 (LVM su una VM) con una grande quantità di piccoli file , che devo estendere ogni 3-4 mesi.

Per quanto riguarda la quantità di spazio utilizzata dagli inode.

Uno dei file system xfs, btrfs o ext4 utilizza meno spazio?

In altre parole, il passaggio a btrfs o xfs farà riempire una partizione di inode più lentamente di ext4?


se si utilizza ext4 e si prevede di memorizzare principalmente tipi di piccole dimensioni, è necessario crearlo con i mkfs.ext4 -t newsmigliori risultati. Inoltre, suggerirei di testare: crea (ad esempio su lvm o dispositivo di loopback) ciascuno dei file system a turno, e inizia a copiare i tuoi file reali su di esso fino a quando non si riempie. Quando si riempie, fai df -i(o find | wc -l) per trovare quale è riuscito a memorizzare la maggior parte dei tuoi file, in questo modo lo saprai per certo.
Matija Nalis,

1
@MatijaNalis, -Tcon una lettera maiuscola. Il file di configurazione ha anche altre scelte dall'aspetto utile
ilkkachu,

@ilkkachu corretto, grazie. Dovrebbe esseremkfs.ext4 -T news
Matija Nalis

Quanto sono piccoli i file?
drudru,

Risposte:


6

Per iniziare con la tua prima domanda: sì, uno di questi filesystem utilizza meno spazio. Anche senza ulteriori dettagli sarebbe improbabile che tutti utilizzino la stessa identica quantità di spazio, dato che hanno implementazioni diverse. Quindi uno è tenuto a usare meno spazio di tutti gli altri.

Btrfs ha un'allocazione dinamica degli inode, quindi non c'è riempimento come hai fatto con le tabelle degli inode per ext4 (la cui dimensione è impostata al momento della creazione del filesystem ext4).

XFS è dinamico in modo simile, ma ha un limite (percentuale del filesystem che può essere usato per gli inode), quindi lì, se si riempie la propria quota di inode dipende dalla percentuale impostata così come dal conteggio / dimensioni del file


Grazie per la risposta rapida! Sembra che XFS sia la scelta più sicura per ora. Questa percentuale di utilizzo dell'inode può essere modificata in modo dinamico? e se no, c'è un modo per prevedere quanto sarà necessario?
abadys,

1
Dovresti essere in grado di farlo conxfs_growfs -m XX
Anthon,

3

Sì, e tieni presente che tutto dipende dalle tue esigenze:

Btrfs (pronunciato come Butter FS, Better FS o B-Tree FS)

Considerando che btrfs sarà in grado di estendersi su più dischi rigidi, è un ottimo punto di partenza che può supportare 16 volte più spazio su disco rispetto a ext4 . Una dimensione massima della partizione del file system btrfs è di 16 exbibytes, così come la dimensione massima del file è di 16 exbibytes.

Numero massimo di file: 2 ** 64

XFS

Il XFS è un journaling file system a 64 bit ad alte prestazioni. XFS supporta una dimensione massima del file system di 8 exbibyte per il file system a 64 bit. Ora, RHEL 7.0 utilizza XFS come file system predefinito, incluso il supporto per l'utilizzo di XFS per la /bootpartizione.

Numero massimo di file: 2 ** 64

EXT4

L'ext4 è ben noto per fornire le miglioramenti di velocità sopra ext3. Ext4 ha alcuni limiti. La dimensione massima del file è di 16 tebibyte (ovvero circa 17,6 terabyte). Il volume / partizione più grande che puoi avere con ext4 è 1 exbibyte. Come nei file system più moderni, è un file system di journaling che significa che manterrà un journal di dove si trovano principalmente i file sul disco e di ogni altra modifica che si verifica sul disco. Indipendentemente da tutte le sue funzionalità, non supporta la compressione trasparente, la crittografia trasparente o la deduplicazione dei dati. Le istantanee sono supportate tecnicamente, ma tale funzionalità è nella migliore delle ipotesi sperimentale.

Numero massimo di file: 4 miliardi

XFS vs Btrfs

XFS non ha alcun RAID, mentre Btrfs RAID non è ancora completamente stabile ed è ai suoi inizi. XFS è sempre più maturo di Btrfs , ma non possiamo negare che Btrfs sia potente e un FileSystem in crescita.

Per ora, XFS è la mia scelta - specialmente dal momento che è il FS predefinito su RHEL 7 -, a meno che non abbia davvero bisogno di Btrfs.


1
Questo ha alcune buone informazioni di base sui filesystem in generale, ma non vedo il problema specifico dei piccoli file menzionati qui.
ilkkachu,

@ilkkachu "grande quantità di piccoli file" cosa significa? Si tratta di inode poiché i file sono tutti creati tramite inode e l'inode è una struttura di dati utilizzata per rappresentare un oggetto filesystem. Quindi penso di aver spiegato tutto ciò di cui l'autore ha bisogno, in più ho parlato del numero massimo di file.
FarazX,

2

Suppongo che il problema che hai non sia la partizione che si riempie di inode di per sé, ma esaurendo il numero di inode nel filesystem. ext4 riserva staticamente gli inode quando viene creato il filesystem, ma è possibile impostare il numero con le opzioni sumkfs.ext4 :

-i byte per inode
Specifica il rapporto byte / inode. mke2fs crea un inode per ogni byte per inode byte di spazio sul disco. Maggiore è il rapporto byte per inode, meno inode verranno creati.

-N numero di inode
Sostituisce il calcolo predefinito del numero di inode che dovrebbero essere riservati per il filesystem (che si basa sul numero di blocchi e sul rapporto byte per inode). Ciò consente all'utente di specificare direttamente il numero di inode desiderati.

Il manuale afferma esplicitamente che il rapporto byte per inode non può essere modificato dopo la creazione di FS, ma il numero totale verrà ridimensionato per soddisfare il rapporto se l'FS viene ridimensionato.

Puoi anche impostare la dimensione di ciascun inode. L'impostazione predefinita è 256 byte nella maggior parte dei filesystem, ma può essere ridotta a 128 (impostazione predefinita per i filesystem "piccoli"). Lo spazio aggiuntivo viene utilizzato per la memorizzazione di attributi estesi (ad es. Etichette SELinux), quindi se non sono necessari, dovrebbe essere sicuro ridurre le dimensioni al minimo.

-I inode-size
Specifica la dimensione di ciascun inode in byte. Il valore della dimensione dell'inode deve essere una potenza di 2 maggiore o uguale a 128.

df -idovrebbe mostrare il numero di inode allocati e usati. Con le opzioni predefinite, una partizione da 30 GB che ho visto aveva un inode per ogni 16 kB, ma se i tuoi file sono molto piccoli, potresti impostare, diciamo, -i 4096di avere un inode per ogni blocco di dati sul sistema.

Se i tuoi file sono più piccoli di 4096, potresti voler ridurre anche la dimensione del blocco del file system, poiché tutti i file regolari richiedono comunque un blocco di dati completo. (Cioè, su ext4. Non so se altri filesystem attuali comprimono file piccoli.)

-b dimensione blocco
Specifica la dimensione dei blocchi in byte. I valori validi per la dimensione del blocco sono 1024, 2048 e 4096 byte per blocco. Se omesso, la dimensione del blocco è determinata euristicamente dalla dimensione del filesystem e dall'uso previsto del filesystem (vedere l'opzione -T).

mkfs.ext4ha anche l' -T <type>opzione che può essere utilizzata come scorciatoia per alcuni o tutti questi. Le impostazioni sono in /etc/mke2fs.conf, che sul mio Debian rende eg mkfs.ext4 -T smallequivalente a

mkfs.ext4 -b 1024 -I 128 -i 4096

Che potrebbe non essere un brutto insieme di opzioni per molti file di piccole dimensioni (e senza xattrs.)

Se i tuoi file sono persino più piccoli di un kB, un file system potrebbe non essere il modo migliore per salvare i dati, ma forse dovresti prendere in considerazione qualcosa come un database o un sistema specifico dell'applicazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.