Wenn ich unter OS X eine Textdatei erstelle, sind es aus irgendeinem Grund immer mindestens 4 KB, es sei denn, sie ist leer. Warum ist das? Könnten 4.000 Bytes Metadaten zu 1 Byte Klartext vorhanden sein?
:P
Wenn ich unter OS X eine Textdatei erstelle, sind es aus irgendeinem Grund immer mindestens 4 KB, es sei denn, sie ist leer. Warum ist das? Könnten 4.000 Bytes Metadaten zu 1 Byte Klartext vorhanden sein?
:P
Antworten:
Die Blockgröße des Dateisystems muss 4 kB betragen. Wenn Daten in eine Datei geschrieben werden, die in einem Dateisystem enthalten ist, muss das Betriebssystem Speicherblöcke zuweisen, um die Daten zu enthalten, die in die Datei geschrieben werden.
Wenn ein Dateisystem erstellt wird, wird der in diesem Dateisystem enthaltene Speicher in der Regel in Blöcke fester Größe unterteilt. In diesem Wikipedia-Artikel wird dieser Vorgang kurz erläutert.
Die zugrunde liegende Blockgröße des Dateisystems für diese Datei muss eine Blockgröße von 4 KB aufweisen. Diese Datei verwendet 1 4K-Block und nur ein Byte in diesem Block enthält tatsächliche Daten.
Alle Dateisysteme haben eine Cluster- oder Blockgröße oder den kleinsten verfügbaren Speicherplatz für eine Datei. Auch wenn die tatsächliche Dateigröße kleiner als die Cluster- / Blockgröße ist, wird dennoch ein Cluster oder 4 KB auf Ihrem Dateisystem belegt. Die Clustergröße hängt vom Dateisystem und den Dateisystemoptionen ab.
Wenn es, wie Gilles betonte, null Bytes enthält, werden auf typischen * nix-Dateisystemen keine Blöcke / Cluster, sondern nur ein Inode verwendet, wodurch die Einschränkung besser beantwortet wird, "es sei denn, es ist leer".
Ein kleines Experiment zur Veranschaulichung:
Lassen Sie uns zunächst die tatsächliche Blockgröße meiner root ext4 (LVM) -Partition ermitteln:
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
Es ist erwartungsgemäß 4096 (4 KiB). Lassen Sie uns nun drei Dateien erstellen: Die erste ist null Byte, die zweite ist nur ein Byte und die dritte ist 4 KiB (die Blockgröße):
[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096
Nun haben wir ls
das Verzeichnis. Wir verwenden die -s
Option, um die zugewiesene Größe (die am weitesten links stehende Spalte) in der Anzahl von 1024-Byte- "Blöcken" anzuzeigen.
(ls weiß nicht, dass die tatsächliche Blockgröße 4096 ist - wir könnten angeben, --block-size
aber das skaliert alles um diesen Wert, und wir möchten auch die tatsächliche Dateigröße in Bytes sehen) .
[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root 0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root 1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin
Zwei Dinge können hier festgestellt werden:
Sparse-Dateien sind Dateien mit großen Nullenblöcken. Da bekannt ist, dass die Daten alle Null sind, macht es keinen Sinn, sie auf der Festplatte zu speichern. Auf diese Weise kann die scheinbare Größe einer Datei tatsächlich größer sein als die Größe der Festplatte.
Beachten Sie, dass bei einigen Dateisystemen der Inhalt sehr kleiner Dateien im Inode selbst gespeichert werden kann. Siehe Ist es möglich, Daten direkt in einem Inode in einem Unix / Linux-Dateisystem zu speichern? .