Как изменить UUID в /boot/grub/grub.cfg

Я спрашиваю как поменять uuid в /boot/grub/grub.cfg, чтобы grub мог загружать ОС на указанный раздел.

У меня два диска:

  • SSD / dev / sda1 с uuid d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9
  • HDD / dev / sdb1 с uuid 47d9205b-00a8-40e5-88d6-e8b9571799a7

Оба диска содержат одинаковое содержимое (корень Ubuntu), но разные uuids раздела, как содержимое sda1 клонируется из sdb1 от clonezilla

Проблема в /boot/grub/grub.cfg, который генерируется автоматически, содержит:

           if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  47d9205b-00a8-40e5-88d6-e8b9571799a7
            else
              search --no-floppy --fs-uuid --set=root 47d9205b-00a8-40e5-88d6-e8b9571799a7
            fi
            echo    'Loading Linux 4.4.0-146-generic ...'
            linux   /boot/vmlinuz-4.4.0-146-generic root=UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 ro  quiet splash $vt_handoff

указывая, что grub выбирает Ubuntu root из sdb1 вместо sda1пока хочу это выбрать sda1,

Я пытался заменить все 47d9205b-00a8-40e5-88d6-e8b9571799a7 от d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9 напрямую, а затем запустить update-grub, но потом все возвращается назад.

Так есть ли другое лучшее решение? /boot/grub/grub.cfg на самом деле генерируется автоматически. Если бы я отделил sdb1, grub не удалось запустить, так как он не мог найти uuid sdb1,

Спасибо


Обновления:

shijiex@shijie:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9  /               ext4    errors=remount-ro 0       1

#UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 /old_os               ext4    errors=remount-ro 0       2
# /backup was on /dev/sda5 during installation
UUID=d36e69de-3af8-4302-a2b1-f32c2538493d /backup         ext4    defaults        0       0
# /home was on /dev/sda7 during installation
UUID=95ffe5be-ed1c-4d2b-b745-e31ba62ca63d /home           ext4    defaults        0       2
#UUID=e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7 /home           ext4    defaults        0       2

# /vm was on /dev/sda8 during installation
#UUID=222bf555-b2d3-4607-a856-f5fd785b1862  /vm            ext4    defaults        0       2
# /opt was on /dev/sda8 during installation
UUID=ffbc1ea0-f426-4def-9349-a6f68b486b2f  /opt       ext4    defaults        0       0
# /other was on /dev/sda6 during installation
UUID=657778bc-fde8-4261-9fe6-4134c6a7fb3f /other          ext4    defaults        0       0


# /other was on /dev/sda6 during installation
#UUID=6db98036-2350-4289-b9ef-8e0a2ae52eeb /win           ext4    defaults        0       2


# swap was on /dev/sda9 during installation
UUID=71c498b2-3484-4d5b-b64a-270cc352841b  none            swap    sw              0       0
#UUID=05f1ba29-4188-40d1-8597-de708b48ed50  /tmp           swap    sw              0       0

а также blkid:

 shijiex@shijie:~$ sudo blkid 

[sudo] password for shijiex: 
/dev/sda1: UUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9" TYPE="ext4" PARTUUID="2fe05ff9-01"
/dev/sda3: UUID="95ffe5be-ed1c-4d2b-b745-e31ba62ca63d" TYPE="ext4" PARTUUID="2fe05ff9-03"
/dev/sda4: UUID="8d114eed-5ce4-4d6f-8a28-8a7092b01d46" TYPE="ext4" PARTUUID="2fe05ff9-04"
/dev/sda5: UUID="94b0fb65-f56d-426d-81f9-d05a8ac783eb" TYPE="ext4" PARTUUID="2fe05ff9-05"
/dev/sdb1: UUID="47d9205b-00a8-40e5-88d6-e8b9571799a7" TYPE="ext4" PARTUUID="0001c588-01"
/dev/sdb10: LABEL="New Volume" UUID="6db98036-2350-4289-b9ef-8e0a2ae52eeb" TYPE="ext4" PARTUUID="0001c588-0a"
/dev/sdb11: UUID="ffbc1ea0-f426-4def-9349-a6f68b486b2f" TYPE="ext4" PARTUUID="0001c588-0b"
/dev/sdb5: UUID="d36e69de-3af8-4302-a2b1-f32c2538493d" TYPE="ext4" PARTUUID="0001c588-05"
/dev/sdb6: UUID="657778bc-fde8-4261-9fe6-4134c6a7fb3f" TYPE="ext4" PARTUUID="0001c588-06"
/dev/sdb7: UUID="e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7" TYPE="ext4" PARTUUID="0001c588-07"
/dev/sdb8: UUID="222bf555-b2d3-4607-a856-f5fd785b1862" TYPE="ext4" PARTUUID="0001c588-08"
/dev/sdb9: UUID="71c498b2-3484-4d5b-b64a-270cc352841b" TYPE="swap" PARTUUID="0001c588-09"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"

5 ответов

Решение

Вы указали, что клонировали свой жесткий диск в SDD. Однако когда я смотрю на sudo blkid а также cat /etc/fstabМало что из этого коррелирует. Разделы не совпадают. UUID не совпадают. Я подозреваю, что вы сделали больше изменений, чем просто клон и загрузка.

