異なるパーティションを使用して空き領域を無駄にしないように、それぞれにサブボリュームを使用して、単一の BTRFS ファイルシステム内に異なる Linux ディストリビューションをインストールしようとしています。UEFI を
実行するラップトップを使用しており、次のパーティション スキームを使用したいと考えています。
sda1: EFI ブート、すべてのシステムの /boot/efi にマウント
sda2: スワップ
sda3: BTRFS ボリューム
sda3 は次のサブボリュームに「パーティション分割」されます:
/data: データ用のサブボリューム
/snapshots: スナップショット用のサブボリューム
/os/DISTID: ディストリビューション DIST 用のサブボリューム (ディストリビューション用に 1 つ)
各ディストリビューションは GRUB2 をインストールし、必要な GRUB を UEFI でロードします。これにより、各ディストリビューションが他のディストリビューションを意識する必要がなくなります。
Arch と Funtoo はインストールできましたが、OpenSUSE を /os/suse サブボリュームにインストールするように設定できませんでした。
次のことを試しました。
- 後者をデフォルトのサブボリュームとして設定します(ここ)OpenSUSEにパーティションをフォーマットしないように指示しました。インストールは成功したようですが、起動できませんでした。
- インストールライブシステムでサブボリュームを /mnt にマウントし、OpenSUSE にその事実を無視するように指示しました。実際のインストールのためにパーティションを再マウントしようとしたときにインストールが失敗しました。
- ラップトップ環境に似た仮想マシンに OpenSUSE をインストールし、システム全体をサブボリュームにコピーして、grub とその設定に必要な調整を行いました (Arch または Funtoo で行う必要があったもの)。grub はロードされましたが、起動したシステムはカーネル パニックになりました。
私が書いた GRUB の調整は、次のことを意味します。
- サブボリュームでchroot(arch-chrootまたはgentoo/funtooのインストール手順)
/boot/efi
EFI システム パーティションに grub をインストールします(ただし、GRUB のデータは に保持します/boot
)grub-mkconfig -o /boot/grug/grub.cfg
ブートローダーを更新するために実行します
誰か何かご存知ですか? 何か見逃しましたか?
答え1
私の経験から言うと、OpenSUSE Leap 42.2 / 42.3 インストーラーによるカスタム (例: snapper / @ 表記以外) サブボリュームの処理は機能しません。さらに悪いことに、ブートローダーのインストールなどの一部のツールでは問題が発生します。たとえば、私の場合、grub コアは /boot/grub... を指していましたが、chroot から更新する場合は /grub.. のみを指す必要があります。次のツールで現在の設定を確認できます。https://github.com/arvidjaar/bootinfoscript
とにかく、ここではインストール後のセットアップや起動可能なバックアップに使用する方法を紹介します。
インストーラーによる多数のサブボリュームの作成は避け、たとえばパーティションのルート/デフォルトのサブボリューム (それが機能する場合) にインストールするだけです。
インストール後、レスキューシステムを起動し、
- インストールされたシステム ディレクトリを目的のサブボリュームに移動し、そのサブボリュームの下に通常の Linux ファイルシステム ツリーが存在するようにします。必要に応じて、ホーム フォルダーも修正します。
- /etc/fstabを修正し、適切なsubvol=/myrootsubvolオプションを追加します。
- サブボリューム(将来 / )を含むパーティションをマウントし、boot をマウントし、boot/efi をマウントします。
次に、マウントされたサブボリュームの外側に 2 番目のディレクトリを作成します。そのディレクトリにすべてをバインド マウントします。
mount -o bind "/mnt/partition_root/sysroot_subvol" "/mnt/temp_sys_prep" mount -o bind "/mnt/partition_root/sysroot_subvol/boot" "/mnt/temp_sys_prep/boot" mount -o bind "/mnt/partition_root/sysroot_subvol/boot/efi" "/mnt/temp_sys_prep/boot/efi" mount -o bind /proc "/mnt/temp_sys_prep/proc" mount -o bind /sys "/mnt/temp_sys_prep/sys" mount -o bind /dev "/mnt/temp_sys_prep/dev"
ここで、通常の chroot アプローチを使用します
/mnt/temp_sys_prep
。chroot内使用できますgrub2-install --no-nvram --recheck --efi-directory=/boot/efi /dev/disk/by-id/scsi-SATA...
、grub2-mkconfig -o /boot/grub2/grub.cfg
、mkinitrd
正しい順序はわかりませんが、おそらく mkinitrd も grub を呼び出します。
- chrootを終了し、逆の順序でアンマウントします。ツールで再度確認し、grub2コアが正しいパスを指しているかどうかを確認します。