Подготовка нового загрузочного раздела

Подготовка нового загрузочного раздела

Из существующих вопросов,этотвыглядит очень похоже на то, что делаю я, только я пытаюсь увеличить свой раздел и не понимаю, почему в /boot/ и /boot/efi смонтированы разные разделы и как это сделать, не выстрелив себе в ноги.

На данный момент я создал новый раздел, смонтировал его /newBootи сделал sudo rsync -a /boot/ /newBoot/, поэтому предполагаю, что у меня есть все необходимые файлы в новом разделе для переключения.

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                        FSTYPE   SIZE FSUSED LABEL   PARTLABEL          MOUNTPOINT UUID                                   PARTUUID
sda                                  7.3T                                                                                     
└─sda1                      crypto   7.3T                                              4dffc196-9926-43d9-a7c8-38898681f402   85b3a656-4886-4b37-b9c1-2acb0158587a
...
nvme0n1                            931.5G                                                                                     
├─nvme0n1p1                 vfat     512M   5.3M         EFI System Partition
│                                                                           /boot/efi  FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                 ext2     488M 313.7M                            /boot      606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
...
└─nvme0n1p4                 vfat     1.5G        NEWBOOT newboot                       530D-4828                              ea886018-714f-46fb-8f21-785c74543891
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ sudo efibootmgr -c -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0000,0004
Boot0000* ubuntuNew HD(1,GPT,85b3a656-4886-4b37-b9c1-2acb0158587a,0xffff,0x3a3535ca9)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)

так что хотя я не понимаю, почему в текущей папке задействованы два раздела /boot, я думаю, что один тоже должен работать? По крайней мере, так гласит выбранный ответ на вопрос по ссылке выше, верно?

Чего же не хватает? /etc/fstab?

$ cat /etc/fstab 
...
UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
...
UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1
...

Теперь, согласно lsblkи efibootmgr -v(спасибо @oldfred), новый, первый вариант загрузки хотел бы использовать sda1, а не nvme0n1p4. sda1- это внешний диск, с которого я определенно не хочу загружаться. Почему он по умолчанию??

  • Каких изменений не хватает, чтобы загрузка производилась с нового раздела?
  • Нужно ли мне менять UUIDв /bootfstab перед перезагрузкой?
  • Нужен ли мне отдельный раздел для /boot/efi?

решение1

Наличие /bootи /boot/efiкак отдельных файловых систем — это излишество, но:

  • очень старые системы на базе BIOS могут нуждаться в отдельном /bootразделе, чтобы обойти ограничения BIOS
  • Для любой системы, загружающейся в стиле UEFI, потребуется /boot/efiили эквивалентный раздел ESP, поскольку именно в нем прошивка ожидает найти файл загрузчика.
  • наличие отдельного незашифрованного раздела /bootпозволит использовать любой метод шифрования, поддерживаемый cryptsetupкорневой файловой системой, вместо более ограниченного набора шифрований, понимаемых GRUB.

Стандартная разметка современных Debian/Ubuntu предусматривает наличие отдельных разделов, поэтому конфигурация по умолчанию может охватывать максимально широкий спектр систем.

Как упоминалось в комментариях oldfred, UEFI идентифицирует раздел ESP для использования по уникальному для раздела GUID в таблице разделов GPT. Этот GUID известен как PARTUUID в Linux. lsblk -o +partuuidотобразит его.

Ваша efibootmgrкоманда была почти правильной. Чтобы создать загрузочный параметр ubuntuNew с использованием правильного диска, вам следовало использовать:

sudo efibootmgr -c -d /dev/nvme0n1 -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI

efibootmgrсамостоятельно найдет PARTUUID и автоматически использует его для создания новой загрузочной записи. Вам нужно будет только указать диск (если только на диске нет нескольких системных разделов EFI).

После shimx64.efiзагрузки grubx64.efi, на системах, настроенных в стиле Debian/Ubuntu, он будет читаться grub.cfgв том же каталоге, что и grubx64.efi. Этот файл содержит всего несколько строк, идентифицирующих UUID файловой системы, содержащей каталог /boot(будь то отдельный раздел или просто обычный каталог в корневой файловой системе). В результате системы Debian/Ubuntu могутвсегдаиметь "главный" файл конфигурации GRUB в /boot/grub/grub.cfg, независимо от того, использует ли система BIOS или UEFI. Если у вас большое количество систем разного возраста, это удобно.

Для справки, RedHat 7 и 8 имеют фактическую конфигурацию GRUB на /boot/grub2/grub.cfgсистемах в стиле BIOS и /boot/efi/EFI/redhat/grub.cfgна системах UEFI.

