1

У меня есть система Mandriva Linux, которая была обновлена на месте с использованием urpmi с версии 2010.0 до 2010.1, а затем 2011.0. Я столкнулся с несколькими незначительными проблемами, но ничего не мог решить.

Несколько недель назад программа обновления Mandriva сообщила мне, что для обновления shorewall мне также пришлось заменить sysvinit на systemd и systemd-sysvinit . Естественно, я неохотно позволял программе обновлений безосновательно касаться чего-то столь же важного, как система загрузки, поэтому я отложил это. Естественно, апплет Mandriva обновлял меня. Естественно, я в конце концов сдался и согласился. И, естественно, он сделал достаточно беспорядка, что моя система не может загрузить самостоятельно.

Он запускается нормально, издает несколько сообщений, а затем я получаю много сообщений в этом формате:

Starting XXXX aborted because a dependency failed.

где XXXX является чем-то связанным с файловой системой, либо вызовом fsck либо монтированием файловой системы. Это уводит меня в корневую оболочку, где вскоре обнаружившаяся зависимость становится очевидной: большинство массивов MD еще не запущены. Выполнение вручную

# mdadm -As
# mount -a
# systemctl default

в этом порядке позволяет системе завершить процесс загрузки.

У меня есть несколько физических дисков, разбитых на разделы, которые затем объединяются в несколько массивов RAID-1 (например, /boot) и RAID-5 (/ , swap и почти все остальное). Разделы и массивы, а также файловые системы, которые они содержат, были созданы вручную, а затем была установлена Mandriva Linux. Там, где не было проблем с запиской и все работало нормально, пока не появился systemd .

Я думаю, что отследил эту проблему до определенной степени. Старая система sysvinit , используемая для запуска /etc/rc.d/rc.sysinit которая, как это предусмотрено Mandriva, содержит следующую строку:

MDADM_RETURN=`/sbin/mdadm -As --auto=yes --run 2>&1`

который запускает любой массив MD, указанный в /etc/mdadm.conf , который не был запущен. Насколько я могу судить, этот файл больше не используется после system и строка выше была заменена на эту строку из /lib/systemd/fedora-storage-init:

[ -r /proc/mdstat -a -r /dev/md/md-device-map ] && /sbin/mdadm -IRs

К несчастью. В моей системе отсутствует файл /dev/md/md-device-map , поэтому mdadm не выполняется. Я могу придумать несколько способов "исправить" эту проблему, таких как редактирование сценариев systemd или изменение моего /boot/initrd.img для запуска всех массивов MD, но я бы предпочел сделать это так, чтобы это не порвало следующее обновление пакета.

  • Что такое формат /dev/md/md-device-map и как мне его создать? Этот файл является общим, например, с более новыми версиями mdadm , или это что-то специфичное для Fedora/Mandriva? Я видел несколько примеров на форумах Fedora, но ничего хорошего.

  • Что такое "правильный" способ исправить эту ошибку загрузки? Я бы предпочел не прибегать к операции на головном мозге, если смогу избежать этого ...

  • Почему, почему, почему я не придерживался "Если это не сломано, не исправляйте это!" Максим? (Да, это риторический ...)

1 ответ1

1

Мне удалось отследить эту проблему. /dev/md/md-device-map , очевидно, является файлом карты устройства mdadm в системах Fedora, в то время как моя система Mandriva использует вместо этого /dev/.mdadm/map . Поэтому сценарию /lib/systemd/fedora-storage-init не удалось запустить mdadm поскольку он смотрел не в том месте.

Вместо того, чтобы отредактировать этот файл скрипта и рискнуть потерять модификации при следующем обновлении пакета, я добавил свой собственный скрипт:

$ cat /lib/systemd/mdadm-array-start 
#!/bin/bash

# Start any MD RAID arrays that have not been started yet
[ -r /proc/mdstat ] && /sbin/mdadm --assemble --scan

exit 0

Я также создал файл модуля для systemd:

$ cat /lib/systemd/system/mdadm-array-start.service 
[Unit]
Description=Start MD arrays
DefaultDependencies=no
Conflicts=shutdown.target
After=fedora-wait-storage.service
Before=fedora-storage-init.service local-fs.target shutdown.target
Wants=fedora-wait-storage.service

[Service]
ExecStart=/lib/systemd/mdadm-array-start
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

Тогда я просто включил сервис:

# systemctl enable mdadm-array-start.service
ln -s '/lib/systemd/system/mdadm-array-start.service' '/etc/systemd/system/basic.target.wants/mdadm-array-start.service'

Это гарантирует, что любые массивы MD запускаются без вмешательства администратора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .