Загрузка данных


По вашему выводу схема теперь определена точно:

* `/dev/sda2`, ext4, UUID `b6776460-1449-44dd-9ef5-daf8a04dc889` — корень Fedora `/`;
* отдельного раздела `/boot` нет: каталог `/boot` находится внутри `/dev/sda2`;
* `/dev/sda4`, vfat, UUID `03C7-F581` — раздел `/boot/efi`;
* параметр `rootflags=subvol=root` использовать нельзя, потому что система находится на ext4, а не Btrfs.

Ниже инструкция **с текущего момента**. В интерактивной консоли `grub>` ничего делать не потребуется.

Fedora формирует пункты своих ядер из BLS-файлов в `/boot/loader/entries`, а основной конфиг находится в `/boot/grub2/grub.cfg`. EFI-файл `/boot/efi/EFI/fedora/grub.cfg` на современных Fedora является коротким перенаправляющим файлом. ([fedoraproject.org][1])

---

## 1. Проверьте, что корень всё ещё смонтирован

Сейчас вы находитесь под `root` в Live Fedora.

```bash
findmnt /mnt/fedora
```

Должен отображаться `/dev/sda2`.

Если вывода нет:

```bash
mkdir -p /mnt/fedora
mount UUID=b6776460-1449-44dd-9ef5-daf8a04dc889 /mnt/fedora
```

Проверка:

```bash
cat /mnt/fedora/etc/fedora-release
```

---

## 2. Подключите EFI-раздел в правильное место

```bash
mkdir -p /mnt/fedora/boot/efi
```

```bash
mountpoint -q /mnt/fedora/boot/efi || \
mount UUID=03C7-F581 /mnt/fedora/boot/efi
```

Проверьте:

```bash
findmnt -R /mnt/fedora
```

Должно быть примерно:

```text
/dev/sda2  /mnt/fedora           ext4
/dev/sda4  /mnt/fedora/boot/efi  vfat
```

Проверьте EFI-файлы:

```bash
ls -lah /mnt/fedora/boot/efi/EFI/fedora
```

Там должны быть `shim.efi`, `shimx64.efi`, `grubx64.efi` и `grub.cfg`.

---

## 3. Сделайте резервную копию загрузочной конфигурации

```bash
STAMP=$(date +%F-%H%M%S)
BACKUP="/mnt/fedora/root/boot-repair-$STAMP"

mkdir -p "$BACKUP"
```

```bash
cp -a /mnt/fedora/boot/grub2 "$BACKUP/" 2>/dev/null || true
cp -a /mnt/fedora/boot/loader "$BACKUP/" 2>/dev/null || true
cp -a /mnt/fedora/boot/efi/EFI/fedora "$BACKUP/efi-fedora"
```

Покажите путь копии:

```bash
echo "$BACKUP"
```

---

## 4. Подготовьте повторный вход в chroot

```bash
for dir in dev proc sys run; do
    mount --rbind "/$dir" "/mnt/fedora/$dir"
    mount --make-rslave "/mnt/fedora/$dir"
done
```

Войдите в установленную Fedora:

```bash
chroot /mnt/fedora /bin/bash
```

Все последующие команды до команды `exit` выполняются **внутри chroot**.

Для надёжности установите PATH:

```bash
export PATH=/usr/sbin:/usr/bin:/sbin:/bin
```

Проверьте систему:

```bash
cat /etc/fedora-release
```

Проверьте монтирование:

```bash
findmnt -T /
findmnt -T /boot
findmnt -T /boot/efi
```

Для `/` и `/boot` должен отображаться `/dev/sda2`, а для `/boot/efi` — `/dev/sda4`.

---

## 5. Проверьте ядро и initramfs

```bash
KVER=6.17.1-300.fc43.x86_64
```

```bash
ls -lh \
"/boot/vmlinuz-$KVER" \
"/boot/initramfs-$KVER.img"
```

Оба файла должны существовать и иметь ненулевой размер.

Также проверьте модули:

```bash
test -d "/usr/lib/modules/$KVER" \
  && echo "Модули ядра найдены" \
  || echo "Модули ядра НЕ найдены"
```

Если `vmlinuz`, `initramfs` или каталог модулей отсутствует, не переходите к перезагрузке.

---

