Назад | Перейти на главную страницу

Как правильно предотвратить автосборку RAID-массивов в Ubuntu 16.04?

Я пытаюсь запретить mdadm автоматически собирать RAID-массивы при подключении дисков. У меня было решение, которое работало на Ubuntu 14.04, но не работает на 16.04. Я нашел вещь, которая работает для 16.04, но это немного похоже на взлом, поэтому я надеюсь, что кто-то сможет сказать мне, как это сделать правильно.

Предыстория: я хочу иметь возможность запускать сервер, а затем подключать диски (в частности, сервер является экземпляром на AWS, а диски являются томами EBS). Диски образуют массив RAID, который ранее был отключен от другого экземпляра.

Я не хочу, чтобы mdadm автоматически собирал массив рейдов; по разным причинам, характерным для моей настройки, мне лучше сделать mdadm --assemble вручную.

В Ubuntu 14.04 это было достаточно просто. В /etc/mdadm/mdadm.conf, Я добавил строку:

AUTO -all

Это то, для чего справочная страница mdadm.conf говорит, что это правильно. Я также побежал update-initramfs -u чтобы убедиться, что в системе этот параметр включен при загрузке. А в 14.04 все работает нормально: когда я подключаю диски, рейдовый массив не собирается автоматически.

Но в 16.04 система собирает массив, несмотря на эту настройку. Я пробовал перезапустить mdadm перед подключением дисков, чтобы убедиться, что он улавливает изменение конфигурации, запустив update-initramfs -c -k all на тот случай, если при загрузке использовалось другое ядро ​​или нужно было полностью воссоздать initfs и перезагрузить компьютер на случай, если есть дополнительная служба, которую нужно перезапустить. Ничего из этого не помогает: как только диски прикреплены, они собираются автоматически.

Я обнаружил, что действительно работает идея от этот ответ ServerFault - поставив линию mdadm.conf сказать это сканировать /dev/null для разделов для сканирования суперблоков MD:

DEVICE /dev/null

Однако это выглядит довольно ужасным (если и умным!) Взломом. Это также приводит к досадным ошибкам в системном журнале при подключении дисков:

Process '/sbin/mdadm --incremental /dev/xvdg1 --offroot' failed with exit code 1.

Как правильно предотвратить автоматическую сборку?

[Обновление] Итак, мне удалось получить минимальное воспроизведение, и это определенно проблема, даже в базовом Ubuntu AMI на AWS (и, следовательно, я бы предположил, что в Ubuntu 16.04 в целом).

Вот что я сделал:

[Другое обновление] Похоже, что mdadm.conf, который создается в iniramfs, не тот, который находится в /etc/mdadm/mdadm.conf! На той же машине, что и последний тест:

ubuntu@ip-10-0-0-67:~$ mkdir initramfs
ubuntu@ip-10-0-0-67:~$ cd initramfs/
ubuntu@ip-10-0-0-67:~/initramfs$ uname -a
Linux ip-10-0-0-67 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-10-0-0-67:~/initramfs$ ls /boot
abi-4.4.0-62-generic  config-4.4.0-62-generic  grub  initrd.img-4.4.0-62-generic  System.map-4.4.0-62-generic  vmlinuz-4.4.0-62-generic
ubuntu@ip-10-0-0-67:~/initramfs$ zcat /boot/initrd.img-4.4.0-62-generic | cpio -i
79595 blocks
ubuntu@ip-10-0-0-67:~/initramfs$ cat etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md/0  metadata=1.2 UUID=599586fc:a53f9227:04bc7b65:8ad7ab99 name=ip-10-0-0-70:0

ubuntu@ip-10-0-0-67:~/initramfs$

Я также подтвердил, что если машина остановлена, диски удалены, снова запущен, а затем заново сгенерирован initramfs, mdadm.conf это помещено туда, как указано выше, но без ARRAY линия.

Это очень похоже на /etc/mdadm/mdadm.conf полностью игнорируется! Но man mdadm.conf на той же машине определенно говорит, что это подходящее место для нее.

