Como excluir subvolumes btrfs com <FS_TREE> no nome

9

Eu tenho um monte de snapshots btrfs assim:

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

Eu gostaria de me livrar deles. Então eu tentei

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'

Qual é a sintaxe correta para excluir esses instantâneos?

Cacto
fonte

Respostas:

10

Consegui excluir esses instantâneos montando primeiro todo o volume btrfs (não o @subvolume) e depois trabalhando a partir daí:

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

Portanto, neste ponto, todos os subvolumes (incluindo os descolados apt-snapshot) estão visíveis /mnt, para que possamos excluí-los:

# btrfs subvol delete /mnt/@apt-snapshot-2013-04-17_21:44:30
# umount /mnt
Cacto
fonte
2
Você precisou usar um CD ao vivo para isso?
mlissner
2
Não, consegui fazer isso enquanto executava o sistema a partir @do mesmo sistema de arquivos.
Cactus
1

A maneira mais fácil de fazer isso é usar os apt-btrfs-snapshotcomandos internos:

Diferente da exclusão normal da captura instantânea, você não precisa montar o sistema de arquivos para excluir as capturas instantâneas.

Primeiro, liste os apt-btrfs-snapshotinstantâneos disponíveis usando o seguinte comando:

sudo apt-btrfs-snapshot list

Aqui está um exemplo da saída desse 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 excluir o instantâneo @apt-snapshot-2015-10-30_17:53:59, execute:

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

Você também pode excluir vários instantâneos por data. Aqui está um exemplo de um comando que excluiria todos os instantâneos anteriores a 0 dias.

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

Aqui está um exemplo da saída desse 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 você pode ver, os instantâneos disponíveis foram excluídos. No entanto, o instantâneo mais antigo "raiz antiga" não foi excluído e ainda pode ser usado para reverter, mesmo que seja muito mais antigo que 0 dias.

Execute o seguinte comando para obter uma lista completa de recursos:

apt-btrfs-snapshot --help
mchid
fonte
Eu apenas tentei isso, e sudo apt-btrfs-snapshot delete-older-than 30dcomeçou a apagar TODAS instantâneos ...
Cactus
@Cactus Se todos os seus instantâneos tiverem mais de 30 dias, é isso que deve acontecer. Para verificar isso antes de começar, você pode executar: sudo apt-btrfs-snapshot list-older-than 30dpara ver o que tem mais de 30 dias.
Mchid
@Cactus, no entanto, o oldroot não deve excluir e ainda pode ser usado como um ponto de restauração.
Mchid
Observe que apt-btrfs-snapshotnão é "incorporado" em todas as distribuições. Em particular, parece não estar disponível nos repositórios Debian.
user44400