質問: ### 事象 1.rhel7.5環境にてLVを作成 2.LV上にファイルシステムを作成 3.マウントポイント /usr9を作成 4./usr9にLVをマウント(コマンド入力ミス) 正) mount /dev/vg/lvol1 /usr9 誤) mount /dev/vg/lvol1 /usr ### 影響 /usr配下のコマンド実行不可。ほとんどのコマンドは、/usr配下をリンク参照。 ### 対処 ・pwdとechoが実行可能なことを確認。 ・強制的にカーネルパニック実行によるリブート実施 echo c > /proc/sysrq-trigger ※顧客環境下のため、即時的にVM再起動は不可であり、苦肉の策でカーネルパニックにたどり着く。 ### 確認したいこと echoコマンド等が、上述の状況で実行可能であった理由を知りたい。 リブートによる復旧後、コマンドpathを調査したが/usr配下を参照していることがわかっている。 なお、busyboxの導入は未実施の環境。
回答: シェル組み込みコマンド以外の例もあります。 `/usr` がいっぱいになったときにはシングルユーザーモードにして `/usr` のマウント先をいれかえたいわけです。 `/usr` のマウント先をいれかえている真っ最中は当然 `/usr` は存在しませんのでまさに提示の状況となります。こういう状況でもルートパーティション `/` 配下の `/bin` や `/sbin` にあるコマンドは使えます。 っていうか `/bin` や `/sbin` に格納してある各種コマンドは `/usr` 以下が無くても動作するよう敢えてスタティックリンクで作ってあるのです(少なくとも商用 UNIX ではそう) 野良ビルドしたバイナリはたいてい `/usr` 以下の共用ライブラリを使うよう `./configure` されているので `/usr` がないと動きません。なのでインストール先も `/usr/local` とか `/opt` とかにしておき `/bin` 等を上書きしてしまわないように注意しておく必要があります。