Udisks

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

udisks には、ストレージデバイスに問い合わせたり制御を行うために使われる D-Bus インターフェイスを実装した udisksd というデーモンと、デーモンを利用したりクエリを送るのに使われる udisksctl というコマンドラインツールが含まれています。

インストール

udisks2 パッケージを インストール します。

udisksd(8)D-Bus によってオンデマンドで起動されますので、明示的に有効化する必要はありません。コマンドラインから udisksctl(1) で制御することができます。

ノート: udisks の開発は終了し、 udisks2 に移行しました [1]. レガシーバージョンである udisksAUR は AUR で利用できます。 udisks をオンデマンドで起動するには、 udisks-daemon を使い、制御コマンドは udisks です。

設定

パーミッション

ユーザーが udisk を使用して実行できるアクションは、polkit で制限されます。ユーザーセッション が有効でない、または存在しない場合 (例えば systemd/ユーザー サービスから udisk を制御する場合)、polkit ルールを調整してください。

storage グループに対する一般的な udisks のパーミッションについては https://github.com/coldfix/udiskie/wiki/Permissions を、より限定的な例については [2] を参照してください。Dolphin を使用している場合は、[3] を参照してください。

デフォルトのマウントオプション

/etc/udisks2/mount_options.conf でデフォルトのマウントオプションを定義できます。ファイルが存在しない場合は作成します。組み込みのデフォルトといくつかの例は、/etc/udisks2/mount_options.conf.example で確認できます。[4]

オプションは、特定のファイルシステムタイプをターゲットにすることができます。たとえば、zstd 圧縮を有効にして btrfs ファイルシステムをマウントします。

[defaults]
btrfs_defaults=compress=zstd
ノート: これは、対応する組み込みのデフォルトをオーバーライドします。この方法で誤ってマウントオプションを削除しないようにしてください。

使用方法

リムーバブルドライブを手動でマウントする場合、例えば /dev/sdc のようにします。

$ udisksctl mount -b /dev/sdc1

アンマウントするには

$ udisksctl unmount -b /dev/sdc1

詳しくは udisksctl help をご覧ください。

ヒントとテクニック

マウントヘルパー

デバイスの自動マウントは、udisks のラッパーを使えば簡単に実現できます。アプリケーション一覧/ユーティリティ#マウントツールもご覧ください。

ノート: GNOMEKDE などの デスクトップ環境 も、udisks ラッパーを提供しているかもしれません
  • bashmount — リムーバブルメディアを一般ユーザーとして udisks2 でマウント・管理する bash スクリプトです。
https://github.com/jamielinux/bashmount || bashmountAUR
  • udiskieudisks2 オートカウンター。オプションで通知機能、トレイアイコン、パスワード保護された LUKS デバイス のサポートを提供。詳しくは udiskie wiki を見てください
https://github.com/coldfix/udiskie || udiskie
  • udisksvm — GUI udisks2 のラッパーで Python3 で書かれ、Qt5 フレームワークを使用しています。リムーバブルデバイスのマウント、アンマウント、CD/DVD のイジェクトをマウスクリックで行えます。詳しくは README ファイルを見てください。
https://github.com/berbae/udisksvm || udisksvmAUR
  • udevil — Includes devmon, が含まれており、udisksudisks2に互換性があります。
https://github.com/IgnorantGuru/udevil || udevil
ノート: devmonudevilpmount が SUID 権限を持っていない場合、マウントに udisksudisks2 しか使いません(この順番で。)このパーミッションを削除するには、root で chmod -s /usr/bin/udevil を実行してください。

udevadm モニター

udevadm monitor を使ってブロックイベントを監視し、新しいブロックデバイスが作成されたときにドライブをマウントすることができます。古いマウントポイントは udisksd によって自動的に削除されるので、削除の際に特別な操作は必要ありません。

#!/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 はリムーバブルドライブを /media/ ではなく ACL によって制御される /run/media/$USER/ ディレクトリにマウントします。/media にマウントしたい場合は、このルールを使って下さい:

/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"

ループデバイスのマウント

ISO イメージを簡単にマウントするには、以下のコマンドを使用します。

$ udisksctl loop-setup -r -f image.iso

ループデバイスが作成され、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"

上記のルールを作成するとデスクトップに sda1sda2 が表示されなくなります。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 ファイルシステムを隠すのにも便利です。単一の btrtfs ファイルシステムからの全てのデバイスはデバイス間で同じ UUID を共有しますが、個々のデバイスごとに異なる SUB_UUID を持つことになります。

ATA 設定の適用

起動時とドライブ接続時に、udisksd はファイル /etc/udisks2/IDENTIFIER.conf に保存されている設定を適用します。ここで IDENTIFIER はそのドライブの Drive:Id プロパティの値です。現在、ATA 設定がサポートされています。利用可能なオプションについては、udisks(8) を参照してください。これらの設定は基本的に hdparm と同じ効果を持ちますが、 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 などの GUI ユーティリティを使用して設定ファイルを管理することもできます。

トラブルシューティング

非表示のデバイス

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 デーモンは、ドライブから定期的に S.M.A.R.T. データをポーリングしています。ポーリング間隔よりも長いスタンバイタイムアウトを持つハードディスクは、スタンバイに失敗することがあります。すでにスピンダウンしているドライブは、通常、影響を受けません。現在、udisks2 のようにポーリングを無効化したり間隔を変更する方法はないようです。[5], [6] を参照してください。

ただし、udisks2 が適用しているスタンバイタイムアウトには影響がないようです。udisks でスタンバイタイムアウトを設定するには、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, or other error.

と、root で実行した journalctl/dmesg のカーネルログに記載されています。

ntfs: (device sdXY): parse_options(): Unrecognized mount option windows_names.

この問題は、udisks がカーネルの ntfs ドライバを使おうとしていることで、この (デフォルトの) マウントオプションを認識していないことです。 これを動作させるには、オプションの依存関係 NTFS-3G がインストールされている必要があります。

NTFS ファイルの作成に失敗する (ファイル名に依存)

udisks 2.8.2 では NTFS マウントオプションに windows_names が追加され、nulscreenshot 23-08-21 19:22.jpg のような Win32 と互換性のないファイル名が作成できないようになりました。特に、Steam Proton が初期化されなくなる 原因となります。この動作を元に戻すには

/etc/udisks2/mount_options.conf
[defaults]
ntfs:ntfs_defaults=uid=$UID,gid=$GID

通常、ファイル名が間違っていても、アクセスしない限り Windows で問題が発生することはありません。chkdsk はこれらの名前をエラーとして扱い、名前を変更したファイルをファイルシステムのルートの下にある found.nnn フォルダーに移動します。

参照