Собственно, поддержка должна заключаться в том, чтобы перед попыткой монтирования файловых систем позвать btrfs device scan чтобы правильно проинициализировались BTRFS'ные структуры. Без этого, например, не работает монтирование RAID'овых разделов. Вызывать указанную команду нужно либо в rc.sysinit, либо в initrd. Если / находится на btrfs, то вызов должен осуществляться строго в initrd
У меня в http://www.altlinux.org/Make-initrd стоит btrfs в TODO, но как-то никак руки не доходили. Теперь же раз спрос есть, то возьмусь. Тем более, что поддержка делается тривиально (на первый взгляд).
http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/btrfs прошу тестировать.
В виду отсутствия интереса к тестированию, я добавляю поддержку в master и считаю, что всё работает.
К сожалению, только сейчас добрался до тестирования. И, к сожалению, проблема не решена. Был установлен 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
(В ответ на комментарий №4) > 1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что > вызвало выпадание в initrd'шный shell. На счёт этого я посмотрю. > 2. во-вторых, даже загрузившись в "полную систему" и, соответственно, загрузив > модуль btrfs, при помощи команды btrfs device scan <blockname> не (всегда) > получается привести подсистему в рабочее состояние. А вот тут я ничем помочь не смогу.
У вас есть какие-нибудь идеи ?
(В ответ на комментарий №4) > 1. модуль btrfs требует модуль crc32, который, однако, в initrd не попал, что > вызвало выпадание в initrd'шный shell. У меня это не воспроизводится. У меня в initrd попадают и libcrc32c.ko и zlib_deflate.ko как и положено.
Дошли руки понять, что же там на самом деле сейчас происходит. Итак, наличествуют: 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 без указания конкретных разделов. Может быть, можно и с указанием разделов, но как-то понавороченней.
upd: кажется, btrfs device scan /dev/sdb8 в моём случае тоже решает проблему инициализации устройств. Правда, проверял я это на системе, только что загруженной в run-level 5, так что, эксперимент явно не чистый, вечером попробую ещё раз на холодной перезагрузке.
Давайте решать проблему по частям. Я добавил необходимые модули для btrfs. Пожалуйста, проверьте: http://git.altlinux.org/people/legion/packages/make-initrd.git
Алексей, собрал твою версию, попробовал - всё заработало отлично. Выложи, пожалуйста, её в p6 и Sisyphus.
(В ответ на комментарий №11) > Алексей, собрал твою версию, попробовал - всё заработало отлично. Выложи, > пожалуйста, её в p6 и Sisyphus. В sisyphus. В p6 ты сам отправишь.
да, конечно, в Sisyphus.
Т.е. получается, что не хватало правильного набора модулей. Отлично!
Да, попробовал, теперь, кажется, поднимается. Говорю "кажется", потому что после агрейда make-initrd И grub2 ядро вообще перестало грузиться с теми командами, которые находятся в grub.conf, но, думаю, это следствие каких-то других проблем: если отключить в grub'е все фишки, то тогда загрузка проходит правильно
Я вот смотрю на эти страдания в сизифе с grub и думаю, как же хорошо, что я пересел на syslinux4 :)
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).