LINUX.ORG.RU

Ошибка при переносе /boot and grub

 ,


0

2

Добрый день. Переношу /boot раздел на флешку следующим образом:

sudo mount /dev/sdb1 /mnt/
sudo cp -p -r /boot/* /mnt/
sudo ls -l /mnt
sudo rm -r -f /boot/*
sudo nano /etc/fstab
UUID=085d1d30-fa19-4144-a146-2e88821e75ff /boot ext4 defaults 0 2
sudo umount /mnt/
sudo mount /dev/sdb1 /boot/
sudo grub-install /dev/sdb
Установка успешна, ошибок нет.
sudo update-grub
Всё ок.
Но далее при перезагрузке, пишет ошибку:
Error: file '/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
Сама флешка содержит следующие файлы:
grub
-- fonts
-- i386-pc <-- Внутри этого каталога присутствует /boot/grub/i386-pc/normal.mod
-- locale
-- grub.cfg
-- grubenv
unicode.pf2
system.map-4.9.0-8-amd64
config-4.9.0-8-amd64
vmlinuz-4.9.0-8-amd64
Это я переношу вручную, но также при попытке автоматического переноса устанавливая с 0 систему, выбивало такую же ошибку. Гугл ничего толком не говорит. Подскажите, как исправить?

Тебя отличия в путях не смущает? В частности отсутствие /boot на твоей флешке?

Сделай символьную ссылку boot -> ./ на флешке. А вообще, директория boot или ссылка должна присутствовать.

anonymous ()
Ответ на: комментарий от anonymous

Да, пробовал также с live-usb использовать команду:

sudo grub-install --root-directory=/mnt /dev/sdb
Installing for i386-pc platform
Installation finished. No Error reported.

после этого появился каталог /boot и в нем:

boot
-grub
--- fonts
--- i386-pc <-- Внутри этого каталога присутствует /boot/grub/i386-pc/normal.mod
---locale
--- grub.cfg
--- grubenv
-unicode.pf2
-system.map-4.9.0-8-amd64
-config-4.9.0-8-amd64
vmlinuz-4.9.0-8-amd64
после чего также попробовал
sudo update-grub --output=/mnt/boot/grub/grub.cfg

и выбило:

/usr/sbin/grub-probe: error: failed to get canonical path of '/cow'.

и также на:
sudo update-grub --output=/mnt/grub/grub.cfg

и выбило:

/usr/sbin/grub-probe: error: failed to get canonical path of '/cow'.

потому как я еще не понял какая вложенность должна быть

Как правильно сделать?

TheLinuxUser ()
Ответ на: комментарий от TheLinuxUser

Из live (sda1 это корень, sdb1 это флешка)

mount /dev/sda1 /mnt
mount /dev/sdb1 /mnt/boot
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys  /mnt/sys
chroot /mnt
grub-install /dev/sdb
update-grub
exit
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt/boot
umount /mnt
mandala ★★★★ ()
Последнее исправление: mandala (всего исправлений: 2)
Ответ на: комментарий от mandala

Из live (sda1 это корень, sdb1 это флешка)

mount /dev/sda1 /mnt
mount /dev/sdb1 /mnt/boot
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys  /mnt/sys
chroot /mnt
grub-install /dev/sdb
update-grub
exit
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt/boot
umount /mnt

Спасибо, сейчас сделаю. Подскажи пожалуйста, сам раздел на флешке должен содержать сразу каталог /dev/sdb/boot/grub или сразу /dev/sdb/grub без вложения в папку boot?

Или вовсе почистить раздел перед grub-install /dev/sdb?

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от mandala

На флешке просто файлы, /boot у тебя в корне но пустой и в него подмонтируется (через fstab флешка) – файлы в нем появляются.

Понял, а то анонимус сбил с толку, значит всё правильно. Спасибо.

После команды update-grub вывело:

Genering grub configuration file...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinux-4.9.0-8-amd64
Found initrd image: /boot/initrd.img-4.9.0-8-amd64
Adding boot menu for EFI firmware configuration
done

Далее перезагрузился, и снова пишет:

Error: file '/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от mandala

Какой EFI? CSM (Compatibility Support Module) включи (он же режим «Legasy Boot»).

Если нужна миграция на EFI – это отдельный вопрос.

BIOS -> System Configuration -> Boot Options -> Legacy Support Enabled

Конкретно «Legacy Boot» нет..

TheLinuxUser ()
Ответ на: комментарий от mandala

На этапе работы загрузчика ещё нет смонтированного корня и раздел с загрузчиком ещё не смонтирован в /boot и поэтому и возникает ошибка:

Error: file '/boot/grub/i386-pc/normal.mod' not found.
Т.е. в этом сообщении /boot - это не относительно корневой файловой системы Linux, а относительно раздела с файловой системой, где установлен загрузчик.

Поэтому содержимое флешки должно быть не:

grub
-- fonts
-- i386-pc <-- Внутри этого каталога присутствует /boot/grub/i386-pc/normal.mod
-- locale
-- grub.cfg
-- grubenv
unicode.pf2
system.map-4.9.0-8-amd64
config-4.9.0-8-amd64
vmlinuz-4.9.0-8-amd64
А
boot -> ./
grub
-- fonts
-- i386-pc <-- Внутри этого каталога присутствует /boot/grub/i386-pc/normal.mod
-- locale
-- grub.cfg
-- grubenv
unicode.pf2
system.map-4.9.0-8-amd64
config-4.9.0-8-amd64
vmlinuz-4.9.0-8-amd64
Пока он не сделае на файловой системе на флеше ссылку boot -> ./ у него будет возникать ошибка
Error: file '/boot/grub/i386-pc/normal.mod' not found.

anonymous ()
Ответ на: комментарий от anonymous

У него вообще в EFI режиме сейчас live. При восстановлении из live всё пути прописаны, конфиг сгенерируется нормально.

На этапе работы загрузчика ещё нет смонтированного корня и раздел с загрузчиком ещё не смонтирован в /boot

Чё то ты путаешь. root будет другой и пути будут другие.

mandala ★★★★ ()
Ответ на: комментарий от anonymous

Пока он не сделае на файловой системе на флеше ссылку boot -> ./ у него будет возникать ошибка

Error: file '/boot/grub/i386-pc/normal.mod' not found.

Хорошо, дак как мне это сделать то? Я не знаю и первый раз сталкиваюсь с загрузчиком. Что куда переместить/написать?

Live у тебя какой? Он грузится в EFI режиме у тебя. И конфиг граба генерится для efi, там пути другие.

mandala, live у меня обычная ubuntu а на ПК я ставлю Debian. ааа, я понял о чём ты говоришь, да, live я гружу через UEFI потому что как я выбираю обычную загрузку live, мне выбивает:

Start booting from USB device...

SYSLINUX 5.10 EDD 2013-06-04 Copyright ....

Failed to load ldlinux.c32
Boot failed: please change disks and press a key to continue.

загрузка точно идёт с /dev/sdb? не /dev/sda? в биосе менял диск, с которого грузиться?

teod0r Я также пытался загрузится вручную с /dev/sdb, там тоже очень много текста и не то совсем. Там чисто писало о загрузчике grub 2 какую-то инфу.

Сейчас загружаясь с /dev/sdb пишет:

Failed to mount /boot
See 'systemctl status boot.mount' for details
[DEPEND] Dependency failed for Unattended Upgrades Shutdown.
[DEPEND] Dependency failed for Local File Systems.
Дальше стандартный текст ... ....
Потом:
You are in emergency mode. After logging in, type "journal -xb" to view system logs, 'systemctl reboot' to reboot .......

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press enter to continue.

fstab проверил - всё подключено правильно.

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 3)
Ответ на: комментарий от mandala

Чё то ты путаешь. root будет другой и пути будут другие.

Ять, да поймы ты, у него на этапе старта загрузчика с флешки выводится:

Error: file '/boot/grub/i386-pc/normal.mod' not found.
/ в данном случае, во время старта загрузика - это раздел на флешке и запускающийся загрузчик хочет найти файл по пути /boot/grub/i386-pc/normal.mod, поэтому на флешке должна быть ссылка boot на корень этой файловой системы, это если там ext3 / ext4 или другая файловая система, поддерживающая символьные ссылки, если там FAT32, то должны быть папка boot, а в ней уже grub и прочие файлы загрузчика.

Если он перепутал в платформах EFI или PC - это его проблемы, пускай разберётся для какой платформы ему нужно ставить загрузчик.

anonymous ()
Ответ на: комментарий от anonymous

Если он перепутал в платформах EFI или PC - это его проблемы, пускай разберётся для какой платформы ему нужно ставить загрузчик.

Хорошо быть умным когда ты уже имеешь опыт. Я может где-то туплю, но при этом я стараюсь понять всё это.

поэтому на флешке должна быть ссылка boot на корень этой файловой системы, это если там ext3 / ext4 или другая файловая система, поддерживающая символьные ссылки

См код выше. Мне нужно создать теперь эту ссылку? Если да, то как ее создать и где, на /dev/sdb1?

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от TheLinuxUser

Хорошо, дак как мне это сделать то?

А что ты не знаешь как в Linux создавать символьные ссылки?

Переходится в директорию куда у вас смонтирована флешка с загрузчиком и далее даёте команду:

ln -s ./ boot


всё.
anonymous ()
Ответ на: комментарий от anonymous

А что ты не знаешь как в Linux создавать символьные ссылки?

Никогда не создавал.

Переходится в директорию куда у вас смонтирована флешка с загрузчиком и далее даёте команду:

ln -s ./ boot

mount /dev/sda1 /mnt
mount /dev/sdb1 /mnt/boot
cd /mnt/boot
ln -s ./ boot
ln: failed to create symbolic link 'boot': permission denied
TheLinuxUser ()
Ответ на: комментарий от TheLinuxUser

Я не знаю почему у тебя нет прав записи на /dev/sdb1, разбирайся. Какая там файловая система, точно ли это именно флешка?

Ну и монтировать /dev/sda1 в /mnt/, а потом в /mnt/boot /dev/sdb1 не нужно, достаточно:

mount /dev/sdb1 /mnt
cd /mnt
ln -s ./ boot
В общем, удостоверься, что /dev/sdb1 - это флешка и посмотри какие права на смонтированной файловой системе.

anonymous ()
Ответ на: комментарий от mandala

anonymous

Я не знаю почему у тебя нет прав записи на /dev/sdb1, разбирайся. Какая там файловая система, точно ли это именно флешка?

Ну и монтировать /dev/sda1 в /mnt/, а потом в /mnt/boot /dev/sdb1 не нужно, достаточно:

mount /dev/sdb1 /mnt cd /mnt ln -s ./ boot

В общем, удостоверься, что /dev/sdb1 - это флешка и посмотри какие права на смонтированной файловой системе.

Создал. Теперь на флешке есть:

Ссылка на каталог boot
grub
-- fonts
-- i386-pc <-- Внутри этого каталога присутствует /boot/grub/i386-pc/normal.mod
-- locale
-- grub.cfg
-- grubenv
unicode.pf2
system.map-4.9.0-8-amd64
config-4.9.0-8-amd64
vmlinuz-4.9.0-8-amd64
И проблемы те же:

При загрузке с /dev/sda:

Error: file '/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...

При загрузке с /dev/sdb:

Failed to mount /boot
See 'systemctl status boot.mount' for details
[DEPEND] Dependency failed for Unattended Upgrades Shutdown.
[DEPEND] Dependency failed for Local File Systems.
Дальше стандартный текст ... ....
Потом:
You are in emergency mode. After logging in, type "journal -xb" to view system logs, 'systemctl reboot' to reboot .......

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press enter to continue.

При открытии этой символьной ссылки, открывается этот же каталог флешки и путь получается boot содержащий опять эту ссылку boot, рядом каталог grub и т.д.

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от TheLinuxUser

При загрузке с /dev/sdb:

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

А про /dev/sda тебе уже ответил mandala.

anonymous ()
Ответ на: комментарий от anonymous

mandala

journal -xb

Вот вывод и покажи.

При загрузке не могу, пишет нажмите enter для продолжения и после нажатия enter снова это же пишет. С live-usb не катит, пишет мол нет такой команды.

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

anonymous, я подправил fstab в первую очередь еще до создания темы, там правильный uuid стоит раздела /dev/sdb1

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от TheLinuxUser

При загрузке не могу, пишет нажмите enter для продолжения и снова это же пишет. С live-usb прокатит или оно покажет же данные live?

Если ты смонтируешь корневую файловую систему установленного Linux, прочие разделы в нужной последовательности если они есть, сделаешь chroot и уже в chroot выполнишь то прокатит.

anonymous, я подправил fstab в первую очередь еще до создания темы, там правильный uuid стоит раздела /dev/sdb1

Закоментируй упоминание /boot в /etc/fstab и попробуй загрузиться, покажи кстати содержимое /etc/fstab установленой системы.

И вывод

blkid
или
ls -ls /dev/disk/by-uuid/*

anonymous ()
Ответ на: комментарий от anonymous
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=09d1cbc5-a82e-5a96-beee-117e09958b62 /               ext4    errors=remount-ro 0       1
UUID=39bd0e6c-8fb4-467e-9701-b1216b878e39 /boot ext4 defaultfs 0 2
sudo blkid
/dev/sda1: UUID="43524c01-d129-2114-9a12-d05fbcfc46dc" 
/dev/sda2: UUID="09d1cbc5-a82e-5a96-beee-117e09958b62" TYPE="ext4" PARTUUID="d125efe5-4e7e-2510-21f6-e8ead58ecd8d"
/dev/sda4: UUID="205ecfed-7112-4668-8c3e-a4df053831a4" TYPE="ext4" PARTUUID="06fe6631-948f-45ae-b071-854c5aada71e"
/dev/sdb1: LABEL="My SD Card" UUID="02B5-080C" TYPE="vfat" PARTUUID="1101f5c4-01"
/dev/sdb2: UUID="39bd0e6c-8fb4-467e-9701-b1216b878e39" TYPE="ext4" PARTUUID="1101f5c4-02"
/dev/sdc4: LABEL="Linux Mint" UUID="B4FE-5315" TYPE="vfat" PARTUUID="cad4ebea-04"

Когда я писал выше /dev/sdb1 я работал с /dev/sdb2 (тут всё учтено), для того чтобы никого не запутать.

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от anonymous

Закоментируй для теста последнюю строку в /etc/fstab с указанием /boot и попробуй загрузиться с флешки.

Закомментировал, СРАБОТАЛО! /boot пустой в корне и система загрузилась..

Фух... Глядя на всё пройденное, в итоге, какие ошибки я совершил, и что повлияло на действительно правильную загрузку? Только то что я создал на флешке возле grub символьную ссылку?

TheLinuxUser ()
Ответ на: комментарий от mandala

Флешка с минтом вставлена с которой ты грузишься или live?

Минт это live и я с нее грузился последний раз чтобы показать fstab. Я накидывал mint чтобы попробовать загрузится не uefi но не прокатило. Впрочем уже не важно. Флешка с /boot уже работает, система грузится. Теперь хотелось бы понять что было правильно а что нет. И стоило ли кроме символьной ссылки делать это:

mount /dev/sda1 /mnt
mount /dev/sdb1 /mnt/boot
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys  /mnt/sys
chroot /mnt
grub-install /dev/sdb
update-grub
exit
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt/boot
umount /mnt

TheLinuxUser ()
Ответ на: комментарий от mandala

Короче, столкнулся со следующей проблемой. У меня же флешка с /boot не монтируется при запуске системы. А мне для Luks и LVM нужно указать ключ..:

Правим /etc/crypttab

drivespace   UUID=090d14c1-e3c8-48e7-b123-6d9b8b2e502b       /boot/mykey      luks,cipher=aes-cbc-essiv:sha256
И как его смонтировать? -_-

Я уже и второй раздел пробовал монтировать, не монтируется. Пишет такую ошибку, не зависимо от того куда монтирую:

Failed to mount /mnt/boot
See 'systemctl status boot.mount' for details
[DEPEND] Dependency failed for Unattended Upgrades Shutdown.
[DEPEND] Dependency failed for Local File Systems.
Дальше стандартный текст ... ....
Потом:
You are in emergency mode. After logging in, type "journal -xb" to view system logs, 'systemctl reboot' to reboot .......

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press enter to continue.

TheLinuxUser ()
Последнее исправление: TheLinuxUser (всего исправлений: 1)
Ответ на: комментарий от mandala

UUID точно правильный в fstab?

Точнее не бывает перед ошибкой монтирования оно пишет строку:

EXT4-fs (sdc2): Unrecognized mount option «defaults or missing value.

Хотя в fstab оно примонтированно вот так:

UUID=39bd0e6c-8fb4-467e-9701-b1216b878e39 /mnt/boot ext4 defaultfs 0 0

Не пойму в чём прикол, причём не могу ни одну флешку подмонтировать таким образом..

TheLinuxUser ()