Как смонтировать съемные носители в / медиа / <МАРКИРОВКА> автоматически при вставке, без какой-либо настольной среды?

grep -r 'std::cout' . | grep -v '^[ \t]*//'

только опустит закомментированные строки и не все строки, которые имеют комментарий к ним.

18
28.01.2017, 15:23
6 ответов

Хорошо, это было долгое время, но я все еще отвечу на свой вопрос с наилучшим вариантом, который я нашел на данный момент. Подводить итог: создайте a udev правило, связанное с некоторыми сценариями (который создаст/удалит каталоги и съемные устройства ООН/монтировать), и присоединенный к udev тип события устройства =partition.

1 - Создание добавляет / удаляют сценарии

Сохраните следующий сценарий storage-automount.sh кому: /lib/udev/ и сделайте это исполняемым файлом (sudo chmod a+x /lib/udev/storage-automount.sh):

#!/bin/sh

# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
fi

# if a plugdev group exist, retrieve it's gid set & it as owner of mountpoint
plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
if [ -z $plugdev_gid ]; then
    gid=''
else
    chown root:plugdev $mount_point
    gid=",gid=$plugdev_gid"
fi

# create the mountpoint directory in /media/ (if not empty)
if [ -n $mount_point ]; then
    mkdir -p /media/$mount_point
    # other options (breaks POSIX): noatime,nodiratime,nosuid,nodev
    mount -t $ID_FS_TYPE \
      -o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \
      $DEVNAME /media/$mount_point
fi

Сохраните следующий сценарий storage-autounmount.sh кому: /lib/udev/ и сделайте это исполняемым файлом (sudo chmod a+x /lib/udev/storage-autounmount.sh):

#!/bin/sh

# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
fi

# remove the mountpoint directory from /media/ (if not empty)
if [ -n $mount_point ]; then
    umount -l /media/$mount_point
    rm -R /media/$mount_point
fi

2 - Создание udev управляйте для присоединения тех сценариев к событиям

И наконец, добавьте a udev правило в /etc/udev/rules.d/, например, 85-storage-automount.rules:

ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"

и заставьте его иметь те же полномочия как другие правила в том dir/папке

Теперь, когда Вы включаете устройство хранения, каталог будет создан в /media/ согласно имени раздела (я не помню, но я думаю, что оно работает с разделом NTFS также), и Ваш раздел будет смонтирован в него. Это - R/W для пользователей, если у Вас есть a plugdev группа в Вашей системе. Кроме того, устройства смонтированы в синхронном режиме для ограничения рисков потери данных в случае горячего отключения.

Когда устройство удалено, оно размонтировано, и каталог удален из /media

Кроме того, инструмент для контроля udev события udevadm monitor, с опциями как --env или --property:

$ udevadm monitor --env

Это тестируется и хорошо работающий и на debian и на дуге, но, вероятно, работайте над всеми дистрибутивами, которые полагаются udev.

2
27.01.2020, 19:46
  • 1
    я думаю, что +r должен быть заменен +x в "наборе он к исполняемому файлу (sudo chmod +r/lib/udev/storage-autounmount.sh)" –  Jeremy 27.12.2014, 16:42
  • 2
    у меня есть новая установка jessie, на которой я следовал за Вашими направлениями тесно, но не может сделать, автомонтируются, происходят от tty1, даже после перезапуска (который не находится в Ваших инструкциях, но я также добрался, никакие не автомонтируют предварительный перезапуск). Вставка Карты памяти обнаруживается (я получаю консольные сообщения), но ничто не видимо в/media/(кроме CD-ROM). Я могу вручную смонтировать Карту памяти, таким образом, я знаю что работы также. [продолженный в следующем комментарии] –  TomRoche 13.07.2015, 02:54
  • 3
    [продолжался из предыдущего комментария], я имею установленный package=udev, имею директоров = {/etc/udev/rules.d/,/lib/udev/} предварительно заполненный, и имею executable=udevadm в $PATH. Я хотел бы знать (1) в том, какой выпуск Debian Вы делали этой работой? (Я принимаю хрипящий) (2), что делают пакеты Debian Вы установили, кроме того, udev? –  TomRoche 13.07.2015, 02:54
  • 4
    @TomRoche Было Хрипящим, в то время, действительно, и у меня не было специального установленного пакета, я пытался сделать минималистическую установку и старался не в максимально возможной степени использовать пакеты, которые не были обеспечены минимальной установкой. Я не должен был перезапускать, что это, почему это не находится в моих инструкциях. Это было довольно долгое время, я не погрузился в него …, который я мог бы скоро попробовать еще раз. –  cedbeu 25.07.2015, 09:04

Я думаю, что Вы ищете pmount.

Если Вы хотите автоматическое монтирование на вставку, посмотрите Автомонтирующиеся карты с интерфейсом USB на Debian.

