Restaure arquivos únicos de um instantâneo btrfs sem fazer uma cópia completa

2

Antecedentes

Eu mantenho uma série de snapshots de hora em hora no meu sistema de arquivos btrfs usando btrbk . O subvolume e os instantâneos são armazenados assim (nomes abreviados para facilitar o acompanhamento):

/@vol               (subvolume)
/btrbk/@vol.00      (snapshots of /@vol, one per hour)
/btrbk/@vol.01      ...
/home/user/vol      (mountpoint for /@vol)

Agora eu deletei um único arquivo em /home/user/vol , que eu não deveria ter excluído. Não tem problema, posso restaurar facilmente a partir do instantâneo mais recente:

# cd /home/user/vol
# cp -a --reflink=always /btrbk/@vol.01/all_ipv4_numbers.txt ./
cp: failed to clone './all_ipv4_numbers.txt' from '/btrbk/@vol.01/all_ipv4_numbers.txt': Invalid cross-device link

Parece que não consigo "reflink" o arquivo. Mas eu não quero acabar com duas cópias do arquivo. Idealmente, quero que pareça que nada aconteceu entre o instantâneo mais recente e o próximo instantâneo que será tirado no futuro.

(Sim, eu também tenho backups reais, mas a restauração de instantâneos é mais conveniente sempre que possível!)

Pergunta

Como faço para restaurar um arquivo único a partir de um instantâneo btrfs, mantendo todas as referências legais e mágicas que fazem o btrfs saber que são os mesmos dados em todos os instantâneos?

    
por pipe 22.10.2018 / 01:08

1 resposta

3

Você só pode usar cp --reflink quando a origem e o destino estiverem no mesmo ponto de montagem. Para isso, a montagem do mesmo sistema de arquivos em vários diretórios não conta. Monte o volume "root" do sistema de arquivos btrfs em algum lugar, então faça cp --reflink entre o subvolume de snapshots e @vol que estão nesse diretório.

    
por 22.10.2018 / 01:22