マイコンピュータに複数のスタンドアロンLinuxがインストールされ、適切なLinuxで再起動します。完全な再起動なしで1つから別のものに切り替えることができるかどうか疑問に思います。たとえば、fstabをコピーし、新しくマウントされたパーティションを一覧表示しますmount -a
。
明らかにカーネルは変更されませんが、大丈夫です。作業パーティションのみを変更したいです。私はこれが可能であれば何も実行せずにコマンドラインで実行する必要があることは明らかであると思います。それとも、アイデアは最初から効果がなく、純粋な狂気でしたか?
その理由は、通常、別の「実験的」インストールからラジカルな変更(例:Debianの「amd64」カーネルに移動)を試みるからです。再起動して起動することをお勧めしますが、完全に再起動せずにそのインストールに直接移動できれば良いでしょう。これを単にルートパーティションを動的に変更すると考えるかもしれませんが、これは単に不可能かもしれません。
はい、以下で学んだように可能です。カーネル自体を交換する必要がない場合は、「chroot」を使用してください。完全な再起動をシミュレートするには、「kexec」を使用します。
答え1
これは不可能だと思います。
理論的にあなたがしたいことは次のとおりです。
- を使用すると、システムは「シングル」実行レベルに移動します
init 1
。ここでは理論的にはinitとbashだけを実行します。 - / を除くすべてのパーティションをアンマウントします。 / usrがルートパーティションにあるかどうかによって、この時点でシステムの動作が停止することがあります。
- 他のオペレーティングシステムのルートディレクトリをどこかにインストールします。
- ivot_root はルートを新しいパーティションに変更します。
init 5
initに実行(または2または適切なエントリ)を介して新しいシステムを起動するように指示します。
問題は、ivot_rootが現在のプロセスのルートパーティションのみを変更することです。つまり、initには影響を与えず、initにシステムを起動するように指示すると、古いシステムが起動します。 initにivot_rootを実行するように指示する方法が必要です。私の考えでは不可能だと思います。
ああ、そして他のオペレーティングシステムが他のinitサービスを使用しているときに何が起こるのか話しません(たとえば、Fedoraはsystemdを使用し、Ubuntuはupstartを使用します)。カーネルの下のinitプロセス(pid 1)を置き換える必要がありますが、これは実際には不可能です。
答え2
別のカーネルを試すには、再起動するか、仮想マシンで実行する必要があります。仮想マシンはより便利ですが、実際のハードウェアでカーネルをテストすることはできません。
インストールされているアセンブリのさまざまなセットに異なる設定が必要な場合は、仮想マシンを使用することもできます。仮想マシンのオーバーヘッドを回避するには、次の手順を実行します。chroot。私はしばしば、64ビットインストールから32ビットプログラムに簡単にアクセスするため、または信頼性の高いもの(Debian stableなど)に加えて最新のもの(Debian不安定など)を取得するためにこれを行います。私は書いた代替 Debian/Ubuntu リリースの chroot 設定ガイド。また、見ることができます軽量で隔離されたLinux環境
答え3
もしあなたならいいえカーネルを変更したり変更したりする必要がありますが、ここで指摘したように別のファイルシステムを使用したいと思います。
明らかにカーネルは変更されませんが、大丈夫です。作業パーティションのみを変更したいです。
もしそうなら、おそらくあなたの言葉で、chrootを(マウントして)する必要があります。
これはルートパーティションを動的に変更すると考えることができます。
私はしばしば、他のカーネルを使用するファイルシステムと対話するために、構造システム(例えばClonezilla)でchrootを使用してきました。新しいカーネルモジュールをロードするのと同じことができるとは思いませんが、ファイルの読み書きには問題ありません(fstabの変更、grub.confの調整など)。
バインドマウントを使用すると、chroot 環境をより便利にすることができます。私はこれをchrootターゲットの内部にマウントされたファイルシステムをコピーするために使用しました。
mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt