Bug 25593

Summary: startup- (либо initrd-) скрипты в Сизифе плохо поддерживают BTRFS
Product: Sisyphus Reporter: Alexey Morozov <morozov>
Component: make-initrdAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aen, glebfm, ldv, legion, placeholder, rider
Version: unstable   
Hardware: all   
OS: Linux   

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

btrfs device scan

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

Вызывать указанную команду нужно либо в rc.sysinit, либо в initrd. Если / находится на btrfs, то вызов должен осуществляться строго в initrd
Comment 1 Alexey Gladkov 2011-05-10 17:37:47 MSK
У меня в http://www.altlinux.org/Make-initrd стоит btrfs в TODO, но как-то никак руки не доходили. Теперь же раз спрос есть, то возьмусь. Тем более, что поддержка делается тривиально (на первый взгляд).
Comment 3 Alexey Gladkov 2011-05-13 03:52:33 MSK
В виду отсутствия интереса к тестированию, я добавляю поддержку в master и считаю, что всё работает.
Comment 4 Alexey Morozov 2011-05-13 15:48:01 MSK
К сожалению, только сейчас добрался до тестирования.

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

Был установлен 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 Alexey Gladkov 2011-05-13 16:27:18 MSK
(В ответ на комментарий №4)
> 1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что
> вызвало выпадание в initrd'шный shell.

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

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

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

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

Итак, наличествуют:
   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 Alexey Morozov 2011-05-24 10:56:07 MSK
upd: кажется, btrfs device scan /dev/sdb8 в моём случае тоже решает проблему инициализации устройств. Правда, проверял я это на системе, только что загруженной в run-level 5, так что, эксперимент явно не чистый, вечером попробую ещё раз на холодной перезагрузке.
Comment 10 Alexey Gladkov 2011-05-26 00:09:16 MSK
Давайте решать проблему по частям. Я добавил необходимые модули для btrfs. Пожалуйста, проверьте:

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

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

Говорю "кажется", потому что после агрейда make-initrd И grub2 ядро вообще перестало грузиться с теми командами, которые находятся в grub.conf, но, думаю, это следствие каких-то других проблем: если отключить в grub'е все фишки, то тогда загрузка проходит правильно
Comment 16 Alexey Gladkov 2011-05-27 15:12:17 MSK
Я вот смотрю на эти страдания в сизифе с grub и думаю, как же хорошо, что я пересел на syslinux4 :)
Comment 17 Repository Robot 2011-05-27 15:18:18 MSK
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).