Как правильно установить Debian Jessie на несколько устройств с BTRFS в режиме RAID 1?

В качестве краткого введения я расскажу вам, какие настройки у меня есть и чего я хочу достичь. После этого я пытаюсь объяснить свою проблему. Поскольку это мой первый вопрос о U & L, я должен извиниться за то, что это, возможно, странно. Это довольно давно, поэтому, возможно, новые пользователи BTRFS или Debian могут извлечь выгоду из моего опыта или даже использовать его в качестве своего рода учебника.

Базовая установка оборудования

У меня есть материнская плата и процессор из поколения Haswell с некоторой оперативной памятью и двумя SSD.

(Примечание. Чтобы сделать правильный диагноз, я не получил ничего более связанного, кроме этих частей. Если вам нужна дополнительная информация об этих частях, пожалуйста, не стесняйтесь спрашивать подробности.)

Делать

Я хочу установить Debian Jessie на SSD с BTRFS в режиме RAID 1, зеркалируя оба диска, так что, если кто-то не сработает, я могу продолжить работу с другим в деградированном режиме.

То, что я достиг еще

Поскольку на данный момент Jessie является тестированием, я начал чистую установку со своим предшественником Wheezy, потому что у меня были проблемы с установкой тестовой ветки в прошлом. Во время установки я разбил первый диск (например, A ) следующим образом:

  • только один отдельный раздел (содержащий все будущие точки монтирования с использованием всего доступного пространства на диске),
  • форматирование в BTRFS и
  • оставляя раздел подкачки.

