Установка Grub на gpt bios под qemu и порча разделов.

Автор mcherenkov, 09 сентября 2022, 09:58:54

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

mcherenkov

Устанавливал Grub из гостя с LiveDVD как сказано в

установка debian 10 gpt
https://debianforum.ru/index.php/topic,16896.0.html
(у меня как раз debian 10.3 и gpt c bios).

Дело происходит под qemu на реальном жёстком диске.

После множества однообразных попыток установки grub'а (пришёл к использованию 2-х скриптов) получал следующие возможные результаты:

1. Grub перезагружается или висит, выдавая или выдав "Booting from Hard Hisk...".
Указанное сообщение иногда успеваю увидеть, после чего следует перезагрузка. Иногда кажется, что оно и не исчезает.
Получить доступ к команной строке Grub с помощью "c" не получается.

Поиск по "Booting from Hard Hisk..." полезных результатов не дал.

2. Или 2-й вариант - нынешний: Grub показывает командную строку (свою).


Для установки применялось 2 скрипта. Один готовил окружение под LiveDVD Debian 10.3, второй собственно уставливал grub уже из chroot'а.
Первый скрипт
{
#!/bin/bash
set -x
set -e
RootMountPoint="/mnt/Root"
BootMountPoint="${RootMountPoint}/boot"
RootDev="/dev/disk/by-label/HDXX_Root"
BootDev="/dev/disk/by-label/HDXX-Boot"
echo "RootDev=${RootDev}"
echo "BootDev=${BootDev}"

ls -l "${RootDev}" "${BootDev}"
echo "="
ls -lL "${RootDev}" "${BootDev}"

echo "Mounting..."
read -p "Press a key to continue..."

# mkdir "${RootMountPoint}" &&
# mkdir "${BootMountPoint}"

# mount "${RootDev}" "${RootMountPoint}" &&
# mount "${BootDev}" "${BootMountPoint}"
mount --bind /dev "${RootMountPoint}"/dev
mount --bind /dev/pts "${RootMountPoint}"/dev/pts
mount --bind /proc "${RootMountPoint}"/proc
mount --bind /sys "${RootMountPoint}"/sys

echo "DoIt:"
echo grub-install /dev/sda  # (указал именно диск sda, а не раздел sda1)
echo grub-install --recheck /dev/sda
echo update-grub

chroot "${RootMountPoint}"

echo "Umounting..."
read -p "Press a key to continue..."
umount "${RootMountPoint}"/dev/pts
umount "${RootMountPoint}"/dev
umount "${RootMountPoint}"/proc
umount "${RootMountPoint}"/sys
umount "${RootMountPoint}"/boot
# umount "${RootMountPoint}"

echo "DoIt:"
echo reboot

}


Второй скрипт
{
#!/bin/bash
set -e

TargetDisk="/dev/sda"
TargetDisk_UUID="2dfabfb2-88b6-496b-90d5-9dbd4acbe1ba"

if ! blkid "${TargetDisk}"|grep "${TargetDisk_UUID}";then echo "No such disk!" ;exit;fi

blkid "${TargetDisk}"
read -p "Press Enter to continue..."

set -x

echo "DoIt:"
echo grub-install "${TargetDisk}"  # (указал именно диск sda, а не раздел sda1)
echo grub-install --recheck "${TargetDisk}"
echo update-grub

grub-install "${TargetDisk}"  # (указал именно диск sda, а не раздел sda1)
grub-install --recheck "${TargetDisk}"
update-grub


}