Если Ваша система использует udisks2, это - предпочтительный способ реагировать на вставку съемного устройства хранения. Посмотрите Дугу Wiki для подсказок по конфигурации для Udisks.

Иначе программа, которая реагирует, когда новое устройство появляется, является udev, таким образом, автоматическое монтирование инициировано правилом udev. usbmount пакет предоставляет правила udev автоматически смонтировать устройства хранения USB и немногих других. Вызов mount от udev правила не работают на файловые системы FUSE (такие как ntfs-3g), так используйте udisks при необходимости в этом.

Вы не можете автоматически размонтировать медиа, когда они удалены, потому что причинная связь не прокладывает себе путь. Медиа должны быть размонтированы, прежде чем это будет удалено. Для медиа только для чтения можно сойти с рук размонтирование после удаления, хотя это могло бы перепутать некоторые приложения, если у них есть файлы, открытые во внезапно исчезнувшей файловой системе. Для перезаписываемых медиа при отключении смонтированной файловой системы повреждение данных вероятно.

10
27.01.2020, 19:46
  • 1
    Миллион благодарностей для ответа. Я попробую это как можно скорее и позволю людям здесь знать. О unmouting. Парни, прекращают говорить мне, который это - вопрос причинной связи, где это не: o] Размонтировавшись после того, как устройство отключается, отлично имеют смысл (и возможно), как только устройство настроено, чтобы быть синхронным. Затем это - только вопрос файловой системы. Если данные были переданы, не кэшируясь (синхронно), то без проблем для отключения без размонтирования. Затем размонтирование может быть выполнено и только полезно, чтобы сообщить системе, что устройство не там больше. –  cedbeu 02.08.2012, 11:08
  • 2
    @cblab Вы упрощаете. Если файл будет открыт для записи, и Вы вытаскиваете устройство, то файл, вероятно, будет поврежден; размонтирование гарантирует, что никакой файл не открыт. Во многих файловых системах (не FAT, хотя), размонтирование больше, чем устанавливает грязный бит на 0, они должны, например, сбрасывают журнал. Для устройств флэш-памяти монтируется главное беспокойство с синхронизацией, то, что это стирает устройство намного быстрее, потому что это предотвращает группировку записи. См. superuser.com/questions/180722 / … и readlist.com/lists/vger.kernel.org/linux-kernel/22/111748.html –  Gilles 'SO- stop being evil' 02.08.2012, 12:08
  • 3
    Привет @Gilles. Спасибо за Ваши ответы. Я не думаю, что упрощаю, все же. Ваш являются правильными на некоторых точках. Но, пользователь решает, хочет ли он жить опасный. Вы согласились бы, Ваше сообщение составляет 7 старых лет; теперь, a flush смонтируйте опцию, разработанную специально для vfat избегает тех проблем: запись не выполняется после каждого блока, но как только устройство, кажется, неактивно. И флэш-память значительно увеличила свои тупиковые жизненные циклы также. Теперь, очевидно, пользователь должен знать для не отключения устройств, в то время как файлы открыты или во время копии (или вскоре после). Но это - хороший компромисс. –  cedbeu 06.08.2012, 19:58
  • 4
    так или иначе, usbmount, возможно, был хорошим вариантом для меня, но к сожалению, он не монтирует устройства на папке в зависимости от их имен маркировки, но в /media/usb-*, который не соответствует моим потребностям. Я хочу смочь смонтировать автоматически устройства в /media/<DEV_LABEL> с flush параметр, когда они обнаруживаются (если это возможно, с динамическим созданием каталога), и размонтировать их и удалить каталоги из /media/ автоматически, если они больше не обнаруживаются. Риск, который я беру на себя, мое дело. потрясающий –  cedbeu 06.08.2012, 20:03
  • 5
    Обратите внимание это usbmount не поддерживайте NTFS с тех пор jessie больше: bugs.debian.org/774149 –  malat 19.05.2015, 18:31

Я нашел способ сделать это, отредактировав файл /etc/fstab. Простая запись выглядит так:

/dev/sdb1 /media/roboot/hdd1 ntfs по умолчанию 0 0

0
27.01.2020, 19:46

Вот как я недавно сделал это, и я вполне доволен этим подходом сейчас. Это для Ubuntu 12.04 + Gentoo, но я думаю, что любой дистрибутив, который позволяет работать UDEV и Autofs.

Предпосылки: Вы должны установить UDEV + Autofs.

Шаг 1)

Создайте следующие «/etc/udev/rules.d/90-usbd-auto.rules» (конечно, вы можете использовать любое имя, если он заканчивается «.Rules») Отказ :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
    RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"

# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    RUN+="/bin/rm /media/usb/%k"

