ラップトップでのCIFS共有の自動マウント


8

これに似た質問をいくつかのバリエーションで以前に見たことがありますが、まだ満足のいく答えを見つけることができていません。

ここに私が持っているものがあります:

  • 頻繁にネットワークを切り替える、モバイル性の高いDebianラップトップ。
  • 多くのCIFS共有が存在する自宅のFreeNASサーバー。

ここに私が欲しいものがあります:

  • 家にいるときにCIFS共有ディレクトリにアクセスすると、CIFS共有が自動マウントされます。
  • 他の場所にいるときにCIFS共有にアクセスすると、すぐにエラーが返されます(つまり、NASが存在しないことを確認する前に、ネットワークを5分間考えないでください)。
  • マシンをサスペンドまたはハイバネートするときは、共有をきれいにアンマウントして、マシンが再びウェイクアップしたときにマウントが薄い空気を指さないようにします。共有を完全にマウント解除できない場合(プロセスがディレクトリを使用している場合)は、次のいずれかを実行します。
    • サスペンド/ハイバネートを中止して、誰がマウントにキャンプしているのか教えてください。または
    • とにかくアンマウントを強制し、サスペンド/ハイバネートを続行します。
  • 追加のクレジット:ネットワーク接続が切断された場合(プラグを抜くか、WAPとの関連付けを失う場合)、共有をきれいにアンマウントしてください。
  • 追加クレジット:この魔法は、使用中のネットワークマネージャーから独立している必要があります。

私が読んださまざまなオプションはどれも適切ではないようです。

  • autofs 信頼できるようですが、サスペンド/ハイバネートを意識していないようです。
  • _netdevオプションは興味深いように見えますがmount/etc/fstabNFS共有にのみ適用されるようです。
  • まだgvfs仕事に就けていませんが、頑張っていません。

これに取り組む方法について何か提案はありますか?

補遺:

これが私がこれまでにやったことの短いバージョンです。私はをインストールしてautofs、自動マウントされたすべてのボリュームを強制的に期限切れにする小さなシェルスクリプトを作成しました。これは、ネットワークインターフェイスがダウンしたときに呼び出されます。

資格情報を外部ファイル(yuck)に保存して、CIFSサーバーのオートマウンターマップを作成しました。次に、次のシェルスクリプトを記述しました。

#!/bin/sh -e

# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
    kill -USR1 "$(cat /var/run/autofs.pid)"
fi

USR1シグナルを自動マウントデーモンに送信すると、未使用のマウントがすべて強制的に期限切れになります。次に、このスクリプトをに配置/etc/network/if-down.d/autofsし、ソフトリンクをに配置しました/etc/network/if-post-down.d/autofs。NetworkManagerは、接続が切断されると、後者のディレクトリにあるすべてのスクリプトを呼び出すため、自動マウントされたファイルシステムはすべてマウント解除する必要があります。

しかし、私はその手配にひどく満足していません。最初は、autofs自動マウントされたボリュームを区別せず、USR1を受信すると、非ネットワークボリュームを含むすべての非アクティブボリュームをアンマウントします

さらに、CIFSサーバーのログインパスワードはファイルに保存する必要があります。私はそれを求められることを望んでいます。

とにかく、それは私がこれまで一緒にくじいてきたものです。うまくいきますが、もっと良いものを使って喜んでいます...


ツールGigolo:uvena.de/gigolo/index.htmlをご覧ください。私はそれを使用して、自宅のSMBマウントの再構築を管理し、ラップトップで作業します。
slm

@slm:Gigoloは面白そうですが、マウントオプションを変更する方法がないようです。結果として、共有は「ダムFAT」モードと呼ばれるモードで表示されます。このモードでは、すべてのファイルとディレクトリにアクセス許可0700 sudo mount -t cifs ...があります。対照的に、同じ共有をマウントすると、好ましい結果が得られます。もう少しいじってみますが、Gigoloが私が探しているものではないと思います。
ewhac 2013

回答:


2

NetworkManagerを使用する場合、起動または停止するネットワークインターフェイスで実行するスクリプトを記述できます。

NetworkManagerは、ネットワークイベントに応答して、/ etc / NetworkManager / dispatcher.dディレクトリ内のスクリプトをアルファベット順に実行します。各スクリプトは、(a)通常のファイル、(b)rootが所有している、(c)グループやその他のユーザーが書き込みできない、(d)set-uidでなく、(e)所有者が実行できる必要があります。各スクリプトは2つの引数を受け取ります。1つはアクティブ化されたデバイスのインターフェイス名、もう1つはアクションです。

たとえば検索ドメインから自分のネットワークを検出し、インターフェースがオンラインになったときにマウントまたはアンマウントします。

#!/bin/bash
#/etc/NetworkManager/dispatcher.d/mount-my-cifs    
case "$2" in
  up)
    # some logic to detect if we're at home
    grep "search myhome.local" /etc/resolv.conf
    if [ "$?" != "0" ] ; then 
       exit
    else 
       mount /mnt/cifs
    fi
    ;;
  down)
       umount /mnt/cifs
    ;;
esac

上記は、cifsマウントがオプションで定義され/etc/fstabていることを前提としていnoautoます
HBruijn

その仮定を答えに追加してください。
出血している指
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.