Bagaimana saya bisa mendaftar file-file yang mencegah / dari yang remount menjadi hanya-baca?
A) fuser
dapat ditemukan dalam psmisc
paket; ini adalah kasus penggunaan di mana saya menemukan fuser
bersinar & 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 systemd
komentar dengan peringatan. Jika systemd
sudah init
maka fuser
akan melihatnya dan ada pertimbangan lain. Dengan systemd
berlari, ia dapat memulai kembali proses di belakang Anda, bahkan jika mereka baru saja diidentifikasi dan dibunuh fuser
. systemd
jauh lebih maju daripada tradisional sysvinit
.
B) UPDATE dalam deskripsi menyatakan sistem hanya memiliki ... init
dan getty
masih 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 systemd
untuk 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 systemd
menjalankan, ada beberapa langkah tambahan yang harus diambil untuk membebaskan / sehingga dapat dipasang kembali tanpa masalah.
Kemungkinan system.slice
memegang file terbuka untuk systemd-journald.service
atau systemd-udevd.service
(keduanya memiliki dependensi soket). Atau, jika NetworkManager
dijalankan, ia dapat muncul kembali dhclient
yang menulis leases ke / var / ... (& / var / tidak selalu merupakan perangkatnya sendiri), dll. fuser
Mungkin menemukan & Anda membunuh dhclient
tetapi NetworkManager
memulainya kembali.
Moralnya adalah banyak hal bersifat otomatis yang bisa 'diinginkan' / (dan terlebih lagi dengan systemd
).
Yang pasti, jika layak, systemd
setara dengan level run 1 dicocokkan dengan rescue.target
(dan runlevel1.target
merupakan 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 busy
dan mount -o remount,ro /
seharusnya berfungsi. Jika tidak, periksa lagi dengan fuser
.
4) FWIW; Saya juga pernah melihat saat umount
gagal 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.
w
atauu
diFD
kolomlsof
output, atauF
di outputfuser -vm /
, misalnya. Saya tidak bisa memberi Anda daftar lengkap. Anda mungkin juga ingin menginstal paket needrestart .