在 BTRFS 子磁碟區中安裝 OpenSUSE

在 BTRFS 子磁碟區中安裝 OpenSUSE

我正在嘗試在單一 BTRFS 檔案系統中安裝不同的 Linux 發行版,每個發行版使用一個子卷,以避免使用不同的分割區浪費可用空間。
我使用的是運行 UEFI 的筆記型電腦,並且我想使用以下分割區方案:

sda1:EFI 引導,安裝在所有系統上的 /boot/efi 上
sda2:交換
sda3:BTRFS 卷

然後 sda3 將被「分割」到以下子磁碟區:
/data:資料子磁碟區
/snapshots:快照子磁碟區
/os/DISTID:發行版 DIST 子磁碟區(一個用於發行版)

每個發行版都會安裝它的 GRUB2,而我會在 UEFI 中載入我需要的 GRUB,這樣每個發行版就不需要知道其他發行版。

我能夠安裝 Arch 和 Funtoo,但無法將 OpenSUSE 設定為安裝到 /os/suse 子磁碟區。
我嘗試了以下方法:

  • 將後者設定為預設子卷(如前所述這裡)並告訴 OpenSUSE 不要格式化該分割區;看起來安裝成功,但無法啟動
  • 將子卷安裝到安裝即時系統中的 /mnt 並告訴 OpenSUSE 忽略這一事實;當嘗試重新掛載分割區進行實際安裝時安裝失敗
  • 在類似於筆記型電腦環境的虛擬機器中安裝 OpenSUSE,然後將整個系統複製到子卷,並對 grub 及其設定進行必要的調整(我必須使用 Arch 或 Funtoo 進行的調整); grub 已加載,但啟動的系統出現內核恐慌

我所寫的 GRUB 的調整意味著以下內容:

  • 子卷中的 chroot(使用 arch-chroot 或gentoo/funtoo 安裝過程
  • 將 grub 安裝在/boot/efiEFI 系統分割區(但保留 GRUB 的資料/boot
  • 運行grub-mkconfig -o /boot/grug/grub.cfg以更新引導程式

有人有什麼想法嗎?我錯過了什麼?

答案1

根據我的經驗,OpenSUSE Leap 42.2 / 42.3 安裝程式無法處理自訂(例如除了 snapper / @-notation 之外)子磁碟區。更糟的是,某些工具(例如引導程式安裝)有問題。例如,在我的例子中,grub 核心指向 /boot/grub...,但從 chroot 更新時它應該只是 /grub..。您可以使用此工具檢查目前設定:https://github.com/arvidjaar/bootinfoscript

無論如何,這是我在安裝後進行設定或用於可啟動備份的一種方法。

避免安裝程式建立數十個子卷,只需安裝在分割區/預設子卷的根目錄中(如果有效)。

安裝完成後,啟動救援系統並

  1. 將已安裝的系統目錄移至所需的子卷,以便在該子卷下擁有常用的 Linux 檔案系統樹。如有必要,也要修復主資料夾。
  2. 修正 /etc/fstab,新增正確的 subvol=/myrootsubvol 選項
  3. 掛載帶子卷的分區(未來/)、掛載boot、掛載boot/efi
  4. 現在在已安裝的子磁碟區之外建立第二個目錄。將所有內容綁定安裝到該目錄中。

    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. 現在使用通常的 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。

  6. 退出 chroot 並按相反順序卸載。再次使用工具檢查 grub2 core 現在是否指向正確的路徑

相關內容