Journal Une méthode inefficace pour remplacer un disque dur

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
57
22
oct.
2024

Sommaire

Bonjour 'nal,

J'étais tranquille en train de m'occuper de mes propres affaires quand soudain il n'y avait plus beaucoup de place sur le disque du NAS à la maison. Cela faisait des mois et des mois que l'on se battait pour gratter un giga par ici, un gigot par là, et force est de constater que la situation ne s'améliorait pas. 500 GB remplis à ras bord et plus grand chose à supprimer.

Bon allez je cède, je commande un SSD 1 TB en remplacement, et tant qu'a faire je vais changer les disques mécaniques des autres ordis. Allez hop, c'est parti pour le grand remplacement.

dd

Le NAS est en réalité un vieil Eee PC dans lequel le disque n'est pas facilement accessible. Il faut démonter le clavier, puis dévisser et retirer le cache, et enfin débrancher une nappe pour pouvoir retirer le support sur lequel le disque est vissé. J'en ai profité au passage pour casser une prise de la nappe, non sans m'étonner qu'il faille forcer autant pour la décoincer. Bah en fait il ne fallait pas forcer, comme pour les huit milles fois où j'ai abîmé un truc en forçant… C'est une leçon qui a du mal à rentrer.

Heureusement dans ce cas j'ai pu remettre la nappe en place, bien fixée. La petite nappe du touchpad, quant à elle, refuse de tenir en place dans son slot fendu, vestige d'une époque où je démontais les ordis en forçant. Heureusement cette époque est révolue. Mais bon, on s'en fiche, qui a besoin d'un touchpad sur un NAS ?

J'ai donc sorti l'ancien disque, et comme je n'avais pas envie de me refaire une installation du système je me suis dit, pas bête, que j'allais simplement transférer les données de l'ancien disque au nouveau à coup de dd. Je suis un vrai hacker, tellement malin et ingénieux. Il s'avère après coup que c'était en fait la pire idée.

Les deux disques branchés via des boîtiers USB sur un autre ordi, je lance la commande. Ça prend un peu plus de 5 h à 30 MB/s. sans surprise. On en a déjà parlé lors d'une précédente anecdote, l'USB en pratique n'est pas aussi efficace qu'en théorie.

Une fois la copie terminée je lance GParted. Il me sort un message au sujet d'un backup GPT incorrect que je ne comprends pas et me propose de corriger lui-même le problème. Allez, fais donc ça. Ensuite il me présente bien les trois partitions : GPT, /boot, et / ; cette dernière étant chiffrée. J'étends / pour occuper tout l'espace puis je remets le disque dans le NAS.

Ça démarre sans problème. J'entre le mot de passe du disque, ça passe, puis le boot se termine correctement. J'entre le login et le mot de passe, puis je vérifie que l'opération a bien donné le résultat attendu.

$ df --human-readable
Filesystem             Size  Used  Avail  Capacity  Mounted on
/dev/sda2                1G  430M   570M       42%  /boot
/dev/mapper/ubuntu-vg  500G  498G     2M       99%  /

Bah ! Où qu'il est mon tera ?

resize2fs

Un coup de fdisk --list indique que les partitions ont bien la taille attendue ; tout le disque est occupé. Tout ? Tout. Je ne sais pas ce qu'il se passe et je fais l'hypothèse qu'il y a une différence entre la taille telle qu'indiquée dans la table des partitions et celle vue par ext4. À moins que ce soit le LVM entre les deux ? Nouvelle stratégie :

$ resize2fs /dev/mapper/ubuntu-vg
resize2fs: New size results in too many block group descriptors.

Ah mais c'est pas vrai, il n'y a rien qui marche à la fin ! Après une petite recherche sur le web je trouve un internaute prétendant que je fais n'importe quoi. Pfff, qu'est-ce qu'il y connaît ce tytso ?

Bon, okay, je remballe ma fierté… Ça fait pas loin de huit heures que je jongle avec des étrons sans le savoir.

