GNU/Linux >> Linux Esercitazione >  >> Linux

Gli amministratori di sistema Linux vogliono sapere:dove è andato a finire il mio spazio su disco?

La disparità hardware:hai appena acquistato una bella unità nuova da 1 TB, ma gli strumenti del disco del tuo sistema Linux lo segnalano come 977 GB. Ehi, dove sono finiti quei 23 GB?

Da nessuna parte e, a seconda della tua opinione, o è ancora o non è mai stato lì! Questa differenza deriva dai produttori di dischi e dai programmatori di sistemi operativi che utilizzano diverse unità di misura. I produttori di dischi utilizzano misurazioni metriche reali, quindi 1000 GB =1 TB. Tuttavia, nel mondo dei computer, non operiamo alla potenza di 10, operiamo alla potenza di due, quindi per noi, 1024 GB =1 TB. Questa differenza nelle unità di misura è la differenza tra 1 TB o 977 GB.

Wow, è incredibilmente fastidioso! Per non parlare del fatto che non sia realmente basato su standard, che è qualcosa di cui si occupa la comunità open source, giusto? In sostanza, nel settore dei computer, abbiamo abusato del fatto che 1024 è dannatamente vicino a 1000. Tuttavia, man mano che otteniamo file, memoria, unità, pacchetti e così via sempre più grandi, questa differenza è sempre più evidente.

Allora cosa si deve fare? Gli organismi internazionali di standardizzazione, come la Commissione elettrotecnica internazionale (IEC) e l'Organizzazione internazionale per la standardizzazione (ISO), hanno creato un'unità di misura per tenere conto della differenza di utilizzo tra la metrica reale e l'approssimazione approssimativa che abbiamo utilizzato nell'informatica. Immettere GiB e TiB (le altre unità più piccole e più grandi seguono la stessa nomenclatura). In sostanza, 1024 GiB =1 TiB. Ciò significa che puoi ancora acquistare l'unità da 1 TB, ma le utilità del disco dovrebbero segnalarlo come 977 GiB per riflettere che l'utilità del disco utilizza un fattore di 1024 per la misurazione, non la metrica, 1000, fattore di misurazione.

Le versioni moderne degli strumenti hanno già iniziato a utilizzare questo metodo. Ad esempio, vedi il mio fdisk output di utilità da un sistema Red Hat Enterprise Linux 8.2 di seguito:

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes

Se desideri ulteriori dettagli, ecco un articolo sul prefisso binario.

La discrepanza del filesystem

Il contenuto seguente si basa su un filesystem esteso tradizionale distribuito su molti Linux diversi, in particolare ext4. Tuttavia, Red Hat Enterprise Linux ora distribuisce XFS come filesystem predefinito. Verso la fine di questa sezione, c'è una discussione specifica su come questi argomenti influiscono su XFS. Per ora, concentriamoci su ext4.

La situazione:un utente segnala che il filesystem è pieno, ma quando guardo il disco libero (df ) di output, vedo quanto segue:

[root@somehost ~]# df -h
Filesystem             Size  Used  Avail  Use%  Mounted on
/dev/vdb1              991M  924M     0  100%  /mnt

Dall'output sopra, noti che il Size è riportato a 991 MB, ma il Usato è 924 MB, chiaramente non pieno. Tuttavia, quando un utente esegue un comando per consumare più spazio su disco, come dd comando, ottengono il seguente messaggio:

[user@somehost mnt]$ dd if=/dev/zero of=bigfile2
dd: writing to 'bigfile2': No space left on device

Tuttavia, se usano touch per creare un file, vedono questo:

[user@somehost mnt]$ touch file3

[user@somehost mnt]$ ls
bigfile  file3  lost+found

Inoltre, se root crea un file usando dd , funziona senza problemi, come mostrato di seguito:

[root@somehost mnt]# dd if=/dev/zero of=root-file count=100
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.000748385 s, 68.4 MB/s

[root@somehost mnt]# ls
bigfile  file3  lost+found  root-file

Chiaramente, la creazione dei file avviene con successo tramite dd or touch se sei root! Cosa sta succedendo?

Il motivo touch funziona è che il filesystem ha esaurito i blocchi di dati per la memorizzazione dei contenuti del file . Tuttavia, il filesystem ha molti inode (puntatori di file) disponibili. Ciò viene confermato utilizzando un'altra opzione con df comando:

[root@somehost mnt]# df -i
Filesystem             Inodes  IUsed   IFree IUse%  Mounted on
/dev/vdb1               65536     14   65522        1%  /mnt

Il touch Il comando crea un file vuoto, il che significa che consuma un inode per archiviare i metadati del file ma non utilizza i blocchi di dati associati.

