Страница 1 из 1

grub + gpt + freebsd zfs root

Добавлено: 2009-08-22 20:23:05
dvg_lab
имеется разметка диска в GPT, корень на ZFS и желание грузить фрю через GRUB, у когонить получился такой финт ушами? Известно что официальный grub не поддерживает zfs, только в версии от opensolaris но я как-то с опенсолярисом не дружу (может зря?) получается единственный способ загрузиться через grub это использовать chainloader, но как тоже не ясно потому что и бутлоадер от фри становится в mbr и grub тоже становится в mbr. Как бы их подружить? Нужна и фря на ноуте и убунта. :(

Re: grub + gpt + freebsd zfs root

Добавлено: 2009-09-20 20:47:45
Alex Keda
ф топку гробы ваши

Re: grub + gpt + freebsd zfs root

Добавлено: 2009-09-20 21:42:17
f_andrey
Зачем в этой связке Grub?

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-23 23:11:50
fox
Alex Keda писал(а):ф топку гробы ваши
Лис а как быть если есть ZFS на Фри, и нужна вторая ось кого использовать в качестве загрузчика?

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-24 23:13:48
Alex Keda
1 ОС - 1 диск

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-24 23:18:31
fox
Alex Keda писал(а):1 ОС - 1 диск
Не согласен... Если винт один... Если это новт...

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-24 23:32:36
Alex Keda
виртуалбокс юзайте

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 0:03:18
fox
Alex Keda писал(а):виртуалбокс юзайте
интерсно...

Это-же не наши методы!

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 8:25:29
Гость
fox писал(а):
Alex Keda писал(а):виртуалбокс юзайте
интерсно...

Это-же не наши методы!
Почему?

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 11:03:55
fox
Потому, что не наши! Ну зачем расхот ресурсов на виртуалку когда можно на тот же винт вторую ось и получить полноценную ось!

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 12:33:42
manefesto
вторая ось не нужна...
хотя у меня их на десктопе две

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 13:02:24
fox
manefesto писал(а):вторая ось не нужна...
хотя у меня их на десктопе две
Ну что за однозначность такая...

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 13:19:43
Гость
fox писал(а):Потому, что не наши! Ну зачем расхот ресурсов на виртуалку когда можно на тот же винт вторую ось и получить полноценную ось!
Каждому своё! У мну сразу 2 системы в работе на 3-х дисках , а вам перегружаться надо :smile:

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-25 18:58:22
fox
Гость писал(а):
fox писал(а):Потому, что не наши! Ну зачем расхот ресурсов на виртуалку когда можно на тот же винт вторую ось и получить полноценную ось!
Каждому своё! У мну сразу 2 системы в работе на 3-х дисках , а вам перегружаться надо :smile:
Ну так вот как достичь загрузчика без MBR?

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 0:37:42
Dark_ASU
fox писал(а):
Гость писал(а):
fox писал(а):Потому, что не наши! Ну зачем расхот ресурсов на виртуалку когда можно на тот же винт вторую ось и получить полноценную ось!
Каждому своё! У мну сразу 2 системы в работе на 3-х дисках , а вам перегружаться надо :smile:
Ну так вот как достичь загрузчика без MBR?
можно погугли.
Я когдато линь из окон грузил.

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 0:41:30
fox
Dark_ASU писал(а):
fox писал(а):
Гость писал(а):
fox писал(а):Потому, что не наши! Ну зачем расхот ресурсов на виртуалку когда можно на тот же винт вторую ось и получить полноценную ось!
Каждому своё! У мну сразу 2 системы в работе на 3-х дисках , а вам перегружаться надо :smile:
Ну так вот как достичь загрузчика без MBR?
можно погугли.
Я когдато линь из окон грузил.
максимум что я находил так это grub2

и тоже не вариант манов ненашёл...

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 1:03:44
Dark_ASU
там создается сжатый образ загрузчика. Который из батника грузится в оперативу и там разворачивается. Далее он считывает секцию мбр переходит по указаному образу и загружает то что есть. В принципе так можно грузить что угодно и от куда угодно.

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 1:06:11
fox
Dark_ASU писал(а):там создается сжатый образ загрузчика. Который из батника грузится в оперативу и там разворачивается. Далее он считывает секцию мбр переходит по указаному образу и загружает то что есть. В принципе так можно грузить что угодно и от куда угодно.
Да, но речь идёт о GPT а не MBR!

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 16:44:47
Гость
dvg_lab писал(а):имеется разметка диска в GPT, корень на ZFS и желание грузить фрю через GRUB, у когонить получился такой финт ушами?
Да, zfs v6 и v28. А есть какие-то трудности помимо глюкалово^Wавтоопределения FS в grub-probe? Создавай (grub-mkimage) и заливай (grub-setup) образ вручную. Напр.
http://forums.freebsd.org/showthread.php?t=20718
dvg_lab писал(а):Известно что официальный grub не поддерживает zfs,
уже несколько месяцев поддерживает. Бери grub2 из bazaar репозитория.

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-01-26 23:49:33
Dark_ASU
да какая разница что считывать задай правильно сектора с каких начинать читать и все

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-03-05 12:28:43
M1cRO

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-03-08 21:59:00
devel
M1cRO писал(а):http://m1cr0.blogspot.com/2011/02/grub2 ... buntu.html
сделал так, всё ок
скомпилировать его (grub2 из репозитария) таки удалось на FreeBSD Current (не совсем красиво, но что важно - система грузится нормально из рутового раздела на zfs v28. Что ещё примечательного: gpt +hybrid partitions. Нормально грузятся системы как с GPT, так и с "гибридизированного" раздела)
подробности компиляции (если кому интересно) здесь: https://savannah.gnu.org/bugs/?32676#comment3

НО:
пока не понятно как грузить систему без вот этого вот:

Код: Выделить всё

          kfreebsd /@/boot/kernel/kernel
          kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
          kfreebsd_module_elf /@/boot/kernel/zfs.ko
          kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
          set kFreeBSD.vfs.root.mountfrom=zfs:z
не то чтобы я против такого способа (ведь он работает)... но имхо незачем grub'у знать столько интимных подробностей... лучше бы просто пнуть загрузчик, и пусть он сам уже отрабатывает, при этом правильно отработав всё, что в loader.conf прописано

Re: grub + gpt + freebsd zfs root

Добавлено: 2011-03-13 0:57:20
devel
devel писал(а): НО:
пока не понятно как грузить систему без вот этого вот:

Код: Выделить всё

          kfreebsd /@/boot/kernel/kernel
          kfreebsd_module_elf /@/boot/kernel/opensolaris.ko
          kfreebsd_module_elf /@/boot/kernel/zfs.ko
          kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
          set kFreeBSD.vfs.root.mountfrom=zfs:z
не то чтобы я против такого способа (ведь он работает)... но имхо незачем grub'у знать столько интимных подробностей... лучше бы просто пнуть загрузчик, и пусть он сам уже отрабатывает, при этом правильно отработав всё, что в loader.conf прописано
наконец-то настали выходные и выпало время разобраться. В принципе всё весьма логично. Отпишу здесь, может кому пригодится и сэкономит время...
Итак, задача была позволить grub2 грузить FreeBSD с корневого раздела на zfs (разметка диска: gpt) и при этом не пользоваться сервисом стандартного лоадера (а не явно в конфиге grub'a дублировать всё необходимое содержимое loader.conf). Задача решается с помощью стандартной фичи grub'a: пнуть альтернативный загрузчик (т.е. воспользоваться chainloader). Для этого нужно:
1) найти альтернативный загрузчик (в нашем случае это pmbr);
2) загрузить его, тем самым передав ему управление.
очевидно, чтобы это сработало, нужен раздел freebsd-boot кула будет записан bootcode (gptzfsboot), так как задача pmbr найти раздел freebsd-boot и загрузить с него bootcode. В моём случае такого раздела не было, пришлось создавать (причём, пришлось потеснить bios-boot диск grub'a... теснить можно ровно настолько, чтобы не "обрезать" инсталлированный туда core.img. в моём случае это было около 70К.).

Код: Выделить всё

#
# исходное состояние
#
[silent@t410][/home/silent]gpart show
=>       34  625142381  ada0  GPT  (298G)
         34        512     1  bios-boot  (256K)
        546  420335454     2  freebsd-zfs  (200G)
  420336000   61432560     3  linux-data  (29G)
  481768560  143373855     4  linux-data  (68G)

#
# выделяем место под freebsd-boot
#
[silent@t410][/home/silent]sudo gpart resize -s 256 -i 1 ada0
ada0p1 resized
[silent@t410][/home/silent]gpart show
=>       34  625142381  ada0  GPT  (298G)
         34        256     1  bios-boot  (128K)
        290        256        - free -  (128K)
        546  420335454     2  freebsd-zfs  (200G)
  420336000   61432560     3  linux-data  (29G)
  481768560  143373855     4  linux-data  (68G)

#
# инициализируем freebsd-boot
#
[silent@t410][/home/silent]sudo gpart add -b 290 -t freebsd-boot ada0
ada0p5 added
[silent@t410][/home/silent]gpart show
=>       34  625142381  ada0  GPT  (298G)
         34        256     1  bios-boot  (128K)
        290        256     5  freebsd-boot  (128K)
        546  420335454     2  freebsd-zfs  (200G)
  420336000   61432560     3  linux-data  (29G)
  481768560  143373855     4  linux-data  (68G)

#
# устанавливаем partition bootcode (он же stage[12])
#
[silent@t410][/home/silent]sudo gpart bootcode -p /boot/gptzfsboot -i 5 ada0
всё, теперь в /boot/grub/grub.conf достаточно такой записи:

Код: Выделить всё

menuentry "FreeBSD" --class freebsd --class bsd --class os {
    chainloader /@/boot/pmbr
}
(конечно же при условии, что core.img уже включает в себя модуль biosdisk, part_gpt, zfs, иначе ничего не будет... так же в load.cfg при создании core.img (с помощью grub-mkimage) были сразу заданы для удобства переменные root и prefix, в моём случае это были '(hd0,gpt2)' и '(hd0,gpt2)/@/boot/grub' соответственно).

PS:
по идее, если есть куда выложить добро grub'a (/boot/grub/*), то для загрузки freebsd с корневого zfs раздела, вовсе необязательна поддержка zfs (врочем grub2 тоже тогда необязателен, можно и старой версией пользоваться с патчами для gpt). Ведь pmbr можно записать куда угодно (например в последний сектор того же bios-boot раздела или даже раздела freebsd-boot.. главное чтобы там было свободно хотя бы 512 байт), потом просто chainloader'у сказать что-то вроде:

Код: Выделить всё

menuentry "FreeBSD" --class freebsd --class bsd --class os {
    chainloader (hd0,gpt1)N+1
}
# где N - номер блока в разделе, куда был записан pmbr