[ Dica/Tuto ] Desativando fstab e habilitando units do systemd

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

4 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: LEIA ANTES

Estou tendo problema ao aplicar automount na /home.
No Arch para de funcionar o thumbnails
No debian sid não monta a partição.


  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ç
    Conflicts=umount.target
    Before=local-fs.target umount.target
    
    [Swap]
    What=/dev/disk/by-uuid/your-partition-uuid-here
    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:

1 curtida

:rofl:

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