Device UUID

Tant pis, me dis-je, je vais formater le disque correctement et transférer les données d'un disque à l'autre avec rsync. Comme je n'ai pas envie de bosser sur le NAS poussif je sors à nouveau le disque, je le remets dans un boitier USB et je rebranche tout sur l'autre ordi. Il s'avère après coup que c'était en fait la pire idée.

Sur l'autre ordi, c'est le bazar. GParted n'arrive pas à créer les partitions. Il me sort toujours l'erreur au sujet de GPT. Je lance fdisk mais celui-ci me sort la même erreur. Un internaute me conseille de supprimer et recréer les partitions aux mêmes offsets, sans effacer les données. C'est rigolo, et un peu flippant, mais ça ne change rien.

Et soudain la lumière. Je vois dans la sortie de fdisk que les deux disques ont le même UUID. J'en débranche un, et hop plus de problème de GPT. Il semblerait que le système n'y voit plus très clair quand deux ressources ont le même Universally Unique IDentifier. Qui aurait pu prévoir ?

Après avoir changé l'UUID du disque grâce à l'aide du web (bien pratique ce recueil de connaissances) je remets d'équerre la partition chiffrée. Je monte la partition, tout à l'air okay. Je rebranche le second disque, 🎵touc-ta🎵ta-touc🎵 (sons de GNOME qui monte puis démonte le disque). Tiens tiens, me dis-je, on dirait que Nautilus buggue. M'en fiche, je n'ai pas besoin de l'UI, je vais monter la partition dans le terminal.

mount: unknown filesystem type 'LVM2_member'

Vazyyyyyy keskya encore ? À nouveau, une petite recherche sur le web me donne rapidement la réponse (décidément ce web est sacrément pratique). Il s'avère que les deux disques externes ont chacun un groupe de volumes, et que ces groupes ont le même nom. Ça devient compliqué pour le système. Quelle bonne idée d'avoir fait un dd !

rsync

Finalement je renomme le groupe de volumes, ce qui me permet de monter les deux disques. Un coup de rsync --archive et six heures plus tard je peux remettre le disque dans le NAS. Ça boute, reste à entrer le mot de passe pour déchiffrer le disque.

Not enough available memory to open a keyslot.

Bon okay, je dois être installé sur un cimetière indien ou un truc dans le genre. Nouvelle recherche sur le web (bien pratique cet outil), j'y apprends que le chiffrement appliqué par Luks dépend des ressources du système, alors évidemment il s'est basé sur l'ordi sur lequel j'ai fait les manips, plus puissant que l'Eee PC. Là où j'avais branché les disques en externe. Pour. Gagner. Du. Temps.

grub-install

Allez allez, on perd pas le moral. Je remets le disque dans le NAS et je démarre sur une distribution live pour refaire tout le partitionnement. Aucun souci ici si ce n'est que les menus en texte du live d'Ubuntu Server sont en blanc sur fond jaune. C'est illisible mais en plissant les yeux j'arrive à faire mes manips. Je sors ensuite à nouveau le disque que je branche en externe sur l'autre ordi. Le disque apparaît correctement partitionné et il est maintenant vierge et bien monté. Je peux voir les deux disques externes en même temps. Je copie les données de l'un à l'autre avec rsync et il ne reste plus qu'à remettre GRUB. Ça franchement c'est fastoche, je l'ai fait plein de fois.

$ cryptsetup luksOpen /dev/sdb3
$ mount /dev/mapper/nas-vg /mnt
$ mount /dev/sdb2 /mnt/boot
$ mount --bind /dev /mnt/dev
$ mount --bind /proc /mnt/proc
$ mount --bind /sys /mnt/sys
$ chroot /mnt
$ grub-install /dev/sdb

Ceci terminé je remets le disque dans le NAS, je l'allume, eeeeeeeeeeeet… pas de GRUB. Enfin si, mais il me dit qu'il ne sait pas quoi faire.

