Как установить Grub на внешний жесткий диск?

Итак, я использовал Ubuntu в течение месяца или двух в dualboot с Windows 8, он выглядел и работал нормально, однако по какой-то причине он сломался, и мне пришлось восстановить весь ПК. Из-за этого плохого опыта я решил переустановить Ubuntu на внешний жесткий диск, отделенный от моей основной машины Windows. Этот вариант кажется хорошим для обеих операционных систем.

Однако при установке Ubuntu по какой-то причине загрузчик Grub не был установлен на внешний диск, в то время как «старый» загрузчик Grub никогда не стирался с внутреннего жесткого диска ПК. В результате я попал в странную ситуацию: когда я хочу запускать Windows, я просто включаю компьютер и ухожу. Когда я хочу запустить Linux, мне нужно подключить внешний накопитель, зайти в меню запуска и сменить загрузчик из Windows 'в Grub. Внешний жесткий диск не загружается (например, как USB-накопитель), и эта длинная последовательность операций должна повторяться каждый раз.

Быстрое резюме:

  1. Внутренний жесткий диск ПК содержит ОС Windows, загрузчик Windows и Grub из старой установки Linux.
  2. Внешний жесткий диск содержит Ubuntu 15.10, возможно, Grub, но не загрузочный, как USB-накопитель.
  3. Каждый раз, когда я хочу переключать ОС, мне нужно изменить загрузчик вручную в меню запуска, которое утомительно.
  4. Загрузочные устройства заказываются следующим образом: 1. USB 2. Внешний привод 3. Внутренний привод

Мой вопрос: как я могу сделать внешний диск загрузочным так, чтобы, когда я хочу переключиться с Windows на Linux, я просто выключил компьютер, подключил USB, включил компьютер и пошел? (без потери данных, которые я уже сохранил на нем, и всех настроек)

PS. По какой-то причине Windows ужасно медленна при загрузке через загрузчик Grub, доступный во внутреннем диске. Кроме того, если внешний жесткий диск не подключен, загрузочный загрузчик Grub показывает только панель спасения Grub. Поэтому использование уже установленного Grub как единственного загрузчика не является вариантом.

Вот как я установил grub для моего внешнего жесткого диска (GPT), который установил ubuntu zesty. Когда вы это сделаете, вы можете загрузить свой ubuntu на любом ПК, который поддерживает uefi, используя grub на внешнем устройстве, не полагаясь на pc grub. Он также может служить резервным grub, поскольку проблема связана с efi из окон.

Установка Grub на внешний накопитель, установленный Ubuntu

1. Запустите в liveUSB и подключите внешний накопитель

2. Списки разделов всех устройств:

$ lsblk 

3. Из lsblk определите раздел Linux, а также раздел efi внешнего диска, т.е. / dev / sdXY1 и / dev / sdXY2 соответственно. Замените XY1 и XY2 на свои собственные

4.Специальное монтирование раздела Linux:

 $ sudo mount /dev/sdXY1 /mnt 

5.Mount критические виртуальные файловые системы:

 $ for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done 

6. Перейдите в раздел Linux, который вы установили:

 $ sudo chroot /mnt 

Теперь вы находитесь в Linux-файловой системе внешнего диска.

7. Создайте каталог, где grub установит свои файлы:

 # mkdir -p /boot/efi 

Если он уже существует, перейдите к шагу 8

8. Теперь смонтируйте раздел efi с шага 3:

 # mount /dev/sdXY2 /boot/efi 

9.Установите grub на внешний привод:

 # grub-install /dev/sdX 

10.Update grub:

 # update-gub 

11. Найдите UUID раздела efi (aka 'vfat') и отметьте его:

 # blkid 

или

 # ls -l /dev/disk/by-uuid 

12. Теперь нам нужно сказать fstab, чтобы установить этот раздел efi при загрузке:

 # cp /etc/fstab /etc/fstab.bak # sudo nano /etc/fstab 

Добавьте ниже две строки в fstab, заменив xxxx-xxxx на UUID с шага 11:

 #my modified fstab to mount externals esp UUID=xxxx-xxxx /boot/efi vfat umask=0077 0 1 

Обязательно закомментируйте запись fstab в esp windows, чтобы она не конфликтует

13. Выполните chroot:

 # exit 

14.Reboot pc:

 $ reboot 

В этот момент, когда вы перезагружаетесь и выбираете свое внешнее устройство из диспетчера загрузки EFI, он загружается в grub.

Чтобы заставить ubuntu автоматически загружаться, когда вы вставляете внешний и автоматически загружаете окна, когда внешний не вставлен, вам нужно создать пользовательскую загрузочную запись для ubuntu, чтобы указать на efi на внешний диск:

Создание пользовательской загрузочной записи для Ubuntu для указания на Efi On External

Из окон EasyUEFI может добавлять или удалять загрузочные записи.

Из Linux efibootmgr может добавлять или удалять загрузочные записи

ALT1 —- Использование EasyUEFI

В Windows загрузите EasyUEFI, установите его и запустите

выберите менеджер вариантов EFI

выберите « Создать запись» с знаком +

выберите Linux или другую ОС и укажите имя в поле описания

выберите раздел FAT32 EFI на внешнем диске, который содержит загрузчик grub

выбрать просмотр

перейдите в /efi/ubuntu/shimx64.efi или / efi / ubuntu / grubx64

спасти

переместите его в начало списка загрузочных записей

перезапуск

ALT2 —- использование efibootmgr

список элементов меню загрузки:

 efibootmgr 

создать загрузочную запись:

 efibootmgr -c [-L label] [-d /dev/sdX] 

например: efibootmgr -c -L myubuntu -d / dev / sdX

Эта загрузочная запись будет автоматически первой записью

/ dev / sdX – наш внешний диск с загрузчиком grub

Теперь вы можете перезагрузиться и без вашего вмешательства ubuntu будет автоматически загружаться при вставке внешнего устройства. Когда внешний не вставлен, компьютер будет пропускать нашу загрузочную запись ubuntu в следующую запись, которая, вероятно, является диспетчером загрузки Windows

В итоге я нашел решение моей проблемы. Я отправлю его здесь, если кому-то это понадобится. Кроме того, я не совсем уверен, что сработало, и если все шаги, которые я предпринял, действительно необходимы, однако это сработало.

  1. Убедитесь, что на вашем внешнем диске есть раздел EFI, используя gparted или что-то подобное. Раздел должен быть FAT32, иметь флаги загрузки и esp и монтироваться в / boot / efi. Размер должен быть не менее 200 Мб, хотя я сделал это 1 Гб, так как у меня было свободное место на моем HD. Если у вас нет этого раздела, сделайте это.
  2. Убедитесь, что UUID раздела EFI BOOT на вашем внешнем жестком диске соответствует файлу в файле fstab.

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

 ls -l /dev/disk/by-uuid 

а для редактирования файла fstab

 sudo nano /etc/fstab 
  1. Теперь установите Grub. (Вы также можете попытаться скопировать grub с внутреннего диска на внешний раздел диска, но это не сработало для меня).

    sudo grub-install / dev / sdX

замените sdX на настоящий диск.

  1. Если вы еще этого не сделали, включите загрузку с USB-накопителя и убедитесь, что внешний загрузчик загружен до внутреннего из меню настройки UEFI. Теперь ваша машина должна сначала загрузиться с USB (если загрузчик не найден) с внутреннего жесткого диска.