Почему мое приспособление на udev не остается на месте?

У меня есть компьютер, на котором работает CentOS 7. Я пытаюсь настроить правило udev для автоматической установки USB-накопителя (с именем 'sdb1') в / mnt / flash всякий раз, когда он подключен.

Сценарий udev не работал (см. Ниже), поэтому вместо этого я поставил свои команды в сценарий bash и имел udev запуск сценария bash, чтобы я мог видеть, что происходит.

Проблема №1: Если я пытаюсь напрямую создать / mnt / flash из моего сценария bash, это не удается из-за того, что корневая файловая система доступна только для чтения. Я могу подтвердить, что корневая файловая система НЕ доступна только для чтения. Моя система уже загружена. Однако, если я вставляю свой USB-накопитель, пусть udev запускает мой скрипт, конечно, когда я запускаю «mount | logger 'в моем скрипте показывает, что root читается только.

Я работал над этой проблемой, запустив «mount -o remount, rw /» в верхней части моего скрипта.

Проблема №2: Я могу создать / mnt / flash и смонтировать / dev / sdb1 в / mnt / flash успешно. Я запускаю 'mount | logger "после этого и увидеть, что он установлен в / var / log / messages. Однако, когда все сказано и сделано, / dev / sdb1 не монтируется. Я даже поставил 5-секундную задержку в моем скрипте и запустил «mount | logger "второй раз. Оба раза показывают, что / 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. Тем не менее, я все еще не могу заставить / dev / sdb1 оставаться установленным после udev. По-прежнему появляется почти вторая таблица монтирования, которая поддерживается из контекста udev.

  • Инструмент для автоматического применения конфигурации RandR при подключении внешнего дисплея
  • udevd ест слишком много циклов процессора
  • Поддельный серийный номер USB-устройства
  • Где modprobe загружает драйвер, который udev запрашивает?
  • Правило Удева позволяет различать беспроводные и проводные интерфейсы
  • Разрешить любому пользователю в группе предохранителей размонтировать
  • mknod постоянный в archlinux
  • Как запретить правила UDEV назначать устройство определенному набору имен
  • One Solution collect form web for “Почему мое приспособление на udev не остается на месте?”

    Проблема №1 была вызвана SELinux. Поскольку я не нуждаюсь в этом для этой системы, я просто отключил ее.

    Проблема №2 была вызвана установкой udev (указанной в сценарии systemd), которая заставляет пространство имен udev сохранять «подчиненную» копию флагов монтирования. Изменение этого параметра на «общий» устраняло проблему. См. Более подробный ответ здесь: https://unix.stackexchange.com/a/154318/41988

    Linux и Unix - лучшая ОС в мире.