1. Preparazione del disco
Identificare il disco (esempio: /dev/sdb):
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,TRAN,MODELAttenzione: tutti i dati sul disco verranno cancellati. Verificare di aver selezionato il disco corretto.
Per trovare il disco anche tramite ID univoco:
ls -la /dev/disk/by-id/ | grep sdb2. Creare la partizione GPT
Cancellare la tabella partizioni esistente e crearne una nuova:
sudo fdisk /dev/sdbComandi interattivi dentro fdisk:
g # crea una nuova tabella partizioni GPT
n # crea una nuova partizione
# premi Invio per accettare i default (partizione 1, primo e ultimo settore)
w # scrivi le modifiche ed esciImpostare il tipo di partizione corretto (Linux LUKS):
# Su NixOS: nix-shell -p gptfdisk --run "sudo sgdisk ..."
sudo sgdisk -t 1:CA7D7CCB-63ED-4C53-861C-1742536059CC /dev/sdbVerificare:
sudo sgdisk -p /dev/sdb
# Il Code dovrebbe essere 8309 (Linux LUKS)3. Criptare la partizione con LUKS
LUKS2 (default, consigliato)
sudo cryptsetup luksFormat /dev/sdb1Ti verrà chiesto di:
- Confermare con
YES(in maiuscolo) - Inserire la password (scegline una robusta)
- Confermare la password
Opzioni avanzate
Per specificare cifrario e dimensione chiave:
sudo cryptsetup luksFormat \
--type luks2 \
--cipher aes-xts-plain64 \
--key-size 512 \
--hash sha512 \
--iter-time 5000 \
/dev/sdb1--type luks2: formato LUKS versione 2--cipher aes-xts-plain64: cifrario AES-XTS (standard e veloce)--key-size 512: 512 bit per AES-XTS (equivale a AES-256)--hash sha512: algoritmo hash per la derivazione della chiave--iter-time 5000: millisecondi per la derivazione (più alto = più sicuro ma più lento all’apertura)
4. Creare il filesystem
Aprire il volume criptato:
sudo cryptsetup luksOpen /dev/sdb1 ssd_esternoCreare il filesystem ext4:
sudo mkfs.ext4 -L "SSD_Personal" /dev/mapper/ssd_esterno-L "SSD_Personal": etichetta del filesystem (opzionale, utile per identificarlo)
Per un filesystem diverso:
# Btrfs (supporta snapshot, compressione)
sudo mkfs.btrfs -L "SSD_Personal" /dev/mapper/ssd_esterno
# XFS (buone performance con file grandi)
sudo mkfs.xfs -L "SSD_Personal" /dev/mapper/ssd_esterno5. Aprire, montare e smontare
Processo completo di apertura
# 1. Apri il volume LUKS (ti chiede la password)
sudo cryptsetup luksOpen /dev/sdb1 ssd_esterno
# 2. Crea il mount point (solo la prima volta)
sudo mkdir -p /mnt/usb_ssd_personal
# 3. Monta il filesystem
sudo mount /dev/mapper/ssd_esterno /mnt/usb_ssd_personal
# 4. (Opzionale) Dai i permessi al tuo utente
sudo chown $USER:$USER /mnt/usb_ssd_personalProcesso completo di chiusura
# 1. Assicurati di non essere dentro la directory montata
cd ~
# 2. Smonta il filesystem
sudo umount /mnt/usb_ssd_personal
# 3. Chiudi il volume LUKS
sudo cryptsetup luksClose ssd_esternoSe il disco risulta occupato:
# Vedi cosa lo sta usando
sudo lsof +f -- /mnt/usb_ssd_personal
# Oppure forza lo smontaggio (lazy umount)
sudo umount -l /mnt/usb_ssd_personalUsare il percorso by-id (più affidabile)
Il nome /dev/sdb1 può cambiare ad ogni collegamento. Meglio usare il percorso stabile:
sudo cryptsetup luksOpen /dev/disk/by-id/usb-ATA_CT1000BX500SSD1_0123456789ABCDE-0:0-part1 ssd_esternoPer trovare il tuo percorso:
ls -la /dev/disk/by-id/ | grep part16. Aggiungere un keyfile per il mount automatico
Un keyfile permette di aprire il volume LUKS senza digitare la password. La password resta comunque funzionante come metodo alternativo.
Creare il keyfile
# Crea la directory
sudo mkdir -p /etc/secrets
# Genera 4096 byte casuali
sudo dd if=/dev/urandom of=/etc/secrets/ssd-luks.key bs=4096 count=1
# Permessi restrittivi (solo root può leggerlo)
sudo chmod 400 /etc/secrets/ssd-luks.key
sudo chown root:root /etc/secrets/ssd-luks.keyAggiungere il keyfile al volume LUKS
sudo cryptsetup luksAddKey /dev/sdb1 /etc/secrets/ssd-luks.keyTi chiederà una password esistente per autorizzare l’aggiunta.
Verificare che funzioni
# Chiudi il volume se è aperto
sudo umount /mnt/usb_ssd_personal
sudo cryptsetup luksClose ssd_esterno
# Riapri usando il keyfile (nessuna password richiesta)
sudo cryptsetup luksOpen --key-file /etc/secrets/ssd-luks.key /dev/sdb1 ssd_esternoAprire con keyfile manualmente
sudo cryptsetup luksOpen --key-file /etc/secrets/ssd-luks.key /dev/sdb1 ssd_esterno
sudo mount /dev/mapper/ssd_esterno /mnt/usb_ssd_personal7. Gestione delle chiavi LUKS
LUKS supporta fino a 8 slot per chiavi (0-7). Ogni slot può contenere una password o un keyfile.
Vedere gli slot in uso
sudo cryptsetup luksDump /dev/sdb1 | grep -A 1 "Keyslot"Aggiungere una nuova password
sudo cryptsetup luksAddKey /dev/sdb1
# Ti chiede: password esistente, poi nuova password (2 volte)Rimuovere una password specifica
# Rimuovi per slot number
sudo cryptsetup luksKillSlot /dev/sdb1 1
# Oppure rimuovi chiedendo quale password eliminare
sudo cryptsetup luksRemoveKey /dev/sdb1Cambiare una password
sudo cryptsetup luksChangeKey /dev/sdb1
# Ti chiede: password attuale, poi nuova password (2 volte)8. Backup dell’header LUKS
L’header LUKS contiene le chiavi di criptazione. Se si corrompe, tutti i dati sono persi. Fai sempre un backup.
Creare il backup
sudo cryptsetup luksHeaderBackup /dev/sdb1 \
--header-backup-file ~/luks-header-backup.binConserva questo file in un luogo sicuro (chiavetta USB separata, cloud criptato, ecc.).
Ripristinare l’header
sudo cryptsetup luksHeaderRestore /dev/sdb1 \
--header-backup-file ~/luks-header-backup.bin9. Troubleshooting
“Device is busy” durante lo smontaggio
# Controlla cosa usa il disco
sudo lsof +f -- /mnt/usb_ssd_personal
# Controlla di non essere dentro la directory
cd ~
# Se necessario, lazy umount
sudo umount -l /mnt/usb_ssd_personalLa partizione viene vista come “unknown”
Il tipo di partizione GPT non è impostato correttamente:
sudo sgdisk -t 1:CA7D7CCB-63ED-4C53-861C-1742536059CC /dev/sdbVerificare lo stato SMART del disco
sudo smartctl -a /dev/sdbValori importanti da controllare:
Reallocate_NAND_Blk_Cnt: deve essere 0Percent_Lifetime_Remain: percentuale di vita consumataUDMA_CRC_Error_Count: errori interfaccia (cavetto/porta USB)Reported_Uncorrect: errori non correggibili (se > 0, il disco potrebbe essere in cattivo stato)
Il disco non viene riconosciuto su altre macchine
Controllare:
- Il tipo di partizione GPT sia corretto (vedi sopra)
- Che la macchina abbia
cryptsetupinstallato - Che il kernel supporti il cifrario usato (normalmente
aes-xts-plain64è supportato ovunque)
# Verifica che il modulo kernel sia caricato
lsmod | grep dm_crypt
# Se non lo è:
sudo modprobe dm_cryptControllare l’integrità del filesystem
# Il volume deve essere aperto ma NON montato
sudo cryptsetup luksOpen /dev/sdb1 ssd_esterno
sudo fsck /dev/mapper/ssd_esterno