Дополнительные данные
{
Открыть содержимое (спойлер)
+ mount
/dev/sda1 on / type ext4 (rw,relatime,nodelalloc,data=journal)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=484216k,nr_inodes=121054,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
+ blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5 -s UUID
/dev/sda1: UUID="a381e2f9-a632-43a8-9d4b-ebf872879105"
/dev/sda2: UUID="d22c1053-3cc3-48dd-90e9-f816ee68a427"
/dev/sda3: UUID="0158fff8-c2a0-4de2-92cd-ffe2e4463046"
/dev/sda5: UUID="ld2puf-JDEt-LvEd-1B4D-cm3n-gcY5-jfmLRu"
+ gdisk -l /dev/sda
./ls.bash: line 5: gdisk: command not found
+ fdisk -l /dev/sda
Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: QEMU HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2DFABFB2-88B6-496B-90D5-9DBD4ACBE1BA

Device         Start        End    Sectors  Size Type
/dev/sda1       2048   67110911   67108864   32G Linux filesystem
/dev/sda2   67110912  100665343   33554432   16G Linux filesystem
/dev/sda3  100665344  134219775   33554432   16G Linux filesystem
/dev/sda4  134219776  134744063     524288  256M BIOS boot
/dev/sda5  134744064 7814035455 7679291392  3.6T Linux LVM
+ ls -l / /boot /boot/grub
/:
total 88
drwxr-xr-x  2 root root  4096 Jun 20 12:19 NewRoot
drwxr-x--- 17 root root  4096 Jun 19 14:17 _Bad
drwxr-x---  2 root root  4096 May 30 14:08 _NewRoot
drwxr-x---  2 root root  4096 Sep  4 07:49 _Notes
drwxr-x--- 17 root root  4096 Jun 19 14:21 _OldRoot
lrwxrwxrwx  1 root root     7 Jun 20 12:09 bin -> usr/bin
drwxr-xr-x  3 root root  4096 Mar 19  2021 boot
drwxr-xr-x  2 root root  4096 Jun 20 12:19 debootstrap
drwxr-xr-x 15 root root  3340 Sep  4 07:42 dev
drwxr-xr-x 52 root root  4096 Aug 27 15:13 etc
drwxr-xr-x  2 root root  4096 Mar 19  2021 home
lrwxrwxrwx  1 root root    31 Aug 27 15:12 initrd.img -> boot/initrd.img-4.19.0-16-amd64
lrwxrwxrwx  1 root root    31 Aug 27 15:12 initrd.img.old -> boot/initrd.img-4.19.0-16-amd64
lrwxrwxrwx  1 root root     7 Jun 20 12:09 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Jun 20 12:09 lib32 -> usr/lib32
lrwxrwxrwx  1 root root     9 Jun 20 12:09 lib64 -> usr/lib64
lrwxrwxrwx  1 root root    10 Jun 20 12:09 libx32 -> usr/libx32
drwx------  2 root root 16384 Aug  4  2019 lost+found
drwxr-xr-x  2 root root  4096 Jun 20 12:09 media
drwxr-xr-x  3 root root  4096 Jun 20 14:49 mnt
drwxr-xr-x  2 root root  4096 Jun 20 12:09 opt
dr-xr-xr-x 87 root root     0 Sep  4 07:37 proc
drwx------  2 root root  4096 Jul  4 07:59 root
drwxr-xr-x  5 root root  4096 Jul  4 11:38 run
lrwxrwxrwx  1 root root     8 Jun 20 12:09 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Jun 20 12:09 srv
dr-xr-xr-x 13 root root     0 Sep  4 07:37 sys
drwxrwxrwt  2 root root  4096 Sep  4 08:16 tmp
drwxr-xr-x 13 root root  4096 Jun 20 12:09 usr
drwxr-xr-x 11 root root  4096 Jun 20 12:09 var
lrwxrwxrwx  1 root root    28 Aug 27 15:12 vmlinuz -> boot/vmlinuz-4.19.0-16-amd64
lrwxrwxrwx  1 root root    28 Aug 27 15:12 vmlinuz.old -> boot/vmlinuz-4.19.0-16-amd64

/boot:
total 4
drwxr-xr-x 5 root root 4096 Sep  4 08:16 grub

/boot/grub:
total 36
drwxr-xr-x 2 root root  4096 Aug 21 14:47 fonts
-r--r--r-- 1 root root  3050 Sep  4 08:16 grub.cfg
-rw-r--r-- 1 root root  1024 Aug 21 14:47 grubenv
drwxr-xr-x 2 root root 20480 Sep  4 08:15 i386-pc
drwxr-xr-x 2 root root  4096 Sep  4 08:15 locale
+ cat /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod ext2
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  a381e2f9-a632-43a8-9d4b-ebf872879105
else
  search --no-floppy --fs-uuid --set=root a381e2f9-a632-43a8-9d4b-ebf872879105
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=ru_RU
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
    set timeout=5
  # Fallback normal timeout code in case the timeout_style feature is
  # unavailable.
  else
    set timeout=5
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
   set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
[свернуть]
}

В ходе установки grub'а сообщений об ошибках не было. Коды завершения - нулевые.

На данный момент Grub показывает командную строку. Похоже это связано с порчей раздела /boot, иногда (как и в последнем случае) случающимся где-то между установкой grub и выключением виртуалки.

Обращаю внимание на то, что после последней попытки поставить grub (или в ходе выключения виртуалки?) /boot (/dev/sda4) порушился, так, что blkid перестал его упоминать.

