Restaurar / reverter arquivos ou pastas individuais no btrfs

Dec 08 2020

Estou planejando utilizar o btrfs para um sistema NAS.

Agora estou me perguntando se é possível reverter coisas para instantâneos em um nível de arquivo / pasta. Eu pergunto isso porque normalmente só se deseja reverter itens individuais, mantendo o estado do resto da unidade.

Existe alguma maneira nativa de fazer isso ou, se não, a melhor forma de fazer isso? Eu li Restaurar arquivos individuais de um instantâneo do btrfs sem fazer uma cópia completa, o que parece ser uma maneira, mas não muito conveniente. Pode ser a melhor maneira de fazer isso, no entanto.

Respostas

1 clel Jan 02 2021 at 01:13

Tirar um instantâneo basicamente cria um subvolume que pode ser acessado na estrutura de diretório do volume base. A partir daí, desde que tenha os direitos apropriados, pode-se navegar e copiar arquivos ou pastas. A --reflinkopção de copiar não parece ser necessária para isso, embora seja mais agradável, por isso as coisas não ficam duplicadas ao copiá-las.

com ferramentas btrfs

Opcionalmente, crie um subvolume para os instantâneos:

btrfs subvolume create .my_snapshots

Criando o instantâneo:

btrfs subvolume snapshot -r /mnt_point /mnt_point/.my_snapshots/snapshot1

Usar o -rsinalizador torna o instantâneo somente leitura (https://wiki.archlinux.org/index.php/btrfs#Snapshots)

Sem criar um subvolume primeiro e não torná-lo somente leitura, ele poderia simplesmente ter a seguinte aparência:

btrfs subvolume snapshot /mnt_point /mnt_point/snapshot1

A restauração pode ser obtida copiando o (s) arquivo (s) ou pasta (s) do instantâneo:

cp /mnt_point/.my_snapshots/snapshot1/sub/dir/file /sub/dir/file

(Derivado de https://lore.kernel.org/linux-btrfs/[email protected]/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8)

ferramentas externas (snapper usado como exemplo)

O uso de ferramentas externas como o snapper tem alguns benefícios, pois tornam o manuseio de instantâneos um pouco mais conveniente e vêm com funcionalidades úteis.

Primeiro, um arquivo de configuração precisa ser criado para o (sub) volume para o qual deseja criar instantâneos:

snapper -c config-name create-config /mnt_point

Isso cria um arquivo de configuração denominado config-name. Observe que isso normalmente também permite a criação de instantâneos automáticos com base no tempo, bem como regras para limpá-los após alguma lógica. Observe que os instantâneos criados manualmente não serão removidos por tais regras.

Um instantâneo pode então ser obtido manualmente com:

snapper -c config-name create --description description-content

onde config-nameé o nome da configuração criada anteriormente e description-contentpode ser preenchido com alguma descrição para o instantâneo.

(Derivado de https://wiki.archlinux.org/index.php/Snapper)

A restauração funciona de forma semelhante à anterior para a seção de ferramentas btrfs, acessando o instantâneo montado e copiando as coisas.

Além disso, o snapper fornece um comando para isso que também pode ser usado para desfazer alterações no volume atual de acordo com a documentação do openSUSE . Porém, observe que isso pode levar a inconsistências de dados. Além disso, a documentação do Red Hat declara não usar esse comando com o sistema de arquivos raiz.

Em teoria, os arquivos podem ser restaurados com:

 snapper -c config-name -v undochange SNAPSHOT_ID..0 FILENAME

em que SNAPSHOT_IDé o ID da captura instantânea a partir da qual restaurar (e ..0indica que os arquivos foram restaurados para o volume principal) e FILENAMEé o caminho para o arquivo a ser restaurado. Também é possível especificar mais de um arquivo.

(Derivado de https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#proc.snapper.restore.cmdl)

EmmanuelRosa Dec 09 2020 at 17:25

Os instantâneos BTRFS funcionam no nível do subvolume. Isso significa que você pode "reverter" subvolumes, mas não arquivos individuais.

Como os subvolumes aparecem como diretórios no sistema de arquivos, você pode dizer que é possível reverter os diretórios.

Para reverter arquivos individuais, eu uso uma cópia reflink, conforme mostrado no link que você forneceu. No entanto, tenho os subvolumes relevantes montados automaticamente via, /etc/fstabentão não há inconveniência.