リモート デスクトップ サービスは別にビジーではありません。

 今回のネタは、時々「あ~やっちまった」となるお話。

 Windows Serverでログインしたまま(そして大抵は何かアプリを動かしたまま)のセッションに再接続しようとすると、たまにこんなエラーが出て接続させてくれないことがある。

 「リモート デスクトップ サービスが現在ビジー状態のため、実行しようとしている操作を完了できません。しばらくたってからもう一度試してください。他のユーザーはログオンできます。」

 ちなみに英語版のエラーメッセージはコレ。

 「The task you are trying to do can’t be completed because Remote Desktop Services is currently busy. Please try again in a few minutes. Other users should still be able to log on.」

 この問題が出てしまった時の対処法は、

 「Adminユーザーでログインして該当ユーザーを強制ログアウト」

 これが一番。というか、実質的にはコレしかない。

 え、保存していないデータ?セッション切る前に保存していなかった方が悪い。
 だってWindowsよ?いつ落ちてもおかしくないでしょ?それぐらい覚悟してるよね?

 ・・・え、鬼畜過ぎるって?
 でもこんな風に割り切りでもしないとどうにもならないのも事実なワケで。
 さくっと強制ログアウトしてしまいましょ。

 ◇

 さて、頻度は低いとはいえ一度ブチ当たってしまうと状況次第では(精神的、或いは時間的)ダメージが結構大きいこのトラブル。
 一番アレなところは、エラーメッセージが実態を全く正しく表していないことなのではないかと。

 というのは、殆どの場合、問題なのはTermSvcs(Remote Desktop Services)ではなく、その上のセッションで動いているCsrss.exeがセッション接続要求に応えなかったからなんですな。

 そもそもcsrss.exeって何かと言われると、カーネルとアプリケーション間のやりとり(システムコール等)を仲立ちするシステムサービス。Windows起動と共に開始され、サービス開始に失敗する(或いはユーザが間違って停止させる)とBSODで即落ちする、Windowsの基幹部品の一つ。
 なので、アプリが起動する際には必ずこのcsrss.exeとのプロセス間通信が発生しているし、ユーザーがログイン・ログアウトする際、セッションが接続・解放される際にも然り、と。

 ところが、デスクトップ用に作られてあまりセッション切断のことを考慮していないアプリがあると、セッションが切断された際にアプリとcsrss.exeの間でデッドロックが発生してしまうそうな。状況的には、カーネル側に対してはセッション切断を完了しているが、アプリ側のセッション切断完了は待ち続けているという。
 仮にcsrss.exeがアプリにセッション切断を強制したらアプリが即ハングする可能性もあるので、さすがにそういう仕様にはなっていない。

 この状態でもシステムコール等は正常に出来るし、アプリ自体は特に問題無く動き続けるが、csrss.exeの方は「セッション完了待ち」ステータスで居続ける為、新しいセッション接続要求に対して対応することが出来なくなってしまう。

 #ちなみにWindowsServer2008/R2にはこのデッドロックが頻発する不具合(バグ?)があり、修正パッチが出ているものの、これも根本解決ではなくタイミング調整等でデッドロック頻度を下げているだけ、の模様。

 ◇

 それじゃコレ、正しくお行儀良くセッション切断するアプリなら問題無いか、というとそう簡単な話でもないようで。
 何しろ「純正」MS製のOffice等でもこのデッドロック状態が発生することがある、という話はぼろぼろ出てきているので。

 不具合発生頻度が結構高くよくネタとして出てくるのはOutlookで、デカいメールボックスを抱えているようなユーザー。
 Outlookのプログラム自体はこのセッション切断を考慮していないワケではないようなのだが、メールボックスに対して検索等の操作中だったり、裏でインデックシングが動いているような状況で切断すると、アプリ側のセッション切断がシステム側の要求に対して間に合わず、デッドロック状態に陥ることがある模様。

 他にも、たまたまIO要求が高い状態でセッション切断すると、通常なら一瞬で終わる筈の処理がIOに引っ張られて待ち行列に入ってしまい、結果的にタイムアウトしてデッドロック状態になるというハメに陥ることも。

 ◇

 ということで、元々「シングルセッション」「全権限制約無し」「起動中にセッション切断・再接続なんて考慮外」という世界で動いていたWindowsのデスクトップアプリを、Server上で動かすってのは意外とリスキーである、というお話でしたとさ。

 まぁ自分の場合は「あっちゃーまたかよ」で済むので特に対策もせず使い続けているが、そういうのが許されない状況だったら、悪いことは言いません。
 Server上でデスクトップアプリを動かすなんてことはやめといた方がいいです、はい。
 そしてどうしてもデスクトップアプリを起動しなくてはいけなくなったら、終了するまでセッションはそのままで。

 P.S.
 個人的には出来はそんなに悪くないと思っているNT6.3カーネルなのだが、その中でも恐らく手癖として最悪なのがコレ

 「IOのプライオリティが高い割に、IOと要求スレッドの並列化が十分になされていない」

 ではないかと。
 結果として、該当スレッドの処理内容とは関係無い筈のIOの待ちでスレッドが何故か一時停止したり、平行稼働出来る筈のIOが何故か順次稼働になってしまったり。
 プライオリティを上げないとIO性能が頭打ちになるのは目に見えていたのでこの変更自体は正解だと思っているが(これからコンシューマーでもNVMe等が普通になっていくだろうし)、伴ってもう少し改善すべき箇所もある気がするのよね。

