Kedalaman I/O Windows (bagian 5) — interior NTFS: memahami sistem file lewat MFT

· · Windows, NTFS, I/O, Sistem file, MFT, Kernel, .NET, Investigasi bug

Dalam empat bagian sejauh ini, kita mengikuti bagaimana permintaan I/O mengalir (bagian 1–3) dan bagaimana Cache Manager menerimanya (bagian 4). Pada akhirnya, permintaan tiba di sistem file. Kali ini giliran contoh utamanya, NTFS.

Sudut pandang berubah. Sampai sekarang ini cerita dinamis «aliran permintaan». Kali ini cerita struktur statis «bagaimana data diletakkan di atas disk». Identitas «Zone.Identifier» tak terlihat yang menempel pada file yang diunduh. Alasan menyalin 10.000 file kecil jauh lebih lambat daripada satu file dengan jumlah ukuran yang sama. Sejauh mana «NTFS berjurnal jadi aman» benar — semuanya dapat dijelaskan dari struktur ini.

Ini bagian 5 seri «Kedalaman I/O Windows».

Prasyarat membaca bagian ini: menguasai dasar IRP dan device stack bagian 1 membuatnya lebih mudah dibaca. Meski begitu, agar tidak kesulitan dibaca sendiri, istilah dari bagian sebelumnya yang muncul di teks didefinisikan dulu.

Istilah Dalam satu baris Lebih rinci
IRP (I/O Request Packet) «Slip permintaan I/O» yang menjadi hasil konversi panggilan API seperti ReadFile di dalam kernel. Driver menerima slip ini dan memprosesnya Bagian 1
I/O Manager dan device stack Komponen kernel yang membuat IRP dan meneruskannya berurutan ke driver yang ditumpuk (stack) sampai perangkat tujuan, beserta tumpukan itu Bagian 1
Cache Manager Komponen yang menahan isi file di memori dan kemudian menulis isi WriteFile ke disk secara massal. Biang «baru ditulis tidak berarti sudah sampai ke disk» Bagian 4

Tabel 1: Istilah dari bagian sebelumnya yang menjadi prasyarat bagian ini.

Satu lagi, dua tahap cleanup (ketika handle terakhir ditutup) dan close (ketika semua rujukan di dalam kernel hilang) yang dibahas di bagian 1 juga dipakai di penjelasan penghapusan file bab 4.

1. Intinya dulu

  • Pusat NTFS adalah MFT (Master File Table). Semua file dikelola sebagai rekaman di dalam MFT, dan semua informasi tentang file ada «di dalam entri MFT» atau «di area di luar MFT yang ditunjuk entri» (bab 2).1
  • Identitas file adalah «kumpulan atribut». File kecil muat seluruhnya, data dan semua, di dalam rekaman MFT (resident); file besar hanya memegang rujukan ke rangkaian cluster (non-resident). Kelambatan pemrosesan massal file kecil dapat dijelaskan dari sini (bab 2).1
  • Data dapat punya beberapa (beberapa data stream). Data sehari-hari adalah «stream tanpa nama», dan Anda dapat punya stream tambahan dengan file.txt:nama. Identitas Zone.Identifier (Mark of the Web) (bab 3).2
  • Nama juga atribut. Yang menambahkan beberapa nama ke rekaman yang sama adalah hard link. Nama pendek 8.3 juga tinggal bersama sebagai «satu nama lagi» (bab 4).34
  • Reparse point adalah mekanisme resmi «buka, lalu ke tempat lain». Symbolic link, junction, dan Files On-Demand OneDrive semuanya penerapan data bertag ini (bab 5).56
  • Ada dua jurnal. $LogFile untuk pemulihan konsistensi metadata (log di muka agar tidak rusak), jurnal USN untuk pencatatan riwayat perubahan (buku besar apa yang berubah). Perannya sama sekali berbeda (bab 6).78
  • «Ukuran» dan «ukuran di disk» adalah hal yang berbeda. File sparse dan kompresi yang menghasilkan kesenjangan. Latar belakang «file terkompresi tidak menjadi asinkron» yang kita lihat di bagian 2 juga ada di sini (bab 7).910

Peta pengetahuan artikel ini

Pusat NTFS adalah MFT (Master File Table), dan semua file dikelola sebagai rekaman di dalam MFT. Data kecil resident di dalam rekaman, data besar menjadi non-resident yang hanya memegang rujukan ke rangkaian cluster (data run), dan inilah identitas kelambatan pemrosesan massal file kecil serta fragmentasi. Beberapa data stream, hard link, dan nama pendek 8.3 semuanya penerapan mekanisme yang sama «kumpulan atribut», dan reparse point adalah hook resmi ke «membuka» yang menopang dari symbolic link sampai Files On-Demand OneDrive. Yang dijaga $LogFile adalah konsistensi struktur; ketahanan isi data perlu dibangun secara terpisah dengan alat pengendalian cache bagian 4.

