代替シェルでinitを起動するにはどうすればよいですか?

代替シェルでinitを起動するにはどうすればよいですか?

grubを使ってシステムを起動しました。

Linux /boot/vmlinuz-4.5.0 root=/dev

initrd /boot/initrd-4.5.0

正しく起動しないようにrootをdevに設定しました。もちろん、これはBusyboxの項目に戻り、何とかマウントを使用して初期化を開始できることをオンラインで読みました。私は周りを見回して/ sbinの下でswitch_rootを見つけ、それを使ってみましたが、成功しませんでした。ルートを変更してPID 1で初期化を開始するには?また、私の初期化はSystem Vで、すべてが同じパーティションにあります。

ベストアンサー1

切り替えたいルートディレクトリをインストールする必要があります。私はあなたがすでにこれを行う方法を知っていると仮定します。基本的にmkdir /newroot; mount -r /dev/something /newroot

それからあなたは必要です変える現在実行中の代替シェルです。これはPID 1(verificationが利用可能echo $$)で実行され、ターゲットinitはその番号を再取得する必要があります。したがって、exec使用するには組み込みシェルが必要です。

switch_root移行するルートディレクトリと、移行後に実行するinit実行可能ファイル名という2つ以上のパラメータを許可します。

したがって、代替シェルを交換するだけです。

exec switch_root /newroot /sbin/init/sbin/initルートをmountに変更した後、PID 1を再インポートして追加の初期/newroot化を続行できます。

おすすめ記事