web-dev-qa-db-ja.com

OpenSUSEをBTRFSサブボリュームにインストールします

異なるパーティションを使用して空き領域を浪費しないように、それぞれにサブボリュームを使用して、単一のBTRFSファイルシステム内に異なるLinuxディストリビューションをインストールしようとしています。
UEFIを実行しているラップトップを使用しており、次のパーティションスキームを使用したいと思いました。

sda1:すべてのシステムの/ boot/efiにマウントされたEFIブート
sda2:スワップ
sda3:BTRFSボリューム

sda3は、次のサブボリュームに「分割」されます。
/data:データのサブボリューム
/snapshots:スナップショットのサブボリューム
/os/DISTID:ディストリビューションDISTのサブボリューム(ディストリビューション用に1つ)

すべてのディストリビューションはGRUB2をインストールし、UEFIで必要なGRUBをロードするので、すべてのディストリビューションが他のディストリビューションを認識する必要はありません。

ArchとFuntooをインストールできましたが、OpenSUSEを/ os/suseサブボリュームにインストールするように設定できませんでした。
私は以下を試しました:

  • 後者をデフォルトのサブボリュームとして設定し( ここ も述べられているように)、OpenSUSEにパーティションをフォーマットしないように指示しました。インストールは成功したようですが、起動できませんでした
  • インストールライブシステムの/ mntにサブボリュームをマウントし、OpenSUSEに事実を無視するように指示しました。実際のインストールのためにパーティションを再マウントしようとしたときに、インストールが失敗しました
  • ラップトップ環境に似た仮想マシンにOpenSUSEをインストールし、システム全体をサブボリュームにコピーして、grubとその設定(ArchまたはFuntooで行ったもの)に必要な調整を加えました。 grubはロードされましたが、起動されたシステムはカーネルパニックに陥りました

GRUBについて書いた調整は、次のことを意味します。

  • サブボリューム内のchroot(Arch-chrootまたは gentoo/funtooインストールの手順 を使用)
  • eFIシステムパーティションである/boot/efiにgrubをインストールします(ただし、GRUBのデータは/bootに保持します)
  • grub-mkconfig -o /boot/grug/grub.cfgを実行して、ブートローダーを更新します

誰かアイデアはありますか?私は何か見落としてますか?

2
Michele Cereda

私の経験から、OpenSUSE Leap 42.2/42.3インストーラーによるカスタム(スナッパー/ @表記以外)サブボリュームの処理は機能しません。さらに悪いことに、ブートローダーのインストールなど、一部のツールには問題があります。たとえば、私の場合、grubコアは/ boot/grub ...を指していたが、chrootから更新するときは/ grub ..だけである必要があります。このツールで現在の設定を確認できます: https://github.com/arvidjaar/bootinfoscript

とにかく、これは私がインストール後のセットアップや起動可能なバックアップに使用する方法です。

インストーラーによって数十のサブボリュームを作成することは避けてください。たとえば、インストールするだけです。パーティションのルート/デフォルトのサブボリューム(それが機能した場合)。

インストール後、レスキューシステムを起動して

  1. インストールされたシステムディレクトリを目的のサブボリュームに移動し、そのサブボリュームの下に通常のLinuxファイルシステムツリーが表示されるようにします。必要に応じて、ホームフォルダも修正します。
  2. / etc/fstabを修正し、適切なsubvol =/myrootsubvolオプションを追加します
  3. サブボリューム(future /)を使用してパーティションをマウントし、bootをマウントし、boot/efiをマウントします。
  4. 次に、マウントされたサブボリュームの外側に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"    
    
  5. 次に、/mnt/temp_sys_prepに通常のchrootアプローチを使用します。 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も呼び出します。

  6. Chrootを終了し、逆の順序でアンマウントします。 grub2コアが正しいパスを指しているかどうか、ツールでもう一度確認してください
2
vbar