Как изменить 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), но разные разделы, поскольку содержимое sda1 клонировано из sdb1 clonezilla [ 1123]

Проблема в том, что /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"
3
задан 4 May 2019 в 03:34

3 ответа

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

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

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

Ограничения Clonezilla

Я написал скрипт 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 после загрузки с жесткого диска или SSD
  • Если вы не хотите, чтобы HDD в вашем меню grub загружался с SSD и обновлял grub
  • Вы можете использовать скрипт для ежедневного клонирования (полное резервное копирование), в этом случае, вероятно, ~ 100 в разы быстрее, потому что восстанавливаются только файлы, которые изменились со вчерашнего дня. rsync, который является чрезвычайно быстрым, используется для (повторного) процесса клонирования.
0
ответ дан 4 May 2019 в 03:34

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

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

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

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

sudo update-grub

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

1
ответ дан 4 June 2020 в 03:45

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

Похожие вопросы: