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 !