Perché i filesystem ext non riempiono l'intero dispositivo?


8

Ho appena notato che uno qualsiasi dei filesystem ext {2,3,4} che sto cercando di creare su HDD da 500G non usa tutto lo spazio disponibile (466G). Ho anche provato reiser3, xfs, jfs, btrfs e persino vfat. Tutti creano fs di dimensione 466G (come mostrato da df -h ). Tuttavia, ext * crea fs di 459G. La disabilitazione dei blocchi riservati aumenta lo spazio disponibile per l'utente, ma la dimensione di fs è ancora 459G.

Lo stesso vale per l'HDD da 1 TB: 932G reiserfs, 917G ext4.

Quindi, qual è questa differenza dell'1,5%? Perché succede e c'è un modo per far riempire ext l'intero volume?

UPD: tutti i test eseguiti sulla stessa macchina, sullo stesso HDD ecc. Non importa in che modo 466G differisce dalla commercializzazione di 500G. Il problema è che differisce per diversi FS '.

Informazioni su df: mostra le dimensioni totali di FS, le dimensioni utilizzate e lo spazio libero. In questo caso ho:

per reiserfs:

/ dev / sda1 466G 33M 466G 1% / mnt

per ext4:

/ dev / sda1 459G 198M 435G 1% / mnt

Se disattivo la prenotazione del blocco root, 435G cambia in 459G - dimensione intera di fs (meno 198M). Ma fs stesso è ancora 459G per ext4 e 466G per reiser!

UPD2: riempimento di volumi con dati reali tramite dd:

reiserfs:

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запись в «/ mnt / 1»: На устройстве кончилось место
975702649 + 0 записей считано
975702648 + 0 записей написано
 скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c

ext2 con prenotazione blocchi disattivata (mke2fs -m 0):

fs: ~ # dd if = / dev / zero of = / mnt / 1
dd: запись в «/ mnt / 1»: На устройстве кончилось место
960356153 + 0 записей считано
960356152 + 0 записей написано
 скопировано 491702349824 байта (492 GB), 8870,01 c, 55,4 MB / c

Scusate il russo, ma l'ho eseguito nelle impostazioni internazionali predefinite e ripetendolo è troppo lungo. Non importa, l'output di dd è ovvio.

Quindi, si scopre che mke2fs crea davvero un filesystem più piccolo rispetto ad altri mkfs.


2
C'è una certa quantità di sovraccarico con ogni FS ... non ne conosco uno che ti permetterà di avere accesso a tutto lo spazio fisico disponibile sul disco.
prodigitalson

Ti consiglio di cambiare il nome visualizzato e inserire quello che sembra essere il tuo blog nel campo del sito Web del tuo profilo, per renderlo meno palesemente pubblicitario.
Ciao,

1
Ciao71, grazie per il consiglio. Il sito Web non ha importanza, è solo per openid.
Ineu,

Per una nota futura, se desideri che un programma venga pubblicato rapidamente in inglese, usa LANG=C foooLC_ALL=C foo
Alan Pearce,

