Re bonsoir!!
Je viens de réussir, avec beaucoup beaucoup de mal, mais ça y est, c'est fait, du coup, je vais faire un petit tuto, ça devrait aider d'autre personnes!
Donc voici un tuto pour copier une installation de linux dans un autre disque dur et pouvoir booter dessus, tout en gardant certains dossier dans l'ancien disque dur.
-1) si jamais cette méthode est trop compliqué un personne sur un autre forum:
https://linuxfr.org/forums/general-general/posts/tentative-de-configuration-bizarrre-linux-sur-deux-disques-durs-avec-clonage-du-systeme#comment-1843065
m'a suggéré de réinstaller linux dans la nouvelle partition et de réinstaller les package que j'ai installé sur l'ancien disque dur par les commandes
# depart
dpkg --get-selections | awk '/installed/{print $1}' > une_liste_sympa
# arrivee
apt install $(grep -v '^lib' une_liste_sympa)
Ce qui n'est pas bête non plus et surement beaucoup plus simple, a vous de décidez de réinstaller linux ou de cloner linux, ce que j'explique ci dessous:
0.1 )Sauvegardez par prudence les fichiers que vous ne voulez pas perdre.
0.2) Créer une clef usb d'un linux bootable, si je ne dis pas de bétise les image d'ubuntu actuelles permettent à la fois l'installation d'ubuntu, aussi l'utilisation en live d'ubuntu , c'est à dire qu'on peut lancer ubuntu depuis la clefs. Indispensable pour certaines étapes et Indispensables si on fait une erreur de manipulation entre autre des fichiers GRUB. on trouve des tuto sur internet pour créer ces clefs.
1) Créer une partition EXT4 dans le SSD. Une taille de
40 Go devrait suffire, j'ai fait une partition trop grosse: 160Go cependant 40Go est pour moi trop petit, 80Go m'aurait fait l'affaire.
pour estimer l'espace nécessaire si vous voulez transférer tout les fichiers sauf /home faite:
cd /home
du -h -d 1
là vous obtenez la taille du dossier /home/
puis faites un
df -h
vous obtenez l'espace utilisé sur le disque racine
vous faites la soustraction "taille utilsée sur le disque racine" - "taille du dossier /home" et vous obtenez un estimation de la taille nécessaire pour votre nouvelle partition.
L'application
gnome-disks en mode graphique a fait l'affaire pour moi
Penser aussi à créer une partition swap sur votre SSD, il faut mieux que le swap soit sur un SSD que sur un disque dur, surtout si vous avez peu de mémoire vive. moi j'ai pas pensé à le faire
2) Transférer tous les répertoires Sauf le /home dans cette nouvelle partition
Pour cela il faut utiliser l'utilitaire
rsync car il permet de conserver les paramètres particuliers des fichiers. mais à partir d'une live clef, car il ne faut pas que le système actuel utilise les fichiers pendant qu'on les copie.
Booter sur la clef usb, en mode test de linux.
Pour obtenir l'uuid et le chemin /dev/sd* de votre partition, sur la ligne de commande faites:
sudo blkid
ou/ et
sudo lsblk
ou lancer
gnome-disks
Ca vous permettra d'identifier l'ancien disque dur et le nouveau SSD avec leur uuid.
Créez les dossiers /mnt/vieux_dd et /mnt/nouveau_dd
puis faites un
sudo mount -t ext4 /dev/sd(vieux disque dur) /mnt/vieux_dd
et
sudo mount -t ext4 /dev/sd(noveau disque dur) /mnt/nouveau_dd
Vérifiez que les disque sont bel et bien monté et contiennent bien ce qu'ils doivent contenir.
ensuite il faut utiliser l'utilitaire rsync pour transférer les fichiers:
si je me trompe pas il faut faire:
rsync --exclude '/home/utilisateur/' -aAHX /mnt/vieux_dd /mnt/nouveau_dd
ou mieux:
rsync --exclude '/home/utilisateur/*' -aAHX /mnt/vieux_dd /mnt/nouveau_dd
ce qui permet que rsync copie le dossier utilisateur sans son contenu, hors c'est important car le dossier /home et /home/utilisateur ont des droits particuliers
Les fichiers se copient.
3) Transférer tous les sous-répertoires de /home sauf ceux contenant tes données
pour copier les fichiers, ça, ça devrait fonctionner!
cd /mnt/vieux_dd/home/utilisateur
find . -maxdepth 1 -not -type d -exec sudo rsync -aAHX /mnt/vieux_dd/home/utilisateur/{} /mnt/nouveau_dd/home/bourdon/ \;
(j'ai fait un peu différent mais à moins d'une erreur de syntaxe ça doit marcher)
pour copier les dossiers que vous désirez et faire des liens symboliques vers le vieux dd voici ce que j'ai fait:
cd /mnt/vieux_dd/home/utilisateur
find . -maxdepth 1 -type d > fichier_texte_de_votre_choix
Ce fichier texte il faut l'éditer pour sélectionner les dossier à copier sur le nouveau disque dur et ceux dont il faut créer un liens symbolique car trop volumineux.
Dans un fichier j'ai mis la liste des dossier à copier et dans un autre la liste des dossier dont il faut créer un lien symbolique.
J'ai alors lancer les scripts:
#!/bin/bash
cd dossier_avec_les_fichiers_text
FILES_LIST="$(cat liste_des_dossiers_a_faire_en_symlink)"
OLDIFS="$IFS"
IFS="
"
cd /mnt/vieux_dd/home/utilisateur
for FILE in $FILES_LIST
do
echo sudo ln -s "/mnt/futur_point_de_montage_vieux_dd/home/bourdon/$FILE" "/mnt/nouveau_dd/home/bourdon/$FILE"
sudo ln -s "/mnt/futur_point_de_montage_vieux_dd/home/bourdon/$FILE" "/mnt/nouveau_dd/home/bourdon/$FILE"
echo sudo chown -P -h 1000:1000 "/mnt/nouveau_dd/home/utilisateur/$FILE"
sudo chown -P -h 1000:1000 "/mnt/nouveau_dd/home/utilisateur/$FILE"
done
IFS="$OLDIFS" # on remet la valeur d'origine
1000 étant mon numéro d'utilisateur, mais si le vôtre est différent, il faut renseigner le vôtre.
puis je copie les dossiers à copier par le script:
#!/bin/bash
cd dossier_avec_les_fichiers_text
FILES_LIST="$(cat liste_des_dossiers_a_copier)"
OLDIFS="$IFS"
IFS="
"
cd /mnt/vieux_dd/home/utilisateur
for FILE in $FILES_LIST
do
echo sudo rsync -aAHX "/mnt/vieux_dd/home/utilsateur/$FILE" /mnt/nouveau_dd/home/utilsateur/
sudo rsync -aAHX "/mnt/vieux_dd/home/utilsateur/$FILE" /mnt/nouveau_dd/home/utilsateur/
done
IFS="$OLDIFS" # on remet la valeur d'origine
voila.
J'ai peur que les scripts que je viens de retoucher soient buguées, dite le moi je corrigerai.
4) Mettre à jour le nouveau fichier /etc/fstab il doit contenir le nouvel UUID
Ainsi lors du démarrage de linux avec pour racine le nouveau disque dur, l'ancien disque dur et le swap seront monté aux bons endroits.
cd /mnt/nouveau_dd/etc/
sudo cp fstab /mnt/nouveau_dd/home/utilisateur/savegarde_fstab
sudo gedit fstab
pour ma part j'ai changé la ligne mount du dossier racine et le vieux disque dur, si vous avez créé un nouveau swap, pensez à le changer
UUID=cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6 / ext4 errors=remount-ro 0 1
/dev/mapper/ubuntu--vg-root /mnt/futur_point_de_montage_vieux_dd ext4 errors=remount-ro 0 1
5) Lancer boot-repair pour mettre à jour la structure de boot (contexte LEGACY ou EFI) ou faire manuellement si compétence.
Pour ma part j'ai eu du mal ici, et je n'ai pas utilisé boot-repair.
comment fonctionne grub: le firmware uefi de l'ordi charge grub à partir de la partition EFI du disque dur au démarrage.
grub alors lancé charge le fichier EFI/ubuntu/grub.cfg de la partition EFI qui indique à grub de charge le fichier grub.cfg de la partition linux dans /boot/grub/
Ce deuxième fichier grub.cfg donne les indications sur comment charger les noyaux linux avec quel paramètre etc...
il faut donc déjà indiquer au premier fichier grub.cfg dans l'EFI le bon disque dur:
pour ça j'ai d'abord modifié le fichier grub.cfg dans la partition EFI:
mkdir /mnt/efi
mount -t vfat /dev/sd-partition_EFI /mnt/efi
cd /mnt/efi/EFI/ubuntu/
sudo cp grub.cfg /mnt/nouveau_dd/home/utilisateur/grub_save.cfg
sudo gedit grub.cfg
pour que grub charge le fichier de configuration, le nouveau et l'initramfs à partir du nouveau dd, il faut donc changer cette ligne pour qu'elle pointe vers l'uuid du nouveau disque dur:
search.fs_uuid cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6 root
enfin
J'ai modifié le deuxième fichier grub.cfg dans /mnt/nouveau_dd/boot/grub/grub.cfg en faisant une sauvegarde pour qu'il précise de charger le bon noyau linux avec les bons paramètres dont celui de la partition root à monter.
J'ai ainsi dupliqué un bloc de menu dans lequel j'ai changé l'uuid du disque root pour l'uuid du nouveau_dd
menuentry 'Ubuntu2' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6' {
insmod part_gpt
insmod ext2
set root='UUID=cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4 cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6
else
search --no-floppy --fs-uuid --set=root cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6
fi
linux /boot/vmlinuz-5.4.0-66-generic root=UUID=cf320fa7-7ab0-4d06-8b0f-ca4aea0e6dd6 ro $vt_handoff
initrd /boot/initrd.img-5.4.0-66-generic
}
Je vous conseil donc de ne pas copier mon petit texte dans grub.cfg , mais de dupliquer une des menuentry qui fonctionne chez vous et de la modifier.
6) Booter avec le nouveau SSD et vérifier que c'est OK
Je reboote, et là après moulte correction ça marche!
Je n'ai plus qu'à lancer un
sudo update-grub2
qui est un script qui permet de générer à partir de plein de fichier dans /etc/grub, le deuxième fichier grub.cfg dans /boot/grub/ pour que ce fichier redevienne plus propre.
Je ne l'ai pas encore fait, j'espère que ça plantera pas 🙂 .... Après redémarrage: si ça fonctionne! youpi
7) Faire le montage automatique de la partition du disque dur voir paragraphe 2.11 de
https://doc.ubuntu-fr.org/gnome-disk-utility
8) Faire des liens symboliques pour tes données vers l'ancienne partition.
9) Vérifier que tout fonctionne bien
Espérant être utile!