Share

物凄く遠回りに、日本文化の奥深さを実感した夜。

 さて、先日とある絡みで、以下のようなイベントに参加してきたんですわ。

 ・日本庭園のある会場
 ・和洋中各種の立食スタイルラウンジ
 ・地ビール・ご当地サイダー・国産リキュール・日本酒各種取り揃え
 ・日本刀居合い切りパフォーマンス
 ・和太鼓演奏
 ・相撲入門解説&パフォーマンス
 ・忍者ショーステージ
 ・甲冑隊パフォーマンス
 ・芸妓の踊りステージとお座敷遊びプチ体験
 ・お茶席のおもてなし
 ・コスプレイヤーと写真撮影
 ・スケブイラストのリクエスト一発描き実演
 ・壁新聞サイズ2Pの漫画ライブドローイング
 ・甲冑着てみる体験
 ・和太鼓叩いてみる体験
 ・長刀扱い体験
 ・愛媛の地酒20種類近くのテイスティング(飲み比べ)
 ・盆栽展示
 ・浅草ジンタのライブ(ノリノリの音楽に踊り出すゲスト多数発生)
 ・少年ナイフのライブ
 ・以上を6時間以内に続けて或いは平行して実施

 ・・・こう書き出すとあらためてカオスなんですが。
 OpenStack Summit Tokyo Evening Eventです。

 まぁゲストは殆どが非日本人だし、趣旨としては「海外から来たゲストに日本文化をハイライトを手っ取り早く知って貰う」とのことで全く一致していると思うのだが、ハイライトどころかほんの一欠片だけでもぐいっとまとめるだけでまぁこれだけカオスな空間が出現するとは・・・。
 
 #勿論司会進行は完全に英語、他の催しの解説や案内・説明も基本英語。

 まぁそんなワケで、個人的には何と言いますか、非常に遠回りに日本文化の奥深さを実感したんですわ。
 というか、混ぜるな危険というか?
 一つ一つがバラバラの状態でならまぁ「あぁあるね」という感覚の自分ですらここまで纏められるとカオスを感じたのだから、欧米から来たゲストには一体この国の文化がどんな風に伝わったのだか、知りたいような知りたくないような。

 P.S.
 ちなみにコスプレイヤー(絵里・桜ミク・モモ他)と一緒に写真撮影コーナーはWorldWideのお客様(お子様含む←!)に大好評で、大して広くないこの部屋は開放中ずっと大混雑でしたとさ。やっぱこういうコンテンツは強いよね。
 あと、個人的には愛媛の地酒飲み比べが良かった・・・愛媛の地酒なんて全く知らなかったので。

Share

