Bug 25593 - startup- (либо initrd-) скрипты в Сизифе плохо поддерживают BTRFS
: startup- (либо initrd-) скрипты в Сизифе плохо поддерживают BTRFS
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/make-initrd)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2011-05-10 16:32 by
Modified: 2011-05-27 15:18 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2011-05-10 16:32:42
Собственно, поддержка должна заключаться в том, чтобы перед попыткой
монтирования файловых систем позвать

btrfs device scan

чтобы правильно проинициализировались BTRFS'ные структуры. Без этого, например,
не работает монтирование RAID'овых разделов.

Вызывать указанную команду нужно либо в rc.sysinit, либо в initrd. Если /
находится на btrfs, то вызов должен осуществляться строго в initrd
------- Comment #1 From 2011-05-10 17:37:47 -------
У меня в http://www.altlinux.org/Make-initrd стоит btrfs в TODO, но как-то
никак руки не доходили. Теперь же раз спрос есть, то возьмусь. Тем более, что
поддержка делается тривиально (на первый взгляд).
------- Comment #2 From 2011-05-11 00:31:54 -------
http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/btrfs

прошу тестировать.
------- Comment #3 From 2011-05-13 03:52:33 -------
В виду отсутствия интереса к тестированию, я добавляю поддержку в master и
считаю, что всё работает.
------- Comment #4 From 2011-05-13 15:48:01 -------
К сожалению, только сейчас добрался до тестирования.

И, к сожалению, проблема не решена.

Был установлен make-initrd-0.4.6-alt1 (коммит, из которого собирался src.rpm -
e88c37d4e3017718fdada50adb13af2997c2c6ef), после чего в список FEATURES был
добавлен btrfs и пересобран initrd.

При загрузке обнаружились следующие проблемы:

1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что
вызвало выпадание в initrd'шный shell.
2. во-вторых, даже загрузившись в "полную систему" и, соответственно, загрузив
модуль btrfs, при помощи команды btrfs device scan <blockname> не (всегда)
получается привести подсистему в рабочее состояние. Ниже приведён лог операций:

[root@rhyme ~]# mount /home/work/
mount: wrong fs type, bad option, bad superblock on /dev/sdb8,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

[root@rhyme ~]# btrfs device scan /dev/sdb8
Scanning for Btrfs filesystems in '/dev/sdb8'
[root@rhyme ~]# mount /home/work/
mount: wrong fs type, bad option, bad superblock on /dev/sdb8,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

[root@rhyme ~]# btrfs device scan
Scanning for Btrfs filesystems
failed to read /dev/sr0
[root@rhyme ~]# mount /home/work/
[root@rhyme ~]# _

В моём случае BTRFS использует RAID0 (stripe) для данных, и RAID10 для
метаданных на устройствах /dev/sdb8 и /dev/sda12
------- Comment #5 From 2011-05-13 16:27:18 -------
(В ответ на комментарий №4)
> 1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что
> вызвало выпадание в initrd'шный shell.

На счёт этого я посмотрю.

> 2. во-вторых, даже загрузившись в "полную систему" и, соответственно, загрузив
> модуль btrfs, при помощи команды btrfs device scan <blockname> не (всегда)
> получается привести подсистему в рабочее состояние.

А вот тут я ничем помочь не смогу.
------- Comment #6 From 2011-05-13 16:31:58 -------
У вас есть какие-нибудь идеи ?
------- Comment #7 From 2011-05-15 00:34:36 -------
(В ответ на комментарий №4)
> 1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что
> вызвало выпадание в initrd'шный shell.

У меня это не воспроизводится. У меня в initrd попадают и libcrc32c.ko и
zlib_deflate.ko как и положено.
------- Comment #8 From 2011-05-24 07:33:04 -------
Дошли руки понять, что же там на самом деле сейчас происходит.

Итак, наличествуют:
   kernel-image-std-def-2.6.38-alt4
   make-initrd-0.4.6-alt1

и btrfs в конфигурации RAID0, расположенная на /dev/sdb8 и /dev/sda11,
монтируемая в обычной жизни в /home/work/

При загрузке ядра initramfs вываливается на stage '' (неименованный) в
отладочную оболочку с сообщением о невозможности загрузить модуль btrfs из-за
неразрезолвленных символов и предложением глядеть в dmesg. Загрузить руками
модуль btrfs.ko и модуль libcrc32c в этой оболочке тоже не получается. После
C-D загрузка продолжается, в "настоящей" системе btrfs уже грузится, однако,
примонтировать /home/work загрузочными скриптами по-прежнему не получается

В ходе разборок выяснилось, что модуль libcrc32c зависит от модуля crc32c (из
kernel/crypto/, означенный crc32c.ko в initramfs не попадает, и,
соответственно, загрузка btrfs обламывается.

Кроме этого, опытным путём установлено, что для правильного инициализации
btrfs'ных разделом нужно выполнять btrfs device scan без указания конкретных
разделов. Может быть, можно и с указанием разделов, но как-то понавороченней.
------- Comment #9 From 2011-05-24 10:56:07 -------
upd: кажется, btrfs device scan /dev/sdb8 в моём случае тоже решает проблему
инициализации устройств. Правда, проверял я это на системе, только что
загруженной в run-level 5, так что, эксперимент явно не чистый, вечером
попробую ещё раз на холодной перезагрузке.
------- Comment #10 From 2011-05-26 00:09:16 -------
Давайте решать проблему по частям. Я добавил необходимые модули для btrfs.
Пожалуйста, проверьте:

http://git.altlinux.org/people/legion/packages/make-initrd.git
------- Comment #11 From 2011-05-27 12:48:17 -------
Алексей, собрал твою версию, попробовал - всё заработало отлично. Выложи,
пожалуйста, её в p6 и Sisyphus.
------- Comment #12 From 2011-05-27 12:51:30 -------
(В ответ на комментарий №11)
> Алексей, собрал твою версию, попробовал - всё заработало отлично. Выложи,
> пожалуйста, её в p6 и Sisyphus.

В sisyphus. В p6 ты сам отправишь.
------- Comment #13 From 2011-05-27 13:11:19 -------
да, конечно, в Sisyphus.
------- Comment #14 From 2011-05-27 13:14:24 -------
Т.е. получается, что не хватало правильного набора модулей.
Отлично!
------- Comment #15 From 2011-05-27 14:59:59 -------
Да, попробовал, теперь, кажется, поднимается.

Говорю "кажется", потому что после агрейда make-initrd И grub2 ядро вообще
перестало грузиться с теми командами, которые находятся в grub.conf, но, думаю,
это следствие каких-то других проблем: если отключить в grub'е все фишки, то
тогда загрузка проходит правильно
------- Comment #16 From 2011-05-27 15:12:17 -------
Я вот смотрю на эти страдания в сизифе с grub и думаю, как же хорошо, что я
пересел на syslinux4 :)
------- Comment #17 From 2011-05-27 15:18:18 -------
make-initrd-0.5.0-alt1 -> sisyphus:

* Fri May 27 2011 Alexey Gladkov <legion@altlinux> 0.5.0-alt1
- initrd:
  + Add the ability to export filesystems other than /dev.
  + Change modules order.
- plymouth:
  + Add systemd > v20 support.
- New:
  + Add systemd support.
  + Add btrfs support (ALT#25593).