udisks (Русский)
udisks состоит из двух основых элементов: демона udisksd с реализоваными в нём интерфейсами D-Bus для запросов к устройствам хранения данных и управления ими, а также утилиты командной строки udisksctl, с помощью которой пользователь взаимодействует с демоном.
Установка
Установите пакет udisks2.
Демон udisksd(8) запускается через D-Bus "по требованию" и включать его вручную не нужно. Управлять демоном можно утилитой udisksctl(1).
udisks-daemon
, он также запускается "по требованию"; для управления демоном используйте команду udisks
.
Настройка
Набор действий, которые пользователь может выполнять с udisks, определяется разрешениями Polkit. Если пользовательский сеанс неактивен или не существует вовсе (например, при управлении udisks из службы systemd/Пользователь), необходимо соответствующим образом настроить Polkit.
В [2] описаны стандартные настройки прав для группы storage
, в [3] приведён пример с более жёсткими ограничениями. Если вы используете Dolphin, то стоит также изучить [4].
Использование
Следующая команда выполнит монтирование съёмного устройства, например, /dev/sdc
:
$ udisksctl mount -b /dev/sdc1
Размонтирование:
$ udisksctl unmount -b /dev/sdc1
Подробнее см. вывод команды udisksctl --help
.
Советы и рекомендации
Программы для монтирования
Существует ряд программ-обёрток для udisks, которые позволяют настроить автоматическое монтирование устройств. См. также List of applications/Utilities#Mount tools.
- bashmount — Сценарий Bash для монтирования и управления съёмными устройствами обычным пользователем с помощью udisks2.
- udiskie — Программа автоматического монтирования для udisks2 с уведомлениями, иконкой в системном трее и поддержкой защищённых паролем LUKS-устройств. Подробнее см. udiskie wiki
- udisksvm — Обёртка для udisks2 с графическим интерфейсом, написанная на Python3 с использованием фреймворка Qt5. Монтирование/размонтирование съёмных устройств и извлечение CD/DVD кликами мыши. Подробнее см. README.
- udevil — Включает в себя devmon, который совместим с udisks и udisks2.
chmod -s /usr/bin/udevil
с правами root.
udevadm monitor
Команду udevadm monitor
можно использовать для отслеживания связанных с блочными устройствами событий, а также для монтирования носителя при создании нового блочного устройства. Неактуальные точки монтирования удаляются демоном udiskd в автоматическом режиме, поэтому специальных действий по их удалению предпринимать не нужно.
#!/bin/sh pathtoname() { udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}' } stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do if [ "$event" = add ]; then devname=$(pathtoname "$devpath") udisksctl mount --block-device "$devname" --no-user-interaction fi done
Монтирование в /media (udisks2)
По умолчанию udisks2 монтирует съёмные устройства в каталог /run/media/$USER/
, который находится под управлением ACL. Если вы желаете изменить каталог монтирования на /media
, создайте следующее правило udev:
/etc/udev/rules.d/99-udisks2.rules
# UDISKS_FILESYSTEM_SHARED # ==1: mount filesystem to a shared directory (/media/VolumeName) # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) # See udisks(8) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
Поскольку каталог /media
в отличие от /run
не монтируется по умолчанию с файловой системой tmpfs, возможно, вы также захотите создать сниппет в каталоге tmpfiles.d, который будет удалять устаревшие точки монтирования при каждой загрузке:
/etc/tmpfiles.d/media.conf
D /media 0755 root root 0 -
Монтирование петлевых устройств
Для монтирования ISO-образов воспользуйтесь следующей командой:
$ udisksctl loop-setup -r -f image.iso
Это создаст петлевое устройство и сделает образ готовым к монтированию. После размонтирования udev удалит петлевое устройство.
-r
, а после завершения работы с образом отключите устройство командой udisksctl loop-delete -b /dev/loop0
(замените /dev/loop0
на название вашего петлевого устройства).
Сокрытие отдельных разделов
Если вы не хотите, чтобы определённые разделы или носители отображались на рабочем столе, можно создать правило udev, например, /etc/udev/rules.d/10-local.rules
:
KERNEL=="sda1", ENV{UDISKS_PRESENTATION_HIDE}="1" KERNEL=="sda2", ENV{UDISKS_PRESENTATION_HIDE}="1"
В результате на рабочем столе будут отображаться все разделы, кроме sda1
и sda2
. Имейте в виду, что это не сработает, если вы используете udisks2, потому что переменная UDISKS_PRESENTATION_HIDE
больше не поддерживается. Вместо неё используйте UDISKS_IGNORE
:
KERNEL=="sda1", ENV{UDISKS_IGNORE}="1" KERNEL=="sda2", ENV{UDISKS_IGNORE}="1"
Поскольку названия блочных устройств могут изменяться от загрузки к загрузке, то имеет смысл использовать UUID раздела или устройства, который можно узнать командой blkid /dev/sdX
:
# blkid /dev/sdX
/dev/sdX: LABEL="Filesystem Label" UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX" UUID_SUB="YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" TYPE="btrfs"
После этого можно создать следующее правило:
SUBSYSTEM=="block", ENV{ID_FS_UUID}=="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX", ENV{UDISKS_IGNORE}="1"
Помимо обычного применения, этим правилом можно также скрыть целую файловую систему btrfs с несколькими устройствами, поскольку в этой системе UUID всех устройств совпадает, а различия определяются на основании SUB_UUID.
Применение настроек ATA (udisks2)
При запуске системы и при подключении устройства демон udiskd применяет настройки из файла /etc/udisks2/ИДЕНТИФИКАТОР.conf
, где ИДЕНТИФИКАТОР
— значение параметра Drive:Id для данного устройства. В настоящее время в udisks существует поддержка настроек ATA. Список доступных опций можно посмотреть в руководстве udisks(8). Данные настройки по сути не отличаются от настроек hdparm, за тем исключением, что настройки ATA сохранятся при последующих автозапусках демона udisks.
Например, следующие настройки установят для устройства время ожидания 240 (20 минут):
/etc/udisks2/DriveId.conf
[ATA] StandbyTimeout=240
Значение DriveId можно узнать командой udevadm info --query=all --name=sdx | grep ID_SERIAL | sed "s/_/-/g"
.
В качестве альтернативы для работы с файлом настроек можно использовать графическую утилиту gnome-disk-utility.
Решение проблем
Скрытые устройства (udisks2)
udisks2 по умолчанию скрывает от пользователя некоторые устройства. Если такое поведение нежелательно, скопируйте файл /usr/lib/udev/rules.d/80-udisks2.rules
в /etc/udev/rules.d/80-udisks2.rules
и удалите в файле-копии следующий раздел:
# ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # Devices which should not be display in the user interface [...]
Устройства не остаются размонтированными (udisks)
udisks либо заново монтирует устройства по истечении некоторого периода, либо опрашивает такие устройства. Это может вызвать нежелательные эффекты, например, при форматировании дисков, совместной работе с ними в виртуальной машине, при работе в режиме энергосбережения или при удалении устройства, которое не было ранее отключено с параметром --detach
.
Следующая команда отключит опрашивание выбранного CD/DVD устройства:
# udisks --inhibit-polling /dev/sr0
То же самое, но для всех устройств одновременно.
# udisks --inhibit-all-polling
Подробнее см. udisks(8).
Неправильно работает таймер ожидания (udisks2)
Демон udisks регулярно опрашивает устройства с целью сбора S.M.A.R.T.-данных. Жесткие диски, время ожидания которых больше интервала опрашивания, могут не успевать войти в режим standby. Устройства, которые уже вошли в этот режим, данной проблеме не подвержены. Судя по всему, в настоящий момент в udisks2 не предусмотрено способа отключить опрашивание устройств или изменить интервал. См. [5] и [6].
Тем не менее, время ожидания в udisks2 изменить можно. Подробнее см. #Применение настроек ATA (udisks2).
Другие возможные обходные решения заключаются в задании отдельной задержки перед интервалом опрашивания (10 минут) или в ручном переводе диска в замедленный режим командой hdparm -y /dev/sdx
.
Не удаётся смонтировать NTFS-раздел
Если монтирование NTFS-раздела завершается неудачно с ошибкой
Error mounting /dev/sdXY at [...]: wrong fs type, bad option, bad superblock on /dev/sdXY, missing codepage or helper program
или какой-то другой, а команды journalctl
/dmesg
находят в логах ядра сообщение
ntfs: (device sdXY): parse_options(): Unrecognized mount option windows_names.
то проблема скорее всего в том, что udisks пытается использовать драйвер NTFS, который не понимает текущие опции монтирования.
Для решения проблемы установите NTFS-3G в качестве опциональной зависимости.
Смотрите также
- Gentoo:udisks (англ.)
- Введение в udisks (англ.)