Mengapa file teks 4kB?

47

Untuk beberapa alasan, ketika saya membuat file teks pada OS X, itu selalu minimal 4kB, kecuali jika itu kosong. Kenapa ini? Mungkinkah ada 4.000 byte metadata sekitar 1 byte teks biasa?

masukkan deskripsi gambar di sini

tkbx
sumber
16
4096 byte, bukan 4000.
Mekanik siput
8
@Mechanicalsnail 4095. Anda lupa satu byte data aktual
Tobias Kienzler
5
@Mechanicalsnail ini tahun kabisat, bukan? xkcd.com/394 :P
tkbx

Jawaban:

52

Ukuran blok sistem file harus 4 kB. Ketika data ditulis ke file yang terkandung dalam sistem file, sistem operasi harus mengalokasikan blok penyimpanan untuk berisi data yang akan ditulis ke file.

Biasanya, ketika sistem file dibuat, penyimpanan yang terkandung dalam sistem file tersebut dibagi menjadi blok-blok dengan ukuran tetap. Artikel Wikipedia ini menjelaskan secara singkat proses ini.

Ukuran blok yang mendasari sistem file untuk file ini harus memiliki ukuran blok 4K byte. File ini menggunakan blok 1 4K dan hanya satu byte di dalam blok itu yang berisi data aktual.

HeatfanJohn
sumber
10
Komentar: Di Windows, ukuran file aktual ditampilkan secara default, dan ukuran pada disk ditampilkan di panel Opsi.
Joe Z.
jadi bisakah blok menampung file yang berbeda?
sudeepdino008
@ sudeepdino008 tidak, satu blok (setidaknya) untuk setiap file (sistem file ext Linux memiliki / punya (?) pilihan untuk meletakkan banyak file dalam satu blok, tetapi itu merupakan pengecualian dari aturan)
Ro-ee
13

Semua sistem file memiliki ukuran cluster atau blok, atau jumlah ruang disk terkecil yang dapat dialokasikan untuk menyimpan file. Bahkan jika ukuran file yang sebenarnya lebih kecil dari ukuran cluster / blok, masih akan mengkonsumsi satu cluster, atau 4K pada sistem file Anda. Ukuran cluster tergantung pada sistem file, dan opsi sistem file.

Jika berisi nol byte, seperti yang ditunjukkan Gilles , ia menggunakan nol blok / cluster tetapi satu inode pada sistem file * nix khas, yang lebih baik menjawab peringatan, "kecuali itu kosong."

Christopher
sumber
6
"Bahkan jika ukuran file nol byte, masih akan mengkonsumsi satu cluster." Sebenarnya, tidak: pada sistem file unix khas, file kosong mengkonsumsi satu inode dan nol blok, dan tidak ada gagasan tentang cluster yang berbeda dari blok.
Gilles 'SANGAT berhenti menjadi jahat'
8

Sebuah eksperimen kecil untuk membantu menggambarkan hal ini:

Pertama, mari kita lihat apa ukuran blok aktual partisi root ext4 (LVM) saya:

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

Ini adalah 4096 (4 KiB), seperti yang diharapkan. Sekarang, mari kita buat tiga file: Yang pertama adalah nol byte, yang kedua hanya satu byte, dan yang ketiga adalah 4 KiB (ukuran blok):

[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


Sekarang, kita lsdirektori. Kami menggunakan -sopsi untuk melihat ukuran yang dialokasikan (kolom paling kiri), dalam jumlah 1024 byte "blok."
(ls tidak tahu ukuran blok sebenarnya adalah 4096 - kita bisa menentukan --block-sizetetapi skala semua dengan nilai itu, dan kami ingin melihat ukuran file sebenarnya dalam byte juga) .

[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

Dua hal dapat dicatat di sini:

  • File byte nol membutuhkan nol blok di sistem file, mengkonfirmasikan apa yang dinyatakan Giles .
  • Meskipun dua file lainnya memiliki ukuran file yang berbeda, mereka berdua mengambil 4 * 1024 = satu blok 4KiB ext4.

File Jarang

File jarang adalah file dengan blok besar angka nol. Karena data diketahui semuanya nol, tidak ada gunanya menyimpannya di disk. Dengan cara ini, ukuran jelas file sebenarnya bisa lebih besar dari ukuran pada disk.

Data sebaris

Perhatikan bahwa beberapa sistem file memungkinkan konten file yang sangat kecil untuk disimpan di inode itu sendiri. Lihat Apakah mungkin untuk menyimpan data secara langsung di dalam inode pada sistem file Unix / Linux? .

Jonathon Reinhart
sumber
Ya, Anda benar bahwa 4k adalah ukuran yang digunakan sistem file untuk menyimpan informasi mengenai penyimpanan file di dalam sistem file. Hal-hal seperti indeks file dari awal blok, indeks blok dan ukuran memori yang digunakan oleh file disimpan yang memakan hingga 4k. Informasi ini digunakan untuk referensi file teks dari sistem file.
pvn
2
Ini salah. File metadata seperti yang Anda sebutkan tidak "memakan" salah satu dari 4KiB. Struktur itu adalah bagian dari overhead pemformatan sistem file. Lihat jawaban saya di atas untuk bukti. Jika apa yang Anda katakan itu benar, maka file 4096-byte saya akan membutuhkan lebih dari satu blok.
Jonathon Reinhart
Pointer ke file (segmen no, blk no) dalam sistem file adalah hal-hal yang harus disimpan dan memerlukan satu blok untuk ditugaskan. Jika file teks memiliki konten yang sangat sedikit yang dapat ditampung di blok pertama yang telah ditetapkan untuknya, maka itu tidak akan memerlukan alokasi blok kedua. Saya setuju bahwa keseluruhan 4k tidak digunakan untuk metadata dan beberapa fragmentasi internal muncul.
pvn
2
Saya mengatakan bahwa tidak ada ukuran blok 4 KiB yang digunakan untuk metadata. Saya pikir contoh saya membuktikan hal itu.
Jonathon Reinhart
2
@ pvn: Jonathon benar. Metadata disimpan dalam inode untuk file, yang terpisah dari blok yang digunakan untuk menyimpan data file.
Mekanik siput