如何删除 btrfs 子卷?

mli*_*ner 5 btrfs

我有一个要删除的快照:

04:03:21::mlissner@pounamu::~ 
? sudo btrfs subvolume list /
ID 257 gen 267078 top level 5 path @badroot
ID 258 gen 267151 top level 5 path @home
ID 422 gen 267151 top level 5 path @
Run Code Online (Sandbox Code Playgroud)

那个叫@badroot 的人很糟糕,必须去。但:

04:03:23::mlissner@pounamu::~ 
? sudo btrfs subvolume delete \@badroot
ERROR: error accessing '@badroot'
04:03:31::mlissner@pounamu::~ 
Run Code Online (Sandbox Code Playgroud)

所以我不知道从哪里开始。我尝试阅读帮助文件:

? sudo btrfs subvolume delete --help
usage: btrfs subvolume delete <subvolume> [<subvolume>...]

    Delete subvolume(s)
Run Code Online (Sandbox Code Playgroud)

但这也无济于事。也许互联网的好心人有想法。

Cel*_*ada 17

第一种可能性

似乎您指的是@badroot使用错误的路径。

如果我正确阅读了您的 shell 提示,那么您当前的目录是~,您的主目录 — 可能是/home/mlissner或类似的。您将子卷的路径指定为相对路径(不以 开头/),因此您实际上是在要求删除诸如/home/mlissner/@badroot... 之类的不存在的内容。

尝试使用绝对路径:

sudo btrfs subvolume delete /@badroot
Run Code Online (Sandbox Code Playgroud)

第二种可能

也许您在 上安装了一个非默认子卷/,例如编号 422、@. 在这种情况下,只有该子卷出现在/该路径下,您看不到该路径上方的任何内容,包括其他两个子卷以及位于 Btrfs 根目录中的任何常规文件。

在这种情况下,将真正的 Btrfs 根挂载到其他位置,以便您可以访问其内容。Btrfs 的真正根被称为子卷 ID 0(并且未由 列出btrfs subvolume list)。查找或创建空闲挂载点并挂载如下:

mount -o subvolid=0 /dev/some-device /mnt
Run Code Online (Sandbox Code Playgroud)

现在您应该能够看到/mnt/@, /mnt/@badroot, /mnt/@home, 以及/mnt. 您可以/mnt/@badroot照常删除子卷。