udevのインストールが同じままではないのはなぜですか?

udevのインストールが同じままではないのはなぜですか?

CentOS 7を実行しているコンピュータがあります。 USBドライブ( "sdb1")が接続されているときに/ mnt / flashに自動的にマウントされるようにudevルールを設定しようとしています。

udevスクリプトが機能していないため(下記参照)、コマンドをbashスクリプトに入れてudevにbashスクリプトを実行させることで何が起こっているのかを確認できました。

質問1: bashスクリプトから直接/mnt/flashを生成しようとすると、ルートファイルシステムが読み取り専用であるため失敗します。ルートファイルシステムが読み取り専用でないことを確認できます。私のシステムが起動しました。ただし、USBドライブを接続してudevにスクリプトを実行させる場合は、「mount |」を実行するだけで十分です。私のスクリプトのロガーは、ルートが読み取り専用であることを示しています。

スクリプトの上部で "mount -o remount,rw /"を実行してこの問題を解決しました。

質問#2: /mnt/flash を正常に作成し、/dev/sdb1 を /mnt/flash にマウントできました。 'install | do this 'を実行した後、/var/log/messagesにインストールされていることを確認しました。しかし、結論は/dev/sdb1がマウントされていないことです。スクリプトにも5秒の遅延を設定し、 "mount |"を実行して2番目のログを記録しました。両方とも、/dev/sdb1 が /mnt/flash にマウントされていることを示します。しかし、これが起こっている間に他の端末で "mount"を実行すると、/ dev / sdb1がどこにもマウントされていることがわかりません。

私はクレイジーなのか、それともudevが実行中にファイルシステムに奇妙なことをしているのでしょうか?

udev スクリプト: /etc/udev/rules.d/99-usb-automount.rules

#Only operate on sdb1
KERNEL!="sdb1", GOTO="usb-automount-end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="usb-automount-end"

#import useful variables from blkid program
IMPORT{program}="/sbin/blkid -o udev -p %N"

#ignore anything other than vfat filesystems
ACTION=="add", ENV{ID_FS_TYPE}!="vfat", GOTO="usb-automount-end"

#remount root as read-write.  Not sure why we have to do this!
#ACTION=="add", RUN+="/bin/mount -o remount,rw /"

#mount to /mnt/flash
#ACTION=="add", RUN+="/bin/mkdir -p /mnt/flash"
#ACTION=="add", RUN+="/bin/mount -t vfat -o dmask=000,fmask=111 /dev/%k /mnt/flash"
ACTION=="add", RUN+="/root/test_run.sh", OPTIONS="last_rule"

#clean up after removal
#ACTION=="remove", RUN+="/bin/umount -l /mnt/flash"

#label for goto end
LABEL="usb-automount-end"

これは/root/test_run.shです:

#!/bin/bash -x
logger "running mount"
mount | logger
logger "remounting root"
mount -o remount,rw /  2>&1 | logger
logger "remount done"
mount | logger
logger "Running script.  Adding dir"
mkdir -p /mnt/flash2 2>&1 | logger
logger "Directory added... mounting."
mount -t vfat -o dmask=000,fmask=111 /dev/sdb1 /mnt/flash2 2>&1 | logger
logger "Mounted"
mount | logger

logger "Sleeping 5 then re-checking"
sleep 5

mount | logger

編集1:SELinuxを無効にすると、問題#1が解決されます。ただし、udevの後に/ dev / sdb1をマウントされたままにすることはできません。 udevコンテキストで維持されているほぼ2番目のマウントテーブルがあるようです。

答え1

質問1SELinuxが原因です。私のシステムではこの機能は必要ないので、無効にするだけです。

質問#2これは、udev名前空間がインストールフラグの「スレーブ」コピーを保持するようにするudev設定(systemdスクリプトで指定)によって発生します。 「共有」に変更すると問題が解決しました。ここで詳細な回答をご覧ください。https://unix.stackexchange.com/a/154318/41988

関連情報