アップグレード後にパッケージを再インストールしたり、読み取り専用に戻すことはできません。

アップグレード後にパッケージを再インストールしたり、読み取り専用に戻すことはできません。

私は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ます。これが 。psmiscfuserlsof

# 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。実行すると、プロセスが識別されたばかりで終了した場合でも、後からプロセスを(再)起動できます。伝統的なものよりはるかに進化しました。initfusersystemdfusersystemdsysvinit

B)修正する説明にはシステムのみ...initそしてgettyまだ走っています。...

systemdシステムが使用されていないというコメントが表示されますinit。ストレッチをしながら、systemd はい init。コメントには明示的に記載されていないため、sysvinit問題のシステムがデフォルトのsystemdStretchを使用している可能性があるとします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.servicesystemd-udevd.serviceNetworkManagerdhclient/var/...(&/var/常に自分のデバイスではない)などが fuserそれを見つけて終了することはできますが、dhclientすぐにNetworkManager起動します。

教訓は、多くのものが自動化されており、「欲しい」ことができるということです/(その場合はもっとそうですsystemd)。

systemd確実に機能する場合は、ランレベル1に対応する項目が一致し、シンボリックリンクになります。rescue.targetrunlevel1.targetrescue.target

1)まずシステムを取り外します。rescue.target

# systemctl isolate rescue.target

ルートパスワードの入力を求められたら、画面の指示に従います。

2) リカバリシェルで必要な/を探します。

# systemctl show -p Wants /

通常、必要なsystem.sliceすべてを停止します。例えば

# systemctl stop system.slice

3) この時点で再マウントする必要があります。いいえmount: / is busymount -o remount,ro / しなければならない働くそうでない場合は、もう一度確認してくださいfuser

umount4) FWIW;他のデバイスが別のインストールのサブディレクトリにインストールされている場合(たとえば、ネストされたインストール)でも、このエラーが発生することを確認しました。たとえばumount //var/または/スタート/別のデバイスにあります(すでにインストールされています)。この場合でもまだmount -o remount,ro /動作します。

lsblkネストされたインストールを視覚化するのに役立ちます。

lsof +L1がリンクされなくなったオープンファイルをリストしないのはなぜですか?

使用できないため(ソケットまたはほとんどのFIFOとパイプ)、ファイルが開かれていないか(親プロセスがファイル記述子を閉じる)、リンク数が1より大きい。

男性LSof(8)詳細...

+|-L[エル]

このオプションは、ファイルリンク数のリストを有効にする(「+」)または無効にする(「-」)。可能であれば使用できます。たとえば、ソケットやほとんどのFIFOやパイプでは機能しません。

次の番号なしで+ Lを指定すると、すべてのリンク数が一覧表示されます。 -L(デフォルト)を指定すると、リンク数はリストされません。

+Lの後に数字が来ると、リンク数がこの数より少ないファイルのみをリストします。。 (-Lの後に数字は続くことはできません。)「+ L1」形式の指定は、リンクされていない開いているファイルを選択します。フォームの仕様は、+aL1 <file_system>指定されたファイルシステムでリンクされていないオープンファイルを選択します。

おすすめ記事