Bagaimana saya bisa mendaftar file-file yang mencegah / dari yang remount menjadi hanya-baca?
A) fuserdapat ditemukan dalam psmiscpaket; ini adalah kasus penggunaan di mana saya menemukan fuserbersinar & lebih berguna daripada lsof.
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
Itu akan menunjukkan semua proses yang memiliki file terbuka pada / untuk membaca (f) dan menulis (F). File yang akan mencegah / tidak di-remount ke read-only adalah file yang dibuka untuk ditulis (F).
Bunuh proses yang dapat dijalankan yang dijalankan dengan file direktori root terbuka untuk ditulis ., Yaitu
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
Itu di atas systemdkomentar dengan peringatan. Jika systemdsudah initmaka fuserakan melihatnya dan ada pertimbangan lain. Dengan systemdberlari, ia dapat memulai kembali proses di belakang Anda, bahkan jika mereka baru saja diidentifikasi dan dibunuh fuser. systemdjauh lebih maju daripada tradisional sysvinit.
B) UPDATE dalam deskripsi menyatakan sistem hanya memiliki ... initdan gettymasih berjalan ...
Saya melihat komentar yang mengatakan sistem tidak menggunakan systemd, itu menggunakan init. Pada peregangan, systemd adalah init . Komentar tidak secara eksplisit mengatakan sysvinit, jadi saya mengasumsikan sistem yang dimaksud mungkin menggunakan peregangan default systemduntuk init. Atau orang lain yang tersandung pada postingan ini, yang menggunakan stretch systemd, merasa bagian ini bermanfaat.
Per Wiki Debian ,
Proses inisialisasi sistem ditangani oleh daemon init. Dalam rilis pemerasan dan sebelumnya, daemon itu disediakan oleh paket sysvinit, dan tidak ada alternatif yang didukung. Dalam wheezy , daemon init default masihsysvinit , tetapi "pratinjau teknologi" dari systemd tersedia. Dalam jessie dan stretch , sistem init default adalahsystemd , tetapi beralih ke sysvinit didukung.
Sejak jessie, hanya systemd yang didukung sepenuhnya; sysvinit sebagian besar didukung, tetapi paket Debian tidak diharuskan untuk menyediakan skrip start sysvinit. runit juga dikemas, tetapi belum menerima tingkat pengujian dan dukungan yang sama dengan yang lain, dan saat ini tidak didukung sebagai PID 1.
Dengan systemdmenjalankan, ada beberapa langkah tambahan yang harus diambil untuk membebaskan / sehingga dapat dipasang kembali tanpa masalah.
Kemungkinan system.slicememegang file terbuka untuk systemd-journald.serviceatau systemd-udevd.service(keduanya memiliki dependensi soket). Atau, jika NetworkManagerdijalankan, ia dapat muncul kembali dhclientyang menulis leases ke / var / ... (& / var / tidak selalu merupakan perangkatnya sendiri), dll. fuserMungkin menemukan & Anda membunuh dhclienttetapi NetworkManagermemulainya kembali.
Moralnya adalah banyak hal bersifat otomatis yang bisa 'diinginkan' / (dan terlebih lagi dengan systemd).
Yang pasti, jika layak, systemdsetara dengan level run 1 dicocokkan dengan rescue.target(dan runlevel1.targetmerupakan tautan simbolis ke rescue.target).
1) Mulailah dengan mengisolasi sistem ke rescue.target
# systemctl isolate rescue.target
Ini akan meminta Anda untuk memasukkan kata sandi root; ikuti petunjuk di layar.
2) Di shell penyelamatan, cari tahu apa yang diinginkan /.
# systemctl show -p Wants /
Biasanya, ini system.slice; hentikan semua yang Ingin. misalnya
# systemctl stop system.slice
3) Pada titik ini, remount tidak boleh dilaporkan mount: / is busydan mount -o remount,ro / seharusnya berfungsi. Jika tidak, periksa lagi dengan fuser.
4) FWIW; Saya juga pernah melihat saat umountgagal ketika / jika perangkat lain dipasang pada sub-direktori mount lain, yaitu nested mounts. Misalnya, umount /akan gagal jika / var / atau / boot / ada di perangkat lain (dan terpasang). Padahal mount -o remount,ro /harus tetap bekerja dalam hal ini.
lsblk dapat membantu untuk memvisualisasikan mount bersarang.
Mengapa lsof + L1 tidak lagi daftar membuka file yang telah dibatalkan tautannya?
Karena tidak tersedia (soket atau sebagian besar FIFO & pipa), mereka tidak lagi membuka file (proses induk menutup deskriptor file), atau mereka (masih) memiliki jumlah tautan lebih dari 1.
man lsof (8) detail ...
+ | -L [l]
Opsi ini memungkinkan ('+') atau menonaktifkan ('-') daftar jumlah tautan file, jika tersedia - misalnya, mereka tidak tersedia untuk soket, atau sebagian besar FIFO dan pipa.
Ketika + L ditentukan tanpa nomor berikut, semua jumlah tautan akan dicantumkan. Ketika -L ditentukan (default), tidak ada jumlah tautan akan terdaftar.
Ketika + L diikuti oleh angka, hanya file yang memiliki jumlah tautan yang kurang dari jumlah itu yang akan terdaftar . (Tidak ada angka yang dapat mengikuti -L.) Spesifikasi formulir '' + L1 '' akan memilih file yang terbuka yang telah dibatalkan tautannya. Spesifikasi formulir +aL1 <file_system>akan memilih file terbuka yang tidak ditautkan pada sistem file yang ditentukan.
watauudiFDkolomlsofoutput, atauFdi outputfuser -vm /, misalnya. Saya tidak bisa memberi Anda daftar lengkap. Anda mungkin juga ingin menginstal paket needrestart .