Не зная точно, что / как вы сделали то, что вы сделали, сложно придумать краткий ответ для вас... но вы можете попробовать это...

  • включите машину и перейдите в меню GRUB
  • нажмите клавишу e, чтобы войти в режим редактирования
  • используйте клавиши со стрелками, чтобы найти "тихий всплеск"
  • Найти UUID=xxxx в начале той же строки
  • изменить весь UUID=xxxx часть к /dev/sda1
  • нажмите+x или F10, чтобы продолжить загрузку после редактирования
  • однажды загрузившись, sudo update-grub, затем reboot
  • войдите в меню загрузки BIOS и выберите SDA для загрузки или измените порядок загрузки на CD-ROM/SDA/SDB/etc.
  • в меню GRUB выберите нужный диск для загрузки

Для всех, кто столкнется с этим в будущем. Это был бы правильный способ изменить конфигурацию UUID корневого раздела в grub. Прежде чем делать следующее, убедитесь, что у вас есть правильный UUID для устройства, которое вы хотите использовать в качестве корневого ( /).

Отредактируйте ваш /etc/default/grub и добавьте следующую переменную:

GRUB_DEVICE_UUID=***INSERT NEW UUID HERE***

затем запустите это:

sudo update-grub

Это не изменит запись подсказки для поиска, но она все равно не будет соответствовать, поэтому она должна работать. Если кто-то хочет исследовать способ изменить эту часть, мне было бы любопытно узнать.

Ответ @heynnema помог мне в этом, но не совсем для меня, потому что в моем меню BIOS не было загрузочной записи для этого раздела (не знаю, почему). Во всяком случае, я следовал их шагам вплоть до выбора диска в меню загрузки:

войдите в меню загрузки BIOS и выберите SDA для загрузки или измените порядок загрузки на CD-ROM/SDA/SDB/и т. д.

Я не делал этого шага, а вместо этого просто продолжил работу, как обычно, и загрузил запись, соответствующую исходной установке (так что в случае @Xu это будет /dev/sdb1). После загрузки я побежал sudo update-grubв этой системе, и он подхватил изменения, которые были сделаны после запуска update-grubна новой системе. Теперь, когда я выбираю новую запись в меню grub, она загружается в правильную систему.

Надеюсь, это поможет кому-то еще, у кого нет записи в меню BIOS.

Клонезилла ограничения

Я написал скрипт bash, чтобы делать то, что делает Clonezilla без ограничений:

Основные моменты из сценария того, что Clonezilla не делает для вас:

echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/etc/fstab"
echo "        from UUID: $SourceUUID"
echo "          to UUID: $TargetUUID"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab

# Update /boot/grub/grub.cfg on clone partition with clone's UUID
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/boot/grub/grub.cfg"
echo "        from UUID: $SourceUUID"
echo "          to UUID: $TargetUUID"
echo "Also change 'quiet splash' to 'nosplash' for environmental awareness"
echo "Suggest first time booting clone you make wallpaper unique"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
#sed -i "s/quiet splash/nosplash/g" "$TargetMnt"/boot/grub/grub.cfg
  • Обратите внимание, что для ваших целей вы бы хотели закомментировать изменения в "тихом всплеске" grub, вставив # перед sed как показано на последней строке, показанной выше.

Взломанная версия скрипта

Я, очевидно, не проверял это, но вы можете взломать сценарий и создать свою собственную версию после загрузки с жесткого диска. Поместите эти команды в взломанный скрипт:

#!/bin/bash
SourceUUID="47d9205b-00a8-40e5-88d6-e8b9571799a7"
TargetUUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9"
TargetDev=/dev/sdaX # Replace `X`this with your actual number
TargetMnt="/mnt/clone"
mkdir -p "$TargetMnt"                       # '-p' directory may already exist
mount -t auto -v $TargetDev "$TargetMnt" > /dev/null

sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
umount "$TargetMnt" -l              # Unmount the clone
rm  -d "$TargetMnt"                 # Remove clone directory

Отметить его как исполняемый chmod a+x /path/to/MyHackedScript и назовите это с полномочиями root sudo /pathto/MyHackedScript,

Другие отличия от Clonezilla

  • В итоге вы получите две загрузочные записи grub, одну для жесткого диска и одну для SSD
  • Вы можете запустить sudo update-grub после загрузки с HDD или SSD
  • Если вы не хотите использовать HDD в меню grub, просто загрузитесь с SSD и обновите grub
  • Вы можете использовать сценарий для ежедневного клонирования (полное резервное копирование), и в этом случае он, вероятно, в 100 раз быстрее, потому что восстанавливаются только файлы, которые изменились со вчерашнего дня. rsync который очень быстро используется для (повторного) процесса клонирования.

Вы можете напрямую изменить UUID, как вы это сделали. /boot/grub/grub.cfgне обновляется автоматически. Однако, если вы хотите сохранить возможность загрузки, вам также необходимо соответствующим образом изменить UUID в другом месте, например, при загрузке EFI/UEFI, в /boot/efi/EFI/ubuntu/grb.cfgа также /etc/fstab.

Другие вопросы по тегам