Comment changer l'UUID du système de fichiers (2 même UUID)?

26

J'ai un OS invité fedora dans VMware. Je souhaite étendre la /bootpartition, alors j'ajoute un autre disque virtuel à cette machine virtuelle et j'essaie de cloner le disque.

Ensuite dd if=/dev/sda1 of=/dev/sdb1, blkidsignalez que / dev / sda1 et / dev / sdb1 ont le même UUID / GUID.

C'est bizarre qu'il y ait 2 mêmes UUID dans l'univers, comment changer l'un d'eux en une autre valeur UUID?


Mise à jour 2017-01-25

Le sujet a changé, UUID signifie ici UUID du système de fichiers, pas UUID de partition.

Comme il s'agit de l'UUID du système de fichiers, des utilitaires spécifiques au système de fichiers sont nécessaires pour modifier l'UUID ou utiliser hexeditor pour modifier les données brutes sur le disque ( DANGEREUX, déconseillé sauf si vous savez ce que vous faites ).

LiuYan 刘 研
la source
10
Ce n'est pas bizarre du tout. Lorsque vous clonez une partition avec dd, bien sûr, le clone aura le même UUID que l'original. L'UUID n'est que des métadonnées de la partition - pas une propriété inhérente d'un disque physique.
Andrew Medico,
Merci Andrew, je pensais que l'UUID est une valeur calculée avant la création d'une nouvelle partition. Maintenant je sais que c'est juste un truc de métadonnées.

Réponses:

28

Pour générer un nouvel UUID aléatoire, on peut utiliser:

$ uuidgen

La modification effective de l'UUID dépend du système de fichiers.

Supposons que le système de fichiers de la famille ext

# tune2fs -U <output of uuidgen> /dev/sdb1

Ou si vous êtes sûr qu'uuidgen va fonctionner:

# tune2fs -U $(uuidgen) /dev/sdb1

Supposons que le système de fichiers btrfs

# btrfstune -U $(uuidgen) /dev/sdb1

L'UUID est stocké dans le superbloc, donc une copie octet par octet du système de fichiers aura le même UUID.

Andy
la source
14
Andy, vous n'avez même pas besoin de la commande uuidgen: "tune2fs -U random / dev / sdb1" devrait fonctionner
correctement
Comment l'exécuter sur FAT?
CMCDragonkai
@CMCDragonkai, voir ma réponse.
LiuYan 刘 研
13

Utilisation:

tune2fs -U random /dev/sdb1

s'il s'agit d'un système de fichiers ext , ou

xfs_admin -U generate /dev/sdb1

s'il s'agit d'un système de fichiers xfs .


La raison pour laquelle la deuxième partition a le même UUID est parce ddque copie simplement les données d'un fichier dans un autre ( dd if=/dev/sda1 of=/dev/sdb1= cat /dev/sda1 > /dev/sdb1); ddne sait pas ce qu'est une partition, ni comment générer un UUID, il a donc simplement copié toutes les données telles quelles, y compris l'UUID, qui est stocké dans le superbloc du système de fichiers près du début de la partition.


Au fait,
je pense aussi que UUID (Universally Unique IDentifier) ​​est un nom étrange. Il devrait être appelé PGUID (éventuellement globalement unique IDentifier), ou mieux encore, juste ARLN (A Reasonably Large Number).

Zaz
la source
J'ai sauvegardé une de mes partitions sur / dev / sda6. J'obtiens l'erreur suivante: xfs_admin -U generate / dev / sda6 ERREUR: le système de fichiers a de précieux changements de métadonnées dans un journal qui doit être relu. Montez le système de fichiers pour relire le journal et démontez-le avant de relancer xfs_admin. Si vous ne parvenez pas à monter le système de fichiers, utilisez l'option xfs_repair -L pour détruire le journal et tenter une réparation. Notez que la destruction du journal peut entraîner une corruption - veuillez tenter un montage du système de fichiers avant de le faire.
gudge
+1 pour le mensonge sale et sale qu'est l'UUID ... puis-je également suggérer UNUID pour "Malheureusement, ID non unique"
Foon
Eh bien, je suggérerais un identifiant global unique (GUID) - "globalement" comme dans "généralement" ou "en général". Oh, attends ... n'est-ce pas vraiment son nom d'origine? ...
The Quark
11

Outre ext2 / ext3 / ex4 et xfs, vous pouvez également modifier l'UUID du système de fichiers ou du périphérique de bloc suivant.

Échanger

swaplabel -U $NEW_UUID

RAID logiciel (raid md)

Pour MD RAID, vous devez d'abord arrêter le RAID, puis mettre à jour l'UUID lors du réassemblage. Donc, si votre RAID est monté sur /, vous devez mettre à jour l'UUID en mode hors ligne - utilisez un CD live pour le faire.

  1. mdadm --stop $RAID_DEVICE
  2. mdadm --assemble $RAID_DEVICE --update=uuid --uuid=$NEW_UUID $MEMBER_DEVICES...

Exemple:

  1. mdadm --stop /dev/md127
  2. mdadm --assemble /dev/md127 --update=uuid --uuid=2A1D2A1D-2A1D-2A1D-2A1D-2A1D2A1D2A1D /dev/sda2 /dev/sdb2

Après la mise à jour de l'UUID, vous devrez peut-être mettre à jour grub.cfg( rd.md.uuid=$NEW_UUIDen linux/linuxefi/linux16ligne de commande) et / ou fstabet / ou mdadm.confet / ou update-initramfs(famille Debian) et / ou dracut --force(famille Red Hat) afin de pouvoir démarrer correctement la prochaine fois.

