[ Dica/Tuto ] Desativando fstab e habilitando units do systemd + Timeshift incompatível

Desativando as configurações do /etc/fstab.

Substituir o fstab por units de montagem nativas do systemd melhora significativamente o gerenciamento de discos e diretórios, especialmente para unidades de rede (NFS/SMB) ou discos externos. O systemd oferece montagem sob demanda (automount), inicialização paralela mais rápida e controle robusto de dependências, como esperar a rede conectar antes de tentar montar um disco remoto.

Principais Vantagens

  • Montagem sob Demanda (Automount): Em vez de travar o boot checando um disco que não está conectado, o systemd cria um “atalho”. A partição só é montada de fato no exato momento em que você tenta acessá-la.
  • Resiliência de Rede: Para HDs externos e servidores, o systemd lida melhor com desconexões. Ele pode tentar remontar automaticamente a unidade caso a conexão caia ou o servidor seja reiniciado. [1]
  • Controle de Dependências: Garante que discos essenciais ou compartilhamentos de rede só sejam montados depois que os serviços de rede ou subsistemas de hardware necessários estiverem totalmente inicializados. [1, 2]

Primeiro abre o fstab, pois as informaçòes são importantes para montar as units.

Exemplo de saída do fstab

Repare os caminhos

 <Sistemas de arquivos> <diretório> <tipo> <opções> <dump> <pass>

e pass

dump=backup automático

pass= ordem de verificação de erros no disco na inicialização.

UUID=f47ac10b-58cc-4372-a567-0e02b2c3d479   /             btrfs         rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@    0 0

Como criar uma unit

Na unit tem uma opção do diretório, este valor tem que ser o nome da unit.

Exemplo no valor citado acima

Where=/

O problema que no linux não aceita no nome a barra /.

Para isso vamos usar um comando do systemd para saber como ele converte o nome

Como será uma unit mount usaremos systemd-escape -p --suffix=mount

Exemplo do root

~ $ systemd-escape -p --suffix=mount /  
-.mount

O nometem que ser -.mount

Vamos criar o arquivo

sudo nano /etc/systemd/system/-.mount

Com o seguinte conteúdo:

[Unit]
Description=Montagem do disco em /

[Mount]
What=/dev/disk/by-uuid/f47ac10b-58cc-4372-a567-0e02b2c3d479
Where=/
Type=btrfs
Options=rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@

[Install]
WantedBy=multi-user.target

Repare que a saída do sispositivo será diferente do fstab

What=/dev/disk/by-uuid/f47ac10b-58cc-4372-a567-0e02b2c3d479

Tem que ter o caminho do diretório by-uuid.

As opções , tipos e onde tem que ser igual ao do fstab.


Exemplo 2

UUID=f47ac10b-58cc-4372-a567-0e02b2c3d479  	/var/log  	btrfs     	rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@log	0 0

Repare que neste o diretório = /var/log

Executando o comando do systemd

 systemd-escape -p --suffix=mount /var/log
var-log.mount

Criando o arquivo

sudo nano /etc/systemd/system/var-log.mount

Com o seguinte conteúdo

[Unit]
Description=Montagem do disco em /var/log      

[Mount]
What=/dev/disk/by-uuid/f47ac10b-58cc-4372-a567-0e02b2c3d479 
Where=/var/log         
Type=btrfs
Options=rw,relatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvol=/@log

[Install]
WantedBy=multi-user.target

Exemplo /home

UUID=6a60524d-061d-454a-bfd1-38989910eccd    /home         xfs           rw,relatime,inode64,logbufs=8,logbsize=32k,noquota    0 2
systemd-escape -p --suffix=mount /home  
home.mount
sudo nano /etc/systemd/system/home.mount

Com o conteúdo

[Unit]
Description=Montagem do disco em /home   

[Mount]
What=/dev/disk/by-uuid/6a60524d-061d-454a-bfd1-38989910eccd
Where=/home         
Type=xfs
Options=rw,relatime,inode64,logbufs=8,logbsize=32k,noquota
[Install]
WantedBy=multi-user.target

Por fim, exemplo de swapfile

/swapfile none swap defaults,discard 0 0

O arquivo swap o nome é padrão: swapfile.swap

Criamos o arquivo

sudo nano /etc/systemd/system/swapfile.swap

Com o conteúdo:

