LINUX.ORG.RU
ФорумAdmin

Загрузка GRUB'ом из матрёшки блочных устройств

 , ,


0

1

Господа, подскажите можно ли реализовать то что я хочу и как именно это сделать. Дабы избежать ошибки XY точно сформулирую конечную цель: Я хочу на одном диске иметь и линукс и винду, причём вторую с возможностью загрузки или в гипервизоре или напрямую на железе.
Решаю так:
Имею диск /dev/sda разбитый на 4 раздела

# lsblk
sda      8:0    0 119,2G  0 disk 
├─sda1   8:1    0   190M  0 part /boot/efi
├─sda2   8:2    0  19,1G  0 part /
├─sda3   8:3    0  47,7G  0 part /home
└─sda4   8:4    0  52,3G  0 part 
В первые три установлен Linux, четвёртый отдан в kvm, и там на нём поставлен Windas, который соответственно при установке видит отданный ему /dev/sda4 как неразмеченный жёсткий диск и разбивает его ещё на несколько блочных устройств. Если теперь подключить /dev/sda4 как петлевое устройство:
# losetup -fv /dev/sda4
то gdisk покажет такую картину:
# gdisk /dev/loop7
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1023999   499.0 MiB   2700  Basic data partition
   2         1024000         1226751   99.0 MiB    EF00  EFI system partition
   3         1226752         1259519   16.0 MiB    0C01  Microsoft reserved ...
   4         1259520       109676543   51.7 GiB    0700  Basic data partition
Можно ли теперь как то обучить GRUB моей основной системы загружать этот винвдувс напрямую на железе, без запуска Linux? Если использовать для винды вместо /dev/sda4 корневое блочное устройство, например /dev/sdb, то проблем с этой задачей не возникает вовсе - матрёшка не образуется, а GRUB сам находит загрузку через os_prober и даже комп без GRUB может самостоятельно загрузиться с этого диска. Но нужно свестись к одному диску. Пытаюсь гуглить загрузку из loop-девайсов, но натыкаюсь только на загрузку из ISO-образов, сопоставить полученную инфу с моей ситуацией не могу.



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

на фоне заморочек с ISO это было бы слишком просто =)

Вставил в 40_custom следующее

menuentry "Windows" {
        insmod chain
        insmod ntfs
        set root=(hd0,3)
        chainloader +1
}
пишет invalid EFI file path

poedyatel
() автор топика

Efi загрузчик может вызывать только efi загрузчики.

Даже если ты каким-то образом аызовешь bootmgr, то он не найдет разделы в разделе. В файле BCD находится конфигурация bootmgr и в нем жёстко указаны идентификаторы разделов.

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

а зачем вообще этот геморой с вложенностью? сделай четвертый раздел extended, и в него уже ставь винду. будет у тебя в итоге ~7 разделов на диске.

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

А у меня при таком подходе почему то не получалось в KVM такую винду запустить. Надо конечно ещё разок попробовать, но в прошлый раз чтобы я KVM-у не подсовывал, хоть /dev/sdx хоть /dev/sdx1, винда это воспринимает как неразмечный целый диск и хочет свой уровень разметки в нём сделать. Задача то в общем не в том чтобы засунуть винду в матрёшку, а в том чтобы на одном диске иметь и линукс и винду, притом винду иметь возможность загрузить и через гипервизор и напрямую в редких случаях. Возможно нужно просто пойти другим путём.

poedyatel
() автор топика

Хм... а что если зайти с другой стороны?
Для краткости записи сокращу количество разделов для каждой ОС до двух.
Ставим Linux на sda1 и sda2, ставим Винду на sda3 и sda4. Получаем типичный Dualboot через GRUB. Теперь, загрузившись в Linux, создаём виртуальное блочное устройство содержащее sda3 и sda4, а его то уже подсовываем в KVM. Чисто логически идея проста и прозрачна и похоже уже даже реализована - device-mapper это то что мне нужно?

poedyatel
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.