私はDebianストレッチを使用しています。私のルートパーティションがマウントされましたread-only
。パッケージをインストールまたはアップグレードするときにのみ(aptフックを使用して)再/
インストールread-write
してから再度ro
。
/
パッケージをアップグレードした後、読み取り専用で再インストールできないことがあります。
mount -o remount,ro /
mount: / is busy
以前のバージョンのDebian(Wheezy)では、リンクされていない開いているファイルを一覧表示できますlsof
。
lsof +L1
/
または、より具体的には、ファイルがroに再マウントされないようにします。
{ lsof +L1 ; lsof|sed -n '/SYSV/d; /DEL|(path /p;' ; } | grep -Ev '/(dev|home|tmp|var)'
ただし、Debian Stretchではlsof +L1
ファイルはリストされません。
+|-L
動作が停止した理由を説明する変更は表示されませんman lsof
。
lsof +L1がリンクされなくなったオープンファイルをリストしないのはなぜですか?
ブロック/再マウントされたファイルを読み取り専用としてリストする方法は?
修正する
可能なすべてのプロセスを停止init
し、まだ実行中ですが、getty
まだ。/
ro
ベストアンサー1
ブロック/再マウントされたファイルを読み取り専用としてリストする方法は?
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)修正する説明にはシステムのみ...init
そしてgetty
まだ走っています。...
systemd
システムが使用されていないというコメントが表示されますinit
。ストレッチをしながら、systemd
はい init
。コメントには明示的に記載されていないため、sysvinit
問題のシステムがデフォルトのsystemd
Stretchを使用している可能性があるとしますinit
。あるいは、この記事を誤って発見した人はストレッチを使用しており、systemd
このセクションが役に立つと思います。
~によるとDebian Wiki、
システム初期化プロセスは、initデーモンによって処理されます。 squeeze以前のバージョンでは、このデーモンはsysvinitパッケージによって提供され、代替はサポートされていません。存在するゆるい、デフォルトのinitデーモンはまだ
sysvinit
しかし、systemdの「技術プレビュー」を使用することができます。存在する提示そして緊張、基本初期化システムは次のとおりです。systemd
しかし、sysvinitへの切り替えをサポートしています。jessie以降、systemdのみが完全にサポートされています。ほとんどの場合、sysvinitはサポートされていますが、Debianパッケージはsysvinit起動スクリプトを提供する必要はありません。 runitもパッケージとして提供されていますが、まだ他のプログラムと同じレベルのテストとサポートを受けておらず、現在PID 1をサポートしていません。
実行中にsystemd
問題なく再インストールできるように、いくつかの追加手順を無料で実行する必要があります。
ファイルをsystem.slice
保存または開くことができます(両方ともソケットの依存関係があります)。または、実行している場合は再作成してリースを作成できます。systemd-journald.service
systemd-udevd.service
NetworkManager
dhclient
/var/...(&/var/常に自分のデバイスではない)などが 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
。
umount
4) FWIW;他のデバイスが別のインストールのサブディレクトリにインストールされている場合(たとえば、ネストされたインストール)でも、このエラーが発生することを確認しました。たとえばumount /
、/var/または/スタート/別のデバイスにあります(すでにインストールされています)。この場合でもまだmount -o remount,ro /
動作します。
lsblk
ネストされたインストールを視覚化するのに役立ちます。
lsof +L1がリンクされなくなったオープンファイルをリストしないのはなぜですか?
使用できないため(ソケットまたはほとんどのFIFOとパイプ)、ファイルが開かれていないか(親プロセスがファイル記述子を閉じる)、リンク数が1より大きい。
男性LSof(8)詳細...
+|-L[エル]
このオプションは、ファイルリンク数のリストを有効にする(「+」)または無効にする(「-」)。可能であれば使用できます。たとえば、ソケットやほとんどのFIFOやパイプでは機能しません。
次の番号なしで+ Lを指定すると、すべてのリンク数が一覧表示されます。 -L(デフォルト)を指定すると、リンク数はリストされません。
+Lの後に数字が来ると、リンク数がこの数より少ないファイルのみをリストします。。 (-Lの後に数字は続くことはできません。)「+ L1」形式の指定は、リンクされていない開いているファイルを選択します。フォームの仕様は、
+aL1 <file_system>
指定されたファイルシステムでリンクされていないオープンファイルを選択します。