Peta pengetahuan interior NTFS dan MFTDiagram yang menunjukkan hubungan NTFS, MFT, rekaman file, atribut resident dan non-resident, data run, fragmentasi, beberapa data stream, Zone.Identifier, hard link, nama pendek 8.3, reparse point (symbolic link, junction, Files On-Demand OneDrive), $LogFile dan jurnal USN, serta file sparse dan kompresi NTFSmenggunakanmenggunakanmensyaratkanmengurangimenggunakanmenggunakantidak kompatibelmenggunakandapat menyebabkandiverifikasi denganmenggunakandisimpan didiverifikasi dengandiverifikasi dengandapat menyebabkanmenggunakanmensyaratkanmenggunakandikonfigurasi denganmenggunakandiverifikasi denganmengimplementasikanmengimplementasikanmengimplementasikanmenggunakanmengurangimenggunakanmenggunakandiverifikasi denganmenggunakandapat menyebabkanmenggunakandapat menyebabkantidak kompatibeldiverifikasi denganNTFSMFT (Master File Table)rekaman file MFTzona MFTfragmentasi (NTFS)atribut residentatribut non-residentdata runfsutilalternate data stream (ADS)Zone.Identifier (Mark of the Web)streams (Sysinternals)kesenjangan antara ukuran logis dan pemakaian diskhard linknama pendek 8.3reparse pointsymbolic linkjunction (mount point)Files On-Demand OneDrive$LogFile (log transaksi NTFS)kerusakan volumeCache Managerjurnal USN (jurnal perubahan)sparse filekompresi NTFSI/O asinkronProcess Monitor (procmon.exe)

Pada diagram, garis utuh menunjukkan relasi yang selalu berlaku dan garis putus-putus menunjukkan relasi bersyarat (syaratnya ada pada penjelasan masing-masing relasi di halaman rincian). Daftar lengkap relasi (total 35, beserta bukti dan tingkat kepastian) serta definisi konsep utama dikumpulkan di halaman rincian peta pengetahuan (dalam bahasa Jepang). Data: JSON-LD / Turtle

2. Semuanya adalah rekaman MFT

2.1. Buku besar volume

Ketika volume NTFS diformat, MFT (master file table) dan serangkaian file metadata yang dimulai dengan $ dibuat. MFT punya setidaknya satu entri untuk setiap file di volume, dan entri MFT itu sendiri juga termasuk.1

Volume NTFSRekaman menunjuk posisi$MFT ── Master File Tablebuku besar rekaman semua file (dirinya sendiri juga tercantum)Area data pengguna(tempat data non-resident)$LogFile ── log transaksioperasi metadata (bab 6)$Bitmap ── status pemakaian cluster$Boot / $Secure / $UpCase dll.file metadata lain

Gambar 1: Struktur volume NTFS. Desain NTFS adalah «informasi pengelolaan sistem file sendiri juga dipegang sebagai file».

Informasi tentang file — ukuran, cap waktu, izin akses, bahkan isi datadisimpan di dalam entri MFT, atau di area di luar MFT yang posisinya dijelaskan entri MFT.1 Ketika file dihapus, entri ditandai sebagai «kosong» dan dipakai ulang, tetapi MFT itu sendiri tidak menyusut. Selain itu, untuk menjaga MFT tetap berkesinambungan, area bernama zona MFT dicadangkan, dan ketika volume mulai penuh fragmentasi MFT dimulai — cerita umur ini pun tertulis di dokumentasi resmi.1

2.2. File = kumpulan atribut, resident dan non-resident

Isi rekaman file adalah daftar atribut. Informasi standar (cap waktu dll.), nama file, keamanan, dan data. Di sini ada percabangan penting.

Rekaman file MFT (buku besar untuk satu file)Sampai ratusan byteLebih dari ituAtribut informasi standarcap waktu, bendera atributAtribut nama file(dapat punya beberapa ── bab 4)Atribut dataApakah data kecilResidentisi data muat di dalam rekamanpembacaan selesai hanya dengan akses MFTNon-residentrekaman hanya memegang «rujukan ke rangkaian cluster»data nyata ada di area data pengguna

Gambar 2: Rekaman file adalah kumpulan atribut. Jika data kecil, ia «resident» di dalam rekaman.

Membandingkan bagaimana isi rekaman yang sama berubah antara resident dan non-resident membuatnya lebih mudah dipahami.

Non-resident ── file besarMenunjuk posisiMenunjuk posisiRekaman file MFT (panjang tetap)informasi standar / nama file / keamanan─────────────atribut data = tabel data runrangkaian «dari mana, berapa cluster»Area data penggunarun 1: cluster berkesinambunganArea data penggunarun 2: cluster berkesinambungan di tempat lainResident ── file kecilRekaman file MFT (panjang tetap)informasi standar / nama file / keamanan─────────────atribut data = isinya sendiri«nilai pengaturan=1» masuk langsung di siniTidak ada tempat terpisah di diskpembacaan selesai hanya dengan akses ke MFT

