Как именно я могу перейти на новый загрузочный раздел EFI?

not= && while :; do 
 while IFS= read -r -d '' f; do 
  [[ -z "${not}" ]] && target="large_files" || target="small_files"
  [[ ! -d "${target}" ]] && mkdir "${target}" 
  mv "${f} "${target}/${f}"
 done < <(find. -maxdepth 1 -type f ${not} -size +1000k -printf "%f\0" 2>/dev/random)
 [[ -n "${not}" ]] && break 
 not=!
done

Внешний цикл forдинамически изменяет размер поиска с более чем 1M на менее или равный 1M. Ошибки перенаправляются на /dev/random(, предполагая, что вы работаете в Linux, добавляете к энтропии -, измените его на /dev/null, если у вас нет/dev/random).

Целевой каталог изменяется на большие _файлы перед установкой ${not}и создается целевой каталог, если он еще не существует. Следующая итерация устанавливает ${not}в !и находит файлы, которые не превышают 1M (меньше или равны ), а также создает каталог небольших _файлов, если он еще не существует.

Файлы перемещаются в соответствующие каталоги.

После первой установки notлогика внутреннего цикла запускается еще раз после установки not, после чего цикл прерывается.

Примечание. :нулевой байт используется для обработки цикла while, поскольку он более надежен, IFS=сбрасывает внутренний разделитель полей для обработки списков, разделенных нулевыми байтами, и -d ''устанавливает разделитель в нулевой байт, -r] защищает обратную косую черту от удаления/интерпретации.

0
03.11.2021, 00:08
2 ответа

Использование /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для повторного размонтирования после установки/удаления конкретный пакет ядра готов.)

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

1
03.11.2021, 18:58

Загрузчик будет искать то, что вы в настоящее время смонтировали в /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, чтобы использовать новый раздел

Определите UUID /newBootпользователя:

$ 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
0
05.11.2021, 23:10

Теги

Похожие вопросы