Alan, giusto, grazie. Potrebbe essere anche LANG = o LANG = POSIX. Ma come ho detto, questo processo richiede molto tempo, quindi rieseguirlo con impostazioni locali diverse solo per un paio di righe è irragionevole :) In entrambi i casi, si verifica un problema con la dimensione FS per ext2 :(
Ineu

Risposte:


19

Ci sono due ragioni per cui questo è vero.

In primo luogo, per qualche motivo o altri scrittori di sistemi operativi riportano ancora spazio libero in termini di un sistema base 2 e i produttori di dischi rigidi riportano spazio libero in termini di un sistema base 10. Ad esempio, un writer del sistema operativo chiamerà 1024 byte (2 ^ 10 byte) un kilobyte e una produzione di disco rigido chiamerebbe 1000 byte un kilobyte. Questa differenza è piuttosto minore per i kilobyte, ma una volta che si arriva a terabyte, è piuttosto significativa. Un writer del sistema operativo chiamerà 1099511627776 byte (2 ^ 40 byte) un terabyte e un produttore del disco rigido chiamerà 1000000000000 byte un terabyte.

Questi due diversi modi di parlare delle dimensioni spesso creano molta confusione.

Esiste un prefisso ISO supportato per le dimensioni binarie . Le interfacce utente progettate pensando al nuovo prefisso mostreranno TiB, GiB (o più in generale XiB) quando mostrano dimensioni con un sistema con prefisso di base 2.

In secondo luogo, df -h riporta quanto spazio è disponibile per l'uso. Tutti i filesystem devono scrivere le informazioni di pulizia per tenere traccia delle cose per te. Questa informazione occupa parte dello spazio sul disco. Generalmente non molto, ma alcuni. Ciò spiega anche alcune delle apparenti perdite che stai vedendo.

Dopo aver modificato il tuo post per chiarire che nessuna delle mie risposte in realtà risponde alla tua domanda, mi prenderò cura di rispondere alla tua domanda ...

File system diversi utilizzano quantità diverse di spazio per le informazioni di pulizia e riportano l'utilizzo dello spazio in modi diversi.

Ad esempio, ext2 divide il disco in gruppi di cilindri. Quindi pre-alloca lo spazio in ciascun gruppo di cilindri per gli inode e le mappe dello spazio libero. ext3 fa la stessa cosa poiché è fondamentalmente ext2 + journaling. E ext4 fa esattamente la stessa cosa poiché è una modifica abbastanza semplice (e quasi retrocompatibile) di ext3. E poiché questo sovraccarico di metadati è stato risolto durante la creazione del file system o il ridimensionamento, non viene segnalato come spazio "usato". Sospetto che ciò avvenga anche perché i metadati del gruppo di cilindri si trovano in punti fissi sul disco, e quindi sono semplicemente impliciti come utilizzati e quindi non contrassegnati o considerati nelle mappe dello spazio libero.

Ma reiserfs non pre-alloca alcun metadata di alcun tipo. Non ha limiti di inode fissi sulla creazione del filesystem perché alloca al volo tutti i suoi inode come fa con i blocchi di dati. Al massimo, ha bisogno di alcune strutture che descrivono la directory principale e una mappa spaziale libera di qualche tipo. Quindi usa molto meno spazio quando non contiene nulla.

Ciò significa che reiserfs occuperà più spazio quando si aggiungono i file perché allocerà i metadati (come gli inode) e lo spazio dati effettivo per il file.

Non so esattamente come jfs e btrfs monitorino l'utilizzo dello spazio dei metadati. Ma sospetto che lo seguano più come fa Reiserfs. vfat in particolare non ha alcun concetto di inode. La sua mappa dello spazio libero (la cui dimensione è fissata al file system create (la famigerata tabella FAT)) memorizza gran parte dei dati che un inode farebbe, e la voce della directory (che è allocata dinamicamente) memorizza il resto.


2
C'è uno standard ISO per questo: en.wikipedia.org/wiki/Binary_prefix
Bobby

@Bobby - Sì, ed è iniziato a comparire sui display. Lo aggiungerò alla mia risposta. Grazie!
Onnipotente il

8

Oltre ai problemi menzionati da Omnifarious, con ext2 / 3/4 una certa quantità di spazio è riservata a root - questo spazio riservato non viene mostrato nell'output di df.

Ad esempio, creando un piccolo filesystem (~ 100mb) con opzioni predefinite, usando ext2 anziché 3 o 4 per ignorare lo spazio che altrimenti verrebbe preso dal journal:

swann:/tmp# dd if=/dev/zero of=./loop.fs bs=10240 count=10240
swann:/tmp# mkfs.ext2 loop.fs
swann:/tmp# mkdir loop
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     92480   2% /tmp/loop

Modifica dell'opzione dei blocchi riservati ( tune2fsl' -mopzione imposta i blocchi riservati in percentuale e l' -ropzione imposta i blocchi riservati come numero diritto di blocchi):

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 25 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     72000   3% /tmp/loop

swann:/tmp# umount loop
swann:/tmp# tune2fs -m 0 loop.fs
swann:/tmp# mount -text2 -oloop loop.fs loop
swann:/tmp# df loop
Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/loop.fs             99150      1550     97600   2% /tmp/loop

Come si può vedere nell'esempio sopra, anche quando si accede come root dfnon mostra lo spazio riservato nel conteggio "Disponibile". Lo spazio riservato non viene visualizzato neanche nel conteggio "Usato", sia che sia stato effettuato l'accesso come root che come utente meno privilegiato. Questo a volte può causare confusione quando un filesystem è quasi pieno se non ti aspetti questi due fatti.

Si noti inoltre che tune2fs, nonostante il suo nome, è rilevante per i filesystem ext3 ed ext4 e per quelli ext2.


Grazie per la risposta. No, non si tratta di blocchi riservati. Domanda aggiornata.
Ineu,

0

Circa la differenza tra filesystem, diversi filesystem organizzano i blocchi in modo diverso e necessitano di più o meno dati per identificare e tenere traccia dei blocchi. Anche la dimensione del blocco fa la differenza, come se avessi più o meno blocchi per lo stesso spazio, hai più o meno spazio "perso". Inoltre, i filesystem raggruppano i blocchi per evitare di frammentare i file e ogni cluster di blocchi ha un identificatore di qualche dimensione, quindi più o meno cluster di blocchi useranno spazio fisico diverso sul disco. Quindi la differenza sta nel modo in cui il filesystem organizza lo spazio fisico.

Ecco una descrizione di ext2 e probabilmente puoi trovare qualcosa di simile per reiserfs ma non l'ho mai usato, quindi non ne ho.


2
Reiserfs e btrfs sono insoliti in quanto quasi tutte le informazioni di contabilità sono allocate in modo dinamico. Solo le copie del superblocco e le bitmap dello spazio libero sono allocate durante l'installazione del filesystem. Ovviamente, ciò significa che la quantità effettiva di spazio disponibile per i dati è meno deterministica per questi filesystem.
Onnipotente il

@Omnifarious +1 - Quindi, se capisco bene su reiserfs e btrfs, lo spazio disponibile riportato è più grande all'inizio ma verrà utilizzato sia con i dati che con le informazioni di contabilità anziché solo con i dati, giusto?
laurent

@ laurent-rpnet - Sì, è corretto. Nel caso di btrfs è ancora più interessante. btrfs è in grado di implementare RAID su base di singoli file, quindi la sua segnalazione dello spazio disponibile disponibile è ancora più difficile da definire poiché non può solo supporre che ci sarà una certa quantità di spazio aggiuntivo utilizzato per blocco utilizzato per i dati. Inoltre, consente copie basate su COW molto economiche, quindi la scrittura di un blocco nel mezzo di un file esistente può allocare spazio.
Onnipotente il

E che dire di XFS, JFS e VFAT? È difficile credere che fs primitivi come FAT32 siano più dinamici di ext4.
Ineu,

FAT32 ha anche blocchi riservati per l'organizzazione. Qual è il significato di dinamico qui? Se l'allocazione dinamica, FAT32 non ha allocazione dinamica, come ext e inoltre non mostra tutti i blocchi sul disco disponibili per i dati. Presenta anche alcune limitazioni: il filesystem ext4 non ha alcun sistema di autorizzazioni mentre ext4 ha autorizzazioni POSIX e ACL e la dimensione massima del file è 4 GB su FAT32 e 2 TB su ext3 (non sono sicuro di ext4 ma dovrebbe essere almeno lo stesso).
laurent
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.