Corrigindo o problema de montagem do Ubuntu
Todos os comandos descritos aqui, devem ser executados como super usuário (root), para prosseguir, recomendo utilizar o:
sudo su
ou:
sudo -i
Antes de mais nada, vamos definir o subvolume "@" como o subvolume padrão, pois caso contrário, o seu sistema poderá não subir mais depois de realizada as alterações. Para isso, primeiro temos que descobrir qual é o ID do subvolume "@", listando os subvolumes existentes:
# btrfs sub list /
O resultado deve ser algo parecido com isso:
Veja qual é o ID do subvolume "@", no meu caso é número "257". Tendo em mãos o ID do subvolume "@", defina o subvolume padrão, com o comando:
# btrfs sub set-default [ID] /
No meu caso, ficaria assim:
# btrfs sub set-default 257 /
E agora, confirmamos se está certo:
# btrfs sub get default /
Ele deve retornar que o subvolume padrão agora é o:
path @
Feito isso, vamos remover a configuração do Ubuntu, que manda ele montar sempre o "@" como padrão. Vamos editar o arquivo de configuração do grub "10_linux":
# nano /etc/grub.d/10_linux
Encontre neste arquivo a seguinte linha: GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
E remova desta linha APENAS a seguinte expressão: rootflags=subvol=${rootsubvol}
Sendo assim, esta linha deve ficar agora:
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX}"
Salve o arquivo e saia do
nano. Agora, apenas por precaução, vamos trancar este arquivo, caso alguma atualização do Ubuntu insista em querer voltar na configuração anterior:
# chattr +i /etc/grub.d/10_linux
E seguida, mande atualizar o GRUB:
# update-grub
Agora, vamos editar o arquivo "fstab", que também manda montar o "@" todas as vezes:
# nano /etc/fstab
Veja o meu exemplo a seguir:
Repare que a linha que monta o root (mount point "/") tem a opção de montagem: "defaults,subvol=@".
Isso fará ele montar o "@" sempre, mesmo que você defina outro subvolume como padrão futuramente, no caso um subvolume de snapshot. Para corrigir, basta remover APENAS a expressão ",subvolt=@". No meu caso, esta linha ficará assim:
/dev/mapper/local-root / btrfs defaults 0 1
Repare também que, em outra linha, ele monta o subvolume "@home" na pasta
/home, mas não se preocupe que isso, está certo.
Reinicie o sistema, se ele subir normalmente, provavelmente está tudo certo. O próximo passo agora é instalar e configurar o Snapper.
Instalando e configurando o Snapper
Para instalar o Snapper é bem simples, podemos fazer pelo APT mesmo:
# apt install snapper -y
E para criar a configuração, também é simples:
# snapper create-config /
Apesar de tudo parecer estar correto, na verdade não está. O problema, é que ao criar a configuração do Snapper, ele cria um subvolume chamado ".snapshots" e consecutivamente uma pasta chamada ".snapshots" na raiz do sistema, mas lembra-se que estamos montados dentro do subvolume "@"?
Sendo assim, o subvolume ".snapshots" foi criado dentro de outro subvolume, o "@", e assim que sairmos deste subvolume para um outro, isso ai vai virar uma salada mista. O subvolume onde os snapshots serão criados tem que ficar no root do sistema de arquivos, ou seja, no "top level 5".
Se você listar os subvolumes depois de criado a config do snapper pelo:
# btrfs sub list /
...você irá ver que o subvolume ".snapshots" está em outro "top level", mais especificamente no "top level" de ID do subvolume "@", indicando que ele está lá dentro. Sendo assim, para criar o subvolume no "top level 5", temos que montar a raiz do sistema de arquivo em outra pasta.
Para isso, vamos criar uma pasta:
# mkdir /mnt/rt
E agora vamos montar a raiz do sistema de arquivo nesta pasta, utilizando a opção "subvol=/". Usando o meu exemplo, meu dispositivo é o
/dev/mapper/local-root, se você não tem certeza qual é o seu, você pode ver lá no arquivo "fstab" que você alterou anteriormente.
Se você instalou o sistema usando o meu script para instalação com criptografia total, do qual eu menciono no início deste artigo, será este mesmo. Sendo assim, eu vou dar o exemplo de montagem abaixo, considerando isso:
# mount -o subvol=/ /dev/mapper/local-root /mnt/rt
Se você listar os arquivos na pasta
/mnt/rt, você terá que ver os subvolumes existentes. Agora que temos a pasta
/mnt/rt montada na raiz do sistema de arquivos, vamos criar o subvolume onde ficará armazenado os snapshots:
# btrfs sub create /mnt/rt/@snapshots
Vamos listar novamente os subvolumes:
# btrfs sub list /
Repare que o subvolume "@snapshots" está no "top level 5", ou seja, está correto.
Para finalizar, vamos remover todos os snapshots criados pelo snapper e criar a config novamente:
snapper delete-config
snapper create-config /
E logo em seguida, apagar o subvolume que ele criou:
# btrfs sub delete /.snapshots
Agora vamos criar a pasta onde será montado o subvolume "@snapshots", que criamos anteriormente:
# mkdir /.snapshots
E, finalmente, vamos adicionar uma linha ao arquivo "fstab", que irá montar o subvolume "@snapshots" na pasta
/.snapshots:
# nano /etc/fstab
Minha dica é, copie a linha que está atualmente montando a pasta
/home (provavelmente é a ultima) e cole numa linha a baixo. Altere apenas o "mount point" de
/home para
/.snapshots e o "subvol=@home" para "subvol=@snapshots".
No meu exemplo, ficará assim:
Salve e feche o arquivo.
Agora, só resta reiniciar o sistema. Se seu sistema subiu normalmente, você pode visualizar os snapshots criados pelo comando:
# snapper list
Edite também o arquivo
/etc/snapper/configs/root. E defina quantos snapshots você vai querer manter, entre outras opções.
Se você não gosta muito de usar via Shell, existe a interface gráfica:
Nela, é possível editar as configurações, reverter para algum snapshot, etc. No momento, você pode testar se está tudo ok, instalando algum pacote, como por exemplo o Gedit e logo em seguida, mandando reverter para o snapshot criado durante o boot.
Para reverter para algum snapshot, é muito simples, basta ver qual é o numero do snapshot pelo comando:
# snapper list
E, logo em seguida, dar um "snapper rollback", seguido do numero do snapshot, como por exemplo:
# snapper rollback 1
Após reverter para o snapshot de numero 1, por exemplo, reinicie o sistema. O pacote que você instalou, não deverá estar mais lá, pois quando o snapshot foi criado, ele não estava instalado.
Eu sei que este artigo foi de botar medo em muita gente aí, imagine para mim que tive que tirar do zero. Mas não se desespere, faça o passo a passo com calma, procure entender o que você está fazendo. No final, o resultado é satisfatório e muito duradouro.