grub2 загружает grub.cfg с неправильного диска во время загрузки после перемещения ОС на другой диск

grub2 загружает grub.cfg с неправильного диска во время загрузки после перемещения ОС на другой диск

На моем ноутбуке изначально был 128 ГБ M.2 ssd и 1 ТБ hdd. Система настроена как двойная загрузка с windows. Раздел /boot/efi находится на /dev/nvme0m1p1, а исходный корневой раздел находится на /dev/sda3.

Я заархивировал образ оригинального nvme0n1, заменил nvme0n1 на 1 ТБ M.2 ssd. и клонировал оригинальный образ на новый ssd. В результате я смог загрузить либо windows, либо версию ubuntu на /dev/sd3 после завершения клонирования.

Затем я создал новый раздел ext4, nvme0n1p6, и клонировал в него раздел /dev/sda3. Я забыл изменить UIDD раздела после клонирования и первого запуска update-grub2. Затем я изменил UIDD раздела с помощью gparted, перезапустил update-grub2 и убедился, что он нашел образ на новом UIDD для /dev/nvme0n1p6.

Потратив 6 часов на то, чтобы выяснить, что я вставил пробел в оператор UIDD= в /etc/fstab нового образа, я смог загрузить этот новый образ (мои навыки корректуры требуют улучшения). После загрузки образа я снова запустил update-grub2, чтобы переместить выбор для нового ubuntu наверх и по умолчанию в новом grub.cfg.

Наконец, к вопросу: после перезагрузки отображаемое меню grub по-прежнему представляет собой grub.cfg из исходной папки /dev/sda3/boot/grub.

Копирование файла grub.cfg, созданного для /nvme0n1p6, в /sda3 позволяет отображать новый файл grub.cfg при последующих загрузках.

Переименование файла grub.cfg на /sda3 приводит к остановке grub на командной строке при перезагрузке. Выход из командной строки приводит к загрузке ОС Windows. Я могу исправить проблему с помощью образа Live USB, который позволяет мне восстановить действительный grub.cfg на /sda3.

Я подозреваю, что команда update-grub — не единственная команда, которую мне нужно запустить. Я предполагаю, что образы, хранящиеся на /nvme0n1p1, нужно обновить. Это достигается запуском какой-либо установки grub?

решение1

Отказ от ответственности: я могу ошибаться.

По вашей информации, у вас, похоже, есть одна установка Windows и одна установка Ubuntu на жестком диске ( /dev/sda3). Назовем эту установку жесткого диска H. Теперь вам нужно было перенести вашу установку на SSD, и поэтому вы создали новый раздел SSD и клонировали вашу установку жесткого диска на этот раздел SSD (я бы лучше сделал новую установку, но это не по теме вашего вопроса). Назовем эту установку SSD S.

Насколько мне известно, проблема в том, что вы вообще не установили grub после завершения установки S. Таким образом, установленный grub в вашей системе по-прежнему принадлежит установке H [1]. Таким образом, он по-прежнему будет использовать настоящее grub.cfgв установке H.

Чтобы grub использовал раздел grub.cfgS из вашей установки, вам придется установить grub из S в раздел EFI.

Загрузите установку S и выполните:

$ sudo grub-install dummy
$ sudo update-grub

Дайте мне знать, если я неправильно понял ваш сценарий или если вы столкнулись с ошибками в командах.


Использованная литература:
Как загрузчик grub EFI находит правильный boot.cfg?

решение2