[Unit]
Description=Habilite swapfile
Before=local-fs.target

[Mount]
What=/swapfile
Where=none
Type=swap
Options=defaults,discard

[Install]
WantedBy=multi-user.target

Feito isso.

Comente as saidas do fstab

Exemplo:

De

UUID=6a60524d-061d-454a-bfd1-38989910eccd    /home         xfs           rw,relatime,inode64,logbufs=8,logbsize=32k,noquota    0 2

Para

#UUID=6a60524d-061d-454a-bfd1-38989910eccd    /home         xfs           rw,relatime,inode64,logbufs=8,logbsize=32k,noquota    0 2

Agora vamos recarregar o systemd sem fstab

Execute o comando:

sudo systemctl daemon-reload

Estamos quase finalizando.

Agora vamos habilitar as units criadas.

Exemplo:

sudo systemctl enable --now /etc/systemd/system/-.mount

sudo systemctl enable --now /etc/systemd/system/var-cache-pacman-pkg.mount

sudo systemctl enable --now /etc/systemd/system/var-log.mount

sudo systemctl enable --now /etc/systemd/system/boot.mount

sudo systemctl enable --now /etc/systemd/system/home.mount

sudo systemctl enable --now /etc/systemd/system/swapfile.swap

OBS:

Veja se apresenta algum erro.

Com o comando:

sudo systemctl -l status -- -.mount

sudo systemctl -l status  var-cache-pacman-pkg.mount

sudo systemctl -l status var-log.mount

sudo systemctl -l status boot.mount

sudo systemctl -l status home.mount

sudo systemctl -l status swapfile.swap

Caso esteja tudo OK.

Reinicie o pc.

Vou verificar se a partição swap no fstab tem que montar em .mount no systemd.

Achou complicado? Comente aqui!
:+1:

Depois adiciono o automount

5 curtidas

Interessante! Teria alguma GUI pra gerenciar isso? Tipo o que o Gnome-Disks já faz com fstab

Gui não conheço.

Contudo aparecem com

systemctl list-unit-files --state enabled

Edição direto no arquivo ou por exemplo

systemctl edit --full unit.mount

Depois tem recarregar com

systemctl daemon-reload
1 curtida

OBS: Voltou a funcionar local/systemd 260.2-2


  1. Criar o arquivo de automontagem .automount

Em seguida, crie o arquivo que irá monitorar o acesso, com exatamente o mesmo nome que o arquivo anterior, mas alterando a extensão para .automount:

sudo nano /etc/systemd/system/home.automount

Insira o conteúdo:

[Unit]
Description=Automount da pasta home

[Automount]
Where=/home
TimeoutIdleSec=10min

[Install]
WantedBy=multi-user.target

(O parâmetro TimeoutIdleSec garante que o dispositivo seja desmontado após o tempo limite de inatividade).

  1. Ativar e iniciar o serviço

Por fim, recarregue o daemon do systemd e ative a nova unidade automount:

bash

