BTRFS-恢复到快照

BTRFS-恢复到快照

我有一个带有 btrfs 文件系统的磁盘,该磁盘安装在根目录上。

$ sudo btrfs subvol show  /media/qkiz/Corsair/
/media/qkiz/Corsair is btrfs root

此根是此上的快照。

$ sudo btrfs subvol show  /media/qkiz/Corsair/snapshot/
/media/mkukielka/Corsair/snapshot
    Name:           snapshot
    uuid:           94d5d0fa-aaf4-d84c-b716-d5121accf7a0
    Parent uuid:        -
    Creation time:      2015-12-02 13:31:18
    Object ID:      258
    Generation (Gen):   23
    Gen at creation:    23
    Parent:         5
    Top Level:      5
    Flags:          -
    Snapshot(s):

我在根文件系统上进行了更改,现在我想返回快照。如果我更改默认子卷:

$ sudo btrfs subvol set-default 258 /media/qkiz/Corsair/

我可以从快照中看到状态,但磁盘空间仍被根目录使用。如何删除根目录并以根用户身份使用快照?

答案1

为了让您的生活更轻松,我建议仅使用根 btrfs 子卷 (id=5) 来管理其他子卷和快照。不要在根子卷上存储大量数据,也不要将其引用到脚本等中。这将使您更容易制作快照、执行回滚等。

例如,在 fstab 中:

# Root of btrfs volume. Used for volume management.
# Do not reference /mnt/root-XYZ/ in scripts or software.
LABEL=XYZ /mnt/root-XYZ btrfs noauto,subvolid=5

# Software using data on this subvolume should reference this path:
#     /media/qkiz/Corsair/...
# and NOT /mnt/root-XYZ/corsair/...
#
LABEL=XYZ /media/qkiz/Corsair btrfs noauto,subvol=corsair

(你需要将 XYZ 更改为你实际的 btrfs 标签)

要实现这一点,您可以创建根子卷的快照,并将其命名为 corsair。可能还会创建 corsair 的只读快照,用于备份。然后从根子卷中删除文件。例如:

umount /mnt/qkiz/Corsair
mount /mnt/root-XYZ
cd /mnt/root-XYZ
btrfs subvol snap . corsair
btrfs subvol snap -r corsair corsair-YYMMDD

检查 corsair-YYMMDD/ 是否包含您的重要数据,然后从根子卷中删除数据:

rm -rf ./datafiles....

最后,挂载新的子卷:

mount /mnt/qkiz/Corsair

你可以将你的“corsair”子卷设为默认如果需要,可以使用 subvolume,但这并不是绝对必要的。如果这是便携式驱动器,并且您将其移动到具有不同 fstab 的另一台机器,则它可能很有用。这样,海盗默认情况下会挂载子卷,而不是根子卷。

相关内容