在 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

相关内容