du e ls riportano dimensioni di directory diverse?


1

Nel tentativo di verificare che un'operazione di copia sia stata completata correttamente (o almeno che non ha saltato alcun file), ho corso du -ball'interno della directory di origine e di destinazione e ha mostrato una differenza di circa 100 KB.

Quindi, ho rintracciato la differenza e ho trovato una (di molte) directory foglia in cui duriporta una differenza nelle dimensioni totali per la copia e l'originale.

La cosa strana è che ls -lmostra queste directory come perfettamente identiche!

Ecco i due output nelle due diverse directory:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

vs.

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -l --block-size=1
total 5292851200
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
-rwxr--r-- 1 markus markus   2236594 Aug  5  2013 IMG_0005.JPG
...

Notare come la dimensione riportata da du -bsia inferiore a quella riportata da ls -le che differisca per le due directory. L' intero output di ls -lè identico per entrambe le directory.

Non ci sono link simbolici o file di sistema in questa directory. È solo un mucchio di file .jpg (una copia diretta dalla scheda SD di una fotocamera) e un file Thumbs.db che Windows ha creato per loro (tramite samba) ...

Mi sto perdendo qualcosa su come dovrebbero funzionare questi comandi?

(Sto eseguendo Debian Wheezy e uname -auscite Linux ... 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux)

Risposte:


3

Entrambi hanno ragione.

  • ls mostra i byte esatti dei file
  • du sta mostrando l'utilizzo del disco, che è diverso perché il sistema memorizza i file usando i blocchi.

Puoi trovare la dimensione del blocco utilizzata dal tuo file system con questo comando:

blockdev --getbsz <partition>

Per esempio:

blockdev --getbsz /dev/sda1

Ho pensato che l' -binterruttore per du(che implica --apparent-size) lo cambia. Inoltre, se quello era il problema, l'output di dudovrebbe essere più di quello di ls, piuttosto che di meno , no? E la dimensione del blocco su entrambi, la directory di origine e di destinazione, è la stessa.
Markus A.

blockdevriporta la dimensione del blocco del dispositivo , che non è la stessa dimensione del cluster / settore di un filesystem. Ad esempio, è molto comune utilizzare cluster 4k o 8k su un disco da 512b.
Grawity il

Non so esattamente perché dumostrare meno rispetto lsa meno che non si dispone di file sparsi
jcbermu

0

Dopo aver aggiunto l' -ainterruttore a ls, ho ottenuto:

root@...:/local/.../DCIM/100___12# du -b
5286222389      .
root@...:/local/.../DCIM/100___12# ls -al --block-size=1
total 5292867584
drwxr-xr-x 2 markus markus     12288 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

vs.

root@...:/local_old/.../DCIM/100___12# du -b
5286226485      .
root@...:/local_old/.../DCIM/100___12# ls -als --block-size=1
total 5292871680
drwxr-xr-x 2 markus markus     16384 Aug  5  2013 .
drwxr-xr-x 4 markus markus      4096 Aug  5  2013 ..
-rwxr--r-- 1 markus markus   2167504 Aug  5  2013 IMG_0004.JPG
...

Notare la differenza nella dimensione della .directory, che compensa esattamente la differenza segnalata da du -b.

Inoltre, sembra che il totale riportato da lssia effettivamente in blocchi anziché in byte. Quindi la risposta è una specie di ciò che @jcbermu ha suggerito, ma al contrario :

Sì, entrambi hanno ragione, ma lsriporta la dimensione totale nei blocchi fs usati (ma le dimensioni dei singoli file in byte) e du -briporta i byte.

La differenza tra la fonte e la destinazione che sto vedendo è causata da una differenza nelle dimensioni riportate .. Da dove viene, è un'altra storia. Probabilmente perché una ha riservato più voci di directory ad un certo punto dell'altra. Ma almeno ora non sono più preoccupato che qualcosa si sia perso nel processo di copia. Il prossimo passo è capire come dire dudi ignorare .e ..nei suoi totali e che dovrebbe risolvere il mio problema.

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.