Теперь, когда у меня запущен Ubuntu с нового SSD M.2, я рассмотрю метод, который я использовал для замены SSD на 128 ГБ с установленным grub-загрузчиком двойной загрузки на nvme0n1p1 на SSD на 1 ТБ в ноутбуке с одним портом M.2. Для ясности большая часть Windows 10 находится на различных разделах nvme0, а Ubuntu изначально находился на разделе жесткого диска на sda3. При загрузке nvme0n1p1 монтируется в /boot/efi.

  1. Создайте образ nvme0n1 a. Лично я не предпринимал никаких шагов по сжатию разделов с целью уменьшения размера образа. Если это необходимо, другие люди предоставили руководство о том, как это сделать.

    б. Записать образ на другой диск, внутренний или внешний. Я использовал:

    dd if=/dev/nmve0n1 | gzip -c > pathToOtherDeviceFolder/nvme0n1.img

    Эта -cопция заставляет gzip записывать данные в стандартный вывод, который затем направляется в файл.

  2. Тестовая загрузка с USB-накопителя, содержащего образ Live, Ubuntu Live или Gparted Live. Позже у меня возникли проблемы, потому что я не тестировал образ Live с внешними мониторами, которые я обычно использую, при отключенном от ноутбука ноутбуке. Потребовалось несколько дней попыток выполнить следующие шаги без подключения внешнего дисплея, и выяснилось, что именно отсутствие внешнего дисплея (или Ethernet) мешало загрузке USB-накопителя Live, а не результат следующих шагов. Я не помню, чтобы подключал Ethernet для успешной загрузки, но мог бы вместе с внешними дисплеями. В любом случае есть зависимость образов Live, которую я не понимаю, но могу обойти. После загрузки убедитесь, что вы можете смонтировать диск, содержащий образ, который хотите переместить.

  3. Выключите питание и замените оригинальный твердотельный накопитель M.2 на новый.

  4. Переместить образ на новый nvme0n1

    а. Загрузитесь с USB-накопителя. (Вы уже это проверили)

    б. смонтируйте диск, содержащий образ, который вы хотите переместить. (Опять же, проверено)

    c. переместить образ на новый nvme0n1. Я использовал:

    gunzip -c pathToOtherDeviceFolder/nvme0n1.img | dd of=/dev/nvme0n1

    И снова gunzip записывает данные в stdout, который передается в dd для записи на новое устройство.

  5. Переместить ubuntu на новый раздел на новом nvme0n1 Здесь я выбрал перезагрузку на оригинальный образ ubuntu на sda3. Это не проблема, поскольку новый nvme0n1 является клоном оригинала. Я не знаю ни одной причины, по которой эти шаги нельзя было бы выполнить, продолжая работать в среде USB live, хотя у меня нет опыта в этом.

    а. создайте новый раздел ext4 на nvme0n1 с помощью gparted или другого инструмента. В дальнейшем я буду называть этот раздел nvme0n1p6.

    б. клонировать образ ubuntu с /dev/sda3 (в моем случае) на /dev/nvme0n1p6. Я использовал: dd if=/dev/sda3 of=/dev/nvme0n1p6

    в. после клонирования используйте gparted или другой инструмент, чтобы изменить UIDD раздела nvme0n1p6 на уникальный UIDD.

  6. Подготовьте новый nvme0n1p6 к работе.

    а. монтируем /dev/nvme0n1p6. Я использовал /mnt в качестве точки монтирования.

    б. изменить /etc/fstab, чтобы смонтировать UIDD для nvme0n1p6 как /. Обратите внимание, что nvme0n1p1 все еще должен быть смонтирован как /boot/efi. Убедитесь, что измененная запись правильно отформатирована. Дополнительный пробел после UIDD=стоил мне еще нескольких часов размышлений о том, что я сделал не так.

    c. nvme0n1p6 можно отключить в данный момент, но я думаю, что пропустил этот шаг.

  7. Если все еще выполняется с USB-диска, перезагрузитесь в исходный образ Ubuntu (мой находится на /dev/sda3)

  8. обновите параметры меню grub:

sudo update-grub2

Убедитесь, что исходный образ, образ Windows и новый образ Ubuntu на nvme0n1p6 найдены и добавлены.

  1. перезагрузите компьютер и в меню загрузки Grub выберите новый образ Ubuntu.

  2. После создания нового образа выполните:

    а. sudo grub-install Это изменяет файлы grub в /boot/efi (/dev/nvme0n101) так, чтобы они смотрели на /dev/nvme0n1p6/boot/grub, а не на это местоположение на sda3 для меню grub, grub.cfg.

    б. `sudo update-grub' Заменит клонированный /boot/grub/grub.cfg новым файлом, который поместит новый образ поверх и по умолчанию, а исходный образ будет размещен на sda3 в качестве альтернативного выбора.

Теперь вы сможете загрузить любой из трех образов. Обратите внимание, что пока grub-installне будет запущен новый образ, исходный образ не может быть удален с машины, поскольку grub не сможет найти файл конфигурации меню.

Надеюсь, я не пропустил ни одного шага и не забыл их неправильно, и это сработает для вас.

Связанный контент