私はデスクトップ環境がまったくない(Xorgがまったくない)Debian sidシステム(Wheezy)(archと同じ)を持っています。
/media/
mount
/のタグを使用して、SDカード、USBスティック、外付けハードドライブを指定されたディレクトリに手動でマウントし、適切な項目を追加したり、umount
起動時に自動的にマウントすることができますが、/etc/fstab
これは顕著な制限事項であり、静的で十分に動的です。ではありません。必要に応じて:/media/<LABEL>
異なるデバイスを持つ各デバイスを<LABEL>
インストールするには独自のエントリが必要です。各サブディレクトリも手動<LABEL>
で作成/削除する必要があります。/media/
それでは、インストールする最良の方法は何ですか?自動的に存在する/media/<LABEL>
挿入するとき(そしてプラグを抜くとすぐにファイルシステムからマウントを解除します。どんなに危険なデータでも)?
理想的な解決策は次のとおりです。
- リムーバブルメディアが挿入されている場合の検出(例、、、
/dev/
...sdax
sdbx
udev
/media/
そのラベル(リムーバブルメディアのラベル)に基づいてディレクトリを作成します。- オプション(用)を使用してモードディレクトリにマウントします
/media/<LABEL>
(RW
ファイルシステムがモードをサポートしている場合)。flush
vfat
- メディアが取り外されたかどうかを検出
- その場合は、ファイルシステムからアンマウントします。
- そのディレクトリを削除
/media/
(もちろん、キャッシュによるホットアンプラグ時のデータ損失を防ぐために、デバイスを同期モードでマウントする必要があります。編集する: sync
はいvfat
リムーバブルメディアに比べて多すぎるだからflush
妥協で作られた、それほど安全ではsync
ありませんが、フラッシュメモリの寿命サイクルに応じてそれほど危険ではありません)
autofs
、、、HAL
などに関するいくつかの情報が見つかりudisks
ましたが、どちらが使用されなくなったか好まれるかはわかりませんでした。udisks2
usbmount
答え1
探していると思います。pmount
。
接続時に自動的にインストールされるようにするには、次を参照してください。Debian の USB スティック自動マウント。
システムで以下を使用する場合USB 2これは、リムーバブル記憶装置の挿入に反応する好ましい方法である。よりアーチスウィキUSBフラッシュドライブ構成のヒント。
それ以外の場合、新しいデバイスが表示されたときに反応するプログラムは次のとおりです。ウデブそのため、自動インストールは次のように行われます。udevルール。これUSBマウントパッケージは、USBストレージデバイスやその他のデバイスを自動的にマウントするudevルールを提供します。mount
udevルールから呼び出されたFUSEファイルシステムでは機能しません。(例:ntfs-3g)、必要に応じてudiskを使用してください。
原因と結果がそのように機能しないため、メディアを取り外すとメディアを自動的にマウント解除できません。メディアをマウント解除する必要があります。今後削除されました。読み取り専用メディアの場合は、削除後にマウント解除できます。ただし、突然消えるファイルシステムに開いているファイルがある場合、一部のアプリケーションに混乱を招く可能性があります。書き込み可能メディアの場合、マウントされたファイルシステムを取り外すとデータが破損する可能性があります。
答え2
これが私が最近やってきたことで、今はこの方法に非常に満足しています。これはUbuntu 12.04 + gentoo用ですが、udevとautofsのインストールを許可するすべてのディストリビューションが機能すると思います。
前提条件:udev + autofsがインストールされている必要があります。
ステップ1)
次の「/etc/udev/rules.d/90-usbsd-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"
機能:2つのシンボリックリンクを作成します。 1つは、「/dev/usbdisks/<...>」の下のUSBストレージデバイスパーティションです。ラベルがない場合は、USBストレージパーティションのラベルまたはカーネル名を使用してください。 2番目のシンボリックリンクは、サイレントインストーラをサポートするために「/media/usb/<...>」から「/media/autousb/<...>」にリンクされています(ステップ2を参照)。
注:最初は、ID_FS_LABEL_ENC変数でルールを使用しませんでした。危険だと思ったからです。同じラベルの2つの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
autofsがこれを(bash)スクリプトとして使用するには、このauto.usbを実行できる必要があります。例えば
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デバイスパーティションをマウント解除できます(自動マウントにマウント解除するように指定)。
もちろん、パーティションがどこでも使用されていないことを確認できます。自動マウントは、60秒のタイムアウト後にパーティションをマウント解除します。
ここで本当の秘訣は、「/media/usb」から「/media/autousb」へのシンボリックリンクを使用することです。
- "/media/usb"シンボリックリンクは、ユーザーにどのUSBストレージデバイスパーティションがあるかについての簡単な概要を提供するためにudevによって作成されます。
- /media/usbを介してパーティションを使用すると、AutoFSは要求に応じてパーティションを自動的にマウントします。
- スクリプト化された "auto.usb"ファイルを使用すると、あらゆる種類のファイルシステムをサポートできるだけでなく、あらゆる種類の命名スキームもサポートできます。
- この方法は、パーティションが異なるファイルシステムタイプを使用している場合でも、複数のパーティションを持つUSBメモリースティックをサポートします。
答え3
まあ、長い時間が経ちましたが、今まで見つけた最高のオプションで私の質問に答えます。要約すると、ルールを作成し、それをいくつかのスクリプト(ディレクトリの作成/削除およびリムーバブルデバイスのマウント解除/マウント)に関連付け、type =を使用してデバイスイベント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
これらのスクリプトをイベントに関連付けるルールの作成
最後にに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"
そのディレクトリ/フォルダの他のルールと同じ権限を付与します。
ストレージデバイスを挿入すると、パーティション名に基づいてディレクトリが作成され/media/
(記憶はありませんが、NTFSパーティションでも機能するようです)、そのディレクトリにパーティションがマウントされます。plugdev
システムにグループがある場合、ユーザーはグループを読み書きできます。また、これらのデバイスは、ホットプラグ時にデータ損失のリスクを制限するために同期モードでインストールされます。
デバイスが削除されると、マウントが解放され、ディレクトリが削除されます。/media
また、イベントを監視するためのツールは、次のオプションと一緒にまたはudev
です。udevadm monitor
--env
--property
$ udevadm monitor --env
これはテスト済みで、DebianとArchでうまく機能しますが、すべての依存関係に適用できますudev
。
答え4
かなり遅いようですが、必要な人がいれば投稿します。 (私の最初のStackExchangeの答えでもあります。)
いくつかの場所で解決策を見つけた後、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"
その後、次の簡単なツールをインストールできます。ウディスキー自動マウントに使用されます。