chroot 調整系統 - UEFI

  1. chroot 前先掛載 proc dev sys 目錄。
    [root@dyw1 ~]# mount -t proc /proc /mnt/root/proc/
    [root@dyw1 ~]# mount --rbind /sys /mnt/root/sys/
    [root@dyw1 ~]# mount --rbind /dev /mnt/root/dev
    
  2. chroot 到新系統,先在根目錄上產生空檔案 .autorelabel,讓系統第一次開機時重新標示檔案 SELinux type 。
    [root@dyw1 ~]# chroot /mnt/root
    bash-4.4# touch /.autorelabel
    
  3. 以下幾個檔,除了 /etc/mtab 為掛狀況不用改外,其他檔案跟原系統 vg vg_crt 有關,必須先確定是否需要修改?
    bash-4.4# grep vg_crt -l --exclude-dir=lvm -R /etc 2>/dev/null
    /etc/default/grub
    /etc/sysconfig/grub
    /etc/mtab
    /etc/grub2.cfg
    /etc/grub2-efi.cfg
    /etc/fstab
    
  4. 例如:將 /etc 目錄下所有 vg vg_crt 有關的檔案全部修改成新系統 vg 名稱 vg_cs 。
    bash-4.4# grep vg_crt -l --exclude-dir=lvm -R /etc 2>/dev/null | \
    xarg sed -i 's/vg_crt/vg_cs/g'
    
  5. 查詢 /boot 目錄下跟 vg vg_crt 有關的檔案 。
    bash-4.4# grep -lIR cyber /boot
    /boot/efi/EFI/almalinux/grub.cfg
    /boot/efi/EFI/BOOT/grub.cfg
    /boot/loader/entries/dce60614bb87f47229a75ba1d538484b-0-rescue.conf
    /boot/loader/entries/dce60614bb87f47229a75ba1d538484b-5.14.0-70.22.1.el9_0.x86_64.conf
    /boot/grub2/grub.cfg
    
  6. 將 /boot 目錄中所有檔案中的 vg_crt ,改成新系統 vg 名稱 vg_cs 。
    bash-4.4# grep -lIR vg_crt /boot | xarg sed -i 's/vg_crt/vg_cs/g'
    
  7. 查詢原系統開機使用 UUID 的分割區。
    bash-4.4# grep UUID /etc/fstab
    UUID="058b18ea-9ae1-4d4e-be1e-44195edec185" /boot xfs    defaults       1 2
    UUID="8C7E-75C0"         /boot/efi           vfat    defaults       1 2
    
  8. 查詢新系統要掛載在 /boot 及 /boot/efi 的分割區之 UUID。
    bash-4.4# blkid /dev/sdb2
    /dev/sdb2: UUID="6a58db34-95e8-4c84-aea1-8ee1d6c3d060" BLOCK_SIZE="1024" 
    TYPE="xfs" PARTLABEL="BIOS boot partition"
    PARTUUID="6e18a25d-c48c-40ec-98cd-64851a928dd9"
    bash-4.4# blkid /dev/sdb2
    /dev/sdb1: SEC_TYPE="msdos" UUID="ED77-1371" BLOCK_SIZE="512" TYPE="vfat" 
    PARTLABEL="EFI system partition" PARTUUID="cda6653d-5a61-428f-a7fa-3fb7eb86e9bd"
    
  9. 更新掛載 /boot 及 /boot/efi 的分割區之 UUID。
    bash-4.4# sed -i 's/old_boot_uuid/new_boot_uuid/g' /etc/fstab
    bash-4.4# sed -i 's/old_efi_uuid/new_efi_uuid/g' /etc/fstab
    
  10. 查詢更新後的掛載 /boot 及 /boot/efi 的分割區之 UUID。
    bash-4.4# grep UUID /etc/fstab
    UUID="6a58db34-95e8-4c84-aea1-8ee1d6c3d060" /boot  xfs    defaults      1 2
    UUID="ED77-1371"         /boot/efi           vfat    defaults       1 2
    
  11. /boot 目錄下有很多開機檔案,一樣會用到 /boot 及 /boot/efi 掛載點的 UUID,一併更新。
    bash-4.4# grep 'old_boot_uuid' -R /boot -l
    /boot/efi/EFI/almalinux/grub.cfg
    /boot/efi/EFI/BOOT/grub.cfg
    /boot/grub2/grub.cfg
    bash-4.4# grep 'old_boot_uuid' -lR /boot | xarg sed -i 's/old_boot_uuid/new_boot_uuid/g'
    bash-4.4# grep 'old_efi_uuid' -lR /boot | xarg sed -i 's/old_efi_uuid/new_efi_uuid/g'
    
  12. /boot/loader/entries/ 目錄存放開機選項。
    bash-4.4# ls /boot/loader/entries/
    fb2be566df51b1048007ce7567d5226a-0-rescue.conf
    fb2be566df51b1048007ce7567d5226a-5.14.0-1.el8.elrepo.x86_64.conf
    
  13. 如果依以上方式修改檔案,以下步驟可以不用做。
  14. 安裝 efi 開機套件。
    bash-4.4# dnf install grub2-efi-x64
    bash-4.4# dnf install shim
    
  15. 產生開機選單。
    bash-4.4# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
    Generating grub configuration file ...
    Adding boot menu entry for EFI firmware configuration
    done