Gambar 3: Perbandingan resident vs non-resident. Pada non-resident, yang dipegang rekaman hanyalah tabel (data run) «di mana data nyata ada dan berapa banyak».

Semakin banyak jumlah data run, semakin Anda harus menyeberangi area yang tersebar untuk membaca satu file. Inilah identitas fragmentasi yang disebut berikutnya.

Dari struktur ini, beberapa fenomena yang dijumpai di lapangan dapat dijelaskan.

  • Alasan menyalin 10.000 file kecil lambat. Per file, operasi metadata pembuatan rekaman MFT, pendaftaran nama, dan pengaturan keamanan terjadi. Pekerjaan buku besar menjadi dominan dibanding transfer data itu sendiri (dan setiap satunya juga menjadi sasaran pemeriksaan filter yang kita lihat di bagian 6).
  • Identitas fragmentasi. Data non-resident dicatat sebagai «kolom rentang berkesinambungan cluster (run)». Jika area berkesinambungan tidak dapat diambil, jumlah run bertambah, dan seek yang diperlukan untuk pembacaan bertambah — inilah fragmentasi. Rangkaian run yang sebenarnya dapat dilihat dengan fsutil file layout.
  • «Folder» pun tidak istimewa. Direktori adalah «file yang punya indeks dari nama file ke nomor rekaman MFT». Di atas buku besar, semuanya duduk di atas mekanisme yang sama.

3. Data hanyalah salah satu «stream»

3.1. Satu file, beberapa rangkaian byte

Di NTFS, satu file dapat punya beberapa data stream. Yang biasa dibaca dan ditulis dengan ReadFile/WriteFile adalah stream default tanpa nama, dan dengan sintaks namafile:namastream Anda dapat membuat alternate data stream (ADS).2

File bernama report.docx (satu rekaman MFT)Stream default (tanpa nama)= isi yang biasa dilihat:Zone.Identifierinformasi asal (Mark of the Web):Nama sembaranginformasi tambahan khusus aplikasi

Gambar 4: Beberapa data stream. Yang muncul di tampilan ukuran Explorer hanyalah stream default.

ADS yang paling akrab adalah Zone.Identifier. Pada file yang diunduh lewat browser, asal (berasal dari internet dll.) dicatat di stream ini, dan menjadi bahan penilaian «PC Anda dilindungi oleh Windows» SmartScreen serta Protected View Office. Sisi tampak mekanisme ini dibahas di «Alasan «PC Anda dilindungi oleh Windows» muncul di Windows» — identitas sisi belakangnya hanyalah stream NTFS.

3.2. Jebakan yang diinjak pengembang

  • Tidak terlihat. Tidak muncul di ukuran Explorer maupun daftar dir. Dapat diperiksa dengan dir /r atau streams Sysinternals.11
  • Tidak dapat dibawa. ADS adalah fitur NTFS, jadi sering hilang pada salinan lewat USB FAT atau penyimpanan cloud. «Peringatan unduhan hilang setelah disalin» adalah ini.
  • Aplikasi sendiri juga dapat membukanya. Cukup sertakan titik dua di jalur seperti CreateFile("data.txt:meta", ...) untuk membaca dan menulis.2 Nyaman, tetapi Anda juga menerima sifat «tidak dapat dibawa» di atas, jadi bukan tempat untuk menaruh isi data bisnis.

Di Gambar 2 kita menulis «atribut nama file dapat punya beberapa». Di dalam volume yang sama, beberapa jalur merujuk satu file — inilah hard link (CreateHardLink / mklink /H).3

Indeks C:\\backup\\Indeks C:\\app\\config-link.json → rekaman #1234config.json → rekaman #1234Rekaman MFT #1234isi data (atau rujukan ke run)jumlah tautan: 2

Gambar 5: Hard link. Indeks direktori hanya menunjuk rekaman MFT yang sama, dan keduanya «yang asli».

Perubahan dari nama mana pun adalah file yang sama, jadi isinya segera cocok.3 Dan arti «penghapusan» berubah — DeleteFile adalah «melepas satu nama», dan entitas baru hilang ketika nama terakhir dilepas, handle yang terbuka ditutup, dan rujukan di dalam kernel seperti bagian memory-map juga semuanya hilang. Dua tahap cleanup (handle terakhir) dan close (rujukan terakhir) yang kita lihat di bagian 1 berlaku apa adanya pada umur penghapusan. Selain itu tampilan atribut punya keanehan; secara resmi dicatat bahwa mengubah atribut lewat satu tautan dapat membiarkan tampilan tautan lain tampak usang.3

4.2. Nama 8.3 — satu nama tersembunyi lagi

Demi kompatibilitas historis, NTFS dapat secara otomatis menghasilkan nama pendek format 8.3 seperti REPORT~1.DOC untuk nama file panjang. Ini juga tinggal bersama di rekaman sebagai «satu nama lagi». Di folder dengan banyak file, pembuatan nama pendek dan penghindaran tabrakan menjadi biaya, jadi fsutil 8dot3name dapat menonaktifkan pembuatan atau menghapus nama pendek yang sudah ada (jika ada aplikasi lama yang mencatat jalur registri dengan nama pendek, ia rusak, jadi adanya fungsi pemeriksaan sebelum strip juga poin praktis).4

