udisks (Русский)

From ArchWiki
Jump to navigation Jump to search

Состояние перевода: На этой странице представлен перевод статьи udisks. Дата последней синхронизации: 1 сентября 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

udisks состоит из двух основых элементов: демона udisksd с реализоваными в нём интерфейсами D-Bus для запросов к устройствам хранения данных и управления ими, а также утилиты командной строки udisksctl, с помощью которой пользователь взаимодействует с демоном.

Установка

Установите пакет udisks2.

Демон udisksd(8) запускается D-Bus "по требованию" и включать его вручную не нужно. Управлять демоном можно утилитой udisksctl(1).

Примечание: Разработка первой версии udisks была прекращена, чтобы разработчики могли сосредоточить усилия на udisks2 [1]. Старая версия udisksAUR доступна в AUR. Демон udisks называется 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, которые позволяют настроить автоматическое монтирование устройств. См. также Список приложений/Утилиты#Монтирование.

Примечание: Иногда Окружение рабочего стола, вроде GNOME или KDE, может содержать собственную встроенную обёртку для udisks.
  • bashmount — Сценарий Bash для монтирования и управления съёмных устройств обычным пользователем с помощью udisks2.
https://github.com/jamielinux/bashmount || bashmountAUR
  • udiskie — Программа автоматического монтирования для udisks2 с уведомлениями, иконкой в системном трее и поддержкой защищённых паролем LUKS-устройств. Подробнее см. udiskie wiki
https://github.com/coldfix/udiskie || udiskie
  • udisksvm — Обёртка для udisks2 с графическим интерфейсом, написанная на Python3 с использованием фреймворка Qt5. Монтирование/размонтирование съёмных устройств и извлчение CD/DVD кликами мыши. Подробнее см. README.
https://github.com/berbae/udisksvm || udisksvmAUR
  • udevil — Включает в себя devmon, который совместим с udisks и udisks2.
https://github.com/IgnorantGuru/udevil || udevil
Примечание: Если у исполняемых файлов утилит udevil и pmount не будет бита SUID, то при монтировании устройств devmon будет работать только с udisks или udisks2 (именно в таком порядке). Удалить бит SUID можно командой 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 удалит петлевое устройство.

Примечание: Этот подход позволит смонтритовать образ только на чтение. Для монтирования образа также и на запись (например, для QEMU), в команде выше не указывайте флаг -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 в качестве опциональной зависимости.

Смотрите также