続行 Linuxでプラグインされたデバイスを自動マウントする 、これは少し基本的なことを残しました。 Gentooを実行して、autofs-5.0.4-r5を使用してラップトップにローカルデバイスとネットワークデバイスの組み合わせを自動マウントしています。 autofsを単独で実行すると、いくつかの不満が生じます。
これは、udevとudisksが確かに実行できることです。だが:
実際のファイルシステムのマウントは、autofsゴーストが機能するように、マウントポイントへの最初のアクセス時にのみ発生する必要があります。これにより、優れたアクセシビリティを提供しながら、誤ってデバイスを抜いてファイルシステムを汚すリスクを減らすことができます。
これに加えて、DEでは、何が起こっているのかを常に知ることができます。
このコンボは究極の自動マウントセットアップである必要がありますか、それとも何かが足りませんか?
これはすべてudev
で実行可能です。 [〜#〜] uam [〜#〜]を見てください。これは、ほとんどの問題に対処しているようです。言及しましたが、実際にはは自動的にマウントされます。必要に応じて、それが提供する優れた機能を利用できますが、メディアが自動的にマウントされないように変更してください。また、作者に連絡して、新しい機能として非自動マウントアプローチを提案することもできます。その間、その機能を簡単に見てみましょう。
udev
の上で動作し、DEに依存せず、イベントベースになります。 (また、udev
によって検出されない可能性のある光メディアの回避策も提案します。)MOUNTPOINT_TEMPLATES
を定義して、さまざまなカスタム方法で言及した命名の問題を解決できます( am.conf を参照)。また、LABEL
を使用することもできます(望ましい)これが私が最近それをした方法です、そして私は今このアプローチに非常に満足しています。これはUbuntu12.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をセットアップして/ 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
このauto.usbは実行可能である必要があるため、autofsはこれを(bash)スクリプトとして使用します。だから例えば
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デバイスパーティションをアンマウントできます(automountにアンマウントするように指示します)。
もちろん、パーティションがどこにも使用されていないことを簡単に確認できます。オートマウンターは、60秒のタイムアウト後にパーティションをアンマウントします。
ここでの本当のトリックは、「/ media/usb」から「/ media/autousb」へのシンボリックリンクを使用することです。