皆さん、FS関連の作業してると、こんな感じにエラーがでていれば面倒くさくなった経験はありますか?
/: device is busy
これ、「起動した時点で詰みなのでは?」と思いがちですが、再起動してからブートローダで色々してやることで、別のコンピュータやOSを用いなくても簡単に操作ができます。
今回はそれについて備忘録も兼ねて解説します。
やり方
1. GRUBの起動画面にて、OSを選択した状態で「c」キーを押す
2. エディターが起動したら、「linux」から始まる行にUUIDがあるので、それを弄って存在しない物にする
3. Ctrl+Xで起動
4. (initramfs)プロンプトが出るので、そこでいつも通りコマンドを実行してファイルシステム関連操作をする (シェルの複雑な表現は使えないかも)
解説
Linux系ディストリビューションの起動はいくつか段階を踏んで実行されますが、簡単に解説すると次のようになります。
1. BIOS/UEFIがブートローダを呼び出す
2. ブートローダがLinuxカーネルと初期RAMディスク(initrd/initramfs)をメモリに読み込み、初期RAMディスクをルートディレクトリとして起動する
3. initd/systemdが起動し、初期RAMディスクから起動に必要なカーネルモジュール等を読み込んで、ルートファイルシステムをマウントし、chrootする
4. chroot後、initd/systemdが再実行され、各種サービスを起動
この時、初期RAMディスクがルートファイルシステムをマウントすることを阻止できれば、起動処理が失敗し、復旧用シェルが起動します。その状態ではルートファイルシステムはマウントされていないので、ルートファイルシステムが未マウントの状態で、怒られずにデバイスを触ることができます。
上の手順では、「ルートファイルシステムの居場所を示したUUIDを記述した箇所」をぶっ壊すことで、ルートファイルシステムのマウントを阻止しています。
※再起動したらもとに戻ります。
以上!