Установка прошла успешно на A, как ожидалось, и после этого я обновился до Jessie (отредактировав /etc/apt/sources.list и выполнив apt-get update && dist-upgrade upgrade.Я выполнил перезагрузку.Он показал, что имеет Kernel 3.14-2- amd64 сейчас.

После этого я начал готовить другой диск (скажем, B ). Я скопировал таблицу разделов A с помощью sfdisk -d /dev/sda > /tmp/sda.pt и сбросил ее обратно в B с помощью sfdisk /dev/sdb < /tmp/sda.pt .

Итак, теперь я был готов добавить устройство и выполнить преобразование в RAID 1 со следующими командами:

 mount /dev/sda1 /mnt btrfs device add /dev/sdb1 /mnt btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt 

Пока здесь все не удалось, так как я вижу RAID 1 с btrfs filesystem show содержащим псевдоним A /dev/sda1 A и /dev/sdb1 . Кроме того, blkid перечисляет оба диска с одинаковым UUID и другим UUID_SUB.

Я оставил точки монтирования в /etc/fstab почти нетронутыми только добавлением некоторых параметров монтирования, относящихся к SSD:

 UUID=01234567-89ab-cdef-0123-456789abcdef / btrfs defaults,noatime,nodiratime,discard 0 1 

После перезагрузки система полностью загрузилась в ОС. Вышеприведенные команды blkid показывают btrfs filesystem show и blkid все же показывают те же результаты. Кажется, что работает RAID 1.

Моя проблема и мои вопросы

Перед холодным запуском системы я отключил B (имитируя полную ошибку устройства), так что был доступен только A и думал, что BTRFS все еще запускается в деградированном режиме. Но это не так. Я получаю ошибки initramfs, которые не могут найти устройство.

  1. Это ожидаемое поведение BTRFS или что-то не так с моими initramfs? (Возможно, именно так BTRFS говорит мне, что один диск был уничтожен, находясь в автономном режиме.)

    а. Это или невозможно запустить только один диск A , плагин (горячая замена) нового диска C и повторная синхронизация в сети?

    б. На btrfs.wiki.kernel.org упоминается, что сначала монтируется неисправное устройство в деградированном режиме, а затем добавляется новое. Это единственный способ?

    (Запомните себе: я проведу подключение другого голого устройства C и посмотрю, что произойдет. Возможно, я смогу ответить на эти вопросы самостоятельно после работы с немецким источником на wiki.ubuntuusers.de .)

  2. Как сделать диск B также загрузочным (на всякий случай, когда диск A будет уничтожен)? Является ли /boot синхронизированным? Мне нужно только установить GRUB на устройство B с grub-install /dev/sdb или мне нужно что-то сделать?

  3. Полезно ли использовать параметр mount ssd в fstab, потому что кажется, что это не так, как указано в btrfs.wiki.kernel.org, что он включен автоматически? Мне кажется, что это необходимо, только если ОС не может правильно определить SSD.

Ответ на вопрос 1 – Как начать работу после отказа одного диска

Я мог бы восстановить RAID 1, выполнив следующие шаги:

  1. Я взял какой-то форматированный диск (скажем, C ) и подключил его к тому же порту SATA, где раньше был дефектный диск B.

  2. После этого я запустил компьютер и в меню загрузки я нажал e чтобы отредактировать команду перед загрузкой в ​​соответствии с wiki.ubuntuusers.de следующим образом:

    а. Я прокрутил до соответствующей записи начала и разместил следующие строки:

     set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 01234567-89ab-cdef-0123-456789abcdef else search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef fi echo 'Loading Linux 3.14-2-amd64...' linux /boot/vmlinuz-3.14-2-amd64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro quiet 

    б. Затем я отредактировал строку 1 и изменил номер диска на рабочий жесткий диск (в моем случае он остается hd0 , если несколько дисков по-прежнему подключены, это может быть hd1 ):

     set root='hd0,msdos1' 

    с. Я дезактивировал строки с 2 по 6, сделав его комментарием, добавив главный символ # :

     #if [ x$feature_platform_search_hint = xy ]; then # search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 01234567-89ab-cdef-0123-456789abcdef #else # search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef #fi 

    д. После этого я отредактировал строку 8 и вставил корневой флаг для деградации RAID ( rootflags=degraded ):

     linux /boot/vmlinuz-3.14-2-amd64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro rootflags=degraded quiet 

    е. Нажимая клавишу F10 я выбрал только что отредактированную запись. Система запускалась.

  3. После полной загрузки ОС мне пришлось добавить новый диск C в мой RAID 1. Я сделал это, как указано на btrfs.wiki.kernel.org :

    а. Я установил неподвижную рабочую машину A :

     mount -o degraded /dev/sda1 /mnt 

    б. Я добавил новый диск C :

     btrfs device add /dev/sdb1 /mnt 

    с. После этого я удалил старые устройства (в моем случае диск B ):

     btrfs device delete missing /mnt 
  4. Наконец, я проверил, все ли хорошо с командами btrfs filesystem show , blkid и blkid btrfs fi df /mnt как упоминалось выше в вопросе. оба диска имеют одинаковый UUID, но разные UUID_SUB и сообщаются в режиме RAID 1.

    Поздравляю, это сработало!

Личное примечание

Я рассматриваю описанное поведение неудачных initramfs, как ожидалось, пока кто-то еще не докажет мне, что я ошибаюсь. Может быть, это способ сказать мне, я должен сейчас тщательно реагировать, потому что мой диск разбился ужасно – но это просто догадывается.

Объяснение относительно необходимости ручного деградации

Между тем я нашел интересную дискуссию, связанную с этой темой в списке рассылки разработчиков Linux . Из-за его значимости я хочу привести отрывок, написанный Дунканом, который, как мне кажется, очень важно знать, особенно для новых пользователей:

Вы должны иметь возможность монтировать файловую систему btrfs raid1 с двумя устройствами только с одним устройством с деградированным вариантом монтирования, поскольку я полагаю, что текущие ядра отказываются от монтирования на чтение и запись в этом случае, поэтому вы будете иметь доступ только для чтения, пока не будете Устройство btrfs добавляет второе устройство, поэтому оно может снова выполнить обычный режим raid1. […] Между тем, поскольку деградировавший mount-opt на самом деле не работает, если btrfs действительно может найти все компоненты файловой системы, некоторые люди просто захотят добавить унизительные стандартные параметры монтирования (отредактируйте конфигурацию grub для добавления это при каждой загрузке), поэтому им не нужно беспокоиться об этом. Тем не менее, это НЕ РЕКОМЕНДУЕТСЯ, так как общепринятая мудрость заключается в том, что отказ от несанкционированного доступа служит предупреждением системному администратору о том, что происходит что-то ОЧЕНЬ НЕПРАВИЛЬНОЕ, и что им нужно это исправить. Затем они могут добавлять дефрагментацию временно, если они того пожелают, приказав, чтобы файловая система смонтировалась и, таким образом, могла загрузиться, но добавление опции обычно при каждой загрузке обходит это важное предупреждение, и слишком вероятно, что администратор, таким образом, игнорирует проблема (или не знаю об этом вообще) до слишком поздно.

(Источник: https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg31265.html )

Дополнительное примечание. Хотя у меня нет разделов подкачки на компьютере моего примера, я хотел бы призвать людей, которые хотят получить их, прочитать эту очень интересную почту, на которую я дал ссылку, потому что она объясняет использование обмен с BTRFS в режиме RAID.


Ответ на вопрос 2 – Как сделать другие диски загрузочными

Что касается того, что я знаю до сих пор, использование grub-install /dev/sdb (и даже дополнительного обновления-grub) кажется недостаточным. Я объясню, почему я так думаю.

Когда я попробовал обратный путь, отключив автономный диск A и загрузившись с диска B, произошло следующее. Появился загрузчик GRUB, и я сделал те же шаги, что и в пункте 2 вопроса 1. Сразу после подтверждения с помощью F10 процесс загрузки сразу же остановился с пустым экраном (я говорю об активном мониторе, черном фоне, курсоре). Поэтому, очевидно, что-то здесь не так с загрузчиком на диске B. (Помните: у меня есть RAID 1 и не могу загрузиться с моего второго диска после того, как первый диск «провалился»).

Я помог себе, сделав жесткий сброс, снова подключил диск A (так что оба A и B присутствовали снова) и загрузились в ОС. Поскольку мои диски A и B абсолютно идентичны, я копировал весь MBR (содержащий загрузчик) из рабочего диска A в B в необработанном режиме с dd if=/dev/sda of=/dev/sdb bs=512 count=1 . Я выключил компьютер, отключил диск A, как раньше, и угадал, что произошло? После выполнения шагов для деградации снова я смогу, наконец, управлять загрузкой в ​​ОС только с диска B.

Я должен подвести итог, что до сих пор не знаю, связано ли это с моей таблицей разделов (MSDOS – не GPT) или командой grub-install в сочетании с BTRFS или чем-то еще. Я также не понимаю размер потенциальных недостатков, которые моя сырая копия сравнивает с grub-install . (Может быть, кто-то может прояснить это немного в комментарии под этим ответом.)

Обратите внимание, что я все еще изучаю в этом контексте, и я снова обновлю этот ответ. Я хочу прояснить больше, но мне нужно еще некоторое время работать с сырым кодом макета сектора MBR обоих дисков и выяснить, возникает ли проблема с загрузчиком или даже с идентификаторами диска .


Ответ на вопрос 3 – Как обращаться с опцией mount ssd

Это зависит от того, сможет ли материнская плата правильно передать ситуацию с накопителем. Как указано на btrfs.wiki.kernel.org, BTRFS сам полагается на значения ОС. Из-за того, что другие модули в ОС также могут зависеть от этих значений, гораздо лучше проверить /sys/block/sdX/queue/rotational для соответствующего значения (0: SSD, 1: HDD) в целом. Если значения соответствуют, оставьте параметр ssd.