update-initramfs

Après une courte recherche (je te laisse deviner où j'ai trouvé l'info) j'apprends que j'aurais dû lancer update-initramfs -u -k all à la suite des commandes précédentes. Pas de souci, je fais ça à partir du système live.

cryptsetup: WARNING: failed to detect canonical device of overlayfs
cryptsetup: WARNING: could not determine root device from /etc/fstab

Rhô là là ça sent pas bon encore. Après un petit tour sur le web. Je comprends qu'il y a une incohérence entre les UUIDs des partitions tels qu'indiqués par lsblk --fs et ceux notés dans /etc/fstab et /etc/crypttab. Quelle bonne idée d'avoir fait un rsync !

Après avoir aligné ces deux derniers avec la sortie de lsblk je relance update-initramfs qui se termine sans erreur ni avertissement. Je redémarre le NAS, entre la clé du disque… tout se passe bien.

$ df --human-readable
Filesystem          Size  Used Avail Use% Mounted on
/dev/mapper/nas-vg  914G  434G  434G  51% /
/dev/sda2           2.0G  181M  1.7G  10% /boot

C'était vraiment trop facile.

Conclusion

Des fois on pense gagner du temps en étant malin et finalement ce n'est que de la perte. On essaye alors de sauver la face en se disant qu'on a appris des trucs.

Des fois ont fait des trucs alors qu'on sait très bien que c'est une mauvaise idée. Parfois on s'y est même déjà brûlé plusieurs fois (RIP la nappe du touchpad).

Cette histoire illustre ce qui peut arriver quand on combine les deux : un enchaînement de mauvaises idées et de prises de décision en étant mal informé, le tout pour une perte de temps maximale. Si j'étais payé à l'énergie dépensée j'aurais fait fortune.

Pour les autres ordis j'ai opté pour un formatage complet suivi d'un rsync de $HOME uniquement. J'ai quand même eu quelques pépins mais rien d'aussi pénible qu'ici.

Un grand merci à tous les usagers du web qui prennent le temps d'expliquer leurs problèmes et à ceux qui se donnent la peine de proposer des solutions. J'espère que cet espace d'échanges ouverts va conserver cet état d'esprit et ne va pas se faire pourrir par des parasites.

