从普通 LUKS 迁移到 LUKS 上的 LVM

从普通 LUKS 迁移到 LUKS 上的 LVM

安装时我忘记在 LUKS 容器中创建逻辑卷组。我不会重装系统。那么如何在LUKS容器中创建LVG而不丢失数据呢?

我的计划是:

  1. 安装lvm2

  2. 备份/rsync另一个驱动器

  3. 创建我需要的逻辑卷,例如VolumeGroup/rootVolumeGroup/homeVolumeGroup/swap

  4. 将所有数据从备份传输到VolumeGroup/root

  5. 将内核参数从 更改cryptdevice=PARTUUID=...:root root=/dev/mapper/rootcryptdevice=PARTUUID=...:cryptlvm root=/dev/VolumeGroup/root

  6. 添加lvm钩子到HOOKS中/etc/mkinitcpio.conf

  7. chroot 进入新根

  8. 重新生成 fstab

  9. 跑步mkinitcpio -P

可能的实施:

### On the primary OS

pacman -S lvm2
# Add lvm2 hook to /etc/mkinitcpio.conf, to it looks like this:
# HOOKS=(base udev autodetect keyboard keymap modconf block encrypt filesystems lvm2 fsck)
mkinitcpio -P

### Reboot into live-USB now

### My existing layout:
###
###  nvme0n1     259:0    0 931.5G  0 disk  
###  ├─nvme0n1p1 259:1    0   512M  0 part  /boot
###  └─nvme0n1p2 259:2    0   931G  0 part  
###    └─root    254:0    0   931G  0 crypt /
   
### mounting necessary partitions

rsync -aAXHv /mnt/ /path/to/backup    

wipefs -a /dev/nvme0n1p2

cryptsetup luksFormat /dev/nvme0n1p2
cryptsetup open /dev/nvme0n1p2 cryptlvm
pvcreate /dev/mapper/cryptlvm
vgcreate VolumeGroup /dev/mapper/cryptlvm
lvcreate -L 16G  VolumeGroup -n swap
lvcreate -L 100G VolumeGroup -n root
lvcreate -l 100%FREE VolumeGroup -n home
lvreduce -l -256M /dev/VolumeGroup/home

mkfs.ext4 /dev/VolumeGroup/root
mkfs.ext4 /dev/VolumeGroup/home
mkswap /dev/VolumeGroup/swap

mount /dev/VolumeGroup/root /mnt
mount --mkdir /dev/VolumeGroup/home /mnt/home
swapon /dev/VolumeGroup/swap

rsync -aAXHv /path/to/backup /mnt

### Now editing kernel parameters so (dots are placeholder for real PARTUUID)
### cryptdevice=PARTUUID=...:cryptlvm root=/dev/VolumeGroup/root
### (*I use systemd-boot, so I change /mnt/etc/kernel/cmdline*)

arch-chroot /mnt
genfstab -U / > /etc/fstab
mkinitcpio -P

### Now reboot and hope all will work

它会起作用吗?

答案1

它应该有效。

archlinux mkinitcpio 钩子是lvm2,不是lvm。首先添加这个钩子。如果尚不存在 LVM,则不会造成任何损害。以后就少担心一件事了。

正在运行的系统的备份可能不一致。使用--exclude或 时-x,它可能不完整。考虑使用绑定安装/proc /sys /dev,或者从 Live/Rescue 环境中执行此操作(如果您一开始就没有安装它,则不必排除)。

另一种选择是就地转换为 LVM,有一个关于该问题的德语教程(“LVM nachträglich einrichten” - ubuntuusers.de Wiki)。它的工作原理是重新定位第一个范围,为 LVM 元数据腾出空间。但无论如何,它的风险已经足够大,你必须备份所有内容,所以你的方法更好。

相关内容