Из существующих вопросов,этотвыглядит очень похоже на то, что делаю я, только я пытаюсь увеличить свой раздел и не понимаю, почему в /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
в/boot
fstab перед перезагрузкой? - Нужен ли мне отдельный раздел для
/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
, поэтому, если вы не хотите также увеличивать этот раздел, вы можете оставить его как есть и просто внести одно небольшое изменение в файл, как описано ниже.
Подготовка нового загрузочного раздела
- Создайте новый
ext2
раздел нужного размера. Этот раздел не нуждается в флаге загрузки — ваш раздел efi является точкой входа и будет делегировать полномочия этому новому разделу. - Смонтируйте новый раздел где-нибудь.
/newBoot
Например - Скопируйте файлы со старого загрузочного раздела, например, с помощью
rsync --recursive --delete --archive /boot/ /newBoot/
- Удалите содержимое
/newBoot/efi/
, здесь это была всего одна папка:rm -rf /newBoot/efi/EFI/
. Не удаляйтеnewBoot/efi/
. Мы хотим смонтироватьefi
туда старую папку.
Сообщите efi
, чтобы использовать новый раздел
Выясните /newBoot
UUID:
$ 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