Некоторые команды от хозяина, в котором гостевой "sda4" является "sdb4":
Открыть содержимое (спойлер)
# hexdump -C /dev/sdb4 |head -n 24
00000000  52 e8 28 01 74 08 56 be  33 81 e8 4c 01 5e bf f4  |R.(.t.V.3..L.^..|
00000010  81 66 8b 2d 83 7d 08 00  0f 84 e9 00 80 7c ff 00  |.f.-.}.......|..|
00000020  74 46 66 8b 1d 66 8b 4d  04 66 31 c0 b0 7f 39 45  |tFf..f.M.f1...9E|
00000030  08 7f 03 8b 45 08 29 45  08 66 01 05 66 83 55 04  |....E.)E.f..f.U.|
00000040  00 c7 04 10 00 89 44 02  66 89 5c 08 66 89 4c 0c  |......D.f.\.f.L.|
00000050  c7 44 06 00 70 50 c7 44  04 00 00 b4 42 cd 13 0f  |.D..pP.D....B...|
00000060  82 bb 00 bb 00 70 eb 68  66 8b 45 04 66 09 c0 0f  |.....p.hf.E.f...|
00000070  85 a3 00 66 8b 05 66 31  d2 66 f7 34 88 54 0a 66  |...f..f1.f.4.T.f|
00000080  31 d2 66 f7 74 04 88 54  0b 89 44 0c 3b 44 08 0f  |1.f.t..T..D.;D..|
00000090  8d 83 00 8b 04 2a 44 0a  39 45 08 7f 03 8b 45 08  |.....*D.9E....E.|
000000a0  29 45 08 66 01 05 66 83  55 04 00 8a 54 0d c0 e2  |)E.f..f.U...T...|
000000b0  06 8a 4c 0a fe c1 08 d1  8a 6c 0c 5a 52 8a 74 0b  |..L......l.ZR.t.|
000000c0  50 bb 00 70 8e c3 31 db  b4 02 cd 13 72 50 8c c3  |P..p..1.....rP..|
000000d0  8e 45 0a 58 c1 e0 05 01  45 0a 60 1e c1 e0 03 89  |.E.X....E.`.....|
000000e0  c1 31 ff 31 f6 8e db fc  f3 a5 1f e8 3e 00 74 06  |.1.1........>.t.|
000000f0  be 3b 81 e8 63 00 61 83  7d 08 00 0f 85 1d ff 83  |.;..c.a.}.......|
00000100  ef 0c e9 0f ff e8 24 00  74 06 be 3d 81 e8 49 00  |......$.t..=..I.|
00000110  5a ea 00 82 00 00 be 40  81 e8 3d 00 eb 06 be 45  |Z......@..=....E|
00000120  81 e8 35 00 be 4a 81 e8  2f 00 eb fe bb 17 04 f6  |..5..J../.......|
00000130  07 03 c3 6c 6f 61 64 69  6e 67 00 2e 00 0d 0a 00  |...loading......|
00000140  47 65 6f 6d 00 52 65 61  64 00 20 45 72 72 6f 72  |Geom.Read. Error|
00000150  00 bb 01 00 b4 0e cd 10  46 8a 04 3c 00 75 f2 c3  |........F..<.u..|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

# file -s /dev/sdb4
/dev/sdb4: data
[свернуть]
Сейчас обнаружил, что корень гостя (sda1) тоже слегка повредился. fsck вроде бы что-то поправил.

Теоретически допускаю, что порча файловой системы может быть связана с неправильным завершением операционной системы (вынужденным - в отсутствие других возможностей).
(Смотрите "Правильное выключение".)
Но более склонен думать на установщик grub, так как в иных случаях применения LiveDVD ничего не портится, хотя выключение тоже получается не совсем чистое.

Систему ставил на sda1 (на хозяйской системы выглядит как sdb1) через bootstrap из хозяйской системы. В процессе установки ошибок не было.
То есть гостевой / размещён на гостевом sda1. Гостевой /boot размещён на гостевом /sda4.

С чем может быть связана неполадка?
И как можно установить grub так, чтобы он заработал, и при этом ничего не попротилось?

Спасибо за внимание.


dzhoser

#1
Проверка диска помогла? Система загружается? До grub доходит?
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

mcherenkov

> Проверка диска помогла?
      1 fsck из util-linux 2.33.1
      2 ext2fs_open2: Bad magic number in super-block
      3 fsck.ext2: Superblock invalid, trying backup blocks...
      4 HDXX-Boot was not cleanly unmounted, check forced.
      5 Resize inode not valid.  Recreate? no
      6
      7 Pass 1: Checking inodes, blocks, and sizes
      8 Inode 7 has illegal block(s).  Clear? no
      9
     10 Illegal block #780 (3695089751) in inode 7.  IGNORED.
     11 Illegal block #781 (2717963423) in inode 7.  IGNORED.
     12 Illegal block #782 (1666397527) in inode 7.  IGNORED.
     13 Illegal block #783 (2814582390) in inode 7.  IGNORED.
...

И ещё около 18000 ошибок. Догадываюсь что лучшим лечением для такого случая может быть переформатирование, но пока этого не делал, чтобы не повредить диагностике. Тем более, что пока всё равно неясно что делать дальше.

> Система загружается? До grub доходит?
Grub на пару секунд показывает "Booting from Hard Hisk...", а затем показывает свою командную строку.

dzhoser

Цитата: mcherenkov от 11 сентября 2022, 09:31:15Grub на пару секунд показывает "Booting from Hard Hisk...", а затем показывает свою командную строку.
Значит грузится в bisybox?
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

mcherenkov


dzhoser

Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

mcherenkov

Уже показал в разделе "Дополнительные данные", начиная с "+ fdisk -l /dev/sda".