Katakanlah Johnny membuat file KOSONG. Ini disebut foobar.py
. Ketika Johnny membiarkannya dieksekusi, ia berlari chmod 755 foobar.py
. File sekarang memiliki metadata
-rw-r--r-- 1 johnny staff 0 Dec 27 22:53 foobar.py
Di mana semua metadata disimpan dalam file itu? Ukuran file adalah 0, jadi bagaimana cara menjaga metadata ketika ditransfer ke drive lain?
Jawaban:
Itu tidak disimpan dalam file itu. Ini disimpan dalam sistem file, dan semua parameter disalin secara manual satu-per-satu (meskipun beberapa tidak dapat disalin sama sekali).
Artinya, sebagian besar sistem operasi tidak benar-benar memiliki panggilan "salin file dengan metadata". Program file-copy hanya membuat file baru bernama
foobar.py
, menyalin seluruh 0 byte data, kemudian menggunakan utime () atau SetFileTime () untuk membuat waktu modifikasinya terlihat sama seperti aslinya. Demikian juga, izin file akan "disalin" dengan menetapkannya lagi menggunakan chmod () atau dengan menyalin atribut POSIX ACL.Beberapa metadata tidak disalin. Mengatur kepemilikan memerlukan hak akses root, sehingga salinan file orang lain milik Anda dan menempati kuota disk Anda . Waktu (atribut perubahan waktu) tidak mungkin untuk diatur secara manual di Unix; btime (waktu kelahiran / penciptaan) biasanya tidak disalin juga.
Bandingkan
cp -a foo bar
(yang menyalin metadata) dancp foo bar
(yang tidak):sumber
Biasanya berbeda dari sistem file ke sistem file tempat metadata disimpan. Pada keluarga ext2 sistem file, metadata yang Anda sebutkan (pemilik, grup, izin, waktu) disimpan dalam inode . Inode juga menyimpan (pointer ke) blok file yang ditempati pada disk. Inode tidak menyimpan nama file.
Anda dapat mengakses data ini dengan
stat
system call (man 2 stat
), dan menggunakanstat
alat ini untuk mencetaknya (man stat
). Deskripsi terperinci dari bidang inode dapat ditemukan dilinux/include/linux/fs.h
dalam sumber kernel.Ada jenis metadata lain (misalnya izin ACL ) yang disimpan di tempat yang berbeda.
Metadata tidak disalin secara default saat Anda menyalin file. Sebaliknya, file baru dengan nilai metadata default dibuat. Ada berbagai opsi untuk
cp
(-p
,--preserve
) yang menginstruksikancp
juga menyalin metadata, dengan membaca metadata lama denganstat
dan memodifikasi metadata baru yang sesuai.sumber
Bergantung pada sistem file, area dicadangkan baik (semi-) statis atau dinamis untuk menyimpan metadata seperti izin, ukuran, dan lainnya (kadang-kadang nama file juga).
Di Unix, metadata disimpan di inode yang mengendalikan area data tempat file berada ( sementara nama file dan nomor inode terkait disimpan dalam entri direktori ).
Dalam beberapa direktori, entri direktori adalah file seperti yang lainnya, tetapi tersembunyi dari pandangan. FAT dan FAT32 adalah filesystem tersebut (direktori root FAT adalah "spesial"). Saat Anda membuat file, Anda menambahkan / mengedit entri dalam file yang menjelaskan folder tempat file itu berada. Setiap entri cukup besar untuk menyimpan ukuran file, nama dan tanggal, dan tidak ada yang lain (nama panjang yang menempati beberapa entri; ukuran entri default 32 byte dapat menampung satu nama dalam format karakter 8 + 3. lama. Semua ini, tentu saja , dengan asumsi ingatanku berfungsi). Sistem ext mirip, tetapi entri direktori berukuran dinamis dan hanya menyimpan nama dan penunjuk inode; semua informasi lain ada di inode. Dengan cara ini, dua entri dapat menunjuk ke file yang sama, yang berguna untuk mengelola file duplikat.
Dalam beberapa sistem file, inode bisa cukup besar untuk menampung sejumlah kecil data selain metadata, sehingga jika file tersebut dapat masuk ke sana, ia tidak menempati ruang disk tambahan. Anda membuat file 45-byte dan ruang disk kosong tidak berubah sama sekali; byte tersebut disimpan di dalam inode. Saya pikir keluarga ext * mendukung ini (dan NTFS juga). Ini membantu mengelola sejumlah besar file yang sangat kecil.
Dalam sistem file lain, ada apa yang berarti sistem file "phantom" di sepanjang yang utama, yang menyimpan atribut tambahan ini. Bukan hanya informasi file tetapi mungkin file ikon juga.
Beberapa sistem memiliki keduanya: NTFS memiliki metadata direktori lengkap yang bekerja dengan cara seperti inode, dan kemungkinan untuk membuat aliran data alternatif yang menyimpan informasi lebih lanjut yang tidak (tampaknya) mengubah apa pun dalam file "utama".
sumber