1 Востаннє редагувалося HetmanNet (28.09.2022 08:37:52)

Тема: [RedHat-like] Зупиняється завантаження ОС через ldm.

Є наприклад машина під linux, до якої підключено кілька динамічних масивів ldm (тобто програмний RAID на Windows).
Ви в systemd створюєте та вмикаєте сервіс ldm:

[Unit]
Description=Windows Dynamic Disk Mount
Before=local-fs-pre.target
#After=local-fs-pre.target
DefaultDependencies=no
[Service]
Type=simple
User=root
ExecStart=/usr/bin/ldmtool create all
Restart=on-failure
[Install]
WantedBy=local-fs-pre.target

Прописуєте автомонтування в fstab:

UUID=1A2A3A4A5A6A7A8A   /mnt/WinRAID0   ntfs    defaults,uid=1000,gid=1000   0 2
UUID=8A7A6A5A4A3A2A1A   /mnt/WinRAID1   ntfs    defaults,uid=1000,gid=1000   0 2

Але при завантаженні ОС отримуєте те що воно зупиняється після спроби змонтувати один з масивів, після продовження з ігноруванням помилки завантаження завершується, з кількох масивів відсутній один, який легко повертається в роботу командами:

ldmtool create all && mount -a

В логах можна знайти повідомлення щодо цього масиву такого характеру:

Sep 01 00:50:32 ChiaFarm systemd[1]: systemd-fsck@dev-mapper-ldm_vol_MAIN\x2g0g0_Volume1.service: Job systemd-fsck@dev-mapper-ldm_vol_MAIN\x2g0g0_Volume1.service/start failed with result 'dependency'.
Sep 01 00:50:32 ChiaFarm systemd[1]: dev-mapper-ldm_vol_MAIN\x2g0g0_Volume1.device: Job dev-mapper-ldm_vol_MAIN\x2g0g0_Volume1.device/start failed with result 'timeout'.

Причина проста: ldm не встигає відпрацювати до того як systemd розпочне монтування розділів, бо ldm ніяк не дає знати systemd коли він відпрацював. Тож в fstab додамо кілька опцій до кожного запису з ldm масивом:

defaults,uid=1000,gid=1000,nofail,x-systemd.automount,x-systemd.mount-timeout=180,x-systemd.after=ldmtool.service,x-systemd.device-timeout=60

де:
nofail - щоб завантаження ОС не зупинялося через не можливість змонтувати розділи
x-systemd.automount - монтувати розділ, якщо не змонтовано, при зверненні до точки монтування (про всяк випадок, але як основний механізм вирішення не раджу, так як при великих масивах процес монтування займає до біса часу, а процес що звернувся "підвисне" на цей час)
x-systemd.mount-timeout=180 - час в продовж якого може тривати процес монтування, тобто збільшуємо timeout після якого вважатиметься що монтування не вдалося (значення значно завищено, на випадок проблемних масивів)
x-systemd.after=ldmtool.service - автомантувати лише після запуску сервісу ldm (це важливо)
x-systemd.device-timeout=60 - час очікування девайсу, це час який чекатиме система якщо в момент запуску автомонтування девайс не знайдено, що як раз і було причиною що найперший масив у черзі на автомонтування не монтувався (бо ldmtool не встигав до запуску процесу його створити, час теж значно завищений так аби точно встигав).

Подякували: leofun011

2 Востаннє редагувалося HetmanNet (21.03.2023 16:00:12)

Re: [RedHat-like] Зупиняється завантаження ОС через ldm.

Після певного часу експлуатації в конфігураційний файл сервісу було внесено зміни, бо були проблеми причинами яких могли були пару SATA controller ASMedia 1064 (rev 02) чи ще щось через що бувало LDM не відпрацьовував):

# systemctl cat ldmtool
# /etc/systemd/system/ldmtool.service
[Unit]
Description=Windows Dynamic Disk Mount
Before=smb.service
After=local-fs-pre.target
DefaultDependencies=yes
[Service]
Type=forking
User=root
ExecStart=/usr/bin/ldmtool create all
ExecStartPost=/bin/mount -a
Restart=on-failure
[Install]
WantedBy=multi-user.target

Так, як у моєму випадку він має відпрацювати до запуску SAMBA то вказав директиву Before=smb.service. Також додав ExecStartPost=/bin/mount -a щоб після того як відпрацює LDM було змонтовано файлові системи які стали доступні.

Також в fstab було змінено з

defaults,uid=1000,gid=1000,nofail,x-systemd.automount,x-systemd.mount-timeout=180,x-systemd.after=ldmtool.service,x-systemd.device-timeout=60

на

defaults,uid=1000,gid=1000,nofail,nls-utf8,x-systemd.automount,x-systemd.mount-timeout=180,x-systemd.after=ldmtool.service,x-systemd.device-timeout=60

додавши опцію nls-utf8.

Подякували: leofun011