Journal Installer Linux en copiant

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
33
27
sept.
2017

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 et très rapide d'installer un système Unix en se contentant de copier les fichiers d'une autre installation. Ça doit faire 25 ans que je ne l'avais pas fait, c'est l'occasion d'écrire un mémo pour le retrouver dans Google !

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 (ou avec rsync qui a beaucoup d'avantages).
  • Créer /mnt/proc /mnt/sys /mnt/dev /mnt/run et /mnt/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.d/.../resume (partition de swap pour l'hibernation) et refaire l'initramfs mkinitramfs.
  • Modifier /boot/grub/grub.cfg ou utiliser ~# grub-mkconfig (avec grub-mkconfig -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.

Temps passé : 10 minutes.

  • # Moi aussi :)

    Posté par  (site web personnel) . Évalué à 4. Dernière modification le 28 septembre 2017 à 09:26.

    Au boulot, pour 15 postes de travail, je maintiens une machine virtuelle comme modèle et lorsqu'une fois par ans (ou deux ans) je dois "dupliquer", je lance un "live" sur la machine virtuelle pour exécuter les commande suivantes :

    sudo -s
    apt update
    apt install sshfs
    mkdir /mnt/nomserveur && sshfs root@nomserveur:/mnt /mnt/nomserveur
    mkdir /mnt/sda1 && mount /dev/sda1 /mnt/sda1 && cd /mnt/sda1
    tar --xattrs --xattrs-include=* -czf /mnt/nomserveur/archimages/gnu-vm-sda1-root-$(date +"%Y%m%d%H%M").tar.gz *

    ↑ un certain temps…

    Ensuite, sur chaque poste, je démarre un "live" et j'exécute :

    sudo -s
    apt update
    apt install sshfs
    mkdir /mnt/nomserveur && sshfs root@nomserveur:/mnt /mnt/nomserveur
    
    gparted # pour formater sda2 (ext4)
    
    mkdir /mnt/sda2 && mount /dev/sda2 /mnt/sda1 && cd /mnt/sda2
    tar --xattrs -xpzf /mnt/nomserveur/archimages/gnu-vm-sda1-root-20170804.tar.gz
    mount -B /dev ./dev && mount -B /sys ./sys && mount -t proc none ./proc
    chroot ./
    
    grub-install --force /dev/sda2 # car j'utilise GAG
    update-grub
    sed -i 's|opxx|opxx|g' /etc/hosts
    sed -i 's|opxx|opxx|g' /etc/hostname
    
    blkid
    
    # Ctrl+D
    
    xed /mnt/sda1/etc/fstab

    ↑ ± 8 minutes par poste

    Attention ! ce ne sont pas des scripts ! Il s'agit de notes personnelles sur un wiki pour du copier coller avec prudence… Pour le hostname par exemple, il faut bien entendu adapter en fonction du nom que l'ont doit donner à la machine.

    • [^] # Re: Moi aussi :)

      Posté par  (site web personnel) . Évalué à 5.

      Deux remarques
      - Pas besoin de sshfs: ssh user@host cat archimages/gnu-vm-sda1-root-20170804.tar.gz|tar --xattrs -xpzf -
      - Pour 15 postes, autant envoyer l'image avec udp-sender, ce sera 1 fois 8 minutes ;)

    • [^] # Re: Moi aussi :)

      Posté par  (site web personnel) . Évalué à 8.

      Plutôt que d'installer (puis de maintenir) 15 fois le même système, pourquoi ne pas utiliser PXE (pour peu que les machines soient connectées en permanence) ? Comme ça la duplication du système se fait avec :

      • Appuyer sur le bouton de démarrage.

      C'est plus simple. non ?

      N.B.: Ce qui précède est une taquinerie, PXE n'est pas approprié pour tous les environnements de travail.

      « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

  • # Clonezilla ?

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    Moi j'utilise Clonezilla, bon il faut que le disque soit au moins de la même grandeur que l'original ou plus grand. Sinon il faut bricoler.

  • # installer GRUB sans chroot

    Posté par  (site web personnel) . Évalué à 2.

    Petite précision : cette solution permet de s'en sortir quand on n'a pas d'outil à disposition, ni d'accès internet, ni même d'accès réseau! Encore faut-il se souvenir de tout… Pour éviter les soucis avec le montage de /proc /dev et /sys dans le chroot, on peut simplifier l'installation de Grub :
    il faut modifier /boot/grub/grub.cfg sur l'ancien disque pour aller démarrer sur le nouveau (il suffit de changer l'UUID de la partition) ; une fois redémarré sur le nouveau disque on corrige /etc/initramfs-tools/conf.d/resume pour refaire l'image initramfs, on recrée un fichier /boot/grub/grub.cfg et on installe GRUB.

    "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # et puis aussi

    Posté par  (site web personnel) . Évalué à 8.

    Et puis il faut ensuite:

    • changer le hostname (/etc/hostname)
    • changer le d-bus uuid (dbus-uuidgen)
    • changer le machine-id (systemd-machine-id-setup)
    • vider les logs ??
    • recréer les certificats ssh et autres …
    • changer le mot de passe root
    • changer les utilisateurs et leur mot de passe ?
    • vérifier qu'il n'y a rien en statique pour l'IP et les routes
    • vérifier les cron-jobs
    • vérifier les scripts de backup (pour qu'il n'écrase pas celle de l'autre machine, ce serait ballot)
    • etc….
    • [^] # Re: et puis aussi

      Posté par  (site web personnel) . Évalué à 1.

      Je me disais bien qu'il devait y avoir des trucs que faisait une install en plus de copier les fichiers.

    • [^] # Re: et puis aussi

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 29 septembre 2017 à 11:05.

      C'est pour ça que j'ai marqué « réinstaller ». Dans mon esprit c'est une solution efficace pour remplacer un disque dur. Ou dépanner un ordi perso quand on n'a rien sous la main.
      Dans un cadre pro ça n'a pas grand intéret, sauf avec un Unix ancien, customisé à mort, figé, etc. Mais là encore c'est plutôt pour remplacer le matériel.
      Bref savoir qu'on peut le faire c'est utile.

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

    • [^] # Re: et puis aussi

      Posté par  (site web personnel) . Évalué à 3.

      • vérifier/nettoyer les spoolers (/var/spool) d'imprimante, de courriel, de tâches, etc. pour éviter de dupliquer des impressions, des courriels, etc.
      • changer le mailname (/etc/mailname)
      • modifier le /etc/sudoers qui peut contenir des noms de machine
      • mettre à jour les enregistrements DNS si nécessaire suivant les cas (NS, MX, SPF, SSHFP, etc.)
      • ajouter la supervision pour la nouvelle machine (au besoin)
      • les groupes de volumes et les volumes logiques LVM peuvent être nommés suivant le nom de la machine
      • etc.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.