LUKS (cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

Exemple:

cryptsetup luksUUID --uuid=e0c0e0c0-e0c0-e0c0-e0c0-e0c0e0c0e0c0 ~/encrypted-LUKS.loop

FAT / NTFS / exFAT

C'est une autre histoire ici, il n'y a actuellement aucun utilitaire pour modifier l'UUID du système de fichiers de ces systèmes de fichiers(Voir la réponse de Reichhart - l' mlabeloutil), mais nous pouvons modifier les données brutes sur le disque pour ce faire.

AVERTISSEMENT, il est dangereux de modifier des données brutes sur le disque et pourrait perdre des données sans une opération minutieuse.

Voici les étapes détaillées pour modifier les données brutes sur le disque à l'aide hexedit.

  1. blkid, notez l'UUID du système de fichiers sur papier, ou souvenez-vous-en. La chaîne UUID de FAT / exFAT ressemble 1122-3344, la chaîne UUID de NTFS ressemble 1122334455667788.
  2. Ouvrir le périphérique de partition en utilisant hexedit

    hexedit <partition device such as /dev/sda1>

  3. Appuyez sur /, entrez l'UUID dans l'ordre inverse (si blkidsignalé 1234-ABCD, puis recherchez CDAB3412) pour rechercher les données UUID sur le disque.
  4. Une fois l'UUID localisé, modifiez-les, appuyez sur F2pour enregistrer et quitter.
  5. blkid pour vérifier l'UUID.
  6. Une fois l'UUID modifié, vous devrez peut-être mettre à jour grub.cfget / ou fstabpour pouvoir démarrer avec succès la prochaine fois.
  7. Exécutez fsck <partition device such as /dev/sda1>et voyez le message "Il existe des différences entre le secteur de démarrage et sa sauvegarde" . Pour le résoudre, sélectionnez "1) Copier l'original vers la sauvegarde" et si vous êtes invité à "Effectuer les modifications? (O / n)", vous appuyez sur y.
LiuYan 刘 研
la source
Qu'en est-il de hfs / hfs + ou hfsplus?
Wlad
1
Vous pouvez simplement utiliser mkfs.exfat -i 01234567 /dev/partitionnameoù la mkfs.exfatcommande a été installée par le paquet exfat-utils sur Fedora Linux. Vous devriez peut-être ajouter cela à votre réponse, car la variante hexedit est assez dangereuse!
erik
@erik Merci pour l'astuce, mais nous recherchons une méthode pour mettre à jour l'ancien UUID vers le nouvel UUID sur le système de fichiers existant ou le périphérique de bloc.
LiuYan 刘 研
Hé @LiuYan 刘 研 pour NTFS il y a un ntfslabeloutil. askubuntu.com/questions/642591/…
aaditya1234
6

Pour XFS, utilisez: xfs_admin -U <uuid> <device>

Utilisez xfs_admin -u <device>pour afficher un UUID (notez l'option en minuscules pour afficher et l'option en majuscules pour définir). Un autre article sur U&L a souligné la blkidcommande pour afficher tout ou partie des UUID sur le système.

vimmar
la source
2

Réponse partielle pour VFAT

Pour les systèmes de fichiers ext * et xfs, il existe déjà de bonnes réponses. Mais pour VFAT, je recommande fortement d' utiliser mlabel du paquet mtools. L'utilisation d'éditeurs hexadécimaux est DANGEREUSE.

Utilisez quelque chose comme ceci pour créer un nouvel UUID:

echo 'drive d: file="/dev/sdb3" exclusive' >>/etc/mtools.conf
mlabel -n d:
reichhart
la source
Si cela ne vous dérange pas de vérifier manuellement l'accès exclusif (comme avec toutes les autres commandes décrites ici), vous pouvez le faire comme une seule commandemlabel -n -i /dev/sdb3 ::
telcoM
2

BTRFS

sudo btrfstune -u /dev/sdaX

sudo btrfstune -U 0de6bd81-7013-49a8-bdc5-d832ed209d2c /dev/sdaX

L'exécution btrfsckest recommandée car la modification de l'UUID dans BTRFS n'est pas une opération atomique.

Avio
la source
1

Pour NTFS, vérifiez ce fil pour plus de détails.

Sommaire:

sudo ntfslabel --new-half-serial /dev/sdXN
aaditya1234
la source
0

Sous Fedora 27, j'ai trouvé que l'ordre des arguments joue un rôle crucial ... Vous devez d'abord écrire le périphérique, sinon l'UUID n'est pas modifié. Par exemple

tune2fs /dev/sdb1 -U random
Erich Küster
la source
1
Cela semble être un comportement inhabituel, au moins donné la page man oneline « s montrant la description -Uavant la device.
Jeff Schaller
0

Pour modifier la commande dd résultant de la partition de disque en double UUID / s - Utilisez GParted.

Dans l'interface utilisateur GParted, sélectionnez le lecteur, sélectionnez la partition, démontez la partition. Dans le «dossier de partition», choisissez «NOUVEL UUID», répétez jusqu'à ce que tous les uuid / s de partition dupliquée du lecteur dd soient marqués pour le remplacement. Pour les disques amorçables, ne remplacez pas l'uuid de la partition UEFI.

Vérifiez la lettre de lecteur et la ou les partitions sélectionnées - Tout est OK? ...

Cliquez sur l'icône «Appliquer toutes les opérations» sur l'interface utilisateur GParted.
Pour les disques amorçables, modifiez le fichier / etc / fstab UUID = chaîne / s et point / s de montage:

eromana
la source