Como recursiva excluir instantâneo btrfs?

0

Como posso excluir um instantâneo que contém em si outros instantâneos? O% normalsudo btrfs subvolume delete dará um erro.

    
por Dan 08.02.2015 / 23:04

2 respostas

0

Exclusão de subvolume recursiva (capturas instantâneas são apenas subvolumes somente leitura) ainda não está disponível no btrfs-tools. Para excluir o nível superior, você deve primeiro excluir os níveis inferiores.

Você pode obter uma lista dos subvolumes com o comando btrfs subvolume list . A opção -o deve permitir que você filtre os resultados apenas para os que você gosta, mas fique à vontade para experimentar. Você deve então poder descer a lista e excluir todos os sub-subvolumes, após os quais você poderá excluir o subvolume de nível superior e pronto.

    
por Perkins 15.10.2015 / 22:44
0

Infelizmente btrfs subvolume list odeia sanidade. Aqui está um script de protótipo.

Funciona em um subvolume no diretório atual, assume que tmp não existe, tem um comportamento preocupantemente inseguro em "caracteres especiais" ( | ou caracteres de expressão regular em diretórios parent ) , descobriu bugs e nenhum comentário. O problema de regex provavelmente deve ser evitado reescrevendo para usar a correspondência de cadeia bash em vez de sed . Se a saída de btrfs subvolume list mudar em algum momento, você vai comer você.

#!/bin/sh
# DISCLAIMER: see above
set -e

function my_ls_pwd() {
    btrfs sub list -o "$1" | cut -d " " -f 9
}

btrfs sub create tmp
btrfs sub create tmp/tmp
BTRFS_PWD=$(my_ls_pwd tmp | sed -e 's|tmp/tmp$||')
btrfs sub del tmp/tmp
btrfs sub del tmp

# 'btrfs sub list' shows full path within the FS;
# we want path relative to the working directory
function my_ls() {
    my_ls_pwd $1 | sed -e "s|^$BTRFS_PWD||"
}

# Recursive subvolume delete
function my_deltree() {
    my_ls "$1" | while read i; do
        my_deltree "$i"
    done
    btrfs sub del "$1"
}
my_deltree $1
    
por sourcejedi 15.01.2016 / 15:25