删除 apt-snapshot-* 安全吗?

war*_*iuc 8 btrfs

我想我在决定使用 Btrfs 时犯了一个错误。我没有使用它的任何功能,但现在遇到空间不足的问题。我做了

sudo btrfs balance start / -v
Run Code Online (Sandbox Code Playgroud)

正如某些来源所建议的那样,但仍然没有多少可用空间:

$ sudo btrfs fi df /    
Data, single: total=102.00GiB, used=99.55GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.00GiB, used=762.44MiB
unknown, single: total=256.00MiB, used=0.00
Run Code Online (Sandbox Code Playgroud)

一位消息人士建议删除快照。我找到了一位候选人:

$ sudo btrfs subvolume list /
ID 257 gen 390597 top level 5 path @
ID 258 gen 390597 top level 5 path @home
ID 317 gen 390480 top level 5 path @apt-snapshot-release-upgrade-utopic-2014-10-23_20:38:40
Run Code Online (Sandbox Code Playgroud)

删除@apt-snapshot-release-upgrade-utopic-*快照是否安全?

注意:我正在使用 eCryptFS(不确定在这种情况下这是否重要)。

mch*_*hid 5

我已经看过很多关于如何回滚到这些快照之一的教程,但是,在较新版本的 ubuntu(在 15.04 上测试)上,您不再需要挂载文件系统来回滚到通过apt-btrfs-snapshot.

同样,从正在运行的系统中运行这些命令,而不是像管理 btrfs 快照时通常那样的挂载分区。

赶紧跑:

sudo apt-btrfs-snapshot list
Run Code Online (Sandbox Code Playgroud)

列出可用的快照,然后运行以下命令以恢复到较旧的快照:

sudo apt-btrfs-snapshot set-default @<name-of-snapshot>
Run Code Online (Sandbox Code Playgroud)

对于这种情况,您可能希望将默认值设置为现有快照。

重新启动以使更改生效。

此外,删除快照现在更加可靠和简单。同样,要列出快照,请运行:

sudo apt-btrfs-snapshot list
Run Code Online (Sandbox Code Playgroud)

然后,要删除快照,请运行:

sudo apt-btrfs-snapshot delete @<name-of-snapshot>
Run Code Online (Sandbox Code Playgroud)

例如,要按超过两天的日期列出,请运行:

sudo apt-btrfs-snapshot list-older-than 2d
Run Code Online (Sandbox Code Playgroud)

例如,要删除超过两天的所有快照,请运行:

sudo apt-btrfs-snapshot delete-older-than 2d
Run Code Online (Sandbox Code Playgroud)

很酷的一点是,您的旧默认设置不会被删除,因此如果您有一组设置,您仍然可以回滚到那个默认设置。

删除快照应立即生效。


如果启动后出现“设备上没有空间”错误,您可以连接一个空白的 USB 笔式驱动器或外部驱动器,然后使用命令行将驱动器挂载到 /tmp。

在 /tmp 安装驱动器后,您应该有足够的可用空间来运行:

sudo apt-btrfs-snapshot delete-older-than 
Run Code Online (Sandbox Code Playgroud)


war*_*iuc 1

看起来很安全。我见过其他人 尝试这样做,但事实证明事情并不那么简单。

首先,运行以下命令查看哪个分区是您的 btrfs 分区(假设您只有一个 btrfs 分区):

lsblk -o NAME,FSTYPE | grep btrfs| grep -o sda.
Run Code Online (Sandbox Code Playgroud)

下面以使用/dev/sda3为例。

我是这样做的:

# mkdir /mnt/tmp
# mount /dev/sda3 /mnt/tmp
# ls /mnt/tmp         
@  
@apt-snapshot-release-upgrade-utopic-2014-10-23_20:38:40  
@home
Run Code Online (Sandbox Code Playgroud)

这是正确的分区:

# btrfs subvol delete /mnt/tmp/@apt-snapshot-release-upgrade-utopic-2014-10-23_20:38:40 
Transaction commit: none (default)
Delete subvolume '/mnt/tmp/@apt-snapshot-release-upgrade-utopic-2014-10-23_20:38:40'

# btrfs subvol list /
ID 257 gen 397869 top level 5 path @
ID 258 gen 397869 top level 5 path @home
Run Code Online (Sandbox Code Playgroud)

没有释放太多空间:

vic-UX32VD# df
Filesystem         1K-blocks      Used Available Use% Mounted on
/dev/sda3          120729076 117384216   1996232  99% /
Run Code Online (Sandbox Code Playgroud)

重新启动有帮助:

Filesystem         1K-blocks      Used Available Use% Mounted on
/dev/sda3          120729076 109894736   9187296  93% /
Run Code Online (Sandbox Code Playgroud)