Yang perlu diperhatikan di sini adalah bahwa ada atau tidaknya nama pendek bergantung pada lingkungan. Perilaku default ditentukan nilai registri NtfsDisable8dot3NameCreation, dengan empat cara: 0 (hasilkan di semua volume), 1 (jangan hasilkan di semua volume), 2 (atur per volume), 3 (jangan hasilkan kecuali di volume sistem).4 Jika memilih 2, dapat dialihkan per volume, jadi «di Windows nama pendek seperti PROGRA~1 pasti ada» tidak selalu benar. Sebelum menulis kode atau prosedur yang bergantung pada nama pendek, konfirmasikan keadaan saat ini dengan fsutil 8dot3name query C: (jika volume dihilangkan, pengaturan default bersama semua volume).

Jebakan seputar jalur dan nama (MAX_PATH, nama cadangan, titik di akhir) dibahas secara rinci di «MAX_PATH dan jebakan jalur serta nama file Windows». Menggabungkan resolusi nama bagian 1 (Object Manager) dengan bab ini (nama di dalam sistem file) memberi gambaran keseluruhan «nama» Windows.

5. Reparse point — mekanisme «buka, lalu ke tempat lain»

File atau direktori dapat diberi reparse point. Identitasnya adalah atribut «tag + data yang didefinisikan pengguna». Ketika sistem file membuka file dengan reparse point, pemrosesan diserobot menurut tag — driver filter yang memahami tag mengambil alih pemrosesan, atau untuk tag jenis penggantian nama, resolusi diulang dengan jalur tujuan tautan.5

NTFSI/O ManagerAplikasiNTFSI/O ManagerAplikasiReparse point ditemukan pada sasaranmengembalikan tag dan dataFilter yang memahami tagmengambil alih pemrosesan (bagian 6)alt[Symbolic link / junction (penggantian nama)][Tag yang dikelola filter (file cloud dll.)]CreateFile("C:\\data\\link.txt")IRP_MJ_CREATE (dunia bagian 1)«Tempat yang sebenarnya adalah sini»Mengulang resolusi dengan jalur tujuan tautan

Gambar 6: Resolusi reparse point. Ini hook resmi yang menyela operasi «membuka».

Di atas satu mekanisme ini, fitur yang akrab berbaris.

  • Symbolic link (mklink) — rambu yang memegang jalur tujuan. Dapat menunjuk ke volume lain atau jalur UNC.6
  • Junction / mount point — mekanisme senior yang menghubungkan direktori ke posisi di volume lokal lain.3
  • Files On-Demand OneDrive — mengekspresikan file yang data nyatanya tidak di tangan sebagai reparse point, dan pada saat dibuka filter mengunduh dan menyerahkan isinya. Identitas «terlihat di Explorer, tetapi komunikasi berjalan saat dibuka» (mekanisme filter itu sendiri di bagian 6).

Satu perhatian praktis. «Ujung jalur belum tentu lokasi lokal itu sendiri». Alat yang menelusuri pohon secara rekursif berputar di junction, agregasi ukuran menjadi ganda, cadangan memicu materialisasi cloud secara massal — kode yang tidak tahu keberadaan reparse point menginjak ini. Konfirmasi atribut FILE_ATTRIBUTE_REPARSE_POINT keluarga FindFirstFile adalah pintu masuk penanggulangan.5

6. Dua jurnal — $LogFile dan USN

Sering dikatakan «NTFS adalah sistem file berjurnal», tetapi NTFS punya dua jurnal dengan peran berbeda. Mencampuradukkannya membuat jaminan terbaca salah.

Jurnal USN ── riwayat perubahan (untuk mengetahui apa yang berubah)Setiap perubahan pada file / direktori,mencatat isi perubahan dan namaAlat cadangan, indeks pencarian, sinkronisasimengetahui «apa yang berubah sejak terakhir» tanpa pemindaian penuh$LogFile ── log di muka (agar tidak rusak)Mencatat operasi metadata (pembaruan rekaman, ganti nama dll.)ke log sebelum dieksekusiPada mulai berikutnya setelah kegagalan sistem,memutar ulang log untuk memulihkan konsistensi struktur

Gambar 7: Dua jurnal. $LogFile agar «tidak rusak», USN agar «mengetahui perubahan».

Perbedaannya dalam tabel adalah sebagai berikut.

