udisks (Русский)

From ArchWiki

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

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

Установка

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

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

Примечание: Разработка первой версии udisks была прекращена, чтобы разработчики могли сосредоточить усилия на udisks2 [1]. Старая версия udisksAUR[ссылка недействительна: package not found] доступна в 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, которые позволяют настроить автоматическое монтирование устройств. Смотрите также List of applications/Utilities#Mount tools.

Примечание: Некоторые окружения рабочего стола, например, 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 || udevilAUR
Примечание: devmon использует udisks или udisks2 (именно в таком порядке) только в том случае, если у udevil или pmount отсутствует SUID-бит. Убрать его можно с помощью команды # chmod -s /usr/bin/udevil.

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.

Для некоторых жёстких дисков после размонтирования, но перед физическим отключением питания может понадобиться отправить команду отключения для корректного завершения работы. Смотрите hdparm#Power off a hard disk drive, чтобы решить, требуется ли выполнять команду hdparm -Y для вашего диска.

Решение проблем

Скрытые устройства (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 в качестве опциональной зависимости.

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