Как изменить 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
.