Comment déplacer son /home sur une son disque secondaire et le chiffrer

J'ai récemment acheté un ordinateur avec un disque primaire et un disque secondaire. Je souhaitais avoir mon /home sur mon disque secondaire et le reste sur le disque primaire. Je voulais aussi que mes disques soient chiffrés.

À l'installation de mon système d'exploitation, je ne me souviens pas avoir eu le choix d'installer une partie sur mon disque secondaire donc tout a été installé sur le disque primaire, qui a été chiffré avec LUKS. J'ai donc dû apprendre à chiffrer mon disque secondaire et monter son contenu sur /home. Je me suis dit que ça ferait un bon billet de blog pour partager mes nouvelles connaissances.

Avant toutes choses, je n'ai pas d'immenses connaissances sur ce qu'il se passe entre le moment où j'appuie sur le bouton power de mon ordinateur et le moment où je vois un écran pour me connecter à ma session. J'ai appris quelques éléments sur le tas, il est donc possible que certains points soient sémantiquement imprécis, je vous prie de m'en excuser. Je les corrigerai si on me les remonte. Maintenant voyons ensemble ce que j'ai eu à faire !

Chiffrer le disque

J'ai d'abord chiffré mon disque avec LUKS grâce à la commande cryptsetup :

sudo cryptsetup -v luksFormat /dev/nvme0n1

Pour voir si ça fonctionne on peut tenter de l'ouvrir :

sudo cryptsetup open /dev/nvme0n1 home

Ici, home est le nom qui va être créé dans /dev/mapper/, donc on peut mettre ce que l'on veut.

Si ça fonctionne, on peut le refermer :

sudo cryptsetup close home

On a presque fini. On va ajouter ce mapping dans notre fichier /etc/crypttab. Cela va servir pour modifier notre fichier /etc/fstab plus tard car il lui faudra savoir le nom dans /dev/mapper pour le monter au démarrage de l'ordinateur.

Avant de modifier le fichier, il nous faut récupérer l'UUID à renseigner dans le fichier :

> sudo blkid | grep nvme0n1
/dev/nvme0n1: UUID="8348f8cf-bfb7-4c9d-a8c9-9b47fa132893" TYPE="crypto_LUKS"

Maintenant qu'on a récupéré l'UUID, on ouvre le fichier pour ajouter une ligne qui fera la correspondance entre le nom et l'UUID :

# <name>               <device>                         <password> <options>
luks-204c697d-d9c7-40fd-8bef-178fbe907479 UUID=204c697d-d9c7-40fd-8bef-178fbe907479     none luks
luks-68c29b73-d55c-4620-b306-b41297e15c55 UUID=68c29b73-d55c-4620-b306-b41297e15c55     none luks
# On ajoute notre ligne
luks-home UUID=8348f8cf-bfb7-4c9d-a8c9-9b47fa132893 none luks

Formatter le disque

Le disque doit posséder un système de fichier, on le formatte donc :

sudo mkfs.ext4 /dev/nvme0n1
# On doit pouvoir le monter désormais
sudo mount /dev/nvme0n1 /mnt

Un dossier lost+found est présent, c'est normal, pas de panique. Sans rentrer dans les détails, et parce que je ne veux pas dire de bêtises, ce dossier est utile quand des bouts de fichiers sont corrompus ou orphelins, ce qui peut arriver si l'ordinateur est éteint brusquement au milieu d'écriture je présume.

Je copie l'intégralité de mon /home actuel dans le disque pour ne rien perdre :

# Ne pas oublier les / à la fin des chemins
rsync -avxAX /home/ /mnt/

On monte le disque au démarrage

Les disques montés au démarrage sont renseignés dans le fichier /etc/fstab. On va donc ajouter une ligne à ce fichier pour dire à notre système où monter notre disque :

# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=2C67-2022                            /efi           vfat    fmask=0137,dmask=0027 0 2
/dev/mapper/luks-204c697d-d9c7-40fd-8bef-178fbe907479 /              ext4    noatime    0 1
/dev/mapper/luks-68c29b73-d55c-4620-b306-b41297e15c55 swap           swap    defaults   0 0
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0

# On ajoute notre ligne
/dev/mapper/luks-home /home ext4 defaults,noatime 0 2

L'option noatime permet d'éviter des écritures sur le disque pour enregistrer le dernier accès de chaque fichier lu. Cette option permet de gagner en performance.

Maintenant, on reboot et on s'assure que tout fonctionne. C'est le cas si on a bien un prompt supplémentaire au démarrage pour nous demander de déchiffrer le second disque.

On supprime l'ancien /home

Tout à l'heure, on a copié le contenu de notre /home sur notre second disque. Ce contenu est toujours présent. Il faut donc le supprimer.

D'abord, on va s'assurer que tout a fonctionné jusqu'au bout, c'est-à-dire que le disque déchiffré est bien monté sur /home :

> lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme1n1                                       259:0    0 232,9G  0 disk
├─nvme1n1p1                                   259:2    0     1G  0 part  /efi
├─nvme1n1p2                                   259:3    0 223,1G  0 part
│ └─luks-204c697d-d9c7-40fd-8bef-178fbe907479 254:1    0 223,1G  0 crypt /
└─nvme1n1p3                                   259:4    0   8,8G  0 part
  └─luks-68c29b73-d55c-4620-b306-b41297e15c55 254:0    0   8,8G  0 crypt [SWAP]
nvme0n1                                       259:1    0 931,5G  0 disk
└─luks-home                                   254:2    0 931,5G  0 crypt /home

Si tout est bon, vous devriez voir en dessous de votre disque, le nom que vous lui avez donné, et dans la colonne MOUNTPOINTS /home.

Il faut désormer démonter le disque :

sudo umount /home

Notre disque n'étant plus monté sur /home, le contenu qui était “masqué” par ce montage est donc de nouveau visible (il s'agit du /home initial que l'on va supprimer pour ne pas qu'il prenne inutilement de la place).

Vous pouvez le supprimer avec la commande rm ou le déplacer ailleurs au cas où, le temps de s'assurer que tout fonctionne correctement (on n'est jamais trop prudent·es).

Et vous pouvez remonter votre disque ou redémarrer votre machine, tout est fini !