Загрузка данных
Да. В `grub>` больше ничего не вводим. Всё восстановление делаем из Live USB и повторно входим в `chroot`.
Наиболее вероятно, что при прошлой попытке настоящий раздел `/boot` не был смонтирован, поэтому BLS-файл создался в пустом каталоге `/boot` корневой системы, а не на загрузочном разделе. Fedora читает BLS-записи из `loader/entries` относительно загрузочной файловой системы GRUB. ([fedoraproject.org][1])
## 1. Загрузитесь с флешки
В Boot Menu выберите вариант:
```text
UEFI: название флешки
```
Запустите Live Fedora, но не установщик. Откройте терминал:
```bash
sudo -i
```
Проверьте UEFI:
```bash
[ -d /sys/firmware/efi ] && echo "UEFI OK" || echo "Загружено в Legacy"
```
Должно быть `UEFI OK`. Fedora должна ремонтироваться в том же режиме UEFI, в котором была установлена. ([docs.fedoraproject.org][2])
## 2. Найдите и смонтируйте корневую Fedora
```bash
lsblk -f
```
Найдите устройство по уже известному UUID:
```bash
ROOT=$(findfs UUID=b6776460-1449-44dd-9ef5-daf8a04dc889)
echo "$ROOT"
```
Создайте точку монтирования:
```bash
mkdir -p /mnt/fedora
mount -o subvol=root "$ROOT" /mnt/fedora
```
Проверка:
```bash
cat /mnt/fedora/etc/fedora-release
ls /mnt/fedora/etc /mnt/fedora/usr /mnt/fedora/var
```
Если `mount -o subvol=root` сообщит об ошибке, остановитесь и покажите её — не подбирайте другие подтома наугад.
## 3. Сначала определите правильную схему `/boot`
Пока не входите в `chroot`. Выполните:
```bash
cat /mnt/fedora/etc/fstab
```
И отдельно:
```bash
grep -vE '^[[:space:]]*(#|$)' /mnt/fedora/etc/fstab
```
Нас особенно интересуют строки с:
```text
/
/boot
/boot/efi
```
Проверьте, где в `fstab` указан известный FAT32-раздел:
```bash
grep -iE '03C7-F581|/boot' /mnt/fedora/etc/fstab
```
### Если UUID `03C7-F581` назначен точке `/boot`
Выполните:
```bash
mount UUID=03C7-F581 /mnt/fedora/boot
```
Проверка:
```bash
ls -la /mnt/fedora/boot
```
Там должны находиться хотя бы некоторые из этих элементов:
```text
vmlinuz-6.17.1-300.fc43.x86_64
initramfs-6.17.1-300.fc43.x86_64.img
grub2
loader
EFI
```
### Если UUID `03C7-F581` назначен точке `/boot/efi`
Выполните:
```bash
mkdir -p /mnt/fedora/boot/efi
mount UUID=03C7-F581 /mnt/fedora/boot/efi
```
Проверьте:
```bash
ls -la /mnt/fedora/boot
ls -la /mnt/fedora/boot/efi/EFI/fedora
```
Не продолжайте, пока расположение раздела не будет совпадать с `/etc/fstab`.
## 4. Подготовьте `chroot`
```bash
for dir in dev proc sys run; do
mount --rbind "/$dir" "/mnt/fedora/$dir"
mount --make-rslave "/mnt/fedora/$dir"
done
```
Войдите в систему:
```bash
chroot /mnt/fedora /bin/bash
```
Проверьте:
```bash
source /etc/os-release
echo "$PRETTY_NAME"
```
Fedora rescue-среда официально предназначена для подключения установленной системы и входа в неё через `chroot`. ([docs.fedoraproject.org][3])
## 5. Убедитесь, что открыт настоящий `/boot`
Внутри `chroot`:
```bash
findmnt /boot
findmnt /boot/efi 2>/dev/null
df -hT /boot
```
Затем:
```bash
ls -lah /boot
ls -lah /boot/loader
ls -lah /boot/loader/entries
ls -lah /boot/grub2
```
Проверьте ядро:
```bash
KVER=6.17.1-300.fc43.x86_64
test -f "/boot/vmlinuz-$KVER" && echo "Ядро найдено"
test -f "/boot/initramfs-$KVER.img" && echo "initramfs найден"
```
Обе проверки должны быть успешны.
## 6. Сделайте резервную копию загрузочной конфигурации
```bash
BACKUP="/root/boot-backup-$(date +%F-%H%M%S)"
mkdir -p "$BACKUP"
cp -a /boot/loader "$BACKUP/" 2>/dev/null || true
cp -a /boot/grub2 "$BACKUP/" 2>/dev/null || true
```
Найдите EFI-конфигурацию:
```bash
EFI_CFG=$(find /boot -path '*/EFI/fedora/grub.cfg' -print -quit)
echo "$EFI_CFG"
```
Если путь найден:
```bash
cp -a "$EFI_CFG" "$BACKUP/efi-grub.cfg"
```
## 7. Создайте BLS-запись на настоящем `/boot`
Удалять другие файлы не нужно.
```bash
mkdir -p /boot/loader/entries
MID=$(cat /etc/machine-id)
ENTRY="/boot/loader/entries/${MID}-${KVER}.conf"
cat > "$ENTRY" <<EOF
title Fedora Linux ($KVER)
version $KVER
linux /vmlinuz-$KVER
initrd /initramfs-$KVER.img
options root=UUID=b6776460-1449-44dd-9ef5-daf8a04dc889 ro rootflags=subvol=root
grub_users \$grub_users
grub_arg --unrestricted
grub_class fedora
EOF
```
Проверьте результат:
```bash
cat "$ENTRY"
```
И убедитесь, что файлы, указанные в записи, существуют:
```bash
ls -lh "/boot/vmlinuz-$KVER" "/boot/initramfs-$KVER.img"
```
Такой формат соответствует BLS-записям Fedora: пути `linux` и `initrd` задаются относительно загрузочной файловой системы. ([fedoraproject.org][1])
## 8. Уберите возможное неверное перенаправление `blsdir`
Сначала посмотрите содержимое окружения GRUB:
```bash
grub2-editenv /boot/grub2/grubenv list 2>/dev/null
```
Если присутствует строка, начинающаяся с:
```text
blsdir=
```
сбросьте только её:
```bash
grub2-editenv /boot/grub2/grubenv unset blsdir
```
Без переменной `blsdir` Fedora ищет записи в стандартном каталоге `loader/entries` относительно `$boot`. ([fedoraproject.org][1])
## 9. Включите BLS и пересоздайте основной `grub.cfg`
```bash
if grep -q '^GRUB_ENABLE_BLSCFG=' /etc/default/grub; then
sed -i 's/^GRUB_ENABLE_BLSCFG=.*/GRUB_ENABLE_BLSCFG=true/' /etc/default/grub
else
echo 'GRUB_ENABLE_BLSCFG=true' >> /etc/default/grub
fi
```
Создайте главный конфигурационный файл:
```bash
grub2-mkconfig -o /boot/grub2/grub.cfg
```
Проверьте:
```bash
grep -n blscfg /boot/grub2/grub.cfg
ls -lah /boot/loader/entries
```
На современных Fedora основной конфигурацией является `/boot/grub2/grub.cfg`; EFI-файл Fedora служит небольшим перенаправляющим конфигом. ([fedoraproject.org][4])
## 10. Исправьте маленький EFI-конфиг только после проверки схемы
Посмотрите:
```bash
echo "EFI config: $EFI_CFG"
cat "$EFI_CFG"
```
### Когда `/boot` — отдельный раздел
Это подтверждается отдельной строкой `/boot` в `/etc/fstab`. Получите его UUID:
```bash
BOOTDEV=$(findmnt -nro SOURCE /boot)
BOOTUUID=$(blkid -s UUID -o value "$BOOTDEV")
echo "$BOOTDEV"
echo "$BOOTUUID"
```
Он, вероятно, окажется:
```text
03C7-F581
```
Пересоздайте перенаправляющий файл:
```bash
cat > "$EFI_CFG" <<EOF
search --no-floppy --fs-uuid --set=dev $BOOTUUID
set prefix=(\$dev)/grub2
export \$prefix
configfile \$prefix/grub.cfg
EOF
```
Проверка:
```bash
cat "$EFI_CFG"
```
### Когда отдельного `/boot` нет, а отдельным является только `/boot/efi`
Оставьте EFI-конфиг в таком виде:
```bash
cat > "$EFI_CFG" <<'EOF'
search --no-floppy --root-dev-only --fs-uuid --set=dev b6776460-1449-44dd-9ef5-daf8a04dc889
set prefix=($dev)/boot/grub2
export $prefix
configfile $prefix/grub.cfg
EOF
```
Главное различие:
```text
Отдельный /boot: UUID раздела /boot + /grub2
/boot внутри root: UUID корня + /boot/grub2
```
## 11. Финальная проверка
```bash
test -s /boot/grub2/grub.cfg && echo "Основной grub.cfg существует"
test -s "$ENTRY" && echo "BLS-запись существует"
test -s "/boot/vmlinuz-$KVER" && echo "Ядро существует"
test -s "/boot/initramfs-$KVER.img" && echo "initramfs существует"
test -s "$EFI_CFG" && echo "EFI grub.cfg существует"
```
Дополнительно:
```bash
grep -E '^(title|linux|initrd|options)' "$ENTRY"
grep -n blscfg /boot/grub2/grub.cfg
```
## 12. Выход и перезагрузка
```bash
sync
exit
```
Теперь вы снова в Live-среде:
```bash
umount -R /mnt/fedora
reboot
```
Извлеките флешку после начала перезагрузки.
Не выполняйте:
```text
grub2-install
mkfs
wipefs
fdisk
parted
dnf reinstall
```
EFI-программы у вас уже запускаются; восстанавливаются только правильное монтирование `/boot`, BLS-запись и цепочка к `/boot/grub2/grub.cfg`. На UEFI-системах Fedora отдельно предупреждает не применять `grub2-install`. ([fedoraproject.org][4])
[1]: https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault?utm_source=chatgpt.com "Changes/BootLoaderSpecByDefault - Fedora Project Wiki"
[2]: https://docs.fedoraproject.org/ka/fedora/f34/install-guide/install/Booting_the_Installation/?utm_source=chatgpt.com "Booting the Installation :: Fedora Docs"
[3]: https://docs.fedoraproject.org/kab/fedora/f32/install-guide/advanced/Boot_Options/?utm_source=chatgpt.com "Boot Options :: Fedora Docs"
[4]: https://fedoraproject.org/wiki/GRUB_2?utm_source=chatgpt.com "GRUB 2 - Fedora Project Wiki"