何らかの理由でcryptsetupデバイスの1つをマウントしようとしたときにsystemdがタイムアウトしました。単位とスクリプトは次のとおりです。
udevルール:
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{serial}=="NA8F9WKF", SYMLINK+="BigHDD", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{serial}=="AA00000000065396", SYMLINK+="clavem", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{wwid}=="t10.ATA WDC WD10EZRZ-00Z5HB0 WD-WCC4M6HRPV4V", SYMLINK+="HDDsB", TAG+="systemd"
ACTION=="add", KERNEL=="sd[a-z][0-9]", ATTRS{wwid}=="t10.ATA WDC WD10EZRZ-00Z5HB0 WD-WCC4M3EYESNV", SYMLINK+="HDDsC", TAG+="systemd"
mnt-HDD.automount
[Unit]
Description=Automount HDDs
Requires=dev-clavem.device
[Automount]
Where=/mnt/HDDs
[Install]
WantedBy=multi-user.target
mnt-HDD.マウント:
[Unit]
BindsTo=HDDs-unlock.service dev-clavem.device media-clavem.mount
After=HDDs-unlock.service dev-HDDsB.device dev-HDDsC.device
[Mount]
What=/dev/mapper/cryptHDDC
Where=/mnt/HDDs
Type=btrfs
Options= noatime,compress=lzo,autodefrag
HDDのロック解除。サービス:
[Unit]
Description=HDDs unlock
BindsTo=mnt-HDDs.mount dev-clavem.device dev-HDDsB.device dev-HDDsC.device
Requires=media-clavem.mount dev-HDDsB.device dev-HDDsC.device
After=media-clavem.mount dev-HDDsB.device dev-HDDsC.device
[Service]
Type=oneshot
RemainAfterExit=yes
KillMode=none
ExecStart=/home/rbenedetti/teste.sh
ExecStop=/sbin/cryptsetup luksClose cryptHDDB ; /sbin/cryptsetup luksClose
cryptHDDC
[Install]
RequiredBy=mnt-HDDs.mount
テストファイル
#!/bin/bash
i=0
while [[ ! -b /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 ]]; do
echo "cant find /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595... waiting. $i" > ~/testLog
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
i=0
while [[ ! -b /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 ]]; do
echo "cant find /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4... waiting. $i" > ~/testLog
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 cryptHDDC
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 cryptHDDB
i=0
while [[ ! -b /dev/mapper/cryptHDDB ]]; do
echo "cant find /dev/mapper/cryptHDDB... waiting. $i" > ~/testLog
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/826b9963-eb49-4eac-a9c0-e741552491d4 cryptHDDB
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
i=0
while [[ ! -b /dev/mapper/cryptHDDC ]]; do
echo "cant find /dev/mapper/cryptHDDC... waiting. $i" > ~/testLog
/sbin/cryptsetup --key-file /media/clavem/k luksOpen /dev/disk/by-uuid/42e7eacf-5e09-4476-8dbc-1919675c1595 cryptHDDC
if [[ "$counter" -gt 10 ]]; then
echo "giving up." > ~/testLog
exit 1
fi
sleep 0.5
let i++
done
echo "somehow passed...>" > ~/testLog
teste.shは、主にワンタイムサービスでタイムアウトが発生する理由を特定するためのテストです。実行中に何らかの理由ですべてがうまくいき、systemctl restart mnt-HDDs.mount
私のパーティションがマウントされます...タイムアウトが発生します。mnt-mapper-cryptHDDC.device
答え1
まあ、明らかにインストールcryptHDDB
作業はudevとSystemdの間に問題があると信じていました。