将 Btrfs 快照从子目录恢复到父目录

将 Btrfs 快照从子目录恢复到父目录

我有一个 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

相关内容