安装时我忘记在 LUKS 容器中创建逻辑卷组。我不会重装系统。那么如何在LUKS容器中创建LVG而不丢失数据呢?
我的计划是:
安装
lvm2
包备份
/
到rsync
另一个驱动器创建我需要的逻辑卷,例如
VolumeGroup/root
,VolumeGroup/home
VolumeGroup/swap
将所有数据从备份传输到
VolumeGroup/root
将内核参数从 更改
cryptdevice=PARTUUID=...:root root=/dev/mapper/root
为cryptdevice=PARTUUID=...:cryptlvm root=/dev/VolumeGroup/root
添加
lvm
钩子到HOOKS中/etc/mkinitcpio.conf
chroot 进入新根
重新生成 fstab
跑步
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 元数据腾出空间。但无论如何,它的风险已经足够大,你必须备份所有内容,所以你的方法更好。