Teste se o subvolume btrfs existir

0

Eu tenho um problema em um procedimento bash, que deve portar meu backup de disco rsync antigo (e archive) para o meu futuro backup de snapshot btrfs.

Eu quero usar a linha:

 # btrfs subvolume snapshot /targetdir/@monthly.9 /targetdir/@monthly.8

Se o instantâneo /targetdir/@monthly.8 não existir, então ele será criado, como eu quero.

Mas se /targetdir/@monthly.8 já estiver lá, então /targetdir/@monthly.8/@onthly.9 será criado em seu lugar.

Estou sentindo falta de um teste para a existência, por exemplo:

# [[ -bsnap <snap-path> ]] # =TRUE if <snap-path> exists and is a snap!

Como posso superar esse problema?

    
por prometheos 08.03.2018 / 18:54

2 respostas

0

Eu suponho que você não queira executar btrfs subvolume snapshot … se /targetdir/@monthly.8 existir, independentemente do que seja. Apenas teste se existe:

[ -e /targetdir/@monthly.8 ]

ou não existe

[ ! -e /targetdir/@monthly.8 ]

o que for mais útil. Se existe quando não deveria então btrfs subvolume delete it. Somente se este comando retornar ERROR: not a subvolume , preocupe-se com o que mais o objeto é. Eu aconselho você a organizar seu fluxo de trabalho, subvolumes, pontos de montagem, diretórios e suas permissões de forma que @monthly.8 possa ser apenas um subvolume.

Mas se você realmente precisa saber

btrfs subvolume show /targetdir/@monthly.8

terá sucesso se for um subvolume; ele falhará de outra forma. Exemplo:

btrfs subvolume show /targetdir/@monthly.8 &>/dev/null && echo "It's a subvolume!"
    
por 08.03.2018 / 19:50
0

A resposta de @Kamil Maciorowski é boa. Mas deixe-me concentrar no teste de existência.

Digamos que eu esteja depurando, e eu preciso repetir uma tentativa, e o instantâneo de destino já estava lá. Então eu fui muito cauteloso e sentei "bash -e" (ou seja, o primeiro erro sai do meu shell. Lembre-se que devo executá-lo como root ...). Então eu prefiro um comando que me diz o que aconteceu e depois sai. Por isso eu faço:

    btrfs subvolume list  /targetdir/@monthly.9 | grep @monthly.8 &&  echo "$0 ERROR: snapshot /targetdir/@monthly.8 exists already!" && exit

Comando "subvolume list" não apresenta erros e lista todos eles. Então eu filtro como preciso e tomo minhas decisões.

    
por 11.03.2018 / 00:34