web-dev-qa-db-ja.com

ディスクをマウントするUdevルールが機能しない

/etc/udev/rules.d/81-external-disk.rulesに次のコンテンツが含まれています。

ENV{ID_FS_UUID}=="6826692e-79f4-4423-8467-cef4d5e840c5", RUN{program}+="/bin/mount -o nofail,x-systemd.device-timeout=1 -t ext4 -U 6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external"

実行後:

udevadm control --reload ; udevadm trigger /dev/sdb1

何もしません。ただし、IIが/ bin/touch/tmp/xyzなどのマウントコマンドを変更した場合、動作します。

バージョン:

[root@helsinki rules.d]# rpm -qa | grep udev
libgudev1-219-19.el7_2.12.x86_64
python-pyudev-0.15-7.el7_2.1.noarch
[root@helsinki rules.d]# rpm -qa | grep systemd
systemd-libs-219-19.el7_2.12.x86_64
systemd-219-19.el7_2.12.x86_64
systemd-sysv-219-19.el7_2.12.x86_64
[root@helsinki rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
9
sebelk

これはsystemdの機能です。元のudevコマンドはsystemd-udevdに置き換えられました(そのmanページを参照してください)。違いの1つは、独自のファイルシステム名前空間を作成するため、マウントは行われますが、プリンシパル名前空間には表示されません。 (これを確認するには、systemctl status systemd-udevdを実行してサービスのメインPIDを取得し、/proc/<pid>/mountinfoの内容を調べてファイルシステムを確認します)。

プライベートファイルシステムの名前空間ではなく共有に戻す場合は、コンテンツを含むファイル/etc/systemd/system/systemd-udevd.serviceを作成します

.include /usr/lib/systemd/system/systemd-udevd.service
[Service]
MountFlags=shared 

または、最後の2行だけを含む新しいディレクトリとファイル/etc/systemd/system/systemd-udevd.service.d/myoverride.conf、つまり.

[Service]
MountFlags=shared

そして、systemd-udevdサービスを再起動します。私はこれを行うことの意味を見つけていません。

18
meuh

これと同じ問題がUbuntu 18.04でも同じ根本的な原因で発生します。これを修正するには、systemd-udevdのオーバーライドファイルを作成します。

Sudo systemctl edit systemd-udevd

そしてそれに挿入します:

[Service]
MountFlags=shared

ファイルを保存して実行します。

Sudo systemctl daemon-reload
Sudo service systemd-udevd --full-restart
12
freespace

ENV {ID_FS_UUID}はマウントする前は不明です。

ATTR {SerialNumber}またはATTR {Vendor}やATTR {ProdID}などのハードウェアに近い属性を使用する必要があります。

usb-devicesは、デバイスを識別するためのより良い方法を見つけるのに役立ちます。

0
Setop