Sudut pandang $LogFile (log transaksi) Jurnal USN (jurnal perubahan)
Tujuan Mengembalikan struktur sistem file ke keadaan konsisten setelah kegagalan7 Mengetahui «apa yang berubah sejak terakhir» kemudian8
Isi yang dicatat Log di muka operasi metadata (pembaruan rekaman, ganti nama, dll.). Isi file bukan sasaran Setiap perubahan, isi perubahan dan nama file/direktori sasaran8
Siapa yang memakai NTFS sendiri. Dipakai untuk pemulihan otomatis saat mount berikutnya Aplikasi seperti cadangan, indeks pencarian, alat sinkronisasi
Sejauh mana dapat ditelusuri Hanya rentang yang diperlukan untuk pemulihan. Ukuran tetap dipakai ulang, jadi tidak untuk menelusuri riwayat masa lalu Ketika ukuran target maksimum (MaximumSize) terlampaui, rekaman lama dipotong saat checkpoint. Rentang yang dapat ditelusuri bergantung pada pengaturan ukuran dan volume pembaruan volume12
Cara merujuk Tidak ada cara resmi membaca isinya (ukuran dapat dikonfirmasi dengan chkdsk /L) fsutil usn queryjournal untuk status, fsutil usn readjournal untuk isi. Dari program, FSCTL_QUERY_USN_JOURNAL / FSCTL_READ_USN_JOURNAL12
Dapat dihentikan? Tidak dapat dihentikan (bagian dari NTFS) Administrator dapat menghapus atau menonaktifkan. Namun memaksa pemindaian penuh pada layanan yang memakainya, jadi dampaknya besar12

Tabel 2: Perbandingan dua jurnal.

  • $LogFile (log transaksi) adalah log di muka operasi metadata. Bahkan jika kegagalan sistem terjadi, NTFS secara otomatis memulihkan konsistensi sistem file dari log ini dan informasi checkpoint pada mulai berikutnya.7 Yang dilindungi di sini adalah struktur. Seperti yang kita lihat di bagian 4, isi data dirty di cache dapat hilang saat pemutusan daya — pembacaan yang benar adalah «volume tidak rusak. Namun penulisan terakhir dapat hilang».
  • Jurnal USN (jurnal perubahan) adalah buku besar yang, setiap kali file atau direktori di volume berubah, mencatat isi perubahan dan nama sasaran.8 Mekanisme agar cadangan atau pengindeks mengambil «hanya yang berubah sejak terakhir» tanpa pemindaian penuh, dan juga dipakai untuk menghindari pembangunan ulang indeks setelah kegagalan.8 Dalam praktik, berguna diingat bahwa fsutil usn readjournal dapat dipakai sebagai buku besar pencocokan untuk menutupi ketinggalan FileSystemWatcherPanduan praktis FileSystemWatcher»).

7. Sparse dan kompresi — cerita ada dua «ukuran»

Di NTFS, panjang logis file dan area yang benar-benar dialokasikan dikelola secara terpisah. «Ukuran» dan «ukuran di disk» di layar properti. Dua yang representatif menghasilkan kesenjangan.

File sparse mengelola rentang yang berlanjut sebagai nol sebagai «lubang» tanpa mengalokasikan area nyata.9 File disk virtual berukuran logis 42 GB yang di disk hanya memakai 500 MB — terjadi secara biasa. Membaca lubang mengembalikan nol, dan menulis mengalokasikan sebesar itu.

Alokasi di disk (15 MB + informasi pengelolaan)File logis (ukuran: 1 GB)Run: entitas R1Run: entitas R2Data 10 MBLubang (nol) 500 MBData 5 MBLubang (nol) sisanya

Gambar 8: File sparse. «Lubang» tidak punya alokasi, sehingga ukuran logis dan ukuran di disk menyimpang.

Kompresi NTFS mengompresi dan menyimpan data per unit kompresi.10 Transparan dan nyaman, tetapi biayanya juga tidak transparan — setiap baca tulis menjalankan ekspansi dan kompresi ulang, dan fragmentasi juga lebih mudah maju. Dan seperti yang kita lihat di bab 5 bagian 2, akses ke file terkompresi tidak menjadi asinkron (sistem file mengubahnya menjadi sinkron). Salah satu tempat yang dicurigai ketika «sudah dijadikan I/O asinkron tetapi ada file yang tidak menjadi cepat».

Ukuran nyata berbasis alokasi dapat diambil dengan GetCompressedFileSize. Dalam investigasi «jumlah ukuran file» dan «pemakaian disk» tidak cocok, praktik standar adalah mencurigai sparse, kompresi, ADS (bab 3), dan pembulatan cluster secara berurutan.

8. Konfirmasikan dengan mata sendiri

Kali ini pun, semuanya dapat diamati di Windows di tangan (sebagian memerlukan hak administrator). Agar Anda sendiri dapat menilai apakah hasil eksekusi benar, setiap perintah dilengkapi apa yang dilihat di mana.

:: Lihat stream alternatif
dir /r C:\Users\%USERNAME%\Downloads

Lihat di sini: di bawah baris file biasa, baris berbentuk namafile:Zone.Identifier:$DATA yang diinden berbaris dengan panjang. Jika baris ini ada, file itu dalam keadaan punya Mark of the Web (bab 3). File yang diunduh lewat browser memilikinya, file yang Anda buat sendiri tidak. Menjalankan di kedua tempat dan membandingkan membuat ada-tidaknya ADS jelas.

