我已经建立了一个备份服务器,用于每天创建 BTRFS/
快照/backup/
。
btrfs subvolume snapshot -r / /backup/$(date +%s) # simplified example
我发现这有问题,因为快照会因 中的临时卷而变得臃肿/var/lib/docker
。现在我想/home
仅创建 的快照。但这不起作用:
# btrfs subvolume snapshot -r /home /backup/$(date +%s)
ERROR: Not a Btrfs subvolume: Invalid argument
所以我明白我需要创建/home
一个子卷。我不确定这是否意味着/home
必须单独安装。我看过其他问题,例如如何制作 btrfs 快照?但他们已经/home
为此做好了准备。我该如何迁移?我需要采取哪些步骤?
我当前的设备:
# blkid
/dev/sda1: UUID="39520d46-2e30-4b51-b093-2a3671eb8f52" TYPE="swap" PARTUUID="c9b515af-26c9-4809-aee1-680ca5ee7153"
/dev/sda2: UUID="3a994a01-9d92-4e67-8440-284ce24465f8" UUID_SUB="cbb73892-5f50-40f2-b411-37307bcbefc4" TYPE="btrfs" PARTUUID="462e3ffe-2c99-4481-89aa-b3f13f3985dc"
/dev/sdb: UUID="3a994a01-9d92-4e67-8440-284ce24465f8" UUID_SUB="b78ffe6c-c078-4cc5-b4c7-dd3874251394" TYPE="btrfs"
/dev/sda3: PARTUUID="63c9d4dd-0a85-40d6-9e10-3eaffcba4b49"
该/
卷已镜像到/dev/sda2
和/dev/sdb
。
答案1
您无法创建目录的快照,但只能创建子卷的快照。
/home
但是将目录转换为单独的快照非常容易。
假设您的/
是/dev/sda2
。
请先创建系统备份,以防万一!
要将您的/home
LiveUSB 启动转换为子卷并执行以下操作:
sudo mount /dev/sda2 /mnt
sudo btrfs sub create /mnt/@
sudo btrfs sub create /mnt/@home
sudo mv /home /mnt/@home
sudo mv / /mnt/@
现在您已将您的移至/
子@
卷并/home
移至@home
子卷。
现在您需要编辑/mnt/etc/fstab
并添加挂载选项以正确挂载卷。添加subvol=@
到挂载的行/
。并创建类似的行,如下/home
所示:
UUID=3a994a01-9d92-4e67-8440-284ce24465f8 / btrfs subvol=@ 0 0
UUID=3a994a01-9d92-4e67-8440-284ce24465f8 /home btrfs subvol=@home 0 0
最后一件事是 chroot 到系统并更新grub
:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
sudo update-grub
exit
sudo umount /mnt
如果您所有操作都正确并且我没有犯错,您应该重新启动到正常工作的系统。
答案2
更正: $ sudo mv /home /mnt/@home 应该读 $ sudo mv /home/* /mnt/@home 否则你最终会得到 $ ls -r/home 家 $ ls -r /home/home 用户1 用户2 用户2.. 这将阻止 GDM 登录..