ディスク暗号化に対する最終にして最強の回答登場・・・か?

 物凄い旧聞ではあるが、何度もネタにしている「ディスク暗号化」について最強とも思えるソリューションがHPから登場してしまったので、今回はそのネタをば。

 ◇

 さて、世間ではデータ漏洩やサイバー攻撃に対する興味というか関心は高まってきているが、一方で個人情報保護法をはじめマイナンバー等、最近になってまたストレージ暗号化へのRequireが高まってきているんですな。

 #それでも全体からすればニッチだというツッコミは甘んじて受けるが。

 で、勿論本気エンタープライズの高~いカネをかければストレージ暗号化なんて昔っから出来たワケだが、もっとリーズナブルな選択肢は無いものか、ということで、以前ネタにしたのがSEDとかHBA暗号化。
 ところがSEDについてはSED対応ディスクの入手性と価格、HBA暗号化についてもRAIDと共存出来ない等、どちらもまぁイマイチ感が残ってしまうというか。

 そんな世界に、HPが最終兵器を突っ込んできましたよ。

 「RAID対応」「鍵管理対応」の「フツーのSATA/SASドライブが使える」「カード上のハードウェアでデータ暗号化可能なRAIDコントローラ」という代物を。

 具体的な製品名はHP SmartArray ControllerのP43x、P73x、P83x世代以降と、Host Bus AdapterのH24x。

 これらの製品はデータをまず暗号化してから処理する(ことが出来る)のが最大の特徴で、Cache上のデータも含めて暗号化されている他、米国の暗号化に関わる認証まで取っているというガチの本気仕様。
 勿論暗号化には追加ライセンスキーが必要ではあるが、これも¥(つか$)はそこまで高く無い。普通にSEDとか使うこと考えたら十分におつりが来る。

 何より、ドライブの種類を気にせずとも、全てのデータが暗号化されて書き込まれている上に、普通にRAIDでドライブ故障からのデータ保護まで出来るというのは、これはもう「最終兵器」という感じですよ。

 例えば、最近流行のSoftware Defined StorageやHyper-Converged Systemでもストレージのデータ暗号化は(処理)コストが高いため実装されていないモノが殆どだが、このRAIDカードを使うだけでこの問題も突破出来てしまう。
 この一点だけでも夢が広がりまくりですわ・・・うん。

 ◇

 とはいえ、所詮HP ProLiantのオプションパーツなので構成やサポートに制約があることや、その辺りはまぁ留意点ではある。
 うっかり自作に使おうとしたら、このテのSASカードは特にコンシューマ向けマザーではウンともスンとも言わないのは良くあることだし。

 #更に、HPのBIOS・Firmwareの初期モノはクソというオチも付く。
  後期Firmwareだと問題ないけれど初期Firmwareだとウンともスンとも言わないなんてよくあること。

 更に更にに、HPの12Gbps対応RAIDカードをうっかり自作で使用しようとしてしまった場合一つ物理的なハードルが存在する。それは

 「SASコネクタが独自」

 具体的には「x8 Mini-SAS内部ダブルワイドコネクター」というヤツで、取り敢えずケーブル番号「730603-B21」を買えば一般的なSFF-8087に変換されはするのでサーバ用のHDDケージを持っていればまぁセーフなのだが、そうでないとさて困ったことに。

 ・SFF-8087で繋がるHDDケージを買う
  →一番リーズナブルな選択肢、¥15Kも出せば買える。但し騒音は物凄いことに。

 ・SAS Expanderをケーブル中継器代わりにする
  →騒音がイヤならコレが手っ取り早いが、お値段は結構バカにならない(¥50Kぐらい)。あと、相性問題にも注意。

 ここまでは真っ当なやり方。以下、真っ当でないやり方。

 ・外付ドライブ用SASカードを買い(こちらはさすがに世界標準コネクタなので)、 SFF-8644(Mini-SAS HD) to SFF-8482(信号電源一体コネクタ)という変態ケーブルをケース外からケース内に引き込んで配線する
  →ドライブ台数が8台以下ならある意味アリっちゃアリ。ケーブルがぐるんとしていて見た目ダサいが、USB3.0の黎明期にもあったよねこういうの。

 ・SFF-8087で繋がるHDDケージを買って、バックプレーンだけ取り出してSATA延長ケーブルを挿して使う
  →ノイズという意味で物凄くお薦めしないが、こういう状態を見たことはあるという話。検証ぐらいならセーフ?

 まぁどれを選ぶかは好みの範囲ということで。

 ♯ちなみに最下位モデルのH240を買えば普通のSFF-8087ファンアウトケーブルが使えるが、このカードは要するにHBAだということに注意。Cacheも無いし、型番自体「H」だし、RAID激遅だし。

 ◇

 それと、HP製品なのでサポート契約が無いとクソFirmwareを更新する手段が無い・・・という話は、どうやらSAS HBAについては対象外の模様。
 詳しくはこの辺りを参照。

 >http://h30507.www3.hp.com/t5/Technical-Support-Services-Blog/More-information-on-HP-firmware-availability/ba-p/154861#.Vg-2pitp6_4

 要約するとこんな感じ。

 ・サポート契約無いとFirmwareを提供しないのはProLiant本体のROMだけ。iLOとかIOコントローラは対象外ね。
 ・保証期間が過ぎたらCarePack買ってくれないとFirmwareは提供しないぞ☆
 ・セキュリティ絡みとかはタダで公開するつもりから。

 ということで、ファームウェアのダウンロードは問題ない模様。
 実際、モノは試してでファームウェアのアップデータをダウンロードしてみたところ「HP Passportが必須」「サポートサイトの作りがクソで目的の場所に中々辿り着けない」という以外には問題は無かったので。

 #つーかHP分社化してから更に進んだサポートページのカオス具合はホントどうにかしてくれ。

 P.S.

 余談だがこれらのカードのチップはPMC Sieera製。つまり現行の12Gbps SASチップは本家Adaptecのカードでは有効にされていない暗号化エンジンをチップ内に持っているということ。
 それでも6Gbps世代のMaxCryptoがさくっと販売終了になっていたりする辺り、HBA単体の付帯機能としては全く売れなかったんだろうなぁ・・・と。

