Como excluir um diretório com vários subvolumes btrfs?

9

Meu sistema de arquivos raiz está em uma partição btrfs. Meu /chrootdiretório possui vários subvolumes btrfs, o que me impede de excluí-lo rm -rf /chroot. Em uma tentativa de excluir todos os subvolumes, tentei listar apenas os subvolumes abaixo /chrootusando o -o, que a página do manual diz "imprima apenas subvolumes abaixo do caminho especificado".

# btrfs subvolume list -o /chroot
ID 593 gen 6616 top level 5 path chroot/base-devel/root
ID 594 gen 6618 top level 5 path chroot/multilib-devel/root
ID 595 gen 6620 top level 5 path chroot/base/root
ID 597 gen 6624 top level 5 path chroot/twm/root
ID 599 gen 6628 top level 5 path chroot/lxde/root
ID 601 gen 6655 top level 5 path chroot/wheezy/root
ID 602 gen 6684 top level 5 path chroot/sid/root
ID 603 gen 6862 top level 5 path var/lib/machines

Para minha surpresa, isso retorna o subvolume em / var / lib / macines (que eu não quero excluir). Isso me leva a 3 perguntas:

  1. O que a -oopção faz?

  2. Como listar apenas subvolumes abaixo /chroot

  3. Como posso excluir um diretório com um número desconhecido de subvolumes?

Estou executando o Arch Linux com o kernel 4.2.5 e o btrfs-progs v4.3.1

StrongBad
fonte
Qual kernel você está executando e qual versão das ferramentas btrfs você instalou? Isso provavelmente é um bug nas ferramentas.
David King
@DavidKing veja a edição. Estou executando um kernel bastante recente e o btrfs-progs.
StrongBad
Eu arquivaria um relatório de erro com o btrfs. Nesse meio tempo, você poderia canalizar a lista de diretórios grep chroot?
David King

Respostas:

2

O comando a seguir remove todos os subvolumes no /chrootdiretório:

ls /chroot | xargs btrfs subvolume delete

Caso haja arquivos ou diretórios que não sejam subvolumes btrfs, um erro será impresso, mas eles não serão removidos.

(Testado no Debian com o kernel 4.6.0 e o btrfs-progs v3.17)

Bram
fonte
0

Para responder à sua terceira pergunta, você pode usar o btrfs-rm .

Eu o uso em uma instalação do docker em execução no btrfs, para limpar todo o diretório do docker regularmente. Use por sua conta e risco, mas funciona para mim (TM).

sudo ./btrfs-rm  /var/lib/docker/*   # create clean empty dir for docker

Faça o download: https://github.com/DirkTheDaring/btrfs-rm

Mandragor
fonte