du -s - scheinbare Größe VS du -s

7

Kann mir jemand die Unterschiede sagen von:

du -s dir 
3705012 dir

du -s --apparent-size dir
3614558 dir

Diese Verzeichnisse befinden sich in einem Blockgerät (erstellt mit cryptsetup). Oder besser: Warum muss ich --apparent-size nur mit Dateien in einem verschlüsselten Blockgerät hinzufügen?

Pol Hallen
quelle
1
Diese Antwort von stackoverflow soll Ihnen helfen: stackoverflow.com/a/5694854/2231796

Antworten:

10

Die "scheinbare Größe" einer Datei gibt an, wie viele gültige Daten sich tatsächlich in der Datei befinden. Dies ist die tatsächliche Datenmenge, die aus der Datei gelesen werden kann. Blockorientierte Geräte können nur in Blöcken und nicht in Bytes gespeichert werden. Infolgedessen wird die Festplattennutzung immer auf den nächsthöheren Block aufgerundet. Ein "Block" entspricht in diesem Fall möglicherweise auch nicht einem physischen Block auf dem Speichergerät, je nachdem, wie das Dateisystem Speicherplatz zuweist.

Im Fall Ihres verschlüsselten Geräts kann das Dateisystem den Speicherplatz erweitern, der für die Unterstützung der Verschlüsselungs- / Entschlüsselungsinformationen verwendet wird. Es verschlüsselt oder randomisiert wahrscheinlich auch den nicht verwendeten Speicherplatz zwischen dem Ende der Datei und dem Ende des Blocks, der ihn enthält, wodurch er möglicherweise größer erscheint du.

Nichts davon berücksichtigt die spärliche Dateibehandlung, die in einem verschlüsselten Dateisystem möglicherweise nicht unterstützt wird.

Joe Sewell
quelle
2

Beispiel für minimale Blockgranularität

Lass uns ein bisschen spielen, um zu sehen, was los ist.

mountsagt mir, dass ich auf einer ext4-Partition bin, die bei gemountet ist /.

Ich finde seine Blockgröße mit:

stat -fc %s .

was gibt:

4096

Erstellen wir nun einige Dateien mit folgenden Größen 1 4095 4096 4097:

#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
  dd if=/dev/zero of=f bs=1 count="${size}" status=none
  echo "size     ${size}"
  echo "real     $(du --block-size=1 f)"
  echo "apparent $(du --block-size=1 --apparent-size f)"
  echo
done

und die Ergebnisse sind:

size     1
real     4096   f
apparent 1      f

size     4095
real     4096   f
apparent 4095   f

size     4096
real     4096   f
apparent 4096   f

size     4097
real     8192   f
apparent 4097   f

Wir sehen also, dass alles, was darunter oder gleich ist, tatsächlich Bytes 4096aufnimmt 4096.

Sobald wir überqueren 4097, geht es dann zu 8192dem , was ist 2 * 4096.

Es ist dann klar, dass die Platte Daten immer an einer Blockgrenze von 4096Bytes speichert .

Was passiert mit spärlichen Dateien?

Ich habe nicht untersucht, was die genaue Darstellung ist, aber es ist klar, dass --apparentdies berücksichtigt wird.

Dies kann dazu führen, dass die scheinbaren Größen größer sind als die tatsächliche Festplattennutzung.

Zum Beispiel:

dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f

gibt:

8192    f
1073741825      f

Siehe auch: /programming/38718864/how-to-test-if-sparse-file-is-supported

Was tun, wenn ich ein paar kleine Dateien speichern möchte?

Einige Möglichkeiten sind:

Literaturverzeichnis:

Getestet in Ubuntu 16.04.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle