FAT32でフォーマットされた(最大の互換性のために)USBデバイスをCentOS 5を実行しているシステムに接続しました(たとえば、古いことがわかっています)。
挿入する目的は、他の2つのシステムから転送されたバックアップファイルを受信することです。
ただし、(明らかに)UDEVのデフォルト動作により、そのサブディレクトリは "drwxr-xr-x 5 root root"としてインストールされ、送信されたすべてのエントリを拒否し、 "chown"(エラーメッセージとともに)も拒否します。または「chmod」(自動的に失敗する)。
USB FAT32デバイスのデフォルトのインストール動作を変更する方法はありますか?このボックスの /etc/udev/rules.d には以下が含まれています。
05-udev-early.rules 60-pcmcia.rules 90-alsa.rules
40-multipath.rules 60-raw.rules 90-dm.rules
50-udev.rules 60-wacom.rules 90-hal.rules
51-hotplug.rules 61-uinput-stddev.rules 95-pam-console.rules
60-libsane.rules 61-uinput-wacom.rules 98-kexec.rules
60-net.rules 85-pcscd_ccid.rules bluetooth.rules
ここでオブジェクトは次のようになります。特に避けてください血まみれは明示的にインストールする必要があります(そしていいえ他のデバイスを接続するたびに、新しいfstabエントリを追加する必要があります!
「udevmonitor」(「udevadm」を除く)を見つけてデバイスを接続したとき:
UEVENT[1618003563.847325] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5
UEVENT[1618003563.847392] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/usbdev1.4_ep00
UEVENT[1618003563.849089] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0
UEVENT[1618003563.849130] add@/class/scsi_host/host4
UEVENT[1618003563.849155] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/usbdev1.4_ep8b
UEVENT[1618003563.849180] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/usbdev1.4_ep0a
UEVENT[1618003563.849203] add@/class/usb_device/usbdev1.4
UDEV [1618003563.850150] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5
UDEV [1618003564.062789] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/usbdev1.4_ep00
UDEV [1618003564.186813] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0
UDEV [1618003564.298705] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/usbdev1.4_ep8b
UDEV [1618003564.298769] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/usbdev1.4_ep0a
UDEV [1618003564.308695] add@/class/scsi_host/host4
UDEV [1618003564.614084] add@/class/usb_device/usbdev1.4
UEVENT[1618003569.124366] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host4/target4:0:0/4:0:0:0
UEVENT[1618003569.124416] add@/class/scsi_disk/4:0:0:0
UEVENT[1618003569.179432] add@/block/sda
UEVENT[1618003569.179466] add@/block/sda/sda1
UEVENT[1618003569.179485] add@/block/sda/sda2
UEVENT[1618003569.179508] add@/class/scsi_device/4:0:0:0
UEVENT[1618003569.179612] add@/class/scsi_generic/sg0
UDEV [1618003569.290405] add@/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/host4/target4:0:0/4:0:0:0
UDEV [1618003569.423752] add@/class/scsi_generic/sg0
UDEV [1618003569.423806] add@/class/scsi_disk/4:0:0:0
UDEV [1618003569.474344] add@/class/scsi_device/4:0:0:0
UDEV [1618003569.505476] add@/block/sda
UDEV [1618003569.861895] add@/block/sda/sda1
UDEV [1618003569.919434] add@/block/sda/sda2
UEVENT[1618003570.253329] mount@/block/sda/sda2
UDEV [1618003570.254399] mount@/block/sda/sda2
udevinfo -p /block/sda/sda2 -q どちらも私に以下を提供しました。
P: /block/sda/sda2
N: sda2
S: disk/by-id/usb-Seagate_BUP_Slim_BK_NA7LFNNT-part2
S: disk/by-path/pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0-part2
S: disk/by-uuid/6D63-17F2
S: disk/by-label/BACKUP
E: ID_VENDOR=Seagate
E: ID_MODEL=BUP_Slim_BK
E: ID_REVISION=0143
E: ID_SERIAL=Seagate_BUP_Slim_BK_NA7LFNNT
E: ID_TYPE=disk
E: ID_BUS=usb
E: ID_PATH=pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0
E: ID_FS_USAGE=filesystem
E: ID_FS_TYPE=vfat
E: ID_FS_VERSION=FAT32
E: ID_FS_UUID=6D63-17F2
E: ID_FS_LABEL=BACKUP
E: ID_FS_LABEL_SAFE=BACKUP
udevinfo -p /block/sda2 -1 の結果は次のとおりです。
looking at device '/block/sda/sda2':
KERNEL=="sda2"
SUBSYSTEM=="block"
SYSFS{stat}==" 38 329 661 163 1 1 2 4 0 139 167"
SYSFS{size}=="1952849920"
SYSFS{start}=="411648"
SYSFS{dev}=="8:2"
looking at parent device '/block/sda':
ID=="sda"
BUS=="block"
DRIVER==""
SYSFS{stat}==" 112 1237 1811 361 1 1 2 4 0 241 365"
SYSFS{size}=="1953525167"
SYSFS{removable}=="0"
SYSFS{range}=="16"
SYSFS{dev}=="8:0"
. . .
/etc/udev/rules.d/50-udev.rulesに行って変更してみました。
# all block devices
SUBSYSTEM=="block", GROUP="disk", MODE="0640"
KERNEL=="root", GROUP="disk", MODE="0640"
到着
# all block devices
SUBSYSTEM=="block", GROUP="disk", MODE="0660"
KERNEL=="root", GROUP="disk", MODE="0640"
再起動しましたが、うまくいきませんでした。
さらに下に私はこれを見つけました( "percious_end"以降):
ACTION=="add", SUBSYSTEM=="usb_device", \
PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", \
NAME="%c", MODE="0644"
そして644を664に変更しましたが、うまくいきませんでした(さらに、サブシステムは「ブロック」でなければなりません)。
USBデバイスアクセスを開くMODEパラメータを指定するために何かを置くことができる他の場所はありますか?
私は気づいた
UEVENT[1618003570.253329] mount@/block/sda/sda2
UDEV [1618003570.254399] mount@/block/sda/sda2
udevmonitor 出力の一番下にあります。 "mount"のgrepが "mount"イベントに応答する単一のルールを見つけられなかったことがわかりました。この問題に対応してインストールパラメータを変更したり、デバイスを再インストールするなど、追加できるものはありますか?
答え1
chown
FATはこれを実装していないため動作chmod
しません。ただし、インストール時にumask
誰もがFATに書き込むことを指定するか、uid
フラッシュドライブのすべてのアイテムの所有者を設定できます。インストール機能について話している場合は、/etc/fstab
項目を追加して適切なオプションを使用できますusers
。 CentOS 5では、静的よりも複雑なものを保証するために、デバイスに接続されているものが少ないようですfstab
。
答え2
自動マウントを使用するには、udev
udevルールに次の内容を追加できます。
# Symlinks
SUBSYSTEM=="block", KERNEL=="sd?", ACTION=="add", PROGRAM="/etc/udev/scripts/isremovable.sh %k", RESULT=="YES", SYMLINK="usb_flash_raw", RUN+="/etc/udev/scripts/mount.sh %k"
SUBSYSTEM=="block", KERNEL=="sd?[0-9]*", ACTION=="add", PROGRAM="/etc/udev/scripts/isremovable.sh %k", RESULT=="YES", SYMLINK="usb_flash_p%n", RUN+="/etc/udev/scripts/mount.sh %k"
# umount
SUBSYSTEM=="block", KERNEL=="sd?", ACTION=="remove", RUN+="/etc/udev/scripts/umount.sh > /dev/null 2> /dev/null"
取り外し可能領域は次のとおりです。
#!/bin/sh
DEV="`basename "$1" | sed 's|[0-9]*$||'`"
if [ "`find /sys -name "$DEV" | grep usb`" ]; then
echo "YES"
exit 0
else
echo "NO"
exit 1
fi
マウント/アンマウントスクリプトは必要に応じて指定できますが、安全なアンマウントを処理するのは簡単ではありません。
答え3
私は結局別のアプローチを取ることになった。
バックアップユーザーのホームディレクトリにアップロードされたファイルをroot権限のあるUSBドライブに転送し、アップロードが完了するまでファイルが転送されないようにするために5分ごとに実行するようにcronジョブを設定しました。アップロードクライアントはnoを送信するように設定しました。拡張子を持つファイルを選択して名前を変更して、アップロードが完了したら拡張子を追加します。
その後、コンソールからログアウトすると、USBデバイスがアンマウントされることがわかりました。これはudevベースの自動マウントを使用することです。
そのため、cronを操作するためのスクリプトがすでに存在しているため、独自のマウントポイントを設定し、そのマウントポイントにUSBデバイスが正しく設定されていることを確認し、そうでない場合はマウントしようとするコードを追加しました。デバイス。
その後、全体の練習で最初の驚きを発見しました。マウントポイントにデバイスをマウントすると、/mediaの下には表示されませんでしたが、なんとか表示されました。いいえログイン時にGnomeがデスクトップにサービスを提供しないようにします。