Что это делает: он создает две симлизы, один для раздела устройства хранения USB под «/ dev / usbdisks / <...>». Он либо будет использовать метку раздела USB хранения или имя ядра, если нет метки. Вторая SymLink будет связывать из «/ Media / USB / <...» / Media / Autousb / <...> «Это сделано для поддержки автоматров (см. Шаг 2).

Примечание. Первоначально я не использовал правила с переменными ID_FS_LABEL_ECC, поскольку это опасно на мой взгляд. Что произойдет, если вы подключите две USB-палочки, которые используют ту же ярлык?

, но плакат специально хотел использовать метку USB-диска, поэтому я изменял правила соответственно.

Чтобы убедиться, что UDEV читает эти правила Использовать

sudo udevadm control --reload-rules

с помощью этого файла правил UDEV, все настроен для автоматического раздела устройства хранения USB. Обратите внимание, что сейчас сейчас,Устройство не будет автоматически (намеренно). Он будет автоматически, как только вы используете его с помощью

Шаг 2)

Настройка Autofs для Automount / Media / Autousb / <...>: Я добавил следующую строку в файл «/etc/auto.master» (для Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

Это означает, что autofs будет размонтировать устройство через 60 секунд бездействия. Возможно, вы захотите использовать меньше или больше, зависит от вашего вкуса.

Для Gentoo вам нужно изменить «/etc/autofs/auto.master», поэтому имеет смысл использовать

/media/autousb /etc/autofs/auto.usb --timeout=60

теперь я создал «auto.usb» со следующим контентом:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

Это AUTO.USB необходимо Быть исполняемым, чтобы автозапись использует это как (Bash) сценарий. Таким образом, например

sudo chmod 0755 /etc/auto.usb

Что это делает: этот скрипт будет сообщить AutoFS (/ usr / sbin / automount), как установить раздел устройства для хранения USB.

Скрипт будет первым использовать «/ sbin / Blkid», чтобы узнать, какую файловую систему находится на разделах.

Затем скрипт обеспечит правильные варианты монтажа в зависимости от раздела устройства.

Примечание. Я включенный пример код для «VFAT» (вероятно, наиболее распространенным для USB-палочек), файловых систем «NTFS» и «XFS». Конечно, довольно легко расширить это, чтобы поддержать больше файловых систем.

Шаг 3) По желанию... Чтобы «изгнать» == Размонтируйте вашу USB-накопитель (или разделы на вашей USB-палочке), создайте сценарий в соответствии с / sbin / Usbeject:

#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount

С помощью этого сценария вы можете использовать «sudo Usbeject», чтобы размонтировать все установленное устройство USB. разделы (рассказывая автоусчет, чтобы размонтировать их).

Конечно, вы можете просто убедиться, что раздел нигде не используется; Тогда Automounter будет размонтировать раздел после 60-секундной тайм-аута ...

Реальный трюк здесь - использовать SymLinks от «/ Media / USB» на «/ Media / Autousb»:

  • «/ Media / USB» SymLinks будет создан UDEV, предоставляя пользователю простой обзор, какие разделы устройства хранения USB могут быть там
  • autofs, будут автоматически автоматическими разбиениями по требованию, если вы используете его через / Media / USB
  • с помощью сценариев «auto.usb «Файл, который вы можете поддержать любую файловую систему и дополнительно вы также можете поддерживать любой вид схемы именования.
  • Этот подход поддерживает USB-палочки с несколькими разделами, даже если эти разделы используют разные типы файловых систем.
2
27.01.2020, 19:46

Я думаю, что уже довольно поздно, но я опубликую это, если кому-то это понадобится:(также мой первый ответ StackExchange)

Проверив решение во многих местах, я нашел простое решение в Arch Wiki:

Ссылка на Arch Wiki .

Мы можем добавить правило udisks2 для изменения каталога монтирования по умолчанию с /run/media/$USER/на /media/<Label>.

Добавьте следующее правило в /etc/udev/rules.d/с именем вроде99-udisks2.rules:

ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"

Затем мы можем просто установить простой инструмент, такой как Udiskie для автоматического монтирования.

1
27.01.2020, 19:46

См. страницу ArchWiki Udev . Вы не должны выполнять mountиз правил Udev или из скриптов, которые выполняются по правилам Udev.

Однако, как показано в проекте udev -media -automount , это довольно просто сделать, вызвав модуль Systemd из правила Udev, который затем вызывает скрипт, выполняющий монтаж. В отличие от udisks2 и других решений, udev -media -automount предназначен для простого случая, когда вы хотите смонтировать что-то от имени пользователя root, не обязательно дожидаясь среды рабочего стола или «сеанса пользователя». Кажется, это именно то, о чем просит ОП, и я нашел его функциональным и простым для понимания.

2
27.01.2020, 19:46

Теги

Похожие вопросы