Au moins j'aurai appris des trucs.

  • # LVM etc.

    Posté par  . Évalué à 10 (+11/-0). Dernière modification le 22 octobre 2024 à 23:29.

    Effectivement, comme tu as vu, tu n'étais probablement pas loin mais qui dit /dev/mapper/ubuntu-vg dit LVM (il y a un Volume Group).
    Il fallait donc se préoccuper du Volume Group et du Physical Volume, mais c'est assez facile de redimensionner tout le bazar, même au passage le FS qui est dedans.
    Dans ce cas, j'ai toujours tendance à oublier les commandes exactes alors je regarde le wiki de ArchLinux (et cette page comme pense-bête).

    Par ailleurs, GNU dd rescue est vraiment génial pour copier des volumes bloc, c'est toujours un bonheur d'utiliser ce programme.

    Et si tu veux copier une table des partitions tu peux utiliser

    sgdisk --replicate=/dev/NEW /dev/OLD ### ATTENTION A L'ORDRE !!

    ou bien

    sgdisk --randomize-guids --replicate=/dev/NEW /dev/OLD ### ATTENTION A L'ORDRE !!
    (pour avoir des UUID différents)

    (c'est une commande assez pratique alors je la donne à toute fin utile)

    Mais je suis étonné que tu te sois retrouvé avec des partitions de la bonne taille, il me semble que lorsque tu copies un volume bloc de A vers B il faut aussi redimensionner les partitions (lorsque B est plus grand que A).

    • [^] # Re: LVM etc.

      Posté par  . Évalué à 6 (+4/-0).

      très certainement un pvresize aurait fait l'affaire dans le cas présent. Effectivement, Archwiki est top et assez facilement transposable sur d'autres distributions linux.

      • [^] # Re: LVM etc.

        Posté par  . Évalué à 10 (+10/-0).

        tant qu'a jouer avec lvm, une autre soluce était de mettre les 2 disques dans un pc, de formater le nouveau et de le rajouter comme pv dans le vg, puis demander a lvm de bouger les lv sur le nouveau pv. Une fois terminé on peut retirer l'ancien pv, et zou - modulo le transfert de /boot, grub et autres petits détails pour gerer le boot of course.

      • [^] # Re: LVM etc.

        Posté par  (site web personnel) . Évalué à 10 (+10/-0).

        En fait avec LVM et les deux disques branchés en parallèle, tu aurais pu faire toute la transition en douceur (vgextend, pvmove, vgreduce), en dehors de la réinstallation de grub et la mise à jour de l'initramfs. LVM est justement fait pour ça.

        Adhérer à l'April, ça vous tente ?

  • # J'ai la réponse

    Posté par  . Évalué à 9 (+7/-0).

    Merci pour le billet bien rigolo à lire.

    Mais il m'a surtout rappelé les quelques galères de ce genre que j'ai connu moi aussi (des pbs de disques qui rendent fou, des tables GPT corrompues, des connecteurs cassés avec mes gros doigts etc). Parfois, j'en devenait même à me dire que plutôt que d'apprendre des trucs on est en fait mis de manière de plus en plus impitoyable face à sa propre bêtise.

    Après une courte recherche (je te laisse deviner où j'ai trouvé l'info)

    facile, elle est pas loin: sur liuxfr.org à présent.

    "Si tous les cons volaient, il ferait nuit" F. Dard

  • # man pvmove / lvresize

    Posté par  (Mastodon) . Évalué à 6 (+4/-1). Dernière modification le 23 octobre 2024 à 14:45.

    https://linux.die.net/man/8/pvmove
    https://linux.die.net/man/8/lvresize

    Ça t'aurais fais sans doute gagner du temps de lire ces 2 manpages.

  • # Clonezilla n'aurais pas été plus "simple"

    Posté par  . Évalué à 3 (+2/-0).

    J'ai utilisé que peu clonezilla (mais content de son utilisation), encore moins avec du lvm et consorts, mais cela n'aurait-il pas été plus simple, avec derrière un coup de gparted ?

    Comme dit, je connais pas trop le fonctionnement de lvm, donc cest peut-être pas jouable du tout avec ce type d'outil.

    Merci pour le partage en tout cas, c'était plaisant à lire, et intéressant sur le côté "découverte et choix techniques pour aller vite", mais cumulé cest pas si rapide que prévu 😁😁

    Vivement ta migration sur un ssd de 4To, pour voir si tu refais les mêmes erreurs 🫣😉

    • [^] # Re: Clonezilla n'aurais pas été plus "simple"

      Posté par  . Évalué à 2 (+1/-0).

      Je fais bien avec dd, je viens encore de le refaire, de partition à partition, dd if=/dev/sda1 of=/dev/nvme0n1p1 mais j'utilise encore les partitions msdos, donc pas gpt, pas de lvm non plus, ni de cryptage, ni d'uefi j'en suis à des années lumières, je ne sais même pas exactement de quoi il s'agit ou comment l'utiliser. Il ne me reste qu'à arranger l'uuid éventuellement avec tune2fs -U . Je me garde bien de faire tout le disque secteur de boot compris.

      Au premier démarrage comme c'est un disque M2, cela a coincé en bootant sur /dev/nvme0n1p1. J'ai eu peur de devoir me coller au gpt uefi ou je ne sais quoi et puis non cela ne bootait pas car comme je n'avais pas de disque M2, le module nvme n'était pas chargé, et l'initrd ne l'avait pas. Une fois refait l'initrd ça roule .

Envoyer un commentaire

Suivre le flux des commentaires

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