Remount disk yang sibuk ke mode read-only

19

Saya ingin memaksa partisi disk untuk hanya membaca mode dan tetap hanya baca selama lebih dari 30 menit.

Apa yang saya coba:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    Masalah : Ini membuat kesalahan perangkat sibuk karena beberapa proses menggunakan partisi. Saya tidak ingin mematikan proses menggunakan disk. Saya ingin mensimulasikan disk yang tiba-tiba menjadi read-only ketika proses masih menggunakannya.

  2. Gunakan kunci sysrq ajaib, seperti di bawah ini

    echo u > /proc/sysrq-trigger
    

    Masalah : Ini akan membuat semua partisi disk read-only (meskipun perangkat sedang sibuk). Tetapi setelah 20-30 menit mesin itu me-reboot dirinya sendiri. Beberapa mesin langsung reboot setelah perintah ini dijalankan. Belum yakin apa yang menyebabkan reboot ini. Saya tidak ingin mesin reboot sendiri dan perlu menjaga disk dalam mode read-only selama 30+ menit.

Pertanyaan : Apakah ada cara yang lebih baik saya bisa memaksa satu partisi disk hanya-baca dan mempertahankannya dalam keadaan itu selama setengah jam dan membawanya kembali ke mode baca-tulis tanpa menyebabkan reboot dalam proses?

AdithyaCS
sumber
3
Sudahkah Anda mempertimbangkan fsfreeze -f? Itu tidak persis remount sistem file read-only. Alih-alih, ia memblokir semua penulis hingga fsfreeze -u. Tapi ini mirip ...
Celada
Terima kasih Celada! itu ide yang bagus! .. Saat ini saya tidak memiliki fsfreeze yang bekerja di komputer saya tetapi saya akan mencoba ini.
AdithyaCS
Saya mencoba fsfreeze -fdan itu kasus saya lebih "os freeze". Mungkin karena menulis diblokir alih-alih ditolak?
Piotr Findeisen
fsfreezemengubah sistem saya tidak dapat diakses dan saya tidak dapat memasukkan perintah unfreeze tidak dapat kembali ke terminal dan harus me-reboot mesin saya. Jadi berhati-hatilah ! :)
Alex

Jawaban:

16

Anda biasanya tidak dapat me-remount sistem file sebagai hanya-baca jika proses memiliki file di atasnya yang terbuka untuk ditulis, atau jika itu berisi file yang dihapus tetapi masih terbuka. Demikian pula, Anda tidak dapat meng-unmount sistem file yang membuka file apa pun (atau penggunaan serupa file seperti proses memiliki direktori saat ini di sana, menjalankan executable, dll.).

Anda dapat menggunakan umount -luntuk melepaskan titik mount dan mencegah pembukaan file lebih lanjut, tetapi tetap menginstal sistem file dan menjaga proses yang sudah memiliki file terbuka berjalan normal.

Saya tidak bisa memikirkan cara umum untuk memaksa sistem file untuk di-remount hanya-baca padahal seharusnya tidak. Namun, jika sistem file didukung oleh perangkat blok, Anda dapat membuat perangkat blok hanya-baca , misalnya

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggeradalah cara yang agak ekstrem untuk memaksa remounting sebagai hanya-baca, karena ini memengaruhi semua sistem file. Ini dimaksudkan sebagai metode terakhir untuk membiarkan filesystem dalam keadaan bersih sebelum reboot.

Menghitung ulang sistem file sebagai read-only tidak menyebabkan reboot. Apa pun yang menyebabkan reboot tidak secara langsung berkaitan dengan remounting partisi sebagai hanya-baca. Mungkin itu sama sekali tidak terkait, atau mungkin ini memicu bug dalam aplikasi yang menyebabkannya berputar dan membuat prosesor terlalu panas dan prosesor Anda rusak atau overclock dan akhirnya reboot. Anda perlu melacak penyebab reboot.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Sayangnya, ini bukan solusi portabel. Pada raspberry saya mendapatkan: "Izin ditolak" ketika saya menjalankanecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen
.. dan echo u > /proc/sysrq-triggertidak hanya ekstrem, tetapi juga bisa memaksa Anda untuk reboot jika Anda ingin mengembalikan RW. Ketika saya mencoba ini dan kemudian remount (with mount..) dmesgberkata "Tidak dapat me-remount RDWR karena daftar inode anak yatim yang belum diproses. Silakan umount / remount sebagai gantinya"
Piotr Findeisen
@PiotrFindeisen apakah Anda menjalankannya sebagai root?
hanshenrik
@hanshenrik kurasa begitu
Piotr Findeisen
4

Gunakan mountopsi kekuatan (dengan anggapan mount Anda memiliki satu; GNU mounttidak, tetapi BSD dan macOS misalnya melakukannya):

mount -f -o remount,ro /mount/point

Tentu saja, jarak tempuh Anda dapat bervariasi tergantung pada sistem file yang sebenarnya, versi kernel dan situasi , jadi ini hanya opsi level yang lebih tinggi yang mencoba trik tingkat rendah lainnya seperti misalnya yang disebutkan oleh @Gilles.

Piotr Findeisen
sumber
1
@psusi no. Itu memungkinkan saya me-remount /partisi ext4 saya .
Piotr Findeisen
2
Ternyata saya sedang memikirkan umount -f, tapi saya baru saja mencoba remounting ke ro, dan sementara -f membuat perintah tidak mengembalikan kesalahan, sistem file sebenarnya, tidak dibuat hanya baca.
psusi
1
@psusi, tidak mengejutkan. Saya tidak akan mengharapkan pendekatan tunggal untuk bekerja dalam semua kasus. Ini bekerja untuk saya berulang kali (partisi root ext4 pada raspberry untuk masalah ini) - dan maksud saya remount ke RO, tidak mengabaikan kesalahan - jadi saya kira akan bekerja untuk beberapa, tetapi tidak semua, kasus lain. Maaf ini tidak termasuk milikmu.
Piotr Findeisen
13
kata pria gunung-f itu --fake. Kutipan: "Menyebabkan segala sesuatu harus dilakukan kecuali untuk pemanggilan sistem yang sebenarnya; jika tidak jelas, ini '' palsu '' memasang sistem file. Opsi ini berguna dalam hubungannya dengan flag -v untuk menentukan apa yang coba diperintahkan oleh perintah mount Hal ini juga dapat digunakan untuk menambahkan entri untuk perangkat yang dipasang sebelumnya dengan opsi -n. Opsi -f memeriksa catatan yang ada di / etc / mtab dan gagal ketika catatan sudah ada (dengan mount non-palsu biasa, pemeriksaan ini dilakukan oleh kernel). "
Will Manley
3
BSD dan, oleh karena itu, macOS mounts ' -f memang berarti "kekuatan".
terdon