使用 luks 加密磁碟區上的 root 更新 chroot 環境中的 grub

使用 luks 加密磁碟區上的 root 更新 chroot 環境中的 grub

我想將一個系統(我使用的所有系統都基於 Ubuntu 16.04)從未加密的分割區移至 luks 加密的分割區(在同一磁碟上)。

為此,我建立了一個 LUKS 加密邏輯卷,其中包含根分割區和交換分割區。然後我使用將現有分區的內容複製到新的根分區dd。我已檢查此新根目錄是否包含正確的目錄結構,並對分割區執行了磁碟掃描。

計劃是 chroot 到新系統並從那裡更新 grub。

詳細地說,我正在嘗試以下操作(這是 Ubuntu 幫助頁面和如果 / 分割區已加密且有單獨的 /boot 分割區,如何從 liveUSB 重新安裝 grub?):

# Unlock crypto file system
sudo cryptsetup luksOpen /dev/sda2 lukslvm 

sudo vgscan 
sudo vgchange -ay
sudo svscan

# Mount root file system
sudo mount /dev/mapper/vgubuntu-root /mnt
# Mount boot filesystem
sudo mount /dev/sda1 /mnt/boot
# Mount required internal file systems
sudo mount -o rbind /dev /mnt/dev
sudo mount -t proc proc /mnt/proc
sudo mount -t sysfs sys /mnt/sys
## Additional LVM directories (for older systems)
sudo mount -o rbind /run/lvm /mnt/run/lvm
sudo mount -o rbind /run/lock/lvm /mnt/run/lock/lvm
# Enable DNS resolution
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
# Change to the encrypted system
sudo chroot /mnt /bin/bash

# Install required software
sudo apt-get install cryptsetup lvm2

# Edit /etc/crypttab
sudo printf "lukslvm\tUUID=%s\tnone\tluks\n" "$(cryptsetup luksUUID /dev/sda2)" | tee -a /etc/crypttab

# /etc/modules editieren
sudo echo "dm-crypt" >> /etc/modules

# Update kernel initramfs
sudo update-initramfs -u -k all

echo "Edit /etc/default/grub as GRUB_CMDLINE_LINUX_DEFAULT=\"kopt=root=/dev/mapper/vgubuntu-root\""
sudo vi /etc/default/grub

sudo update-grub

# Leave chroot environment
exit
# Write buffers to disk
sudo sync
# Unmount file systems
sudo umount /mnt/run/lvm
sudo umount /mnt/run/lock/lvm
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/boot
#
sudo swapoff -a

不幸的是,它並沒有以這種方式運作,因為update-grub似乎沒有找到安裝在加密分割區上的系統。它只能找到不同分割區上的現有安裝/dev/sda3

我缺什麼?

答案1

我看起來您忘記創建正確的 /etc/mtap 文件

sudo cp /proc/mounts /mnt/etc/mtab

https://wiki.sabayon.org/index.php?title=HOWTO:_Restore_Grub2

相關內容