Z jakiegoś powodu, kiedy tworzę plik tekstowy w OS X, zawsze ma on co najmniej 4kB, chyba że jest pusty. Dlaczego to? Czy może być 4000 bajtów metadanych na około 1 bajt zwykłego tekstu?
:P
Z jakiegoś powodu, kiedy tworzę plik tekstowy w OS X, zawsze ma on co najmniej 4kB, chyba że jest pusty. Dlaczego to? Czy może być 4000 bajtów metadanych na około 1 bajt zwykłego tekstu?
:P
Odpowiedzi:
Rozmiar bloku systemu plików musi wynosić 4 kB. Gdy dane są zapisywane w pliku zawartym w systemie plików, system operacyjny musi przydzielić bloki pamięci, aby zawierały dane, które zostaną zapisane w pliku.
Zazwyczaj podczas tworzenia systemu plików pamięć zawarta w tym systemie plików jest dzielona na bloki o stałym rozmiarze. Artykuł w Wikipedii krótko wyjaśnia ten proces.
Podstawowy rozmiar bloku systemu plików dla tego pliku musi mieć rozmiar bloku 4 bajty. Ten plik używa 1 bloku 4K i tylko jeden bajt w tym bloku zawiera rzeczywiste dane.
Wszystkie systemy plików mają rozmiar klastra lub bloku lub najmniejszą ilość miejsca na dysku, którą można przydzielić do przechowywania pliku. Nawet jeśli rzeczywisty rozmiar pliku jest mniejszy niż rozmiar klastra / bloku, nadal zużywa jeden klaster lub 4K w systemie plików. Rozmiar klastra zależy od systemu plików i opcji systemu plików.
Jeśli zawiera zero bajtów, jak zauważył Gilles , używa zerowych bloków / klastrów, ale jeden i-węzeł w typowych systemach plików * nix, co lepiej odpowiada zastrzeżeniu, „chyba że jest puste”.
Mały eksperyment, który pomoże to zilustrować:
Najpierw zobaczmy, jaki jest rzeczywisty rozmiar bloku mojej partycji root ext4 (LVM):
[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size: 4096
Jest to 4096 (4 KiB), zgodnie z oczekiwaniami. Teraz utwórzmy trzy pliki: pierwszy to zero bajtów, drugi to tylko jeden bajt, a trzeci to 4 KiB (rozmiar bloku):
[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
Teraz mamy ls
katalog. Korzystamy z -s
opcji, aby zobaczyć przydzielony rozmiar (kolumna najbardziej na lewo) w liczbie 1024-bajtowych „bloków”.
(ls nie wie, że rzeczywisty rozmiar bloku to 4096 - moglibyśmy określić, --block-size
ale to wszystko skaluje o tę wartość i chcemy zobaczyć rzeczywisty rozmiar pliku również w bajtach) .
[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
Można tutaj odnotować dwie rzeczy:
Pliki rzadkie to pliki z dużymi blokami zer. Ponieważ wiadomo, że wszystkie dane są zerowe, nie ma sensu przechowywać ich na dysku. W ten sposób pozorny rozmiar pliku może faktycznie być większy niż rozmiar na dysku.
Zauważ, że niektóre systemy plików pozwalają na przechowywanie bardzo małych plików w samym i- węzle . Zobacz Czy możliwe jest przechowywanie danych bezpośrednio wewnątrz i-węzła w systemie plików Unix / Linux? .