エラーの内容
ネットワーク共有へのアクセス、ドライブのマッピング、またはネットワーク経由のファイルコピーを試みると、Windowsが突然止まります:
System error 121 has occurred.
The semaphore timeout period has expired. (0x80070079)
「ネットワークパスが見つかりません」という汎用ダイアログとして表示されることもあります。PowerShellでは代わりに16進コード 0x80070079 が表示されます。どちらも根本原因は同じです:WindowsがSMBリクエストを送信し、約45秒待機した後、接続を断念したのです。
実際に何が起きているか
エラー121は、Windowsがネットワーク層でハードなデッドラインに達したことを意味します。OSがリモートホストにリクエストを送ったものの、リモートホストが時間内に応答せず、Windowsが接続を切断と判断しました。原因はほぼ毎回4つに絞られます:不安定なNICドライバ、SMBパケット署名のミスマッチ、過負荷のファイルサーバ、またはハンドシェイク途中でパケットをサイレントドロップするファイアウォールです。厄介なのは、外側からはすべて同じに見えることです。
手順ごとの修正方法
ステップ1 — まず基本的な接続を確認する
設定は何も変更しないでください。まずホストに到達できるか、ポート445が実際に開いているかを確認します:
# 断続的なドロップを検出するために回数を増やしてPing
ping -n 20 192.168.1.100
# SMBポートが開いているか確認
Test-NetConnection -ComputerName 192.168.1.100 -Port 445
TcpTestSucceeded が False を返す場合は、ネットワークレベルの問題です — ステップ4に直接進んでください。pingでパケットロスが発生している場合(20回中1〜2回でも)、SMBではなくケーブルやWi-Fiが原因の可能性が高いです。
ステップ2 — SMBパケット署名を無効にする(ミスマッチの修正)
クライアントとサーバ間の署名ミスマッチは、より見つけにくい原因の一つです。サーバが署名を必須とする一方でクライアントが正しくネゴシエートできない場合、クリーンな認証エラーではなく接続タイムアウトが発生します。現在のクライアント状態を確認してください:
Get-SmbClientConfiguration | Select RequireSecuritySignature, EnableSecuritySignature
問題を切り分けるため、クライアント側で必須署名を一時的に無効にします:
# PowerShellを管理者として実行
Set-SmbClientConfiguration -RequireSecuritySignature $false -Force
これでエラーが止まった場合は、両マシンの署名ポリシーを統一してください。署名を無効のままにしないでください — 内部ネットワークにおいて重要なセキュリティ制御です。
ステップ3 — Large Send Offload(LSO)を無効にする
LSOはCPUの代わりにNICにTCPセグメンテーションを処理させる機能です。理論上は優れた仕組みですが、実際には特定のIntelおよびRealtekドライバ — 特に2020〜2023年の間に出荷されたバージョン — は、LSOが有効なときに大きなSMBパケットをサイレントドロップし、症状はランダムなタイムアウトだけという問題があります。
デバイスマネージャ(devmgmt.msc)を開き、ネットワークアダプターを展開し、アダプターを右クリック → プロパティ → 詳細設定タブ。以下の項目が存在する場合は無効にします:
- Large Send Offload v2 (IPv4)
- Large Send Offload v2 (IPv6)
- TCP Checksum Offload (IPv4)
PowerShellを使う場合:
# アダプター名を確認
Get-NetAdapter
# LSOを無効にする("Ethernet"をアダプター名に置き換えてください)
Disable-NetAdapterLso -Name "Ethernet"
# TCPチェックサムオフロードを無効にする
Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "TCP Checksum Offload (IPv4)" -DisplayValue "Disabled"
変更を適用するためにアダプターを再起動します:
Restart-NetAdapter -Name "Ethernet"
この修正により、LAN上の物理マシンにおけるエラー121のほぼ半数が解決されます。
ステップ4 — Windowsファイアウォールとポートを確認する
クライアントではなく、サーバ側で以下を実行します:
# ファイルとプリンターの共有ルールを有効にする
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
# ポート445が実際にリスニング状態か確認
netstat -an | findstr ":445"
マネージドスイッチやルーターを経由している場合は、ポート445(SMB)と139(NetBIOS)がレート制限またはサイレントブロックされていないか確認してください。一部のコンシューマ向けルーターは「アプリケーション制御」設定でSMBトラフィックをデフォルトで制限します。
ステップ5 — DNSをフラッシュしてネットワークスタックをリセットする
古いDNSキャッシュや破損したTCP/IPスタックにより、接続セットアップ時間がタイムアウトしきい値を超えることがあります。以下の手順を実行してください:
# DNSキャッシュをフラッシュ
ipconfig /flushdns
# TCP/IPスタックをリセット
netsh int ip reset
netsh winsock reset
# DHCPリースを解放して更新
ipconfig /release
ipconfig /renew
実行後は再起動してください。netsh int ip resetコマンドはTCP/IPレジストリキーを書き直します — 有効にするには再起動が必要です。
ステップ6 — NICドライバを更新またはロールバックする
まだ解決しない場合は、ドライバが主な原因です。現在の状態を確認します:
Get-NetAdapter | Select Name, DriverVersion, DriverDate
最新ドライバはWindows Updateではなく、メーカーのサイト(Intel、Realtek、Broadcom)から直接入手してください。Windows Updateはベンダーの最新リリースから6〜12ヶ月遅れたドライバを配布することが多いです。ドライバ更新後にエラーが発生した場合はロールバックしてください:デバイスマネージャ → アダプターを右クリック → プロパティ → ドライバタブ → ドライバのロールバック。
修正を確認する
ドライブをマッピングして実際のワークロードで検証します — ディレクトリ一覧だけでは安定性の確認には不十分です:
# ドライブをマッピングしてコンテンツを一覧表示
net use Z: \\192.168.1.100\sharename /persistent:yes
dir Z:\
# テストファイルをコピーして整合性を確認
copy Z:\testfile.bin C:\Temp\testfile.bin
certutil -hashfile C:\Temp\testfile.bin SHA256
タイムアウトなしのクリーンな dir と一致するSHA-256ハッシュにより、修正が保持されていることが確認できます。ハッシュの簡単な比較には、ToolCraftのHash Generatorがブラウザ上で完全に動作します — 両方のハッシュを貼り付けると、コピー元とコピー先が一致するかどうかを即座に確認できます。
ヒント
- Wi-Fiユーザー:継続的なSMB転送には有線接続に切り替えてください。Wi-Fiのレイテンシスパイク — 特に混雑した2.4 GHzチャンネルでの負荷時 — は、エラー121のしきい値を定期的に超えます。安価なCat6ケーブルを使えばこの変数を完全に排除できます。
- VPN + SMB:MTUミスマッチが典型的な原因です。VPNトンネルがSMBパケットを断片化し、サーバが完全なフレームを受け取れずタイムアウトします。VPNアダプターのMTUを1400に設定してください:
netsh interface ipv4 set subinterface "Local Area Connection" mtu=1400 store=persistent - サブネットの誤り:共有がサブネットをまたぐ場合は、ToolCraftのSubnet Calculatorでルーティングが正しいか、クライアントが正しいホストに到達しているかを確認してください。
- イベントログ:
eventvwr.mscを開き → Windowsログ → システムで、障害発生時刻付近のSrvまたはMRxSmbソースイベントをフィルタリングします。これらのエントリには通常、タイムアウトがクライアント側かサーバ側かが明記されています。 - 旧サーバ(2012以前):SMB1のみサポートしている場合があります。
Get-SmbServerConfiguration | Select EnableSMB1Protocolで確認してください。SMB1を有効にすることは実際のセキュリティリスクです — EternalBlueによる悪用が可能なため — 最終手段として扱い、アップグレードを計画してください。

