Situasi klasik: Saya mengalami masalah rm
dan segera menyadari bahwa saya telah menghapus file yang salah. (Tidak ada yang penting dan saya memiliki cadangan yang lumayan baru-baru ini, tetapi masih menjengkelkan.)
Mengetahui bahwa aktivitas disk selanjutnya adalah musuh saya jika saya ingin memulihkan file dengan extundelete
atau alat semacam itu, saya segera mematikan mesin secara fisik (yaitu, dengan tombol daya, bukan dengan halt
atau perintah semacam itu). Ini adalah laptop tanpa menjalankan tugas penting atau apapun yang terbuka, jadi ini adalah operasi yang dapat diterima. (Omong-omong, saya belajar sejak saat itu bahwa hal pertama yang harus dilakukan dalam situasi seperti itu adalah memperkirakan dulu jika file yang hilang masih dapat dibuka oleh proses https://unix.stackexchange.com/a/101247 - jika ya, Anda harus memulihkannya dengan cara ini alih-alih mematikan mesin.)
Namun, begitu mesin dimatikan saya pikir untuk sementara waktu dan memutuskan file tidak sepadan dengan investasi waktu boot sistem live untuk forensik yang tepat. Jadi saya menyalakan mesin. Dan kemudian saya menemukan bahwa file saya masih duduk di disk: rm
belum disebarkan ke disk sebelum saya dimatikan. Saya melakukan sedikit tarian dan berterima kasih kepada dewa sysadmin atas pengampunan-Nya yang tak terduga.
Pertanyaan saya sekarang adalah untuk memahami bagaimana ini mungkin, dan apa penundaan khas sebelum rm
benar-benar disebarkan ke disk. Saya tahu bahwa disk IO tidak segera memerah tetapi itu duduk di memori untuk beberapa waktu, tetapi saya berpikir bahwa jurnal disk akan memastikan dengan cepat bahwa operasi yang tertunda tidak sepenuhnya hilang. https://unix.stackexchange.com/a/78766 tampaknya mengisyaratkan mekanisme terpisah untuk menyiram halaman kotor dan menyiram operasi jurnal tetapi tidak memberikan detail yang cukup tentang bagaimana jurnal akan terlibat untuk rm
, dan penundaan yang diharapkan sebelum operasi memerah.
Beberapa perincian lebih lanjut: data berada di partisi ext4 di dalam volume LUKS, dan ketika mem-boot mesin cadangan saya melihat yang berikut ini di syslog
:
Sep 24 10:24:58 gamma kernel: [ 11.457007] EXT4-fs (dm-0): 1 orphan inode deleted
Sep 24 10:24:58 gamma kernel: [ 11.458393] EXT4-fs (dm-0): recovery complete
Sep 24 10:24:58 gamma kernel: [ 11.482475] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
tapi saya tidak yakin itu terkait dengan rm
.
Pertanyaan lain adalah apakah ada cara untuk memberitahu kernel untuk tidak melakukan operasi disk yang tertunda (melainkan, katakanlah, buang mereka di suatu tempat), daripada mematikan mesin. (Tentu saja, kedengarannya berbahaya untuk tidak melakukan operasi yang tertunda, tetapi inilah yang akan terjadi ketika mematikan mesin, dan beberapa kasus itu bisa menyelamatkan Anda.) Ini akan menjadi "lebih bersih", tentu saja, dan juga menarik untuk server jarak jauh mis. di mana powerdown fisik bukanlah pilihan yang mudah.
rm
tulisan ditulis? Dengan kata lain, hal-hal yang dilakukan untuk jurnal hanya ketika menulis baru saja akan dilakukan? Atau gambar lebih kompleks dari itu? Sedangkan untuk alt-sysrq-u, ini adalah ide yang cukup rapi. Apakah Anda memiliki referensi untuk diberikan untuk klaim "Tampaknya"? (Tampaknya tidak mengikuti tautan yang Anda berikan.) Terima kasih! :)echo u > /proc/sysrq-trigger
(Anda mungkin perlu mengaktifkannya terlebih dahulu).Dari: https://www.kernel.org/doc/Documentation/filesystems/ext4.txt
Juga lihat di sini tentang cara membersihkannya: Bagaimana Anda mengosongkan buffer dan cache pada sistem Linux?
Dikutip dari tautan di atas:
sumber
commit=nrsec
, apakah ini sesuatu yang akan terjadi setelah kernel memutuskan untuk menyiram perubahan dari memori ke disk? Atau apakah pengaturancommit=1
menjamin bahwa semua perubahan akan memerah setelah 1 detik terlepas daridirty_expire_centisecs
dandirty_writeback_centisecs
pengaturan?commit=1
. Sejauh yang saya mengerti,sync
memaksa segalanya terjadi terlepas dari Pengaturan Memori Virtual meskipun itu bisa terjadi lebih cepat.