Я пытаюсь запретить 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 в целом).
Вот что я сделал:
Создал RAID-массив, используя их, и поместил туда "канареечный" файл, чтобы убедиться, что это действительно был тот же массив, когда я смонтировал его позже:
/sbin/mdadm --create -l0 -n2 /dev/md0 /dev/xvdf /dev/xvdg
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt
touch /mnt/tweet
Остановил экземпляр, отключил тома.
Авторизовался в новом экземпляре и проследил за системным журналом, чтобы увидеть, что произошло, когда я подключил тома. На этом этапе я не изменился /etc/mdadm/mdadm.conf
, Я ожидал увидеть, как он автоматически соберет массив.
root@ip-10-0-0-67:~# journalctl -f
-- Logs begin at Thu 2017-06-08 18:46:12 UTC. --
Jun 08 18:46:27 ip-10-0-0-67 systemd-logind[1099]: New session 1 of user ubuntu.
Jun 08 18:46:27 ip-10-0-0-67 systemd[1375]: Reached target Paths.
...
Jun 08 18:46:57 ip-10-0-0-67 kernel: blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
Jun 08 18:46:57 ip-10-0-0-67 kernel: md: bind<xvdf>
Jun 08 18:47:10 ip-10-0-0-67 kernel: blkfront: xvdg: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
Jun 08 18:47:10 ip-10-0-0-67 kernel: md: bind<xvdg>
Jun 08 18:47:10 ip-10-0-0-67 kernel: md/raid0:md127: md_size is 41910272 sectors.
Jun 08 18:47:10 ip-10-0-0-67 kernel: md: RAID0 configuration for md127 - 1 zone
Jun 08 18:47:10 ip-10-0-0-67 kernel: md: zone0=[xvdf/xvdg]
Jun 08 18:47:10 ip-10-0-0-67 kernel: zone-offset= 0KB, device-offset= 0KB, size= 20955136KB
Jun 08 18:47:10 ip-10-0-0-67 kernel:
Jun 08 18:47:10 ip-10-0-0-67 kernel: md127: detected capacity change from 0 to 21458059264
^C
root@ip-10-0-0-67:~# mount /dev/md127 /mnt
root@ip-10-0-0-67:~# ls /mnt
lost+found tweet
Итак, на этом этапе я подтвердил, что массив raid был автоматически собран с конфигурацией по умолчанию, что неудивительно. Следующим шагом было добавление AUTO -all
к /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
AUTO -all
# This file was auto-generated on Thu, 02 Feb 2017 18:23:27 +0000
# by mkconf $Id$
Далее делаем полное обновление-initramfs
root@ip-10-0-0-67:~# update-initramfs -c -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-62-generic
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
root@ip-10-0-0-67:~#
Затем остановите экземпляр (не завершайте - просто временно выключите) и отсоедините тома EBS.
Снова запустите экземпляр и убедитесь, что томов нет.
ubuntu@ip-10-0-0-67:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
Следите за системным журналом, снова присоединяя тома, и он автоматически соберет:
ubuntu@ip-10-0-0-67:~$ sudo journalctl -f
Jun 08 18:55:25 ip-10-0-0-67 systemd[1]: apt-daily.timer: Adding 2h 21min 27.220312s random time.
...
Jun 08 18:56:02 ip-10-0-0-67 kernel: blkfront: xvdf: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
Jun 08 18:56:02 ip-10-0-0-67 kernel: md: bind<xvdf>
Jun 08 18:56:15 ip-10-0-0-67 kernel: blkfront: xvdg: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;
Jun 08 18:56:15 ip-10-0-0-67 kernel: md: bind<xvdg>
Jun 08 18:56:15 ip-10-0-0-67 kernel: md/raid0:md127: md_size is 41910272 sectors.
Jun 08 18:56:15 ip-10-0-0-67 kernel: md: RAID0 configuration for md127 - 1 zone
Jun 08 18:56:15 ip-10-0-0-67 kernel: md: zone0=[xvdf/xvdg]
Jun 08 18:56:15 ip-10-0-0-67 kernel: zone-offset= 0KB, device-offset= 0KB, size= 20955136KB
Jun 08 18:56:15 ip-10-0-0-67 kernel:
Jun 08 18:56:15 ip-10-0-0-67 kernel: md127: detected capacity change from 0 to 21458059264
^C
Подтвердите, что массив действительно является изначально созданным:
ubuntu@ip-10-0-0-67:~$ sudo mount /dev/md127 /mnt
ubuntu@ip-10-0-0-67:~$ ls /mnt
lost+found tweet
[Другое обновление] Похоже, что 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. С другой стороны, по крайней мере, кажется, что он обращает внимание на ту, что находится в нормальной файловой системе!
Любые мысли были бы очень признательны.