Linuxでの完全な自動マウントソリューションのudev、udisks、autofs、通知設定に必要な提案


9

Linuxプラグインされたデバイスの自動マウントを続行します。Gentooを実行して、ラップトップ上のローカルデバイスとネットワークデバイスの組み合わせをautofs-5.0.4-r5で自動マウントしています。autofsを単独で実行すると、いくつかの不満が生じます。

  • デバイスごとにマウントポイントの名前を事前に定義する必要がありますが、MMCカードリーダーを再起動した後、起動可能なUSBスティックで位置を切り替えます
  • 自動LABELベースのマウントポイントを表示したいのですが、autofsだけではAFAIKでそれを行うことはできません

これは、udevとudisksが確かに実行できることです。だが:

  • デバイスのプラグイン時にファイルシステムが自動的にマウントされないようにするには、LABELというゴーストマウントポイントを指定します

実際のファイルシステムのマウントは、autofsゴーストが機能するのと同じように、マウントポイントへの最初のアクセス時にのみ発生します。これにより、優れたアクセス性を提供しながら、誤ってデバイスを取り外してファイルシステムを汚すリスクを減らすことができます。

これに加えて、DEで何が起こっているかをいつでも知ることができます。

  • すべての自動マウントのステータスを表示できるシステムトレイアプリはありますか。つまり、緑=何もマウントされておらず、赤=何かがマウントされていますか?
  • たとえば、notify-sendを使用して、ファイルシステムの(アン)マウント操作通知を提供する配布に依存しない方法はありますか?Gentoo固有のものはどうですか、それは私にとってもうまくいきます。udevのスクリプトはNFSとCIFSに役立ちませんよね?

このコンボは、最終的な自動マウントセットアップにする必要がありますか、それとも何か不足していますか?


私は過去数年間Gnomeを利用してきたので、自分でロールすることはもはや重要ではありません。
lkraav 2018

回答:


4

これはすべてで実現可能udevです。UAMを見てください。これは、あなたが言及したほとんどの問題に対処しているようですが、実際に自動的にマウントされます。必要に応じて、提供される優れた機能を利用できますが、メディアが自動的にマウントされないように変更できます。また、作成者に連絡して、新しい機能として非自動マウントアプローチを提案することもできます。その間、その機能を簡単に見てください。

  • の上で動作しudev、DEに依存せず、イベントベースになります。(また、によって検出されない可能性のある光メディアの回避策を提案しudevます。)
  • MOUNTPOINT_TEMPLATESいくつかのカスタム方法(uam.confを参照)で言及した命名の問題を解決できることを定義できます。また、LABEL(必要に応じて)使用することもできます。
  • 通知メカニズムがサポートされています。DE固有のニーズに合わせて調整する必要があります。
  • それは明確なデザインを持っているようで、どこで、いつ、どのように各アクションがトリガーされるかを簡単に見つけることができます。

今日、私は#awesomeのtinymountに言及しました。このトピックに興味のある人はおそらくそれをチェックするべきです
lkraav

その間、私は主にbashmountを使用することにしました。
lkraav 2013

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

これは、60秒間何も操作しないとAutoFSがデバイスをマウント解除することを意味します。あなたの好みに応じて、多かれ少なかれ使用したいかもしれません。

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」へのシンボリックリンクを使用することです。

  • "/ media / usb"シンボリックリンクはudevによって作成され、ユーザーにUSBストレージデバイスパーティションが存在する簡単な概要を示します。
  • AutoFSは、/ media / usbを介してパーティションを使用する場合、オンデマンドでパーティションを自動マウントします
  • スクリプト化された「auto.usb」ファイルを使用すると、あらゆる種類のファイルシステムをサポートでき、さらにあらゆる種類の命名スキームもサポートできます。
  • このアプローチは、複数のパーティションが異なるファイルシステムタイプを使用している場合でも、複数のパーティションを持つUSBスティックをサポートします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.