La creazione del file dell'utente root funziona perché il filesystem ext4 conserva uno spazio riservato a cui gli utenti non privilegiati non possono accedere. Solo i processi di root o di proprietà di root possono scrivere file per consumare questo spazio su disco. Per i filesystem ext2, ext3 ed ext4, puoi controllare questi dati, memorizzati nel superblocco del filesystem, usando tune2fs comando. Nell'output di seguito, ho rimosso la maggior parte dei dati riportati da tune2fs in modo da poter mostrare lo spazio totale e riservato:

[root@somehost mnt]# tune2fs -l /dev/vdb1
tune2fs 1.45.4 (23-Sep-2019)
Filesystem volume name:   <none>
Last mounted on:          /mnt

<<< OUTPUT ABRIDGED >>>

Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              261888
Reserved block count:     13094
Free blocks:              253029
Free inodes:              65525
First block:              0
Block size:               4096

<< OUTPUT ABRIDGED>>

Nell'output sopra, nota il numero di blocchi riservati parametro. Secondo il mkfs.ext4 man, per impostazione predefinita è il cinque percento dello spazio del filesystem. Su questo filesystem sono circa 51 MiB di spazio.

Conteggio blocchi riservati x Dimensione blocco =quantità in byte
13094 x 4096 =53633024 byte

Puoi quindi convertire i byte fino a KiB o MiB dividendo il numero risultante per 1024 per aumentare le unità di misura come meglio credi. Ecco un esempio:

53633024 Byte/1024 =52376 KiB
52376 KiB/1024 =51,15 MiB

Il filesystem nel suo insieme è di circa 1 GiB, quindi un conteggio dei blocchi riservati del cinque percento porterebbe lo spazio dei blocchi di riserva a circa 50 MiB.

Questo insieme di blocchi riservati è quello di proprietà del root dd utilizzato per archiviare i dati nell'esempio precedente che funzionavano mentre l'utente continuava a non archiviare i file sul filesystem apparentemente "completo". Gli amministratori possono utilizzare tune2fs per aumentare o diminuire il numero di blocchi riservati su un filesystem. Tuttavia, se aumenti questo importo mentre il filesystem è attivo, è necessario che sia disponibile spazio libero contiguo all'area di blocco riservata esistente del disco per accumulare più blocchi riservati. In genere, se desideri riservare più del valore predefinito, ti consiglio di farlo quando formatti il ​​filesystem utilizzando un'opzione per mkfs.ext4 comando. Questo processo garantisce che vi sia uno spazio contiguo adeguato per allocare il numero di blocchi riservati desiderati.

Infine, a seconda del filesystem, dello strumento che stai utilizzando per ispezionare il filesystem o la tua distribuzione, potresti vedere strumenti che segnalano un utilizzo del filesystem maggiore del 100%. Se dovessi vedere un rapporto dello strumento utilizzato al 102%, ti sta dicendo che il 100% dello spazio su disco accessibile all'utente sul filesystem è consumato e hai consumato anche alcuni di quei blocchi riservati.

Allora che dire di XFS? In precedenza nella sezione, ho menzionato che Red Hat Enterprise Linux 7 e 8 utilizzano XFS come formato di filesystem predefinito. XFS utilizza blocchi riservati, ma riserva meno dei formati di filesystem estesi e non consente a nessun utente l'accesso a quello spazio. Lo spazio è riservato al filesystem XFS stesso da utilizzare. Poiché lo spazio riservato ha uno scopo diverso, consentire al filesystem di utilizzare lo spazio per le operazioni del filesystem e oscurare lo spazio dal sistema, è meno facile riferire sull'utilizzo delle utilità XFS. Tuttavia, può essere fatto usando una combinazione di xfs_info , guardando il conteggio e la dimensione dei blocchi, convertendoli in KiB e confrontandoli con l'output di un df .

Concludi

Allora, dov'è il tuo spazio su disco "perso"? È nascosto nelle diverse unità di misura utilizzate per segnalare la capacità del disco. Il modo in cui questo spazio viene segnalato e utilizzato varia anche in base al filesystem e agli strumenti.

[ Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente. ]


Linux
  1. Usa df per controllare lo spazio libero su disco su Linux

  2. Controlla lo spazio su disco utilizzato su Linux con du

  3. Controlla lo spazio su disco in Linux usando df e du Commands

  4. Linux – Rendi più lenta la copia del disco/disco?

  5. Determinazione dell'utilizzo del disco in Linux utilizzando il comando "du".

Come controllare l'utilizzo dello spazio su disco in Linux utilizzando Ncdu

Diskonaut:un terminale di navigazione dello spazio su disco per Linux

Come pulire un po' di spazio su disco su un'istanza Linux?

Come controllare lo spazio libero su disco su Linux

Rintracciare dove è andato lo spazio su disco su Linux?

Comando Linux df per controllare lo spazio su disco