:: Lihat tata letak (run) dan atribut file di MFT
fsutil file layout C:\path\to\file.dat

:: Lihat extent saja (subperintah yang tercantum di dokumentasi resmi)
fsutil file queryextents C:\path\to\file.dat

Lihat di sini: layout menyusun, per stream, ukuran, ukuran alokasi, dan jika non-resident, daftar extent (pasangan VCN, LCN, jumlah cluster). File sangat kecil yang tidak mengeluarkan baris extent adalah resident (bab 2.2); jika terpecah ke beberapa baris, ia terfragmentasi. Menjalankan pada file teks beberapa byte dan file ratusan MB lalu membandingkan adalah cara tercepat merasakan resident/non-resident.

:: Pengaturan pembuatan nama pendek 8.3, dan nama pendek yang sudah ada
fsutil 8dot3name query C:
dir /x

Lihat di sini: query mengembalikan apakah pembuatan nama pendek di volume itu aktif atau nonaktif (jika volume dihilangkan, pengaturan default bersama semua volume).4 dir /x menampilkan kolom nama pendek di samping nama panjang, jadi jika kolom kosong, nama pendek tidak dibuat. «Nama pendek tidak selalu ada» di bab 4.2 dapat dikonfirmasi di lingkungan sendiri.

:: Status jurnal USN
fsutil usn queryjournal C:

Lihat di sini: ID jurnal, rentang USN yang valid (First USN / Next USN), ukuran target maksimum (MaximumSize), dan satuan alokasi (AllocationDelta) ditampilkan.12 Setelah membuat suatu file lalu menjalankan lagi, Next USN seharusnya maju; ini konfirmasi bahwa «perubahan sedang dicatat». MaximumSize adalah petunjuk «sejauh mana dapat ditelusuri» yang disinggung di bab 6. Di volume dengan jurnal nonaktif, terjadi error.

:: Konfirmasi reparse point (tujuan tautan dan tag)
dir /aL C:\Users\%USERNAME%
fsutil reparsepoint query "C:\Users\%USERNAME%\OneDrive"

Lihat di sini: yang muncul di dir /aL adalah reparse point (yang FILE_ATTRIBUTE_REPARSE_POINT-nya berdiri). Symbolic link dan junction ditampilkan dengan jenis seperti <SYMLINKD> <JUNCTION>. fsutil reparsepoint query menampilkan nilai reparse tag, dan untuk jenis penggantian nama, jalur tujuan tautan. Menetapkan sasaran yang bukan reparse point menghasilkan error, jadi error itu sendiri adalah konfirmasi «ini folder biasa».

Mengikuti operasi file di Procmon, tokoh kali ini mengalir dengan nama aslinya (penulisan ke $LogFile, jalur dengan nama stream, pemrosesan reparse). Cara pemakaiannya lihat «Panduan praktis Process Monitor (ProcMon)».

9. Ringkasan

  • Pusat NTFS adalah MFT. Semua file adalah rekaman buku besar, dan informasi ada «di dalam rekaman» atau «di area eksternal yang ditunjuk rekaman». Data kecil resident, data besar rujukan run, dan kelambatan pemrosesan massal file kecil serta fragmentasi adalah konsekuensi struktur ini.1
  • Data stream dapat punya beberapa. Zone.Identifier (Mark of the Web) hanyalah ADS, terlihat dengan dir /r, dan tidak dibawa ke luar NTFS.211
  • Nama adalah atribut, dan dapat punya beberapa. Hard link adalah nama setara ke rekaman yang sama, nama 8.3 adalah satu nama lagi untuk kompatibilitas. «Penghapusan = melepas nama», dan hilangnya entitas adalah ketika nama terakhir, handle, dan rujukan di dalam kernel (bagian yang dipetakan dll.) semuanya hilang.34
  • Reparse point adalah hook resmi ke «membuka», dan symbolic link, junction, maupun Files On-Demand semuanya penerapannya. Kode yang menelusuri pohon perlu menyadari FILE_ATTRIBUTE_REPARSE_POINT.56
  • Ada dua jurnal. $LogFile adalah pemulihan konsistensi struktur (agar tidak rusak), USN adalah riwayat perubahan (apa yang berubah). Bukan «berjurnal jadi data juga aman» — ketahanan data dibuat dengan alat bagian 4.78
  • Ukuran logis dan alokasi adalah hal yang berbeda. Sparse, kompresi, ADS, dan pembulatan cluster adalah empat penyebab utama «ukuran tidak cocok». Termasuk soal file terkompresi yang tidak menjadi I/O asinkron, ini menjadi laci investigasi kinerja.910

Lanjutannya adalah bagian terakhir, bagian 6 «Driver filter dan minifilter — alasan Procmon dan pemindaian virus dapat menyela I/O». Bagaimana «mereka yang menyelip di tengah» yang muncul dari bagian 1 — antivirus, Procmon, OneDrive, enkripsi — menyela I/O. Sebagai penutup seri, identitas penghuni yang berdiri di celah device stack diungkapkan.