Однако, если вы хотите объединить /bootи /boot/efi, следует обратить внимание на несколько вещей:

  • Путь загрузчика, указанный для, efibootmgrоснован на корне файловой системы ESP. Первоначально этот путь начинается с /boot/efi, поэтому \\EFI\\UBUNTU\\SHIMX64.EFIотносится к /boot/efi/EFI/UBUNTU/SHIMX64.EFIвиду из Linux. Если вы используете просто /boot, то вам нужно будет либо переместить каталог UBUNTU на один уровень выше, либо указать путь загрузчика как \\EFI\\EFI\\UBUNTU\\SHIMX64.EFI.
  • /bootдолжно быть чем-то, что понимает GRUB, чтобы он мог загружать оттуда файлы ядра и initramfs. Версия UEFI GRUB в Ubuntu определенно понимает ext2 и vfat; поэтому, если вы объедините их /bootв /boot/efiодин раздел vfat, у GRUB не возникнет проблем. Вы не можете использовать ext2, потому что прошивке нужно будет прочитать SHIMX64.EFI и GRUBX64.EFI из этого раздела, а типичная прошивка UEFI не сможет понять ext2.
  • Во время загрузки /bootтребуется только GRUB, а не ядру Linux: вы можете оставить /bootего немонтированным, и система все равно загрузится нормально. Но вы захотите оставить /bootего смонтированным, чтобы обновления ядра могли происходить нормально. (Или, если вы действительно хотите скрыть его, оставив его немонтированным, вы можете добавить скрипты для /etc/kernel/pre*.d/автоматического монтирования его перед установкой обновлений ядра и для /etc/kernel/post*.dего повторного размонтирования после завершения установки/удаления определенного пакета ядра.)

Загрузчик часто воспринимается как «страшный и опасный», если у вас нет четкого понимания требований. С другой стороны, он обычно довольно самодостаточен, поэтому проблемы, связанные только с загрузчиком, обычно не так уж и сложно исправить... как только вы преодолеете первое препятствие загрузки системы с внешнего носителя, вы сможете приступить к ее исправлению. Я бы не сказал, что система с нефункциональным загрузчиком «подошла»: ей просто нужна небольшая внешняя помощь.

решение2

Загрузчик будет искать то, к чему вы в данный момент примонтированы /boot/efi, поэтому, если вы не хотите также увеличивать этот раздел, вы можете оставить его как есть и просто внести одно небольшое изменение в файл, как описано ниже.

Подготовка нового загрузочного раздела

  1. Создайте новый ext2раздел нужного размера. Этот раздел не нуждается в флаге загрузки — ваш раздел efi является точкой входа и будет делегировать полномочия этому новому разделу.
  2. Смонтируйте новый раздел где-нибудь. /newBootНапример
  3. Скопируйте файлы со старого загрузочного раздела, например, с помощьюrsync --recursive --delete --archive /boot/ /newBoot/
  4. Удалите содержимое /newBoot/efi/, здесь это была всего одна папка: rm -rf /newBoot/efi/EFI/. Не удаляйте newBoot/efi/. Мы хотим смонтировать efiтуда старую папку.

Сообщите efi, чтобы использовать новый раздел

Выясните /newBootUUID:

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                                          FSTYPE        SIZE FSUSED LABEL     PARTLABEL            MOUNTPOINT           UUID                                   PARTUUID
nvme0n1                                                   931.5G                                                                                                   
├─nvme0n1p1                                   vfat          512M   5.3M           EFI System Partition /boot/efi            FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                                   ext2          488M 313.7M                                /boot                606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
├─nvme0n1p3                                   crypto_LUKS 927.7G                                                            e7f674b8-4bec-4502-a1e5-0e93aa34786f   2fed2ecb-b548-479b-aa3f-7f1bbfb9981f
│ └─sda3_crypt                                LVM2_member 927.7G                                                            9tx8Yv-XDCR-RmGf-fmXo-WiX2-SDpG-xH1si4 
│   ├─ubuntu--gnome--vg-root                  ext4        911.6G 734.2G                                /                    1cccfb0a-69da-4246-a071-52f882681418   
│   └─ubuntu--gnome--vg-swap_1                swap         15.8G                                       [SWAP]               e3facfb8-db2e-426d-aef4-b6c81004fd6f   
└─nvme0n1p4                                   ext2          1.5G        newBoot   newBoot                                   5aca79e7-b740-46d3-bc76-aa7e8b8b93da   9e8baf2f-2118-4042-9c47-7ffb824ada52

Отредактируйте /boot/efi/EFI/ubuntu/grub.cfgсоответствующим образом, заменив старый текущий UUID на новый:

# cat /boot/efi/EFI/ubuntu/grub.cfg
# search.fs_uuid 606a1976-d1c2-4246-a256-a8afddb04f84 root 
search.fs_uuid 5aca79e7-b740-46d3-bc76-aa7e8b8b93da root 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

Заканчивать

Теперь система должна уже загрузиться с нового раздела, но /boot/будет старой после загрузки с нового. Отредактируйте /etc/fstabтак, чтобы обновления системы нашли все файлы на своих местах:

# UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
UUID=5aca79e7-b740-46d3-bc76-aa7e8b8b93da /boot           ext2    defaults        0       2

Строка /boot/efiосталась /etc/fstabпрежней:

UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1

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