Как изменить UUID файловой системы (2 одинаковых UUID)?

26

У меня есть гостевая ОС fedora в VMware. Я хочу расширить /bootраздел, поэтому я добавляю другой виртуальный диск к этой виртуальной машине и пытаюсь клонировать диск.

После dd if=/dev/sda1 of=/dev/sdb1этого blkidсообщите, что / dev / sda1 и / dev / sdb1 имеют одинаковый UUID / GUID.

Странно, что в юниверсе есть 2 одинаковых UUID. Как изменить одно из них на другое значение UUID?


Обновление 2017-01-25

Тема изменена, здесь UUID означает UUID файловой системы, а не UUID раздела.

Поскольку это UUID файловой системы, утилиты, специфичные для файловой системы, необходимы для изменения UUID или использования hexeditor для изменения необработанных данных на диске ( ОПАСНО, не рекомендуется, если вы не знаете, что делаете ).

LiuYan 刘 研
источник
10
Это совсем не странно. Когда вы клонируете раздел с помощью dd, конечно, у клона будет тот же UUID, что и у оригинала. UUID - это просто метаданные раздела, а не какое-то внутреннее свойство физического диска.
Эндрю Медико
Спасибо, Андрей, я думал, что UUID - это вычисленное значение до того, как был создан новый раздел. Теперь я знаю, что это просто метаданные.

Ответы:

28

Чтобы сгенерировать случайный новый UUID, можно использовать:

$ uuidgen

Фактическое изменение UUID зависит от файловой системы.

Предполагая файловую систему ext-family

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

Или, если вы уверены, что uuidgen будет работать:

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

Предполагая файловую систему btrfs

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

UUID хранится в суперблоке, поэтому побайтная копия файловой системы будет иметь тот же UUID.

Энди
источник
14
Энди, тебе даже не нужна команда uuidgen: "tune2fs -U random / dev / sdb1" должна работать нормально
grzuy
Как запустить его на FAT?
CMCDragonkai
@CMCDragonkai, посмотри мой ответ.
LiuYan 研 研
13

Использование:

tune2fs -U random /dev/sdb1

если это файловая система ext , или

xfs_admin -U generate /dev/sdb1

если это файловая система XFS .


Причина, по которой второй раздел имеет такой же UUID, заключается в том, что ddпросто копирует данные из одного файла в другой ( dd if=/dev/sda1 of=/dev/sdb1= cat /dev/sda1 > /dev/sdb1); ddне знает, что такое раздел или как генерировать UUID, поэтому он просто скопировал все данные, как есть, включая UUID, который хранится в суперблоке filysystem рядом с началом раздела.


Кстати,
я также думаю, что UUID (Universally Unique IDentifier) ​​- странное имя. Он должен называться PGUID (возможно, глобально уникальный идентификатор) или, что еще лучше, просто ARLN (достаточно большое число).

Zaz
источник
Я зарезервировал один из моих разделов на / dev / sda6. Я получаю следующую ошибку: xfs_admin -U generate / dev / sda6 ОШИБКА: файловая система содержит ценные изменения метаданных в журнале, которые необходимо воспроизвести. Смонтируйте файловую систему для воспроизведения журнала и размонтируйте его перед повторным запуском xfs_admin. Если вы не можете смонтировать файловую систему, используйте опцию xfs_repair -L, чтобы уничтожить журнал и попытаться восстановить. Обратите внимание, что уничтожение журнала может привести к повреждению - пожалуйста, попробуйте смонтировать файловую систему, прежде чем делать это.
gudge
+1 за грязную грязную ложь, которая является UUID ... могу я также предложить UNUID для "К сожалению, не уникальный идентификатор"
Foon
Ну, я бы предложил глобальный уникальный идентификатор (GUID) - «глобально», как в «общем» или «в общем». Ой, подождите ... разве это не его первоначальное название? ...
Кварк
11

Помимо ext2 / ext3 / ex4 и xfs, вы также можете изменить UUID следующей файловой системы или блочного устройства.

Поменять местами

swaplabel -U $NEW_UUID

Программный RAID (MD Raid)

Для MD RAID необходимо сначала остановить RAID, а затем обновить UUID при повторной сборке. Поэтому, если ваш RAID-массив подключен /, вам нужно обновить UUID в автономном режиме - для этого используйте live CD.

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

Пример:

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

После обновления UUID вам может потребоваться обновить grub.cfg( rd.md.uuid=$NEW_UUIDв linux/linuxefi/linux16командной строке) и / или fstabи / или / mdadm.confи / или update-initramfs(семейство Debian), и / или dracut --force(семейство Red Hat), чтобы вы могли успешно загрузиться в следующий раз.