Share

UEFI bootでディスクのSerial Noを変えて起動しなくなったら。

 検証用に大量の物理・仮想マシンを並べたりする時によく使われる、クローニングという手法。
 仮想マシンだと特に簡単にコピー出来るので、さくっと出来て嬉しいことが多い反面、気をつけなくてはいけないこともあるワケで。
 そんな中には、従来のBIOS環境だと気にする必要が無かった、UEFI環境ならではのネタもあるワケです。

 そんな中で今回ネタにするのは、割とありがちな「ディスクのシリアルID書き換えたら起動しなくなった」という話。
 自分も初めてやらかした時は「あちゃ~」という感じだったので。

 ◇

 まず、前提。

 状況:

 UEFIで起動する環境でブートドライブのシリアル番号を変更すると起動しなくなる。

 解決策:

 Step1:bcdbootで修理する。
 Step2:それで駄目なら、bootrecで修理する。

 当方が色々やらかした範囲では、ブートドライブのシリアル変更のみならbcdbootの自動修復で100%回復している。
 何も考えずに直してくれるのでこれが一番ラク。
 但し万が一これがコケた時に備えて、後で本来正当なbootrecのやり方もメモっておく。

 ◇

 以下、まずはbcdbootでやる方法。

 1:
 起動がコケてるマシンをWindows Install DVD(またはUSBメモリ等)で起動し、コマンドプロンプトを開く。

 システムによってはInstall DVDよりも起動優先度が高いデバイスが存在する為、必要ならばBIOS(UEFI)画面に入って起動優先度を変更する。
 DVDから起動したらインストールオプションから左下「コンピューターを修復する」を選択し、「トラブルシューティング」→「詳細オプション」→「コマンドプロンプト」。

 2:
 diskpartでWindows SystemのあるボリュームにC:を割り当てる。

 select disk 0
 → list volume
 → 一覧からWindows本体が入っているパーティションの番号をチェックし、select volume 番号
   (例えばselect volume 3)
   大抵の場合Infoに「ブート」と入っている
 → assign letter=C:
 → exit

 3:
 bcdbootでC:から起動するエントリを作成する。

 bcdboot C:¥Windows /l ja-JP

 4:
 DVDを抜いてシステムを再起動する。

 以上。
 実はこのうち3.のC:を割り当てる作業をせず、4.でオプション無のままでbcdbootコマンドを打つだけでも、結構な確率で起動する状態に戻せる。
 とはいえ時々コケることもあるので、ドライブレターを振っておいた方が幸せな模様。

 ◇

 それでは次に、bootrecコマンドを使う場合。
 以下の例は修復フルセット。

 1:
 起動がコケてるマシンをWindows Install DVD(またはUSBメモリ等)で起動し、コマンドプロンプトを開く。

 2:
 diskpartでWindows SystemのあるボリュームにC:を割り当てる。

 3:
 diskpartでBoot PartitionにF:を割り当てる。

 select disk 0
 → list volume
 → 一覧からBootパーティションの番号をチェックし、select volume 番号
   (例えばselect volume 0)
   大抵の場合Labelは「システムで予約済み」、Infoに「システム」と入っている
 → assign letter=F:
 → exit

 4:
 Bootフォルダに入ってbootrecコマンドで再構築する

 F:
 → 環境依存で以下のうちどれか、dir等でBootフォルダを探す
   cd ¥EFI¥Microsoft¥Boot
   cd ¥ESD¥Windows¥EFI¥Microsoft¥Boot
   cd ¥Boot
 → bootrec /fixboot
 → bootrec /fixmbr
 → bootrec /rebuildbcd

 5:
 DVDを抜いてシステムを再起動する。

 ◇

 以上、こんな感じでほぼ何とかなる筈。

 ちなみにマルチブート構成ではrebuildbcdで複数のWindowsが認識され自動でエントリに追加される筈だが、時々取りこぼしも出る模様。
 所詮自動修復なので、その辺りは手修正しましょうということで。

 あと、シリアル書換でなくトラブル対応でも良く出てくるbootrec /fixbootだが、そういう場合はWindows Systemの入っているボリューム(上の例だとC:)がActiveにマークされていることを確認することをお忘れ無く。Systemの入っているボリュームがActiveになっていないとこのコマンドはエラーになってくれるので。