Artikel terkait

Area konsultasi terkait

KomuraSoft LLC menangani desain dan investigasi aplikasi bisnis Windows yang berakar pada mekanisme NTFS, seperti perilaku tidak masuk akal ukuran file atau kinerja salinan, serta bug yang melibatkan tautan dan stream.

Tautan referensi

  1. Microsoft Learn, Master File Table. Tentang setiap file di volume NTFS yang punya setidaknya satu entri di MFT, termasuk entri MFT itu sendiri; semua informasi termasuk ukuran, cap waktu, izin akses, dan isi data yang disimpan di dalam entri MFT atau di area di luar MFT yang posisinya dijelaskan entri MFT; entri yang ditandai kosong dan dipakai ulang saat file dihapus tetapi ukuran MFT tidak menyusut; zona MFT yang dicadangkan untuk menjaga MFT berkesinambungan; dan fragmentasi MFT yang terjadi seiring kemajuan alokasi.  2 3 4 5 6

  2. Microsoft Learn, File Streams. Tentang data file NTFS yang disimpan sebagai satu atau lebih stream; adanya stream data default (tanpa nama) dan alternate data stream bernama; dan bahwa stream dapat ditetapkan dalam bentuk «namafile:namastream» dan dibuka dengan CreateFile.  2 3 4

  3. Microsoft Learn, fsutil 8dot3name. Tentang NTFS yang dapat menghasilkan nama pendek format 8.3 untuk nama file panjang; fsutil 8dot3name yang dapat menanyakan dan mengatur aktif/nonaktif pembuatan nama pendek, menghapus (strip) nama pendek yang sudah ada, dan memindai rujukan registri yang terpengaruh jika dihapus.  2 3 4 5

  4. Microsoft Learn, Reparse points. Tentang reparse point sebagai kumpulan data yang didefinisikan pengguna dan reparse tag yang mengidentifikasi format data itu secara unik; saat membuka file dengan reparse point, sistem file mencoba pemrosesan yang sesuai tag (pemrosesan oleh filter sistem file yang menafsirkan tag); dipakai dalam implementasi tautan sistem file NTFS dan remote storage (hierarchical storage); dan keberadaannya dapat dikonfirmasi dengan atribut FILE_ATTRIBUTE_REPARSE_POINT.  2 3 4

  5. Microsoft Learn, NTFS overview. Tentang NTFS yang memakai file log dan informasi checkpoint, dan jika kegagalan sistem terjadi memutar ulang log transaksi pada mulai berikutnya untuk secara otomatis memulihkan konsistensi sistem file; pemetaan ulang dinamis sektor rusak; dan self-healing NTFS yang memperbaiki kerusakan ringan di latar belakang.  2 3 4

  6. Microsoft Learn, Change Journals. Tentang setiap perubahan pada file atau direktori di volume yang dicatat, isi perubahan dan nama file/direktori sasaran, ke jurnal perubahan USN volume itu; jurnal yang dipelihara per volume; dan bahwa ia dapat dipakai untuk pemulihan indeks sistem file setelah kegagalan, menghindari pengindeksan ulang seluruh volume.  2 3 4 5 6

  7. Microsoft Learn, Sparse Files. Tentang file sparse yang tidak mengalokasikan area disk fisik ke rentang besar yang terdiri dari nol, dan hanya mengalokasikan area ke bagian yang berisi data; dan bahwa membaca rentang tanpa alokasi mengembalikan nol.  2 3

  8. Microsoft Learn, File Compression and Decompression. Tentang kompresi file NTFS yang dilakukan secara transparan, data dikompresi dan disimpan per unit kompresi; GetCompressedFileSize yang mengambil ukuran setelah kompresi (alokasi nyata); dan bahwa baca tulis file terkompresi disertai biaya ekspansi dan kompresi ulang.  2 3

  9. Microsoft Learn, Streams - Sysinternals. Tentang utilitas streams Sysinternals yang dapat mencantumkan dan menghapus alternate data stream file NTFS.  2

  10. Microsoft Learn, Creating, Modifying, and Deleting a Change Journal dan fsutil usn. Tentang MaximumSize jurnal perubahan sebagai nilai target, dan bahwa ketika ukuran melebihi jumlah MaximumSize dan AllocationDelta ia dipotong saat checkpoint NTFS; AllocationDelta sebagai satuan penambahan ke akhir jurnal dan penghapusan dari awal; fsutil usn queryjournal untuk status dan kapasitas jurnal, readjournal untuk isi yang dicatat; dari program memakai FSCTL_CREATE_USN_JOURNAL / FSCTL_QUERY_USN_JOURNAL / FSCTL_READ_USN_JOURNAL / FSCTL_DELETE_USN_JOURNAL; dan bahwa penghapusan atau penonaktifan jurnal aktif disertai pemindaian seluruh MFT, memaksa layanan yang memakai jurnal memindai ulang volume.  2 3 4

Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.

Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.

