O recurso de instantâneo do sistema de arquivos Btrfs usa o princípio Copy-on-Write (CoW). Portanto, não ocupa muito espaço em disco e você pode tirar instantâneos de um subvolume instantaneamente.
O sistema de arquivos Btrfs suporta 2 tipos de instantâneos.
- Instantâneos graváveis: Se você tirar um instantâneo gravável, você pode modificar os arquivos / diretórios desse instantâneo mais tarde. Este é o tipo de instantâneo padrão do sistema de arquivos Btrfs.
- Instantâneos somente leitura: Se você tirar um instantâneo somente leitura, não poderá modificar os arquivos / diretórios desse instantâneo mais tarde.
Este artigo mostrará como obter instantâneos graváveis e somente leitura dos subvolumes do sistema de arquivos Btrfs. Também mostrarei como atualizar um instantâneo gravável e recuperar arquivos de um instantâneo. Vou mostrar como remover um instantâneo também. Então vamos começar.
Pré-requisitos
Para experimentar os exemplos deste artigo,
- Você deve ter o sistema de arquivos Btrfs instalado em seu computador.
- Você precisa ter um disco rígido ou SSD com pelo menos 1 partição livre (de qualquer tamanho).
Eu tenho um disco rígido de 20 GB sdb na minha máquina Ubuntu. Eu criei 2 partições sdb1 e sdb2 neste disco rígido. Vou usar a partição sdb1 neste artigo.
$ sudo lsblk -e7
Seu disco rígido ou SSD pode ter um nome diferente do meu, assim como as partições. Portanto, certifique-se de substituí-los pelos seus a partir de agora.
Se você precisar de alguma ajuda na instalação do sistema de arquivos Btrfs no Ubuntu, verifique meu artigo Instale e use o Btrfs no Ubuntu 20.04 LTS.
Se você precisar de alguma ajuda na instalação do sistema de arquivos Btrfs no Fedora, verifique meu artigo Instale e use o Btrfs no Fedora 33.
Criando um sistema de arquivos Btrfs
Para experimentar com subvolumes Btrfs, você precisa criar um sistema de arquivos Btrfs.
Para criar um sistema de arquivos Btrfs com o rótulo dados no sdb1 partição, execute o seguinte comando:
$ sudo mkfs.btrfs -L data / dev / sdb1
Um sistema de arquivos Btrfs deve ser criado.
Crie um diretório /dados com o seguinte comando:
$ sudo mkdir -v / data
Para montar o sistema de arquivos Btrfs criado no sdb1 partição no /dados diretório, execute o seguinte comando:
$ sudo mount / dev / sdb1 / data
O sistema de arquivos Btrfs deve ser montado como você pode ver na imagem abaixo.
$ df -h / data
Preparando o sistema de arquivos Btrfs para instantâneos
No Btrfs, você pode tirar instantâneos de subvolumes Btrfs apenas. A raiz principal de um sistema de arquivos Btrfs também é um subvolume. Portanto, você pode fazer o backup de todo o sistema de arquivos Btrfs, bem como de subvolumes específicos.
Esta seção irá criar um subvolume Btrfs / data / projects / web1 e crie os arquivos necessários para as próximas seções deste artigo abaixo. Também criarei um diretório onde você pode manter seus instantâneos. Nas próximas seções, mostrarei como tirar instantâneos (graváveis e somente leitura), atualizar um instantâneo gravável e recuperar arquivos do instantâneo. Então vamos começar.
Primeiro, crie um novo diretório / data / projects do seguinte modo:
$ sudo mkdir -v / data / projects
Crie um novo subvolume web1 no / data / projects diretório da seguinte forma:
$ sudo btrfs subvolume create / data / projects / web1
Crie um novo arquivo índice.html no / data / projects / web1 subvolume da seguinte forma:
$ sudo nano / data / projects / web1 / index.html
Digite as seguintes linhas de códigos no índice.html Arquivo.
Hello World 4
Assim que terminar, pressione
Crie um novo arquivo estilo.css no / data / projects / web1 subvolume da seguinte forma:
$ sudo nano / data / projects / web1 / style.css
Digite as seguintes linhas de códigos no estilo.css Arquivo.
h1cor verde;
Assim que terminar, pressione
Agora o / data / projects / web1 subvolume tem o índice.html e estilo.css Arquivo.
$ ls -lh / data / projects / web1
Eu quero manter todos os instantâneos deste sistema de arquivos Btrfs no /dados/.instantâneos diretório.
Crie o /dados/.instantâneos diretório com o seguinte comando:
$ sudo mkdir -v / data /.instantâneos
Tirando fotos de um subvolume
Para tirar um instantâneo do / data / projects / web1 subvolume no /dados/.snapshots / web1-2020-12-25 diretório (será criado automaticamente), execute o seguinte comando:
$ sudo btrfs subvolume snapshot / data / projects / web1 / data /.snapshots / web1-2020-12-25
Um instantâneo do / data / projects / web1 diretório deve ser criado no /dados/.snapshots / web1-2020-12-25 diretório.
Como você pode ver na imagem abaixo, um novo subvolume .snapshots / web1-2020-12-25 é criado. Um instantâneo é na verdade um subvolume.
Lista / dados de subvolume $ sudo btrfs
Você pode ver mais informações sobre o instantâneo que criou no /dados/.snapshots / web1-2020-12-25 diretório da seguinte forma:
$ sudo btrfs subvolume show / data /.snapshots / web1-2020-12-25
Como você pode ver, todos os arquivos que estão no / data / projects / web1 subvolume estão no /dados/.snapshots / web1-2020-12-25 instantâneo.
$ tree -a / data
Recuperando arquivos de instantâneos
Nesta seção, vou mostrar como recuperar arquivos de instantâneos Btrfs.
Primeiro, vou mostrar como recuperar um único arquivo do instantâneo.
Abra o / data / projects / web1 / index.html arquivo com o editor de texto nano da seguinte maneira:
$ sudo nano / data / projects / web1 / index.html
Faça as alterações que desejar.
Assim que terminar, pressione
Como você pode ver, o principal índice.html arquivo é diferente do índice.html arquivo no instantâneo.
$ cat / data / projects / web1 / index.html$ cat / data /.snapshots / web1-2020-12-25 / index.html
Fizemos as alterações no principal índice.html arquivo são indesejados, e queremos recuperar o índice.html arquivo do instantâneo.
Você pode restaurar o índice.html arquivo do instantâneo da seguinte maneira:
$ sudo cp -v / data /.snapshots / web1-2020-12-25 / index.html / data / projects / web1 / index.html
Como você pode ver, o índice.html arquivo é restaurado do instantâneo.
$ cat / data / projects / web1 / index.html$ cat / data /.snapshots / web1-2020-12-25 / index.html
Agora, vamos ver como recuperar todos os arquivos / diretórios do instantâneo.
Remova todos os arquivos do / data / projects / web1 instantâneo da seguinte forma:
$ sudo rm -rv / data / projects / web1 / *
Para recuperar todos os arquivos / diretórios do instantâneo, execute o seguinte comando:
$ sudo rsync -avz / data /.snapshots / web1-2020-12-25 / / data / projects / web1 /
Como você pode ver, os arquivos / diretórios são restaurados do instantâneo.
$ ls -lh / data / projects / web1
Finalmente, vamos ver como recuperar arquivos / diretórios do instantâneo no modo espelho. No modo espelho, os arquivos / diretórios do subvolume serão os mesmos do instantâneo. Se houver arquivos / diretórios no subvolume que não estão disponíveis no instantâneo, eles serão removidos.
Vamos criar um novo arquivo no subvolume para diferenciar a árvore de arquivos do instantâneo.
Criar uma Leia-me.TXT arquivo no / data / projects / web1 subvolume da seguinte forma:
$ echo "hello world 5" | sudo tee / data / projects / web1 / README.TXT
Como você pode ver, a árvore de arquivos do / data / projects / web1 subvolume é diferente do /dados/.snapshots / web1-2020-12-25 instantâneo.
$ tree -a / data
Para restaurar os arquivos / diretórios do /dados/.snapshots / web1-2020-12-25 instantâneo para o / data / projects / web1 subvolume no modo espelho, execute o seguinte comando:
$ sudo rsync -avz --delete / data /.snapshots / web1-2020-12-25 / / data / projects / web1 /
Todos os arquivos / diretórios do / data / projects / web1 o subvolume deve ser restaurado (no modo espelho) do /dados/.snapshots / web1-2020-12-25 instantâneo.
A árvore de arquivos do / data / projects / web1 subvolume e o /dados/.snapshots / web1-2020-12-25 o instantâneo deve ser o mesmo.
Como você pode ver, o índice.arquivo html e estilo.o conteúdo do arquivo css é o mesmo no / data / projects / web1 subvolume e o /dados/.snapshots / web1-2020-12-25 instantâneo.
Conteúdo do índice.html e estilo.css arquivo no / data / projects / web1 subvolume.
$ cat / data / projects / web1 / index.html$ cat / data / projects / web1 / style.css
Conteúdo do índice.html e estilo.css arquivo no /dados/.snapshots / web1-2020-12-25 instantâneo.
$ cat / data / projects / web1 / index.html$ cat / data / projects / web1 / style.css
Atualizando um instantâneo
Por padrão, o sistema de arquivos Btrfs tira instantâneos graváveis. Um instantâneo Btrfs é como um subvolume. Portanto, você pode modificar / atualizar os arquivos / diretórios de um instantâneo gravável.
Vamos atualizar o índice.html arquivo no / data / projects / web1 subvolume.
Primeiro, abra o índice.html arquivo do / data / projects / web1 subvolume com o nano editor de texto da seguinte forma:
$ sudo nano / data / projects / web1 / index.html
Faça as alterações que desejar. Assim que terminar, pressione
Como você pode ver, o índice.arquivo html do / data / projects / web1 subvolume é diferente do /dados/.snapshots / web1-2020-12-25 instantâneo.
$ cat / data / projects / web1 / index.html$ cat / data /.snapshots / web1-2020-12-25 / index.html
Você quer manter o índice.html arquivo do / data / projects / web1 subvolume.
Para atualizar o índice.html arquivo no /dados/.snapshots / web1-2020-12-25 instantâneo, execute o seguinte comando:
$ sudo cp -v / data / projects / web1 / index.html / data /.snapshots / web1-2020-12-25 / index.html
Como você pode ver, o índice.html arquivo do /dados/.snapshots / web1-2020-12-25 instantâneo é atualizado.
Atualizar um instantâneo é tão fácil quanto copiar novos arquivos para o instantâneo.
Tirando instantâneos somente leitura de um subvolume
Às vezes, você não quer que os instantâneos que você tirou sejam atualizados de forma alguma. Nesse caso, você pode criar instantâneos somente leitura.
Por exemplo, para criar um instantâneo somente leitura /dados/.snapshots / web1-2020-12-26 do / data / projects / web1 subvolume, execute o seguinte comando:
$ sudo btrfs subvolume snapshot -r / data / projects / web1 / data /.snapshots / web1-2020-12-26
Como você pode ver, um novo subvolume .snapshots / web1-2020-12-26 é criado.
Lista / dados de subvolume $ sudo btrfs
Como você pode ver, o instantâneo /dados/.snapshots / web1-2020-12-26 é somente leitura.
$ sudo btrfs subvolume show / data /.snapshots / web1-2020-12-26
Vamos atualizar o índice.html arquivo do / data / projects / web1 subvolume.
Para fazer isso, abra o índice.html arquivo do / data / projects / web1 subvolume com o nano editor de texto da seguinte forma:
$ sudo nano / data / projects / web1 / index.html
Faça as alterações que desejar. Assim que terminar, pressione
Como você pode ver, o índice.html no / data / projects / web1 subvolume é diferente do /dados/.snapshots / web1-2020-12-26 instantâneo.
$ cat / data / projects / web1 / index.html$ cat / data /.snapshots / web1-2020-12-26 / index.html
Vamos tentar atualizar o índice.html arquivo no /dados/.snapshots / web1-2020-12-26 instantâneo.
$ sudo cp -v / data / projects / web1 / index.html / data /.snapshots / web1-2020-12-26 / index.html
Como você pode ver, você não pode atualizar o índice.html arquivo do /dados/.snapshots / web1-2020-12-26 instantâneo porque o instantâneo é somente leitura.
Removendo um Instantâneo
Eu disse antes que um instantâneo Btrfs é como um subvolume. Portanto, você pode remover um instantâneo Btrfs da mesma forma que remove um subvolume Btrfs. Mesmo comando.
É assim que a árvore de arquivos do sistema de arquivos Btrfs montada no /dados diretório parece no momento.
$ tree -a / data
Vamos remover o .snapshots / web1-2020-12-25 instantâneo.
Lista / dados de subvolume $ sudo btrfs
Para remover o /dados/.snapshots / web1-2020-12-25 instantâneo, execute o seguinte comando:
$ sudo btrfs subvolume delete / data /.snapshots / web1-2020-12-25
Como você pode ver, o instantâneo .snapshots / web1-2020-12-25 não é mais.
Lista / dados de subvolume $ sudo btrfs
Como você pode ver, os arquivos / diretórios do /dados/.snapshots / web1-2020-12-25 o instantâneo também é removido.
$ tree -a / data
Conclusão
Este artigo mostrou como obter instantâneos graváveis e somente leitura dos subvolumes do sistema de arquivos Btrfs. Também mostrei como atualizar um instantâneo gravável e recuperar arquivos de um instantâneo. Eu mostrei como remover um instantâneo Btrfs também. Este artigo deve ajudá-lo a começar com o recurso de instantâneo do Btrfs.