Jak polecenie stat oblicza bloki pliku?
Zastanawiam się, jak polecenie stat oblicza bloki pliku. Czytamartykuł, to mówi:
Wartość st_blocks podaje rozmiar pliku w 512-bajtowych blokach. (Może to być mniejsze niż st_size / 512, np. Gdy plik ma dziury.) Wartość st_blksize daje „preferowany” rozmiar bloku dla wydajnego systemu plików I / O. (Zapisywanie do pliku w mniejszych fragmentach może spowodować nieefektywne przepisywanie i modyfikowanie).
ale nie mogę tego zweryfikować na moim teście.
mój system plików to ext3.
dumpe2fs -h / dev / sda3 pokazuje:
...
First block: 0
Block size: 4096
Fragment size: 4096
...
potem uciekam
kent@KentT60:~/Desktop$ stat Email
File: `Email'
Size: 965 Blocks: 8 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746095 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
Access: 2009-08-11 21:36:36.000000000 +0200
Modify: 2009-08-11 21:36:35.000000000 +0200
Change: 2009-08-11 21:36:35.000000000 +0200
Jeśli Bloki tutaj oznaczają: ile bloków 512 bajtów, liczba powinna wynosić 2 nie 8. Pomyślałem, że rozmiar bloku z systemu plików (blok io) wynosi 4k. Jeśli fs otrzyma plik Email, pobierze minimalnie 4k z dysku (8 x 512 bajtów), co oznacza 965/512 + 6 = 8. Nie jestem pewien, czy zgadywanie jest poprawne.
kolejny test:
kent@KentT60:~/Desktop$ stat wxPython-demo-2.8.10.1.tar.bz2
File: `wxPython-demo-2.8.10.1.tar.bz2'
Size: 3605257 Blocks: 7056 IO Block: 4096 regular file
Device: 80ah/2058d Inode: 746210 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ kent) Gid: ( 1000/ kent)
Access: 2009-08-12 21:45:45.000000000 +0200
Modify: 2009-08-12 21:43:46.000000000 +0200
Change: 2009-08-12 21:43:46.000000000 +0200
3605257/512=7041.xx = 7042
zgodnie z powyższym przypuszczeniem będzie to 7042 + 6 = 7048. ale wynik statystyczny pokazuje 7056.
I inny przykład z internetu pod adresemhttp://www.computerhope.com/unix/stat.htm
. Kopię przykład na dole strony tutaj:
File: `index.htm'
Size: 17137 Blocks: 40 IO Block: 8192 regular file
Device: 8h/8d Inode: 23161443 Links: 1
Access: (0644/-rw-r--r--) Uid: (17433/comphope) Gid: ( 32/ www)
Access: 2007-04-03 09:20:18.000000000 -0600
Modify: 2007-04-01 23:13:05.000000000 -0600
Change: 2007-04-02 16:36:21.000000000 -0600
W tym przykładzie wielkość bloku FS wynosi 8k. Przypuszczam, że liczba bloków powinna wynosić 16xN, ale jest to 40. zgub się ...
każdy może wyjaśnić, w jaki sposób stat oblicza bloki?
Dzięki!