Mandriva Linux не загружается после установки systemd

1848
thkala

У меня есть система 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
thkala

Мне удалось отследить эту проблему. /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 запускаются без вмешательства администратора.

К вашему сведению: созданные пользователем модули должны идти в `/ etc / systemd / system`. grawity 12 лет назад 0
@grwity: True, поскольку единицы `/ etc / systemd /` имеют приоритет. В моем случае, однако, я считаю, что мое устройство является частью системы, очень похоже на исправление ошибок ... thkala 12 лет назад 0
Различие здесь не является «частью системы» или нет; скорее это "установлено менеджером пакетов из пакета" вместо "установленного пользователем / sysadmin вручную". grawity 12 лет назад 0
@grawity: err ... мое правило * было * установлено * с помощью менеджера пакетов ... это был единственный способ избежать неудачных неудач, которые могли убить мою систему, когда я в 4 часах езды ... Таким образом, `rpm `начнет ныть, если кто-нибудь попытается переписать мои дополнения ... thkala 12 лет назад 1