我有一个 Btrfs 分区,它在顶层有一个子卷 ( /root
)。它subvol=root
在 /etc/fstab 中有选项。
每周,我都会/root/snapshots/...
使用只读快照:
btrfs subvolume snapshot -r / /snapshots/"$(date --rfc-3339=date)"
(路径没有,/root
因为它被安装为subvol=root
)。
现在,假设出现问题,我想从快照恢复我的根子卷,我从 USB 磁盘启动并像/mnt/disk
没有那样挂载分区subvol=root
。如果我尝试运行:
btrfs subvolume snapshot /mnt/disk/root/snapshots/2015-05-01 /mnt/disk/root
它创建新的子卷 as/mnt/disk/root/2015-05-01
而不是替换/mnt/disk/root/
。如果我尝试先通过运行删除它
btrfs subvolume delete /mnt/disk/root
它给出了错误消息:
ERROR: cannot delete '/mnt/disk/root' - Directory not empty
有没有办法做到这一点?或者我应该养成创建快照的习惯外部正在快照的子卷?
答案1
我认为这是你出错的地方:
如果我尝试运行:
btrfs subvolume snapshot /mnt/disk/root/snapshots/2015-05-01 /mnt/disk/root
它将新子卷创建为 /mnt/disk/root/2015-05-01,而不是替换 /mnt/disk/root/。
btrfs subvolume snapshot
习惯于创造第一个参数的快照,并将其放置在第二个参数指定的目录中。听起来你很期待它代替 /mnt/disk/root
反而。
在尝试覆盖/mnt/disk/root
子卷之前,您需要移动或删除它(例如mv /mnt/disk/root /mnt/disk/root-backup-during-restore
)。然后做:
btrfs subvolume snapshot /mnt/disk/root/snapshots/2015-05-01 /mnt/disk/
进而:
mv /mnt/disk/2015-05-01 /mnt/disk/root