Beispiel für minimale Blockgranularität
Lass uns ein bisschen spielen, um zu sehen, was los ist.
mount
sagt 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 4096
aufnimmt 4096
.
Sobald wir überqueren 4097
, geht es dann zu 8192
dem , was ist 2 * 4096
.
Es ist dann klar, dass die Platte Daten immer an einer Blockgrenze von 4096
Bytes speichert .
Was passiert mit spärlichen Dateien?
Ich habe nicht untersucht, was die genaue Darstellung ist, aber es ist klar, dass --apparent
dies 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.