我有一个带有 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 的另一台机器,则它可能很有用。这样,海盗默认情况下会挂载子卷,而不是根子卷。