問題が発生しました。システムサービスは、ローカルパーティションがマウントされる前、特に停電イベントの後に開始されます。調査の結果、システムの再起動とフォローアップによって問題が発生したことが確認されました。FSCK仕事。
問題を簡単に再現するために、最小限の概念証明を作成しました。詳細は次のとおりです。
test.service
次のように構成されたsystemdというサービスがあります。
[Unit]
Description=fsck order POC
After=network-online.target local-fs.target remote-fs.target swap.target
[Service]
ExecStart=/bin/bash -c "date > /mnt/storage/hello"
[Install]
WantedBy=multi-user.target
私は/etc/fstab
次のようにマウントポイントを設定しました。
/dev/sda1 /mnt/storage auto nosuid,nodev,nofail 0 2
実行sudo tune2fs -l /dev/sda1 | grep -i "mount count"
結果:
Mount count: 1
Maximum mount count: 1
これは/dev/sda1
、起動するたびにfsckが発生することを示しています。ただし、ファイルは、予期したディレクトリの代わりにhello
ルートファイルシステムのディレクトリに作成されます。/mnt/storage
sda1マウントポイント。
その結果、/mnt/storage
起動後は何も表示されません。しかし、hello
ファイルを見ることができればumount /mnt/storage
。
test.service
私の質問は:すべてのファイルシステムがマウントされ、スキャンされた後にスクリプトが実行されるようにするにはどうすればよいですか? (注:マウントポイントの名前は、クライアントサイトに展開するときに制御できないため、異なる場合があります。)
システムがUbuntuを実行しています。 Debian ではこの問題は発生しません。
この問題を解決する方法についての洞察や提案をいただきありがとうございます。助けてくれてありがとう!
答え1
私の意見に解決策
systemd.mountのマンページから:
nofail
With nofail, this mount will be only wanted, not required,
by local-fs.target or remote-fs.target. Moreover the mount unit is not ordered
before these target units. This means that the boot will continue without
waiting for the mount unit and regardless whether the mount point can be
mounted successfully.
そのフラグなしで試してみると local-fs.target
まず助けてください(この場合解決策はありません)
ランニング:
systemctl list-units --type=mount
マウントデバイスを識別し、systemdファイルのAfter =に追加します。
おそらく正しい単位を識別するのに役立ちます。
systemctl status <unit>