Como instalar o Debian 13 com Btrfs, criptografia completa de disco, snapshots e suporte a rollback para um sistema Linux resiliente.
Este guia passo a passo aborda subvolumes, Snapper, GRUB-Btrfs e recuperação segura em caso de falha nas atualizações.
O Debin GNU/Linux é conhecido por sua estabilidade e confiança. Com o Debian 13 "Trixie", você terá pacotes atualizados, melhor suporte do hardware e 5 anos de atualizações de segurança, fazendo-o ideal para estações de trabalho, servidores e ambientes de desenvolvimento.
Mas e se você pudesse adicionar uma camada extra de proteção nessa distribuição já tão consolidade e confiável? Você consegue isso com o sistema de arquivos BTRFS, que possibilita fazer snapshots instantâneos e restaurar todo o sistema de forma tão simples como o apertar de um botão. Uma atualização quebrou algo? Restaure em segundos! Quer testar uma alteração ariscada? Faça o snapshot e teste sem medo.
A Instalação gráfica do Debian ainda não dá suporte para a personalização dos subvolumes do Btrfs, então, nesse tutorial vamos usar o método do debootstrap para construir manualmente o sistema com:
- Sistema de arquivos Btrfs otimizado para a estrutura de subvolumes
- Snapper para automatização e gerenciamento dos snapshots
- Integração GRUB-Btrfs com o sistema de boot
- Swap com suporte para hibernação
- Restauração facilitada com o assistente Btrfs
Seja você um usuário em busca de um sistema operacional robusto para uso diário, um administrador de sistemas que deseja opções confiáveis de rollback ou um desenvolvedor que precisa fazer testes com frequência, este guia o ajudará a criar um sistema Debian resiliente.
Prerequisitos:
- Debian 13 (Trixie) Live ISO: Faça o download da Live ISO (Não é a instalação ISO padrão) do site official Debian website.
- Sistema destino: Uma máquina física ou virtual para instalar o Debian.
- Conexão com a internet: An active and stable internet connection.
- Espaço em disco: Minimo de 20 GB para o sistema base; É recomendado 50 GB ou mais para o ambiente Desktop e o armazenamento adequado os snapshots.
Sumário:
- Passo 1: Boot com o Live CD (escolhi o XFCE, mas você pode escolher qualquer outro)
- Passo 2: Formatar o disco e criar as partições GPT
Preparativos
sudo su
lsblk -p
Definições das variáveis
export DISK=/dev/sda # Ajuste para o seu disco (ex: /dev/nvme0n1)
export MAPPER=cryptroot # Nome do mapeamento LUKS
Atualizações dos pacotes e instalação do particionador
apt update && apt install gdisk -y
Particionamento e Criptografia
# Limpeza e Partições
sgdisk -Z $DISK
sgdisk -og $DISK
sgdisk -n 1::+512M -t 1:ef00 -c 1:'ESP' $DISK
sgdisk -n 2::+1G -t 2:8300 -c 2:'BOOT' $DISK
sgdisk -n 3:: -t 3:8300 -c 3:'LINUX' $DISK
# Formatação inicial
mkfs.fat -F32 -n EFI ${DISK}1
mkfs.ext4 -L BOOT ${DISK}2
# LUKS
cryptsetup luksFormat --type luks2 ${DISK}3
cryptsetup open ${DISK}3 $MAPPER
# Criar Filesystem no dispositivo mapeado
mkfs.btrfs -L DEBIAN /dev/mapper/$MAPPER
mount /dev/mapper/$MAPPER /mnt
Btrfs e Subvolumes
# Create essential subvolumes
btrfs subvolume create /mnt/@ # Root filesystem
btrfs subvolume create /mnt/@home # User home data
btrfs subvolume create /mnt/@opt # Optional software
btrfs subvolume create /mnt/@cache # Cache data
btrfs subvolume create /mnt/@lightdm # Display manager data (XFCE)
btrfs subvolume create /mnt/@libvirt # Virtual machines
btrfs subvolume create /mnt/@log # Log files
btrfs subvolume create /mnt/@spool # Spool data
btrfs subvolume create /mnt/@tmp # Temporary files
btrfs subvolume create /mnt/@swap # Swap file location
# Unmount when done
umount -v /mnt
Note: Create the subvolume matching your display manager.
For GNOME use @gdm3, for KDE use @sddm, and for XFCE use @lightdm. Only one is required depending on your desktop environment.
Montagem Final para Instalação
# Opções de montagem comuns
export BTRFS_OPTS="compress=zstd:3,noatime,space_cache=v2"
# Montar Raiz
mount -o subvol=@,$BTRFS_OPTS /dev/mapper/$MAPPER /mnt
# Criar diretórios
mkdir -vp /mnt/{home,opt,boot/efi,var/{cache,lib/{lightdm,libvirt},log,spool,tmp,swap}}
##### Não está criando o diretório /mnt/boot/efi
### DESCOBRIR O MOTIVO
# Montar Partições Físicas
mount ${DISK}2 /mnt/boot
mount-vo ${DISK}1 /mnt/boot/efi
mount -vo ${DISK}2 /mnt/boot
# Montar Subvolumes restantes
mount -vo $BTRFS_OPTS,subvol=@home /dev/mapper/$MAPPER /mnt/home
mount -vo $BTRFS_OPTS,subvol=@opt /dev/mapper/$MAPPER /mnt/opt
mount -vo $BTRFS_OPTS,subvol=@cache /dev/mapper/$MAPPER /mnt/var/cache
mount -vo $BTRFS_OPTS,subvol=@lightdm /dev/mapper/$MAPPER /mnt/var/lib/lightdm
mount -vo $BTRFS_OPTS,subvol=@libvirt /dev/mapper/$MAPPER /mnt/var/lib/libvirt
mount -vo $BTRFS_OPTS,subvol=@log /dev/mapper/$MAPPER /mnt/var/log
mount -vo $BTRFS_OPTS,subvol=@spool /dev/mapper/$MAPPER /mnt/var/spool
mount -vo $BTRFS_OPTS,subvol=@tmp /dev/mapper/$MAPPER /mnt/var/tmp
# Mount swap subvolume without compression or CoW for reliability
mount -vo defaults,noatime,subvol=@swap /dev/mapper/$MAPPER /mnt/var/swap
# Verify the mounts
lsblk -po name,size,fstype,uuid,mountpoints $DISK
Install the Debian 13 Base System with debootstrap
# Install debootstrap if not already installed
apt install -y debootstrap
# Install base Debian 13 (Trixie) system into /mnt
debootstrap --arch=amd64 trixie /mnt http://deb.debian.org/debian
# Mount necessary filesystems for chroot environment
for dir in dev proc sys run; do
mount -v --rbind "/${dir}" "/mnt/${dir}"
mount -v --make-rslave "/mnt/${dir}"
done
# Mount EFI variables (for UEFI systems)
mount -v -t efivarfs efivarfs /mnt/sys/firmware/efi/efivars
Configure fstab + crypttab
# 1. Obter UUIDs das partições físicas
BTRFS_UUID=$(blkid -s UUID -o value /dev/mapper/$MAPPER) ; echo "Btrfs UUID: $BTRFS_UUID"
BOOT_UUID=$(blkid -s UUID -o value ${DISK}2) ; echo "Boot UUID: $BOOT_UUID"
EFI_UUID=$(blkid -s UUID -o value ${DISK}1) ; echo "EFI UUID: $EFI_UUID"
LUKS_UUID=$(blkid -s UUID -o value ${DISK}3) ; echo "LUKS UUID: $LUKS_UUID"
# 2. Criar /etc/fstab (Sistema de Arquivos)
cat > /mnt/etc/fstab << EOF
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=$BTRFS_UUID / btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@ 0 0
UUID=$BTRFS_UUID /home btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@home 0 0
UUID=$BTRFS_UUID /opt btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@opt 0 0
UUID=$BTRFS_UUID /var/cache btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@cache 0 0
UUID=$BTRFS_UUID /var/lib/lightdm btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@lightdm 0 0
UUID=$BTRFS_UUID /var/lib/libvirt btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@libvirt 0 0
UUID=$BTRFS_UUID /var/log btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@log 0 0
UUID=$BTRFS_UUID /var/spool btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@spool 0 0
UUID=$BTRFS_UUID /var/tmp btrfs defaults,noatime,space_cache=v2,compress=zstd:3,subvol=@tmp 0 0
UUID=$BTRFS_UUID /var/swap btrfs defaults,noatime,subvol=@swap 0 0
UUID=$BOOT_UUID /boot ext4 defaults,noatime 0 2
UUID=$EFI_UUID /boot/efi vfat defaults,noatime 0 2
EOF
# 3. Criar /etc/crypttab (Criptografia)
cat > /mnt/etc/crypttab << EOF
# <target name> <source device> <key file> <options>
$MAPPER UUID=$LUKS_UUID none luks,discard
EOF
# 4. Verificar os arquivos criados
echo "=== /etc/fstab ==="
cat /mnt/etc/fstab
echo ""
echo "=== /etc/crypttab ==="
cat /mnt/etc/crypttab