/が読み取り専用に再マウントされないようにするファイルをリストするにはどうすればよいですか?
A)パッケージにfuser
含まれていpsmisc
ます。これは私がfuser
輝いていると思うユースケースであり、より便利ですlsof
。
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
これにより、読み取り(f)および書き込み(F)のために/でファイルを開いているすべてのプロセスが表示されます。/が読み取り専用に再マウントされるのを防ぐファイルは、書き込み用に開かれているファイル(F)です。
ルートディレクトリファイルを書き込み用に開いた状態で実行されている実行可能ファイルであるプロセスを強制終了します。
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
これはsystemd
コメント付きで注意が必要です。の場合systemd
、init
それfuser
が表示され、他の考慮事項があります。でsystemd
実行している、それが(再)、彼らはただで識別されて殺されてきた場合でも、あなたの後ろのプロセスを開始することができますfuser
。 systemd
は従来のものよりずっと進んでいsysvinit
ます。
B)説明のUPDATEは、システムには...のみがinit
あり、getty
まだ実行中であることを示しています...
システムが使用systemd
していない、使用しているというコメントが表示されinit
ます。ストレッチで、systemd
です init
。コメントは明示的に言っていませんでしたsysvinit
ので、私は問題のシステムがデフォルトストレッチsystemd
を使用しているかもしれないと思っていますinit
。または、この記事につまずく他の人々が、stretchを使用している場合systemd
、この部分が便利だと思います。
Debian Wikiによれば、
システムの初期化プロセスは、initデーモンによって処理されます。squeeze以前のリリースでは、このデーモンはsysvinitパッケージによって提供されており、代替はサポートされていません。で喘鳴、デフォルトのinitデーモンはまだですsysvinit
が、systemdにの「技術プレビュー」はご利用いただけません。でジェシーとストレッチ、デフォルトのinitシステムはあるsystemd
が、はsysvinitへの切り替えはサポートされています。
jessie以来、systemdのみが完全にサポートされています。sysvinitはほとんどサポートされていますが、sysvinit起動スクリプトを提供するためにDebianパッケージは必要ありません。runitもパッケージ化されていますが、他と同じレベルのテストとサポートを受けておらず、現在PID 1としてサポートされていません。
でsystemd
実行している、それは問題なく再マウントすることができるように/解放するために取るべきいくつかの追加のステップがあります。
または(両方ともソケットに依存している)のsystem.slice
開いているファイルを保持している可能性があります。または、場合はそれが復活することができます実行されているにリースを書き込むの/ var / ...(&/ varが/など、常に独自のデバイスではありません) &あなたは殺すかもしれませんが、それはすぐに戻って起動します。 systemd-journald.service
systemd-udevd.service
NetworkManager
dhclient
fuser
dhclient
NetworkManager
道徳は、「欲しい」/(そしてさらにそうすることができる)多くのものが自動化されていることですsystemd
。
確かに、実行可能な場合はsystemd
、実行レベル1に相当するものが一致しますrescue.target
(およびrunlevel1.target
へのシンボリックリンクですrescue.target
)。
1)システムを分離することから始めます rescue.target
# systemctl isolate rescue.target
ルートパスワードの入力を求められます。画面の指示に従ってください。
2)レスキューシェルで、/が必要なものを見つけます。
# systemctl show -p Wants /
一般的に、それはですsystem.slice
。欲しいものをすべて停止します。例えば
# systemctl stop system.slice
3)この時点で、再マウントは報告されずmount: / is busy
、機能するmount -o remount,ro /
はずです。そうでない場合は、でもう一度確認してくださいfuser
。
4)FWIW; またumount
、別のデバイスがネストされたマウントなどの別のマウントのサブディレクトリにマウントされている場合、または失敗した場合も失敗することがあります。たとえば、/ var /または/ boot /が別のデバイスにある(およびマウントされている)umount /
場合は失敗します。しかしは、まだこのケースで動作するはずです。mount -o remount,ro /
lsblk
ネストされたマウントを視覚化するのに役立ちます。
lsof + L1がリンク解除された開いているファイルをリストしないのはなぜですか?
使用できないため(ソケットまたはほとんどのFIFOとパイプ)、ファイルを開いていない(親プロセスがファイル記述子を閉じている)か、リンクカウントが1を超えています。
man lsof(8)の詳細...
+ | -L [l]
このオプションは、ファイルリンクカウントのリストを有効( '+')または無効( '-')にします。たとえば、ソケットやほとんどのFIFOおよびパイプでは使用できません。
次の番号なしで+ Lを指定すると、すべてのリンクカウントがリストされます。-Lが指定されている場合(デフォルト)、リンクカウントはリストされません。
+ Lの後に数字が続く場合、その数字よりもリンク数が少ないファイルのみがリストされます。(-Lの後に番号を付けることはできません。) '' + L1 ''の形式の指定は、リンク解除された開いているファイルを選択します。フォームの仕様により、+aL1 <file_system>
指定されたファイルシステム上のリンクされていないオープンファイルが選択されます。
w
やu
中FD
の列lsof
出力、またはのためF
の出力でfuser -vm /
、例えば。ただし、完全なリストを提供することはできません。needrestartパッケージをインストールすることもできます。