## 6. Подготовьте правильные параметры ядра

Будем использовать параметры из `/etc/kernel/cmdline`, но принудительно укажем правильный ext4-корень.

```bash
EXTRA=""
```

```bash
if [ -s /etc/kernel/cmdline ]; then
    for arg in $(cat /etc/kernel/cmdline); do
        case "$arg" in
            root=*|rootflags=*|ro|rw|BOOT_IMAGE=*)
                ;;
            *)
                EXTRA="$EXTRA $arg"
                ;;
        esac
    done
fi
```

```bash
CMDLINE="root=UUID=b6776460-1449-44dd-9ef5-daf8a04dc889 ro$EXTRA"
echo "$CMDLINE"
```

В строке не должно быть:

```text
rootflags=subvol=root
```

---

## 7. Попробуйте штатно создать BLS-запись через `grubby`

`grubby` поддерживает создание записи с указанием ядра, initramfs и аргументов командной строки. ([Документация Red Hat][2])

Создайте каталог:

```bash
mkdir -p /boot/loader/entries
```

Проверьте наличие утилиты:

```bash
command -v grubby
```

Затем:

```bash
grubby \
  --add-kernel="/boot/vmlinuz-$KVER" \
  --initrd="/boot/initramfs-$KVER.img" \
  --title="Fedora Linux ($KVER)" \
  --args="$CMDLINE"
```

Посмотрите результат:

```bash
ls -lah /boot/loader/entries
```

Найдите созданную запись:

```bash
ENTRY=$(grep -l "$KVER" /boot/loader/entries/*.conf 2>/dev/null | head -n 1)
echo "$ENTRY"
```

Если переменная содержит путь, покажите файл:

```bash
cat "$ENTRY"
```

Ожидаются строки вида:

```text
title Fedora Linux (...)
version 6.17.1-300.fc43.x86_64
linux ...
initrd ...
options ...
```

### Если файл `.conf` появился

Переходите к шагу 8.

### Если `grubby` завершился ошибкой или каталог остался пустым

Переходите к разделу **«Резервный вариант»** ниже.

---

## 8. Проверьте `kernelopts`

Некоторые Fedora BLS-записи содержат прямые параметры, другие используют:

```text
options $kernelopts
```

Создайте `grubenv`, только если его нет:

```bash
if [ ! -f /boot/grub2/grubenv ]; then
    grub2-editenv /boot/grub2/grubenv create
fi
```

Если созданная запись использует `$kernelopts`:

```bash
if grep -qE '^[[:space:]]*options[[:space:]]+\$kernelopts' "$ENTRY"; then
    grub2-editenv /boot/grub2/grubenv set "kernelopts=$CMDLINE"
fi
```

Покажите окружение:

```bash
grub2-editenv /boot/grub2/grubenv list
```

Если там присутствует строка `blsdir=...`, удалите только её:

```bash
if grub2-editenv /boot/grub2/grubenv list | grep -q '^blsdir='; then
    grub2-editenv /boot/grub2/grubenv unset blsdir
fi
```

Fedora по умолчанию ищет BLS-файлы в `loader/entries` относительно загрузочной файловой системы; переменная `blsdir` может перенаправить поиск в другое, ошибочное место. ([fedoraproject.org][1])

---

## 9. Включите обработку BLS

```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
    printf '\nGRUB_ENABLE_BLSCFG=true\n' >> /etc/default/grub
fi
```

Проверьте:

```bash
grep '^GRUB_ENABLE_BLSCFG=' /etc/default/grub
```

Должно быть:

```text
GRUB_ENABLE_BLSCFG=true
```

---

## 10. Пересоздайте основной конфиг GRUB

```bash
grub2-mkconfig -o /boot/grub2/grub.cfg
```

Выполнять нужно именно эту команду. Не записывайте результат в `/boot/efi/EFI/fedora/grub.cfg`: на Fedora 34 и новее это короткий файл-перенаправление. ([fedoraproject.org][3])

Проверьте наличие вызова BLS:

```bash
grep -nE 'insmod blscfg|^[[:space:]]*blscfg' /boot/grub2/grub.cfg
```

Проверьте запись ядра:

```bash
grubby --info=ALL
```

И ещё раз:

```bash
cat "$ENTRY"
```

---

