Hanya sesuatu yang saya temui dan tidak bisa memikirkan penjelasan yang tepat. Jika saya membuat file * .txt kosong pada PC saya dan kemudian melihat ukurannya, itu menunjukkan 0. Tapi bagaimana itu mungkin? Maksud saya bahkan jika file itu sendiri kosong, masih harus memiliki beberapa ukuran, hanya untuk menyimpan namanya sendiri. Bagaimana ini bisa dijelaskan? (Non OS spesifik)
filesystems
Eugene S
sumber
sumber
Jawaban:
Itu mungkin karena memang tidak ada file. Hanya ada entri direktori dengan nama dan pemilik. Entri direktori secara logis berbeda dari file. Sebagai contoh, file yang sama dapat memiliki lebih dari satu nama di lebih dari satu direktori.
Sayangnya, istilah "file" tidak selalu digunakan untuk maksud hal yang persis sama. Tetapi logika ukuran file berasal dari model di mana entri direktori "melampirkan" file ke direktori dan nama file dan metadata terkait disimpan di direktori.
sumber
ls -ld <directory>
akan bekerja.Arti semantik "ukuran file" berbeda dari yang Anda gunakan.
Ada banyak ukuran file yang bermakna. Yang paling umum, dan yang Anda lihat di sini, adalah "jumlah byte dalam file." Jika file tersebut adalah file teks kosong, mungkin memang berisi 0 byte. Angka ini penting bagi pemrogram karena kita sering perlu membuka file, "baca semua data," dan tutup. Kita perlu tahu berapa banyak byte data yang akan ada dalam file sehingga kita dapat merencanakan ke depan.
Makna lain muncul dari cara sebagian besar sistem file menyimpan data. Sebagian besar sistem file menyimpan data dalam blok. Sebagai contoh, sistem file dapat menyimpan data dalam blok 64kB, yang berarti tidak akan pernah mengalokasikan apa pun yang bukan kelipatan 64kB. Ini kedengarannya tidak efisien, tetapi itu bisa membuat pembukuan menjadi lebih sederhana, dan seringkali lebih sederhana berarti lebih cepat.
Arti ketiga, yang Anda tarik, adalah jumlah bit aktual yang diperlukan pada hard drive untuk menggambarkan keberadaan file. Ini termasuk informasi yang biasanya disimpan secara terpisah dari file. Sebagai contoh, di Linux, konsep "nama file" disimpan dalam inode untuk direktori yang berisi file (edit: dari komentar, secara teknis ini disimpan dalam data direktori. Ketika saya menulis ini, saya sedang memikirkan yang kecil case -directory. Data yang lebih kecil dari 156 byte dapat disimpan langsung di inode). Ini bukan makna yang umum digunakan, karena sangat sulit untuk menentukan tanpa mengetahui cara kerja sistem file Anda yang sangat dalam (apakah Anda memperhitungkan ruang yang diperlukan untuk menyimpan semua izin pada file?). Namun, jika Anda memiliki hard drive 1.000.000 byte,
sumber
Nama file disimpan di tempat lain.
Disk Anda akan memiliki "sistem file" di dalamnya, sederhananya metode untuk memilih bagaimana nama file dan file diwakili dan ditafsirkan pada disk fisik.
Pada sebagian besar disk Windows Anda akan menggunakan sistem file yang disebut "NTFS" (Sistem File Teknologi Baru "), ini menyimpan informasi nama file dalam Master File Table (MFT) terpisah dari konten file. Lihat artikel Wikipedia di Master File Table .
Karena itu file itu sendiri akan berukuran 0 byte, tetapi entri dalam MFT masih akan menempati beberapa ruang.
sumber
Ini pertanyaan ontologis yang cukup menarik ...
File itu sendiri adalah isi dari file tersebut. Jika file tidak memiliki konten, ia memiliki ukuran nol. Nama file adalah bagian dari file sebagaimana nama Anda sendiri secara fisik adalah bagian dari Anda (yaitu, tidak).
Sama seperti nama Anda ada sebagai ide di kepala orang (dan Anda sendiri) yang merujuk / menunjuk ke fisik Anda, nama file ada di pohon direktori sistem file dan merujuk / menunjuk ke file.
sumber
(Agak terlambat untuk jawabannya ...)
Bagaimana sebuah file menjadi ukuran nol sedikit lebih rumit daripada yang disediakan oleh jawaban di atas. Pertanyaan ini ditandai dengan Win7, tetapi melihat sistem file "sederhana" lainnya seperti FAT atau NTFS , mungkin berguna karena konsepnya sama.
Disk tidak "tahu" apa itu file dan apa itu direktori; itu semua data dalam blok kecil. OS membedakan antara arti dari blok data. Beberapa yang pertama khusus, tetapi sisa blok menyimpan informasi tentang data (misalnya: nama file, panjang file, blok data pertama yang menyimpan data), atau data itu sendiri.
Direktori adalah "file" khusus yang "data" -nya dimengerti oleh OS adalah blok informasi yang berisi informasi tentang file, bukan konten file. Analogi yang baik adalah perpustakaan fisik dan katalog kartu. Pikirkan blok informasi sebagai katalog kartu dan rak sebagai blok data (katalog kartu juga berada di struktur seperti rak).
Ketika Anda "membuat" file (katakan dengan
touch
perintah UNIX ), OS pertama-tama membuat entri di blok informasi (direktori), dengan yang berikut ini:Hanya jika ada beberapa data untuk "menulis", ia mencoba untuk menemukan blok data kosong untuk menyimpan data. Tetapi blok data datang dalam ukuran tetap (katakanlah 32K) nyaman untuk disk untuk sampai dan OS untuk membaca. Jika Anda hanya menulis "Halo", sebagian besar bloknya "kosong" (sebenarnya mungkin bukan nol, tetapi sampah dari apa yang ada di sana sebelumnya), jadi tabel tersebut juga memperbarui ukuran dengan panjang (misalnya 5 karakter + Akhir dari File) sehingga Anda tidak mendapatkan hal-hal buruk.
Ketika Anda memperbarui "file" ke panjang> ukuran blok, OS menulis data ke blok baru dan memperbarui blok data untuk mengatakan file berlanjut ke blok berikutnya SETELAH yang pertama (dan seterusnya) dan panjangnya diperbarui panjang baru (detail berbeda).
Yang akhirnya Anda dapatkan adalah kumpulan blok data informasi (direktori atau daftar) dengan informasi tentang rantai blok data (konten file).
Logikanya, ini juga menjelaskan mengapa suatu file bergerak pada sistem file yang sama berkedip cepat sementara salinannya memakan waktu lama. OS hanya perlu mengedit 2 blok direktori untuk menghapus entri dari satu direktori (blok data informasi) dan menambah yang lain. Hapus file: cukup hapus entri di blok direktori, membebaskan blok data file yang akan dialokasikan kembali.
ps: Hanya karena katalog kartu memiliki entri untuk sebuah buku tidak berarti itu ada di rak (mungkin sudah hilang atau hilang); ukuran file 0.
pps: Buku yang salah tempat di dalam perpustakaan menyiratkan perpustakaan pencarian, atau dalam istilah komputer: chkdsk atau disk perbaikan!
Pemahaman yang lebih besar dapat diperoleh dengan membaca tentang UNIX inode atau menghargai bagaimana sistem kontrol versi (ClearCase, TFS, Git, dll.) Mengelola tidak hanya file dan direktori, tetapi juga versi file dan bahkan versi direktori. Dalam kebanyakan kasus, semuanya disimpan dalam database dan disajikan kepada pengguna untuk tampil sebagai struktur dan file direktori klasik!
sumber
Kami memiliki beberapa jawaban luar biasa di sini - saya hanya ingin menambahkan versi gambar (seribu kata dan semua itu.)
Seperti inilah tampilan hard drive berformat NTFS saya jika Anda memvisualisasikannya dengan alat defragmenting disk. The MFT (Master File Table) ditampilkan dalam violet:
Kotak kecil violet itu menggambarkan daftar file yang ada di HD saya. Secara kasar, untuk disk NTFS, apa Daftar Isi untuk buku; alih-alih halaman, ini menunjuk ke lokasi fisik mereka pada sisa disk 1 .
File dengan ukuran nol-byte dapat divisualisasikan sebagai entri Daftar Isi yang menunjukkan tidak ada halaman sama sekali:
Entri ada di sana, terdaftar - tetapi karena tidak ada halaman yang ditunjukkan, kita dapat mengasumsikan bahwa konten tersebut tidak ada.
1 - Tentunya, ini sedikit lebih rumit dari itu; tetapi poin seperti peta sektor, MFT cermin, dll. berada di luar cakupan pertanyaan ini.
sumber
Filesystem menyimpan banyak informasi tentang file seperti nama file, ukuran file, waktu pembuatan, waktu akses, waktu modifikasi, pengguna yang dibuat, izin pengguna dan grup, fragmen, pointer ke cluster yang menyimpan file, tautan keras / lunak, atribut ... Itu disebut metadata file . Mengapa Anda menghitung metadata itu ke dalam ukuran file ketika pengguna tidak perlu peduli tentang mereka dan tidak tahu tentang mereka? Mereka hanya benar-benar peduli tentang konten file
Selain itu setiap sistem file menyimpan berbagai jenis metadata yang mengambil jumlah ruang yang berbeda pada disk. Misalnya izin POSIX sangat berbeda dari izin NTFS, dan ada juga
inode
angka dalam POSIX yang tidak ada pada Windows. Bahkan sistem file POSIX sangat bervariasi, seperti ext3 dengan alamat blok 32-bit, ext4 dengan 48-bit, Btrfs dengan 64-bit dan ZFS dengan alamat 128-bit. Jadi bagaimana Anda akan menghitung metadata itu menjadi ukuran file?Ambil contoh lain dengan file 100-byte yang metadata-nya menghabiskan 56 byte pada sistem file saat ini. Kami menyalin file ke sistem file lain dan sekarang dibutuhkan 128 byte metadata. Namun isi file persis sama , jumlah byte dalam file juga sama. Jadi menampilkan ukuran file sebagai 156 byte pada suatu sistem tetapi 228 byte pada yang lain sangat membingungkan dan kontra-intuitif .
sumber
Ukuran file
0
, mirip dengan mengatakan: Saya punya kertas dengan5
kata - kata di atasnya. Dan di kertas lain, ada0
kata-kata di atasnya. Jadi0
sepenuhnya mungkin.Data meta file (waktu tanggal pembuatan, waktu tanggal modifikasi terakhir, pemilik file, izin), semuanya disimpan di tempat lain dan tidak dimasukkan sebagai bagian dari ukuran file.
sumber
Pahami secara sederhana ... ketika Anda membuat file .. ada entri direktori yang dihasilkan yang berfungsi sebagai penunjuk untuk lokasi memori file yang diidentifikasi oleh nama file yang Anda berikan. Ukuran direktori meningkat ketika Anda membuat lebih banyak dan lebih banyak pointer atau mengatakan file .. sedangkan ukuran file akan meningkat hanya jika Anda meletakkan data ssome di tempat yang ditunjuk yaitu di dalam file itu sendiri. Sampai kemudian ukurannya akan menjadi nol. :)
sumber
Jadi begini cara kerjanya:
Segera setelah Anda membuat file apa pun pada volume itu membuat catatan file dalam file mata NTFS yaitu $ MFT (tabel file Master). Karena ada FRS (segmen catatan File) hadir di MFT Anda akan melihat catatan. Setiap catatan file berukuran 1 KB secara default dalam kasus Sistem File NTFS. Tetapi ruang itu hanya diklaim jika Anda menyimpan beberapa informasi di dalam file. Meskipun Anda hanya menulis satu huruf "a" mengingat itu adalah file teks, itu akan mengklaim 1 KB ruang karena itu adalah ukuran standar FRS. Huruf "a" pergi ke aliran data default dan tidak bernama dari FRS, $ Data yang merupakan atribut di mana semua data Anda pergi jika Anda tidak memiliki ADS (Alternate Data Stream).
Beri tahu saya jika Anda memiliki pertanyaan.
sumber