Cómo eliminar subvolúmenes btrfs con <FS_TREE> en su nombre

9

Tengo un montón de instantáneas btrfs así:

20:17:37 [root@galaxy /]$ btrfs subvolume list -a / |grep apt
ID 271 gen 348 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:44:30
ID 272 gen 352 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:46:25
ID 273 gen 361 top level 5 path <FS_TREE>/@apt-snapshot-2013-04-17_21:51:13
... # lots more

Me gustaría deshacerme de ellos. Así que lo intenté

20:21:31 [root@galaxy ~]$ btrfs subvolume delete '/<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '/<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
20:21:36 [root@galaxy ~]$ btrfs subvolume delete '<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '<FS_TREE>/@apt-snapshot-2013-04-17_21:44:30'
20:21:43 [root@galaxy ~]$ btrfs subvolume delete '/@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '/@apt-snapshot-2013-04-17_21:44:30'
20:21:47 [root@galaxy ~]$ btrfs subvolume delete '@apt-snapshot-2013-04-17_21:44:30'
ERROR: error accessing '@apt-snapshot-2013-04-17_21:44:30'

¿Cuál es la sintaxis correcta para eliminar estas instantáneas?

Cactus
fuente

Respuestas:

10

Pude eliminar estas instantáneas montando primero todo el volumen btrfs (no el @subvolumen) y luego trabajando desde allí:

# mount /dev/mapper/whatever /mnt -o subvol=/
# ls /mnt
@
@apt-snapshot-2013-04-17_21:44:30
...

Entonces, en este punto, todos los subvolúmenes (incluidos los funky apt-snapshot) son visibles /mnt, por lo que podemos eliminarlos:

# btrfs subvol delete /mnt/@apt-snapshot-2013-04-17_21:44:30
# umount /mnt
Cactus
fuente
2
¿Tuviste que usar un CD en vivo para esto?
mlissner
2
No, pude hacer esto mientras ejecutaba el sistema desde @el mismo sistema de archivos.
Cactus
1

La forma más fácil de hacer esto es usar los apt-btrfs-snapshotcomandos integrados :

A diferencia de la eliminación normal de instantáneas, no es necesario montar el sistema de archivos para eliminar instantáneas.

Primero, enumere las apt-btrfs-snapshotinstantáneas disponibles con el siguiente comando:

sudo apt-btrfs-snapshot list

Aquí hay un ejemplo de la salida de ese comando:

@apt-snapshot-old-root-2015-10-19_20:20:10
@apt-snapshot-2015-10-28_19:00:46
@apt-snapshot-2015-10-28_19:09:14
@apt-snapshot-2015-10-29_04:40:07
@apt-snapshot-2015-10-29_06:35:57
@apt-snapshot-2015-10-29_07:03:39
@apt-snapshot-2015-10-30_03:49:05
@apt-snapshot-2015-10-30_17:53:59

Para eliminar la instantánea @apt-snapshot-2015-10-30_17:53:59, ejecute:

sudo apt-btrfs-snapshot delete @apt-snapshot-2015-10-30_17:53:59

También puede eliminar varias instantáneas por fecha. Aquí hay un ejemplo de un comando que eliminaría todas las instantáneas que tengan más de 0 días.

sudo apt-btrfs-snapshot delete-older-than 0d   

Aquí hay un ejemplo de la salida de ese comando:

Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-odfe0o4g/@apt-snapshot-old-root-2015-10-19_20:20:10'
ERROR: cannot delete '/tmp/apt-btrfs-snapshot-mp-odfe0o4g/@apt-snapshot-old-root-2015-10-19_20:20:10' - Directory not empty
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-b2zv18qr/@apt-snapshot-2015-10-28_19:00:46'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-zjglvefe/@apt-snapshot-2015-10-28_19:09:14'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-lj3v74qa/@apt-snapshot-2015-10-29_04:40:07'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-vztc82zr/@apt-snapshot-2015-10-29_06:35:57'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-q0ou8e24/@apt-snapshot-2015-10-29_07:03:39'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-dw8eq0vv/@apt-snapshot-2015-10-30_03:49:05'
Delete subvolume (no-commit): '/tmp/apt-btrfs-snapshot-mp-vgo2yuf2/@apt-snapshot-2015-10-30_17:53:59'

Como puede ver, se eliminaron las instantáneas disponibles. Sin embargo, la instantánea más antigua "raíz antigua" no se eliminó y aún se puede utilizar para revertirla aunque sea mucho más antigua que 0 días.

Ejecute el siguiente comando para obtener una lista completa de características:

apt-btrfs-snapshot --help
mchid
fuente
Acabo de intentar esto y sudo apt-btrfs-snapshot delete-older-than 30dprocedí a eliminar TODAS las instantáneas ...
Cactus
@Cactus si todas tus instantáneas tienen más de 30 días, eso es lo que debería suceder. Para verificar esto antes de comenzar, puede ejecutar: sudo apt-btrfs-snapshot list-older-than 30dpara ver qué es anterior a 30 días.
mchid
@Cactus, sin embargo, oldroot no debe eliminarse y aún puede usarse como punto de restauración.
mchid
Tenga en cuenta que apt-btrfs-snapshotno está "integrado" en todas las distribuciones. En particular, parece no estar disponible en los repositorios de Debian.
user44400