sudo systemctl daemon-reload
sudo systemctl enable home.automount`
1 curtida

Criação da unit com partição swap.

  • Crie o arquivo unit swap:

    sudo nano /etc/systemd/system/swap.swap
    
  • Adicione a seguinte configuração:

    [Unit]
    Description=Habilite a partição
    Conflicts=umount.target
    Before=local-fs.target umount.target
    
    [Swap]
    What=/dev/disk/by-uuid/8cf006c6-5092-4000-a3f0-401e4weer
    Where=none
    Type=swap
    Options=defaults,discard
    
    [Install]
    WantedBy=multi-user.target
    
  • Recarregue o systemd e habilite a unit no boot:

    sudo systemctl daemon-reload
    sudo systemctl enable --now swap.swap
    
1 curtida

Caso tenha problema

Use o processo para modificar.

Não precisa do remount

1 curtida

E o distraído, aqui, tentando ver a saída desse comando…

… numa distro com OpenRC, ha ha!

$ systemctl list-unit-files --state enabled
bash: systemctl: command not found

Um dia, eu ainda chego lá.

2 curtidas

Pior, eu fiquei durante alguns segundos procurando erro no comando.

Kkk
:laughing:

2 curtidas

:rofl:

Esse negócio “é uma cachaça” – a gente mergulha fundo, como se não houvesse amanhã!

1 curtida

Consertado o comando

sudo systemctl -l status -- -.mount
1 curtida

Caso tenha problema de permissão ao iniciar.

Não carregar o swap. sem internet, sem permissão de escrita.

Execute o comando no terminal

sudo mount -o rw,remount /

Coloque o parametro do kernel no grub ou systemd-boot : rw

e reinicie o pc

automount
Voltou a funcionar local/systemd 260.2-2

Apenas a título de curiosidade – caso possa ser útil a algum colega:

Deixei de usar o fstab há mais de 10 anos – pelo menos no KDE, que é o que sempre uso:

Até pouco tempo atrás, o KDE chamava de “Dispositivos removíveis” (Removable devices), aqueles que não fazem parte do “sistema” – já que as partições “/”, ou “/home” não podem ser “desmontadas” quando estão em uso pelo sistema.

Para mim, considero “Partições extras”, ou “Partições adicionais”.

Atualmente, parece que o KDE Plasma mudou a nomenclatura:

Basta marcar “Todos os dispositivos conhecidos” – e a montagem é feita pelo udisks2 no início de cada sessão:

No KDE Plasma 6.7 (Artix), essa configuração fica no arquivo ~/.config/kded_device_automounterrc

A IA do Google diz que fica em ~/.config/solid-device-automounterrc ou em ~/.config/kdeglobals – mas esqueceu de dizer “em qual versão do KDE Plasma”.

Fato é que tenho usado esse recurso do KDE System Settings em (quase) todas as distros que experimentei nos últimos 10+ anos – exceto no Debian, que não sei se já está aceitando: – Faz tempo que não verifico isso. – Nele, ainda uso fstab.

  • No MX Linux, existe uma ferramenta “mx-tool” qualquer, que resolveu isso com 1 clique – e não sei qual arquivo de configuração foi alterado.

Nas distros “Buntu-based”, funciona de primeira. – No Manjaro, também costumava funcionar. – Se ao clicar no painel lateral do Dolphin ele montar, então o “automount” pelo udisks2 vai funcionar.

Em algumas distros, ao clicar pelo painel lateral do Dolphin, ele pede senha. – Neste caso, não irá fazer montagem automática ao iniciar a sessão.

Então, costumo criar um arquivo /etc/polkit-1/rules.d/90-udisks2.rules com este conteúdo, que autoriza a montagem sem privilégios:

// Allow udisks2 to mount devices without authentication
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" || action.id == "org.freedesktop.udisks2.filesystem-mount" || action.id == "org.freedesktop.udisks2.filesystem-mount-system-internal") { return polkit.Result.YES; } });

(Às vezes, uso 90, 98, 99, conforme o rascunho que encontro primeiro).

Parece que fiz isso no Arch Linux, porque está “igualzinho”:

Mas no Artix, parece que não precisei fazer – e talvez a causa seja porque ele já tem alguma coisa “parecida”:

Tirando o Debian (e o MX Linux), o udisks2 funcionou em todas as distros que já experimentei – independente de usarem SystemD, SysVinit, Runit, OpenRC etc.

1 curtida

O Timeshift não lida bem com mount units (.mount e .automount) do systemd ou com esquemas de partições complexos fora do padrão. Ele foi projetado originalmente pensando em uma estrutura bem específica. [1, 2, 3, 4]

Para que o Timeshift funcione corretamente (especialmente em modo BTRFS), o sistema exige que os subvolumes tenham nomes específicos no arquivo /etc/fstab ou layout tradicional. [1, 2]

Como o Timeshift funciona

  • ** Modo RSYNC:** Depende fortemente do arquivo /etc/fstab clássico para determinar o que montar e fazer o backup.
  • Modo BTRFS: O Timeshift exige uma estrutura plana onde a raiz e a pasta home estão nos subvolumes /@ e /@home, fazendo a checagem com o fstab. Quando você substitui isso por mount units nativas do systemd, a automação do snapshot se perde e a restauração costuma quebrar. [1, 2, 3]
    Alternativas de Solução

Se você utiliza muitas mount units do systemd, você tem duas opções principais:

  1. Voltar para o /etc/fstab: Configurar os discos e montagens pelo /etc/fstab para garantir a compatibilidade com o Timeshift.
  2. Utilizar o Snapper + Btrfs Assistant: Esta é a combinação preferida e que melhor lida com configurações nativas do systemd (muito comum no Fedora, por exemplo) e permite snapshots independentes