Artikel ini berkaitan langsung dengan layanan berikut.

Pertanyaan yang sering diajukan

Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.

Apa itu MFT (Master File Table)?
Struktur data di jantung volume NTFS — buku besar yang memegang setidaknya satu entri (rekaman file) untuk setiap file di volume, termasuk entri untuk MFT itu sendiri. Segala sesuatu tentang file, dari ukurannya, cap waktu, dan izin akses sampai isi data itu sendiri, disimpan baik di dalam entri MFT atau di area di luar MFT yang ditunjuk entri. File kecil muat seluruhnya, data dan semua, di dalam entri MFT-nya (resident); file besar hanya punya rujukan ke tata letak datanya (rangkaian cluster) yang dicatat di entri (non-resident). Menghapus file menandai entri sebagai bebas untuk dipakai ulang, tetapi ukuran MFT itu sendiri tidak pernah menyusut.
Apa data tak terlihat «Zone.Identifier» yang menempel pada file?
Ini salah satu dari beberapa data stream NTFS (alternate data stream). Di NTFS, satu file dapat memegang beberapa rangkaian byte (stream); yang biasa Anda baca dan tulis adalah stream default tanpa nama. Windows mencatat dari mana file berasal — bahwa ia diunduh dari internet, misalnya — di stream tambahan yang Anda tetapkan dengan titik dua, seperti «file.txt:Zone.Identifier». Ini yang disebut «Mark of the Web», dan menjadi bahan penilaian SmartScreen serta Protected View Office. Stream alternatif tidak muncul di tampilan ukuran Explorer; Anda dapat memeriksanya dengan perintah dir /r atau alat streams Sysinternals. Juga perlu diperhatikan bahwa mereka tidak dipertahankan ketika disalin ke sistem file non-NTFS seperti FAT.
Apa perbedaan hard link dan symbolic link?
Hard link adalah «satu nama lagi dengan status setara yang ditambahkan, menunjuk ke entitas file yang sama — rekaman MFT yang sama». Ia hanya dapat dibuat di dalam volume yang sama; mengakses file lewat nama mana pun memberi file yang sama; dan menghapus satu nama tidak menghapus file selama nama lain masih tersisa. Symbolic link adalah «rambu yang mengarahkan ke jalur berbeda», diimplementasikan sebagai reparse point. Karena hanya memegang jalur tujuan sebagai string, ia dapat menunjuk ke volume lain atau bahkan lokasi remote, tetapi menjadi jalan buntu jika tujuan hilang. Dalam praktik, aturan praktisnya: pakai hard link untuk berbagi entitas di bawahnya (yang mengubah arti penghapusan), dan pakai symbolic link untuk mengalihkan jalur (untuk pemindahan atau pengalihan).
NTFS adalah sistem file berjurnal, jadi apakah data selamat dari pemutusan daya?
Anda perlu memahami persis apa yang dilindungi. Yang dilindungi log transaksi NTFS ($LogFile) adalah konsistensi struktur sistem file (metadatanya). Bahkan jika kegagalan sistem terjadi, NTFS secara otomatis memulihkan konsistensi memakai log pada mulai berikutnya, mencegah situasi volume rusak dan tidak dapat dibaca. Tetapi itu tidak berarti isi aktual file yang sedang ditulis dipulihkan. Seperti yang kita lihat di bagian 4 seri ini, data dirty yang duduk di cache hilang saat pemutusan daya. Jadi pemahaman yang benar adalah «volume tidak akan rusak, tetapi isi penulisan terakhir masih dapat hilang» — jika Anda memerlukan ketahanan untuk data itu sendiri, Anda harus membangunnya sendiri, dengan FlushFileBuffers, WRITE_THROUGH, atau desain penulisan tingkat aplikasi seperti tulis-ke-file-sementara-lalu-ganti-nama.
Mengapa «ukuran» file berbeda dari «ukuran di disk»?
Karena NTFS mengelola panjang logis file dan ruang disk yang benar-benar dialokasikan secara terpisah. Bahkan file biasa menunjukkan selisih karena alokasi dibulatkan ke cluster utuh (default 4 KB), tetapi file sparse dan file terkompresi adalah tempat kesenjangan menjadi besar. File sparse tidak mengalokasikan penyimpanan nyata ke rentang yang berlanjut sebagai nol — ia mengelolanya sebagai «lubang» — jadi sepenuhnya mungkin file dengan ukuran logis beberapa gigabyte hanya memakai beberapa megabyte di disk. File terkompresi hanya punya ukuran pasca-kompresi yang dialokasikan. Sebaliknya, jika «ukuran di disk» tampak lebih besar, pembulatan cluster atau alternate data stream sering menjadi penyebabnya.

Profil penulis

Halaman perkenalan penulis artikel.

Go Komura

Direktur KomuraSoft LLC

Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.

Kembali ke blog