## 11. Проверьте EFI-файл, но не изменяйте его

```bash
cat /boot/efi/EFI/fedora/grub.cfg
```

Согласно вашему предыдущему выводу, он уже правильный и должен выглядеть примерно так:

```text
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
```

Почему именно `/boot/grub2`: отдельного `/boot` у вас нет, поэтому каталог расположен внутри корневого ext4-раздела.

Если содержимое совпадает, ничего с этим файлом не делайте.

---

# Резервный вариант: если `grubby` не создал BLS-файл

Этот вариант создаёт обычный постоянный пункт Fedora через конфигурацию установленной системы. В консоли `grub>` вводить ничего не придётся.

Создайте отдельный генератор меню:

```bash
cat > /etc/grub.d/41_fedora_repair <<EOF
#!/bin/sh
cat <<'GRUB_EOF'
menuentry 'Fedora Linux $KVER (repair)' --class fedora --class gnu-linux --class os {
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root b6776460-1449-44dd-9ef5-daf8a04dc889
    linux /boot/vmlinuz-$KVER root=UUID=b6776460-1449-44dd-9ef5-daf8a04dc889 ro
    initrd /boot/initramfs-$KVER.img
}
GRUB_EOF
EOF
```

Сделайте файл исполняемым:

```bash
chmod 755 /etc/grub.d/41_fedora_repair
```

Пересоздайте конфиг:

```bash
grub2-mkconfig -o /boot/grub2/grub.cfg
```

Убедитесь, что пункт добавлен:

```bash
grep -n "Fedora Linux $KVER (repair)" /boot/grub2/grub.cfg
```

Если строка найдена, этот пункт должен появиться в меню GRUB.

После успешной загрузки установленной Fedora можно будет отдельно разобраться, почему `grubby`/`kernel-install` не создают BLS-файлы, а временный файл удалить:

```bash
sudo rm /etc/grub.d/41_fedora_repair
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
```

Но удалять его нужно только после восстановления штатных записей.

---

## 12. Финальная проверка перед перезагрузкой

Для штатного варианта с BLS:

```bash
test -s "/boot/vmlinuz-$KVER" \
  && echo "OK: ядро"

test -s "/boot/initramfs-$KVER.img" \
  && echo "OK: initramfs"

test -s /boot/grub2/grub.cfg \
  && echo "OK: основной grub.cfg"

test -s /boot/efi/EFI/fedora/grub.cfg \
  && echo "OK: EFI grub.cfg"

test -n "$ENTRY" -a -s "$ENTRY" \
  && echo "OK: BLS-запись"
```

Если применялся резервный вариант:

```bash
test -x /etc/grub.d/41_fedora_repair \
  && echo "OK: резервная запись"

grep -q "Fedora Linux $KVER (repair)" /boot/grub2/grub.cfg \
  && echo "OK: резервный пункт включён в GRUB"
```

---

## 13. Выйдите из chroot и перезагрузитесь

Сначала синхронизируйте изменения:

```bash
sync
```

Выйдите из chroot:

```bash
exit
```

Теперь вы снова в терминале Live Fedora.

Размонтируйте систему:

```bash
umount -R /mnt/fedora
```

Если команда завершилась без ошибок:

```bash
reboot
```

После начала перезагрузки извлеките флешку.

В меню GRUB должен появиться либо обычный пункт:

```text
Fedora Linux (6.17.1-300.fc43.x86_64)
```

либо резервный:

```text
Fedora Linux 6.17.1-300.fc43.x86_64 (repair)
```

Не выполняйте `grub2-install`, `mkfs`, `wipefs`, `fdisk` или `parted`. Для UEFI-систем Fedora не рекомендует `grub2-install`; ваши EFI-файлы уже существуют и GRUB запускается. ([fedoraproject.org][3])

[1]: https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault?utm_source=chatgpt.com "Changes/BootLoaderSpecByDefault - Fedora Project Wiki"
[2]: https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.1_release_notes/known-issue_boot-loader?utm_source=chatgpt.com "11.9. ブートローダー | 9.1 Release Notes | Red Hat Enterprise Linux | 9 | Red Hat Documentation"
[3]: https://fedoraproject.org/wiki/GRUB_2?utm_source=chatgpt.com "GRUB 2 - Fedora Project Wiki"