二人が仕事のあと同じ Mac を切っても結果は違う。一人は九割まで進んだアップロードを失い、もう一人は二十秒後に蓋を閉じてすべて保存されている。違いは運でもディスク速度でもない。プライベートセッション、共有、トンネルを閉じる順番と、それらの手順の完了を何かが待っているかどうかである。

以下の比較は「先にトンネル」と「先に作業」の間にある。この一つの選択がほとんどの悪い結果を説明するからだ。

二つのシャットダウン順序、二つの結果

先にトンネルは整って見える。VPN メニューで切断を選ぶとアイコンが消え、そのあと利用者が書類を閉じて電源を切る。問題は、アプリが書き終える前に切断がルートとマウント中の共有を外してしまい、進行中のアップロードの行き場がなくなることだ。利用者はきれいな切断を見て、残りは安全だと思う。アイコンが消えたことはアプリが終わったことを何も語らない。そのあとのシャットダウンは、アプリに必要だった通信を運ばないネットワーク経路の上で普通に進む。

先に作業は数秒遅く、はるかに穏やかだ。プライベートな処理が終わり、共有が意図的にアンマウントされ、それからようやくトンネルが消える。続くシャットダウンには中断するものが残っていない。

なぜ共有がトンネルより先に消える必要があるのか

マウントされたネットワーク共有は生きた依存関係であり、フォルダではない。クライアントはハンドルを開いたままにし、サーバーはリースを追跡し、キューに残った書き込みはそのセッションに属する。その下のトンネルを引き抜くと、古典的な古いマウントが生まれる。Finder は共有を表示し、どのアクセスも固まり、唯一の治療は強制アンマウント、ときにはログアウトだ。

ファイル活動が止まってから、対応する操作でアンマウントする。macOS では Finder の取り出し操作か、マウントポイントに対する意図的な diskutil unmount であり、下のネットワークを切断することではない。そのあと VPN に触る前に、サイドバーから共有が消えたことを確認する。

共有がアンマウントを拒むなら、まだ何かがファイルを開いている。それを見つけて閉じ、もう一度試す。拒否は情報であり、強制アンマウントはそれをデータ損失に変える。

セッションを所有するクライアントを止める

VPN セッションには所有者がいて、その所有者だけがきれいに止められる。Tunnelblick の接続は Tunnelblick で止める。ネイティブの構成はシステム自身の制御か、それを管理するアプリで止める。同じような名前のプロファイルに対して別の OpenVPN バイナリを動かしても、アプリ管理のセッションは止まらず、トンネルデバイスを誰が持つかで二つのプロセスが食い違うことがある。

自動復旧に注意する。On Demand ルールや管理プロファイルは、意図した停止の数秒後に接続を再開することがあり、クライアントが命令を無視しているように見える。その挙動はポリシーであり不具合ではない。ポリシーの所有者と解決すべきで、切断を繰り返す補助ツールと戦うべきではない。

クライアントによっては「切断要求」と「撤去完了」を分けている。ワークフローが完了を待つなら、クライアント自身の状態を読み、有限の期限を与える。場当たりに一秒待つのは待機ではなく、VPN らしい名前のプロセスを全部殺すのは撤去ではない。

OS のシャットダウンには手を出さない

最後の一歩は普通のシャットダウンであるべきだ。Apple メニュー、キーボードショートカット、予約した shutdown コマンドだ。その経路はアプリに保存させ、未保存の作業を利用者に尋ね、ボリュームを期待どおりの順でアンマウントする。失敗が誰かに調査できる形で報告される経路でもある。

強制電源断はそのすべてを飛ばす。機械が本当に固まったときには正しい道具で、締切に間に合わせる日常手段としては誤った道具だ。アップロードを捨てる強制シャットダウンは待つより速くなく、コストを翌朝へ移すだけだ。

Apple のシャットダウン指針はその線を引き、強制の場合を別に説明している。順序を直す理由として読み、強制シャットダウンを日課の一部にする許可として読まないこと。

締切を計画に入れる

Mac を決まった時刻に切る必要があるなら、利用者セッションが生きているうちに準備を始める。最後の一分まで掃除を待つのが、MFA の要求、終わらない書き込み、手強いマウントが事故になる道だ。並びには開始時刻を与え、終了時刻だけにしない。

ある手順が予算を超えたときにどうするかを決める。選択肢は利用者への通知、シャットダウンの中止、別の承認済み手順の実行だ。「掃除に時間がかかりすぎた」を黙って強制電源断へ格上げするのは、全員が避けようとしていた結果を確実に生む唯一の選択だ。

書き出せばルールは短い。プライベートな作業を終え、依存するセッションを閉じ、所有する側を通してトンネルを止め、それから普通に電源を切る。四つの手順をその順で、それぞれに締切を付ける。

関連記事