Я уже давно использую линукс с внешнего USB-диска, это позволяет легко запускать свою систему на разных ноутбуках - и на своём, и на рабочих, ничего переставлять и копировать не приходится, это удобно.
Недавно решил переехать на новый диск, где места побольше. Казалось бы, что тут сложного.. Но, как всегда, грабельки. Которые, как водится, удалось обойти, но это заняло пару дней.
Создал на новом диске нужные разделы, скопировал туда всё со старого диска, везде подправил идентификаторы разделов, а grub не ставится:
# grub-install /dev/sdb
warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
error: embedding is not possible, but this is required for RAID and LVM install
Оказалось, что раз новый диск больше 2 терабайт, то там уже используется GPT, а не MBR. Погуглил, приделал parted’ом к одному разделу флаг bios_grub, и тогда grub поставился:
# grub-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.
Но загрузиться с него всё равно не получилось, grub не появлялся. Оказалось, что ноутбук почему-то нового диска вовсе не видит. Старый диск виднеется как “USB storage device”, а новый - вовсе никак.
Ещё погуглил, попробовал gdisk’ом приделать hybrid MBR с тем разделом, потом ещё protective MBR, но ничего не поменялось, ноутбук этого диска упорно не видит.
Короче, пришлось переделать в EFI, и тогда, наконец, он стал нормально грузиться. Но это тоже оказалось не слишком просто, поэтому запишу подробности себе на память, если ещё придётся такое делать.
1. Создать на диске EFIный раздел (100-200 мегабайт), например, parted’ом: название EFI, флаги esp (EFI system partition) и boot (не bios_grub), и код EF00 (код gdisk’ом можно подправить). Отформатировать в FAT32. Руками туда ничего подкладывать не требуется.
2. Дистрибутив запускать в UEFI-режиме!
Для этого в Setup’е ноутбука включить UEFI, и добавить туда источник загрузки (я, например, иногда со смартфона гружу).
Потому что если дистрибутив запустить в обычном BIOS-режиме, то grub поставится в BIOS’ном варианте, и не будет работать. И даже если попробовать его поставить вручную (grub-install --target=x86_64-efi), ругнётся на отсутствующие переменные в environment’е, и не поставится.
А в UEFI-режиме Debian’овский дистрибутив автоматически поставит пакеты grub-efi-amd64 и grub-efi-amd64-bin, добавит EFIный раздел в fstab под /boot/efi , и успешно положит туда BOOT/BOOTX64.EFI, и debian/grub64.efi.
И вот тогда уже с этого диска можно будет успешно грузиться в UEFI-режиме, добавив и его в настройки ноутбука.
Но когда в ноутбуке включён режим UEFI, он может перестать автоматически грузиться в BIOS’ном режиме (legacy) с прежних дисков, в том числе и с внутреннего. При необходимости придётся их вручную выбирать из меню по F12.
Оригинал этой записи в личном блоге.
(
| Комментировать
в Dreamwidth)