Mac OSはスリープ後にSMB共有に接続できません


15

最近(3週間前)のMacBook ProでローカルWindows 2008ファイルサーバーのSMB共有に問題なくアクセスしていました。ただし、現在は数日間、スリープモードからの復帰後にサーバーへの(再)接続に失敗します。

Finderは単に「接続しています...」と表示し、無期限にハングします。コマンドライン(mount -t smbfs)から試しても同じことが起こります。これはWiFiとケーブルの両方を介して行われます。また、ネットワークのオフとオンを切り替えてみました。唯一役立つのは再起動です。

ヒントはありますか?

編集して明確にする:スリープ状態にされるのはMacであり、サーバーではありません。また、共有を切断してからスリープ状態にすると、起動後に再接続できることもわかりました。

別の編集:

さらに調査を行い、ネットワークトラフィックを傍受しました。MacはNetBIOS名のクエリとステータス要求(NBSTAT)をサーバーに送信し、サーバーは応答しますが、すべて正常に思えます。その後、MacはSMB接続を開くはずですが、何もしません。これ以上パケットは続きません。

それから、本当の問題はもっと深いところにあることがわかりました。もちろん、サーバー側でタイムアウトになった古い接続がまだアクティブであると考えているため、新しい接続を開かないようです。ただし、マウントポイントまたは/ Volumesディレクトリのみにアクセスしようとするプログラムはハングし、強制終了することさえできません。umount /Volumes/share-ハング。ls /Volumes-ハング。kill -9これらのいずれか-助けにはなりません。また、アプリケーションでファイルを開くダイアログを開くと、同様にハングします!

唯一役立つのは、ハードリブートです。タイムアウトした接続がこのような何かを引き起こす可能性がある場合、OSXのSMB実装には根本的に何か問題があるように思えます。

回答:


6

MacBook Proでも同じ問題が発生しています。http://blog.djmnet.org/2009/02/09/macs-needing-unix-network-geekery/の指示に従いましたが、私の問題は解決したようです。


1
わあ、ありがとう!それはそれをやったようだ。私はsmb.confでdarwin_streamsを無効にし、これをsysctl.confに追加しました:net.inet.tcp.delayed_ack=0 net.inet.tcp.mssdflt=1440 kern.ipc.maxsockbuf=500000 net.inet.tcp.sendspace=250000 net.inet.tcp.recvspace=250000 再起動後、SMB共有に接続し(以前よりもはるかに短い時間で済みました)、しばらくスリープした後でもアクセスできます完全に。
アンドレアス

実際、これらの変更を適用した後も問題に遭遇しました。ただし、OSX Lionは問題を修正したようです。
アンドレアス

4

ねえ、最近、2010 MBPで同じ問題が発生しました。この解決策は2つのことの組み合わせであることがわかりました。

1つ目は、カーネルの微調整(基本的TCP_NODELAYには接続)です。これは、ターミナルで実行できます。

sudo sysctl -w net.inet.tcp.delayed_ack=0

第二に、ファイルのパーミッション/ DS_Storeファイルを扱っています。通常、Windows共有をセットアップすると、Macには読み取りアクセスのみが許可されます。Finderは、表示するすべてのフォルダーにそれらを作成しようとし、最終的にハングする可能性があります。そのため、これを解決する2つのオプションがあります-Windowsマシンで十分なファイル許可を有効にするか、Finderがネットワーク共有にこれらのファイルを作成しないようにします。私はファインダーでそれらを作成することを無効にすることを好みます。これはターミナルで次のコマンドを実行することで可能です。

defaults write com.Apple.desktopservices DSDontWriteNetworkStores true

それらを実行した後、再起動する必要があります。


Mac OS 10.7.2システムでは、デフォルト値(復元する必要があります)は「net.inet.tcp.delayed_ack:3」です(「sudo sysctl -a」を実行するとデフォルト値を取得できます)。
ノアルトあたり

@PerNoalt:このような問題にも対処しているため、このスレッドに応答します。のデフォルト設定net.inet.tcp.delayed_ack310.6、1.7および1.8です。0問題を解決するように設定します。しかし2、同様に動作するはずです。
JakeGould

2

問題を解決することはできませんが、もう少し詳細を追加できます。また、Windows 7でも発生し、Windows共有がスリープ状態になったときにOS Xデバイスを接続する必要があります。OS Xを切断またはスリープ状態にしてからスタンバイWindowsを使用すると、この問題は発生しません。

私もこれに対する解決策が本当に欲しいです。

編集:他の多くの人々を検索した後、同様の問題が発生しました:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.