Ich frage mich, wie das stat
-Kommando die Anzahl der Blöcke für eine Datei berechnet. Ich habe diesen Artikel gelesen, der besagt:
Der Wert st_blocks gibt die Größe der Datei in 512-Byte-Blöcken an. (Dies kann kleiner sein als st_size/512 z.B. wenn die Datei Löcher hat.) Der Wert st_blksize gibt die "bevorzugte" Blockgröße für effizientes Dateisystem-I/O an. (Schreiben in eine Datei in kleineren Stückchen kann ein ineffizientes Lese-Ändern-Neuschreiben verursachen.)
Doch ich kann dies nicht mit meinen eigenen Tests verifizieren.
Mein Dateisystem ist ext3.
Der Befehl dumpe2fs -h /dev/sda3
zeigt:
...
Erster Block: 0
Blockgröße: 4096
Fragmentgröße: 4096
...
Dann führe ich aus
kent@KentT60:~/Desktop$ stat Email
Datei: `Email'
Größe: 965 Blöcke: 8 IO-Block: 4096 reguläre Datei
Gerät: 80ah/2058d Inode: 746095 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
Zugriff: 2009-08-11 21:36:36.000000000 +0200
Ändern: 2009-08-11 21:36:35.000000000 +0200
Änderung: 2009-08-11 21:36:35.000000000 +0200
Wenn "Blöcke" hier bedeutet: "wie viele 512-Byte-Blöcke", sollte die Zahl 2 und nicht 8 sein. Ich dachte, dass die Blockgröße des Dateisystems (IO-Block) 4k ist.
Wenn das Dateisystem die Datei Email
erhält, werden mindestens 4k von der Festplatte abgerufen (8 x 512-Byte-Blöcke), was bedeutet 965/512 + 6 = 8. Ich bin mir nicht sicher, ob diese Vermutung korrekt ist.
Noch ein Test:
kent@KentT60:~/Desktop$ stat wxPython-demo-2.8.10.1.tar.bz2
Datei: `wxPython-demo-2.8.10.1.tar.bz2'
Größe: 3605257 Blöcke: 7056 IO-Block: 4096 reguläre Datei
Gerät: 80ah/2058d Inode: 746210 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
Zugriff: 2009-08-12 21:45:45.000000000 +0200
Ändern: 2009-08-12 21:43:46.000000000 +0200
Änderung: 2009-08-12 21:43:46.000000000 +0200
3605257/512=7041.xx = 7042
Nach meiner obigen Vermutung würde dies 7042 + 6 = 7048 sein. Aber das stat
-Ergebnis zeigt 7056.
Und ein weiteres Beispiel aus dem Internet unter https://www.computerhope.com/unix/stat.htm
. Ich habe das Beispiel unten auf der Seite eingefügt:
Datei: `index.htm'
Größe: 17137 Blöcke: 40 IO-Block: 8192 reguläre Datei
Gerät: 8h/8d Inode: 23161443 Verknüpfungen: 1
Zugriff: (0644/-rw-r--r--) Uid: (17433/comphope) Gid: ( 32/ www)
Zugriff: 2007-04-03 09:20:18.000000000 -0600
Ändern: 2007-04-01 23:13:05.000000000 -0600
Änderung: 2007-04-02 16:36:21.000000000 -0600
In diesem Beispiel beträgt die Blockgröße des Dateisystems 8k. Ich vermute, dass der Wert "Blöcke" 16xN sein sollte, aber es sind 40. Ich verliere den Überblick...
Kann mir jemand erklären, wie stat
den Wert "Blöcke" berechnet?
Danke!
0 Stimmen
stat
Die Ausgabe ist ein bisschen tückisch: Die Blockgröße von "Blocks" beträgt 512 Bytes, während die Blockgröße von "IO Block" üblicherweise 4096 Bytes beträgt (für ext4). Ich habe versucht, diesem in dieser Antwort auf den Grund zu gehen.