ある Linux インストールから別のインストールにホットスワップできますか?

ある Linux インストールから別のインストールにホットスワップできますか?

私のマシンには Linux が複数インストールされており、適切なものを再起動します。たとえば、新しいインストールのパーティションをリストした fstab をコピーして、次のようにすると、完全に再起動せずに、一方から他方へ切り替えることができるかどうか知りたいですmount -a

当然、カーネルは変更されませんが、それは問題ありません。作業中のパーティションを変更するだけを望んでいます。また、何も実行せずにコマンド ラインからこれを行う必要があることも明らかです (それが可能であればの話ですが)。それとも、このアイデアは最初から無効でまったくの狂気なのでしょうか?

その理由は、通常、別の「実験的」インストールで根本的な変更 (Debian の「amd64」カーネルへの移行など) を実験するためです。再起動して起動するのはもちろん問題ありませんが、完全に再起動せずにそのインストールにジャンプできればすばらしいでしょう。これは、ルート パーティションをオンザフライで変更するだけと考えることもできますが、おそらくそれはまったく不可能です。

はい、以下で学んだように、それは可能です。カーネル自体を交換する必要がない場合は、「chroot」を使用します。完全な再起動をシミュレートする場合は、「kexec」を使用します。

答え1

それは不可能だと思います。

理論的には、次のことを行う必要があります。

  1. を使用してシステムを「単一」実行レベルに移動しますinit 1。理論的には、init と bash のみが実行されます。
  2. / 以外のすべてのパーティションをアンマウントします。この時点で、 /usr がルート パーティションにあるかどうかに応じて、システムが動作を停止する可能性があります。
  3. 他の OS のルートをどこかにマウントします。
  4. pivot_root を使用して、ルートを新しいパーティションに変更します。
  5. init 5(または 2 または適切なもの)を実行して、新しいシステムを起動するように init に指示します。

問題は、pivot_root は現在のプロセスのルート パーティションのみを変更することです。つまり、init には影響せず、init にシステムを起動するように指示すると、古いシステムが起動されます。pivot_root を実行するように init に指示するには何らかの方法が必要ですが、これは不可能だと思います。

ああ、他の OS が異なる init サービスを使用する場合 (たとえば、Fedora は systemd を使用し、Ubuntu は upstart を使用します) については触れないでおきます。カーネルの下の init プロセス (pid 1) を置き換える必要がありますが、これは実際には不可能です。

答え2

異なるカーネルを試したい場合は、再起動するか、仮想マシンで実行する必要があります。仮想マシンの方が便利ですが、実際のハードウェアでカーネルをテストすることはできません。

インストールされたプログラムの異なるセットで異なるセットアップをしたい場合は、仮想マシンを使用することもできます。仮想マシンのオーバーヘッドを避けたい場合は、ディストリビューションをchroot64ビットインストールで32ビットプログラムに簡単にアクセスしたり、安定したリリース(Debian stableなど)に加えて最新のもの(Debian stableなど)を入手したりするために、私はよくそうします。代替 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

関連情報