9

編集:これは、. だけでなく、任意のマウント ポイントで別のパーティションを使用しようとしたときに発生します/var

Buildroot を使用して組み込み Linux システムを構築しています。/var に別のパーティションを使用しようとしていますが、これはすべてのマウント ポイントで発生します。私のinitシステムはsystemd、デバイス管理用のudevです。fstab を次のように編集しました。

# <file system> <mount pt>     <type>   <options>                <dump> <pass>
/dev/root       /              ext2     rw,noauto                0      1
/dev/mmcblk0p4  /var           ext2     defaults                 0      2
proc            /proc          proc     defaults                 0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620  0      0
tmpfs           /dev/shm       tmpfs    mode=0777                0      0
tmpfs           /tmp           tmpfs    defaults                 0      0
sysfs           /sys           sysfs    defaults                 0      0
tmpfs           /run           tmpfs    defaults                 0      0

システムが起動すると、「Expecting device dev-mmcblk0p4.device...」というメッセージが表示され、最終的に次のメッセージが続きます。

デバイス dev-mmcblk0p4.device の待機中にタイムアウトしました。

/var の依存関係に失敗しました。

ローカル ファイル システムの依存関係に失敗しました。


/var2の代わりにマウントポイントとして、またはその他のもの を使用すると、同じことが起こり/varます。ブートが失敗すると、緊急モードに入り、マウントが正常に行われます。その後、システム メンテナンスを終了すると、すべてが期待どおりに機能します。この遅延マウントの原因は何ですか?? 私は一歩を踏み外しましたか?

出力のスクリーンショット:

systemd の起動

4

2 に答える 2

4

これは一種のハックですが、これを回避できました。そもそもなぜこれが発生しているのか知りたいのですが、systemd init が完了するまで udev が mmcblk パーティションをマウントしていないように見えます。これにより/etc/fstab、mmcblk パーティションを呼び出すと依存関係エラーが発生します。udev は をチェックしfstab、mmcblk デバイスがマウントされるのを待ってからタイムアウトし、デバイスのマウントを試みます。

私の解決策:

1) パーティションのマウントを処理する systemd サービスを作成します。

#/etc/systemd/system/mount-data-partition.service
[Unit]
Description=Mount Data Partition
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/mount /dev/mmcblk0p4


Wants2)内でこのサービスに依存関係を 追加しsystemd-udev-trigger.serviceます。

#/usr/lib/systemd/system/systemd-udev-trigger.service
[Unit]
Description=udev Coldplug all Devices
Documentation=man:udev(7) man:systemd-udevd.service(8)
DefaultDependencies=no
Wants=systemd-udevd.service mount-data-partition.service
After=systemd-udevd-kernel.socket systemd-udevd-control.socket
Before=sysinit.target
ConditionCapability=CAP_MKNOD

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/udevadm trigger --type=subsystems --action=add ; /usr/bin/udevadm trigger


これによりmount-data-partition.service、 によって呼び出され、 の前に実行されsystemd-udev-trigger.serviceます。次に、コマンドはinmountを探し、指定どおりにマウントします (私の状況では、)。がマウントされたので、udev はデバイスが存在することを認識し、待機中にタイムアウトしなくなりました。システムは通常どおり起動し続けます。/dev/mmcblk0p4/etc/fstab/var/dev/mmcblk0p4

私は自分の質問に答えたくないのですが、この情報が誰かの役に立てば幸いです。そもそもなぜこれが起こっているのかを誰かが教えてくれるなら、そうしてください。

于 2014-05-01T18:44:31.917 に答える