Installer Linux en copiant

On n’a pas toujours une distribution sous la main pour réinstaller Linux (ou tout autre Unix, comme la famille BSD) sur un nouveau disque dur. Or c’est très facile d’installer le système en se contentant de copier les fichiers d’une autre installation.

Branchons le nouveau disque et démarrons sur l’ancien!

Pour faire simple ici, je partitionne le nouveau disque en deux : une partition de swap et tout dans le même système de fichier. Je place la partition de swap à la fin du disque et j’active la partition du système de fichier (on la rend bootable).

Copier les fichiers

  • Créer le système de fichier et le swap sans oublier de vérifier l’état du disque (noter les UUID ou les obtenir plus tard avec lsblk -f ou blkid). Monter le système de fichiers dans /mnt.
  • Tout copier, sauf /proc /sys /dev /run et /mnt, avec ~# cp -a source /mnt/ ou bien ~# cp -a -t /mnt/ source qui est plus pratique.
  • Créer /proc /sys /dev /run et /mnt (vides)
  • Voir la doc Linux From Scratch pour le remplissage de /dev :
~# mknod -m 600 /mnt/dev/console c 5 1
~# mknod -m 666 /mnt/dev/null c 1 3
~# mount -v --bind /dev /mnt/dev
  • Refaire /mnt/etc/fstab avec les UUID, il vaut mieux éviter les /dev parce que l’ordre des périphérique pourrait schanger quand on enlèvera l’ancien disque.

Installer le chargeur de démarrage (bootloader)

J’installe GRUB, la procédure est identique avec les autres. Il faut le faire depuis le nouveau système de fichier, en changeant la racine pour /mnt (chroot).

  • Monter les systèmes de fichiers virtuels :
~# mount -vt devpts devpts /mnt/dev/pts -o gid=5,mode=620
~# mount -vt proc proc /mnt/proc
~# mount -vt sysfs sysfs /mnt/sys
~# mount -vt tmpfs tmpfs /mnt/run
  • Changer la racine ~# chroot /mnt ; la racine / devient /mnt, toutes les opérations suivantes se font dans le chroot (/etc est en fait /mnt/etc, c’est transparent).
  • Modifier /etc/initramfs-tools/conf.d/resume (partition de swap pour l’hibernation) es refaire l’initramfs ~# mkinitramfs.
  • Modifier /boot/grub/grub.cfg ou utiliser grub-mkconfig (avec l’option -o et le nom du fichier de sortie, sinon ça n’en créera pas). Comme on a plusieurs disques, il vaut mieux utiliser des UUIDs plutôt que des noms de périphériques qui pourraient changer (de toute façon, GRUB ne nomme pas les périphériques comme sous Linux).
  • Installer GRUB ~# grub-install /dev/[nouveau disque]
  • Sortir du chroot, éteindre et redémarrer sur le nouveau disque.

Ou bien installer Grub une fois le système démarré

Pas facile d’avoir en tête le montage des systèmes de fichiers virtuels! On peut faire autrement, installer Grub sans chroot : il faut ajouter une entrée dans le fichier grub.cfg du disque source afin de pouvoir démarrer sur le nouveau disque (en gros, recopier l’entrée de l’ancien en changeant l’UUID). Redémarrer. Une fois démarré sur le nouveau disque, on lance ~# grub-mkconfig -o /boot/grub/grub.cfg puis ~# grub-install /dev/[nouveau disque], sans oublier de refaire l’initramfs.