ЛУКС (cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

Пример:

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

FAT / NTFS / exFAT

Это другая история здесь, в настоящее время нет утилит для изменения UUID файловой системы этих файловых систем.(См . Ответ Рейххарта - mlabelинструмент), но мы можем изменить необработанные данные на диске, чтобы сделать это.

ВНИМАНИЕ, изменять необработанные данные на диске опасно, и они могут быть потеряны без тщательной эксплуатации.

Вот подробные шаги, чтобы изменить необработанные данные на диске, используя hexedit.

  1. blkidЗапишите UUID файловой системы на бумаге или запомните. Строка UUID в FAT / exFAT выглядит так 1122-3344, как выглядит строка UUID в NTFS 1122334455667788.
  2. Открыть раздел устройства с помощью hexedit

    hexedit <partition device such as /dev/sda1>

  3. Нажмите /, введите UUID в обратном порядке (если blkidсообщается 1234-ABCD, затем CDAB3412выполните поиск) для поиска данных UUID на диске.
  4. Когда UUID найден, измените его, нажмите, F2чтобы сохранить и выйти.
  5. blkid проверить UUID.
  6. После изменения UUID может потребоваться обновление grub.cfgи / или fstabзагрузка в следующий раз.
  7. Выполните fsck <partition device such as /dev/sda1>и увидите сообщение «Есть различия между загрузочным сектором и его резервной копией» . Чтобы решить эту проблему, выберите «1) Копировать оригинал в резервную копию» , и, если вас спросят «Выполнить изменения? (Да / нет)» , нажмите y.
LiuYan 刘 研
источник
Как насчет hfs / hfs + или hfsplus?
Wlad
1
Вы можете просто указать, mkfs.exfat -i 01234567 /dev/partitionnameгде mkfs.exfatкоманда была установлена ​​пакетом exfat-utils в Fedora Linux. Может быть, вы должны добавить это к своему ответу, так как вариант hexedit довольно опасен!
Эрик
@erik Спасибо за совет, но мы ищем способ обновить старый UUID до нового UUID в существующей файловой системе или блочном устройстве.
LiuYan 研 研
Привет @LiuYan 研 研 для NTFS есть ntfslabelинструмент. askubuntu.com/questions/642591/…
aaditya1234
6

Для XFS используйте: xfs_admin -U <uuid> <device>

Используйте xfs_admin -u <device>для просмотра UUID (обратите внимание на строчную букву для просмотра, в отличие от прописной). В другом посте на U & L была указана blkidкоманда для просмотра всех или некоторых UUID в системе.

vimmar
источник
2

Частичный ответ для VFAT

Для файловых систем ext * и xfs уже есть хорошие ответы. Но для VFAT я настоятельно рекомендую использовать mlabel из пакета mtools. Использование шестнадцатеричных редакторов ОПАСНО.

Используйте что-то вроде этого, чтобы создать новый UUID:

echo 'drive d: file="/dev/sdb3" exclusive' >>/etc/mtools.conf
mlabel -n d:
reichhart
источник
Если вы не возражаете против проверки эксклюзивного доступа вручную (как со всеми другими командами, описанными здесь), вы можете сделать это как одну команду, какmlabel -n -i /dev/sdb3 ::
telcoM
2

BTRFS

sudo btrfstune -u /dev/sdaX

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

Запуск btrfsckрекомендуется, потому что изменение UUID в BTRFS не является атомарной операцией.

Avio
источник
1

Для NTFS проверьте эту тему для деталей.

Резюме:

sudo ntfslabel --new-half-serial /dev/sdXN
aaditya1234
источник
0

В Fedora 27 я обнаружил, что порядок аргументов играет решающую роль ... Сначала вы должны написать устройство, иначе UUID не изменится. Например

tune2fs /dev/sdb1 -U random
Эрих Кюстер
источник
1
Это выглядит как необычное поведение, по крайней мере, учитывая описание на странице руководства oneline, отображаемое -Uперед device.
Джефф Шаллер
0

Чтобы изменить команду dd, в результате получился дублированный раздел диска UUID / s - используйте GParted.

В пользовательском интерфейсе GParted выберите диск, выберите раздел, размонтируйте раздел. В «Папке разделов» выберите «Новый UUID», повторяйте, пока все дублированные разделы диска uuid / s не будут помечены для замены. Для загрузочных дисков не заменяйте UUI раздела UEFI.

Просмотрите выбранную букву диска и раздел / ы - Все в порядке? ...

Нажмите значок «Применить все операции» в пользовательском интерфейсе GParted.
Для загрузочных дисков отредактируйте файл / etc / fstab UUID = string / s и точку монтирования / s .:

eromana
источник