[Еще одно обновление] 14.04 поведение определенно изменилось. Я создал экземпляр 14.04 со значением по умолчанию mdadm.conf, и хвостовой системный журнал при подключении дисков:

root@ip-10-81-154-136:~# tail -f /var/log/syslog 
...
Jun  8 19:29:47 ip-10-81-154-136 kernel: [83702921.994799] blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: disabled;
Jun  8 19:29:47 ip-10-81-154-136 kernel: [83702921.999875]  xvdf: unknown partition table
Jun  8 19:29:47 ip-10-81-154-136 kernel: [83702922.053469] md: bind<xvdf>
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.748110] blkfront: xvdg: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: disabled;
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.754217]  xvdg: unknown partition table
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.812789] md: bind<xvdg>
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817276] md/raid0:md127: md_size is 41910272 sectors.
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817280] md: RAID0 configuration for md127 - 1 zone
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817281] md: zone0=[xvdf/xvdg]
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817286]       zone-offset=         0KB, device-offset=         0KB, size=  20955136KB
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817287] 
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.817309] md127: detected capacity change from 0 to 21458059264
Jun  8 19:30:04 ip-10-81-154-136 kernel: [83702938.824751]  md127: unknown partition table
^C
root@ip-10-81-154-136:~# mount /dev/md127 /mnt
root@ip-10-81-154-136:~# ls /mnt
lost+found  tweet

... что означало, что они были собраны автоматически, как и следовало ожидать.

Затем я добавил AUTO -all к mdadm.conf и побежал update-initramfs -c -k all, остановил машину, отсоединил диски, запустил снова и снова просмотрел системный журнал при подключении дисков:

root@ip-10-81-154-136:~# tail -f /var/log/syslog 
...
Jun  8 19:34:29 ip-10-81-154-136 kernel: [43448402.304449] blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: disabled;
Jun  8 19:34:29 ip-10-81-154-136 kernel: [43448402.309578]  xvdf: unknown partition table
Jun  8 19:34:51 ip-10-81-154-136 kernel: [43448424.217476] blkfront: xvdg: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: disabled;
Jun  8 19:34:51 ip-10-81-154-136 kernel: [43448424.222645]  xvdg: unknown partition table
^C

Итак, они не были собраны. Двойная проверка:

root@ip-10-81-154-136:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
unused devices: <none>
**strong text**

Точно не в сборе. Можно ли их собрать вручную?

root@ip-10-81-154-136:~# mdadm --assemble /dev/md0 /dev/xvdf /dev/xvdg
mdadm: /dev/md0 has been started with 2 drives.
root@ip-10-81-154-136:~# mount /dev/md0 /mnt
root@ip-10-81-154-136:~# ls /mnt
lost+found  tweet

...Да, они могут. А что у нас в initramfs?

root@ip-10-81-154-136:~# mkdir initramfs
root@ip-10-81-154-136:~# cd initramfs/
root@ip-10-81-154-136:~/initramfs# uname -a
Linux ip-10-81-154-136 3.13.0-100-generic #147-Ubuntu SMP Tue Oct 18 16:48:51 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@ip-10-81-154-136:~/initramfs# ls /boot
abi-3.13.0-100-generic     config-3.13.0-53-generic       initrd.img-3.13.0-53-generic   vmlinuz-3.13.0-100-generic
abi-3.13.0-53-generic      grub                           System.map-3.13.0-100-generic  vmlinuz-3.13.0-53-generic
config-3.13.0-100-generic  initrd.img-3.13.0-100-generic  System.map-3.13.0-53-generic
root@ip-10-81-154-136:~/initramfs# zcat /boot/initrd.img-3.13.0-100-generic | cpio -i
131798 blocks
root@ip-10-81-154-136:~/initramfs# cat etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md/0 metadata=1.2 UUID=599586fc:a53f9227:04bc7b65:8ad7ab99 name=ip-10-0-0-70:0

root@ip-10-81-154-136:~/initramfs# 

Еще раз, ничего из моих изменений в /etc/mdadm/mdadm.conf добрался до initramfs. С другой стороны, по крайней мере, кажется, что он обращает внимание на ту, что находится в нормальной файловой системе!

Любые мысли были бы очень признательны.