Share

ヘンな名前のファイルが削除出来なくて困ったら。

 超絶今更っちゃ今更ネタなのだが、ちょっとドツボってる場面を見かけたので。

 WindowsのFileSystemAPIはまぁ実に実装がテキトーというか何というかなので、普通にエクスプローラやコマンドプロンプトからは扱えないファイル名のファイルも簡単に作れてしまう。
 まぁそれ自体は兎も角として、世間にはアンインストールしてもそういうファイルを残していくとか、挙げ句テンポラリファイルとしてそういうNGファイル名を使ってる為に、何かの拍子でテンポラリファイルが残ってしまうとアンインストールがエラーになるというヘボ実装のアプリが存在するのであり。

 で、そんなファイルを削除する方法。意外と知られていないらしいので、メモ代わりに書いておく。

 DOS窓を開いて「del ”¥¥?¥ドライブレター:¥フルパス¥ファイル名”」

 ※勿論「¥」は半角で。blogで半角にすると「\」に文字が化けてしまうので。

 ポイントは「¥¥?¥」の部分。
 これはWindowsが持つ特殊パスの一つで、通常使われるpath名展開・正規化エンジンをバイパスするもの。
 なので、通常は正規化されてしまい手が出せなくなるヘンなファイル名やフォルダ名も指定出来るようになる。

 逆に言うと、カレントパスを示す「.¥」等の特殊表記、パス記述での区切り記号(¥)の重複や代替区切り文字の使用(/)等は全てこの正規化エンジンが展開しているので、この指定方法を使うと全てNGになる。

 #なので、スクリプト等で厳密にパス名を検査したい場合に使ったり。

 ちなみに当方が見かけたのはCygwinをテキトーに入れてテキトーに削除しようとしてドツボってた場面。
 「REAME.」(←このファイル名の最後の「.」が問題)なるファイルが残ってしまい、エクスプローラから削除出来なくなる模様。

Share