2013年10月3日木曜日

監視したい。とても。

監視したいんですよ。PCを。
なぜかって?
さあ。

本来PCを監視するっちゅうのは、たとえば無応答の端末にカツを入れたりレバーをすりつぶしたり手羽先をこんがり揚げちゃったりするのが目的。
でももう、肉が胃にもたれるお年頃の四十肩のわたくしにはそんなのどうでもいいわけです。
KFCは28日になると買いに行きたくなりますけど。(肉が減ってクリスピー増えましたね...)

で、まあ、業務用のをいろいろ作ってきた覚えはありますが、はっきり言ってあんなもんいらねえ。
確かに我が家にはサーバやらPCやらがゴロゴロしていますが、死ぬときは音もするしニオイもわかる。
その場にいなくてもアクセスして無応答ならすぐわかりますわな。
(ああ、あのコンデンサの破裂した時のかぐわしさといったら。)

だから、監視対象は死活確認とかそういうんじゃないわな。

グラフ化できるなにか
これだね。見て楽しむ。

原則放置プレイな*nix系OSにはいろいろあるんだけど、windowsが対象となると途端にだるくなる。
そらそーだよね。
ふつう、PCって放置プレイで運用するもんじゃないもんね。私はしているけど。
もっとも、最近じゃMRTGとかもwindows版があるみたいね。

でも核心は
グラフ化できるなにか
コレ。

windowsでもって一番お手軽なソレはタスクマネージャ。
でもこれ1分なんだよねえ。
パフォーマンスモニタ?
うーん。あれもねぇ。。。

せめて1年は記録を参照できないとツマンナイんだなあ。

と、いうわけで、そーゆーツールがrrdtool。こいつはただのデータベースじゃない。
そんなんだったらmysqlでもpostgresqlでもsqliteでもcsvでもいいわけよね。
それに別にround robinじゃなくたって、私が死ぬまでに毎秒記録していても使い切れない広大な二次記憶スペースが手に入る昨今、どおってこたあない。

何がスゴいか。
グラフ化できるなにか。なにか:=rrdtool
DBだけじゃないってことかな。しょうがないにゃあ。

データの管理と可視化を同時に行ってくれる、まさに夢のようなツールなわけです。
そいつにデータをストアしておいて、見たい時にグラフ化されてりゃいいってことになるわけですね。

ま、それのパッケージがMRTGなんですけどね。作者も同じですし。

でも、まあ、私の場合はHotSaNICでもって自宅サーバの監視を長年行ってきていたので(思えば21世紀初頭ですよ奥さん)、そいつに相乗りさせようということで前置きが終わります。

でもって、rrdtoolをHotSaNICからつかうんダヨネとか決定してみたわけですが、これはこれまで通り。ただデータ収集先が1つ増え、windowsになるということです。
HotSaNICそのものはデータを集めてきてrrdtoolに記録をお願いしたり、定期的にグラフを表示するためのホームページ用のグラフをrrdtoolにお願いして作っていただいたりしている(perlの!)デーモンなわけです。

ということは、windowsを監視したいンですけど。というときにすべきなのはwindowsからいかにして情報をせしめるか、というだけの話になるわけです。
収集した後は既存のフレークワークに従ってHotSaNICにお任せすればrrdtoolラッパも作る必要がなくなってみんな幸せになれるわけです。

そこで、PCにはそのサーバへのデータ蓄積・送信機能があれば、サーバがそのデータを収集しに来たタイミングで返事をすればいいという作りにしておけばいいということになります。

ここで、グラフ化したら見栄えがいいデータの選定を行います。

まず温度。CPUとかHDD、GPUなんかの。これは見栄えがいいですよ奥さん。
CPUクロックなんかもいいかもしれませんね。
あと起動時間やメモリ使用状況なんかも見てくれがいいでしょう。

そこで、それらを収集することにします。

とはいえ、CPU温度・・・いきなり難問ですね。
OSはそういったことには関心がないようで、パフォーマンスモニタでも収集できません。

では、ということで外部ツールを探してみると、どれもこれも・・・と思ってvista導入時はやめちゃったんでした、わたくしは。
2007年のことでした。
しかし、今回は違いました。

http://openhardwaremonitor.org/
Open Hardware Monitor

このようなツールが見つかりました。
これのなにがスバラシイか。
それは、先ほど列挙した「グラフ化したい」項目について常に簡単に取得できる仕組みが整っていたのです。
具体的には、WMI(Windows Management Instrumentation)という仕組みを通じて、このアプリケーションが収集したデータを取得できる、という点において、キラキラ光っているわけです。
というのは、WMIを通して、ネットワークトラフィックやCPU利用率、DISKIOなどのデータは取得できることはわかっていたからです。
つまり、問い合わせ先を統一できるということです。

BMI?標準体重?

いやいや、違います。
select文一発でなんだかよくわかんねえデータをとれちゃうんだぜ、という仕組み(WMI)がもともとwindowsにはあって、そこにCPU温度などのデータを公開してくれるヤツなんです。

このアプリさえ起動しておけば、あとはWMI経由で情報を取得して問い合わせ先に教えてあげるツールがあればそれで目的は達せられるというわけです。なんてスバラシイ.

しかし、残念ながらわたくしの環境ではHDDの温度がこのツールでは収集できませんでした。
そこらへんに転がっている文献ではWMI経由でSMART情報が取得できるとありますが、できませんでした。
一番壊れやすいHDDの温度管理情報は、グラフ化するだけでもかなり有用な情報です。
それが取得できないのはどういうことなのか。
 じゃあ、ってんで、speedfanやら類似のツールを試してみても、やはり取得できていません。
OpenHardwareMonitorでも取得できていません。
 
そこで、OpenSourceのありがたさ。
OpenHardwareMonitorのソースをとりよせて眺めてみると、アラC#。
四十肩にはツライよ。
ほとんどこの言語を使ったことがなかったのですが、眺めていると、なんてこたあない、普通にDeviceIoControl()で取得していました。しかも、ド定番な方法。

まさかとは思うけど、C#だとおかしいのかな?と思って自分でCで書いて実行すると同じように取れない。うーん。

でもソースがあるんだから、と、よくよく眺めてみると、ド定番な方法のほかの方法を試していません。
たとえばATA PASS THROUGHとか、SCSI_PASS_THROUGHとか。

もしかして、、、とおもって、そこまでやっていそうなsmartmontoolsをダウンロードして実行してみると、見事取得に成功しました。

結局、これもまたsmartmontoolsがopen sourceなのでコードを追ってみると、まさにATA_PASS_THROUGHな時に成功してSMART情報が読めていたのでした。
さすがだぜ!smartmontools!!

ここで一つの選択肢ができました。
OpenHardwareMonitorを改造して運用するか、smartmontoolsとOpenHardwareMonitorを併用して行くか、という選択肢です。

結果から言うと、サーバからの問い合わせに回答するプログラムを作り、その中で問い合わせ先を振り分ける、という実装にすることにしました。
というのは、いつOpenHardwareMonitorやOSそのものが対応するかもわからないし、改造版を動かすというのは改造元のアプリがアップデートされた場合のキャッチアップがだりぃということが理由でした。動いてんだからキャッチアップする理由もねぇんだけどな。気分だわな。

ということで。ここでSNMPを利用してWMIを参照する、とかいうだるい手法を採用する目がつまれました。
SNMPなみなさんは汎用性を目指すあまり重いしね。

やるこたあ一緒なんだけどね。エージェントが今回作るつもりのプログラムで、マネージャがHotSaNICなだけだけだからね。

つづく。

不幸になりやすいwin8の自動ログオン化

サインインですか?そうですか。
管理者アカウントの自動ログオン化時の注意点。

なお、自動ログオン化を行うに当たって、管理者権限を持つアカウントがないシステムが出来上がる可能性がありますので、あらかじめ作業の前にもう一つ管理者アカウントをこさえておくと安心です。
管理者権限を持つアカウントがなくなった場合、復旧できません。
十分注意してください。
誰も助けられる人はいませんよ。
  1. ファイル名を指定して実行で
     netplwiz
    を起動する。
  2. 自動ログオンさせたいユーザのグループを覚えるかメモしておく。
    サインインですか?そうですか。
  3. 自動ログインさせたいユーザを選択してからプロパティを開き、ラジオボタンを「管理者」にして更新。これを確認しないままだと、一般ユーザにされてしまう。
    少なくともwindows8 pro 64bit版のインストール直後に行った検証では何度やっても確実に一般ユーザにされた。
    その後は不明。windows updateかなんかで修正されているかもしれない。
    サインインですか?そうですか。
  4. 元のタブに戻り、ユーザが確実にAdministratorグループに属していることを指さして声を出して確認する。
  5. 一番上のチェックボックス「ユーザーがこのコンピューターを使うには、ユーザー名とパスワードの入力が必要」からチェックを外す。
  6. OKを押してパスワードを設定する。
    この際、別のパスワードを設定してしまうとアカウントのパスワードがクリアされてしまうため、ネットワークアクセス時に空パスワードを許している場合を除いて変更しないこと。
  7. コントロール パネル\すべてのコントロール パネル項目\管理ツール\コンピューターの管理\ローカル ユーザーとグループ (ファイル名を指定してlusrmgr.mscを実行しても同じ)
    で項番(2)で覚えておいたグループに再振り分けする。
    (今回の検証では何度やってもグループの一部が削られたため)

あまりにユーザビリティが悪いので気軽にやってはいけない。うっかりミスを誘うようにできているものと覚悟したほうがよい。
というより、管理者アカウントで自動ログインするってのもどうかともおもうけど。
一応検証結果の記録として。

ああ、サインイ(r

2013年10月2日水曜日

windows 64bit版に32bit版アプリの参照するレジストリの保存先

恥の記録。

windows 64bit版で32bit版アプリの参照するレジストリの保存先はHKLMなら

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

になる。
したがって、64bitOSでレジストリの内容をそのままリストアさせようとするとHKEY_LOCAL_MACHINE\SOFTWARE配下にそのまま登録されてしまうため、32bitアプリから参照できない。

言われてみればまことにごもっともで、32bitOSなんて使ってるの自宅のPCだけだったこともあって、思いつくまで悩んだ。

対応:
エクスポートされたファイルを置換するか、32bit版regedit.exeやreg.exeも用意されているので、そちらを使ってインポートする。

64bit版のregedit.exe,reg.exeは%systemroot%system32にあって、32bit版のそれは%systemroot%syswow64にある。

歴史的経緯とはいえ・・・

バックアップとリストア失敗

コントロール パネル\すべてのコントロール パネル項目\Windows 7 のファイルの回復

こいつを使うとベアドライブバックアップができると聞いて早速試す。
vistaではこういう類の奴はネットワークに対応しておらずに残念だったけど、windows7からネットワークに標準で対応とうれしい限り。

vistaやwindows7同様、バックアップイメージファイルは仮想ディスク形式なのは変わっていなかったため、最悪の場合でもファイル単位で取り出すことができる。こりゃいいや。

じゃあリストアしてみよう。
はい。できませんでした。

結論から言うと、UEFI経由で起動したwindows8上で「Windows 7 のファイルの回復」の「システム イメージの作成」(ややこしい)を用いて作成したバックアップイメージのリストアは、UEFI経由で起動したインストールDVD(システム修復ディスク)からでなければ行うことができない

たったこれだけの結論を得るために苦戦した。
ウラシマってレベルじゃねぇな。

これはwindows8の問題ではなく、UEFIを採用したシステムへインストールできるwindowsすべてに共通する問題なんでしょう。

恥の記録をしておこう。

経緯:
  1. リストアのためにインストールDVDから起動する必要があるといわれる。
  2. 起動が早すぎて?ブートメニューが出ない。
  3. よくよく調べてみるとwindows8は初期状態では「シャットダウン」を選んでも、実はハイバネーションを行う。言い換えでユーザを翻弄する作戦に見事に引っかかった。
    昔Libretto70で苦労した思い出がむくむくとよみがえってくる。
    ブートメニューを出すだけならば回避策はいろいろあるようだが、ハイバネーションする必然性が全くない。むしろ起動トラブルの元だし。退避先のファイルが壊れたらどうなるかわからない。windows8のことだから「初期化すりゃいいんじゃね?」とか鼻であしらわれて悲しい気分になりたくない。
    それにメモリ量に相当する巨大なハイバネーション用のファイルも無意味に居座ることになる。
    レジュームなんぞしなくても十分に起動は早いよもっと自信持てよ。
    したがって、この無意味な労働からwindows8様を開放して差し上げる。
    なお、従来の意味でのシャットダウンをwindows8様に行っていただくには:
    コントロール パネル\すべてのコントロール パネル項目\電源オプション\「電源ボタンの定義とパスワード保護の有効化」
    にて、
    シャットダウン設定 → 高速スタートアップを有効化
    のチェックを外して差し上げる。
  4. なんとかこれでやっとブートメニューを出せるようになっても「Windows Boot Manager」しか選べない(DVDが選べない)
  5. どうしてもわからなかったのでマザーのサポートに問い合わせると、BIOSにCSMという項目があるからそいつを有効にしなさい、とのありがたい仰せ。
    ヴォーコエー、DVDドライブも現代ではレガシーなのかBDじゃないとだめなのか!?
    早速その項目を見てみると、レガシーデバイスを有効にするとある。
    要するにこれを無効から有効に変更してみると、DVDから起動する選択肢を選ぶことができ、実際に起動もした。さすがサポート!心強すぎる。
  6. リストア用のプログラムも無事起動し、バックアップ元ファイルも指定できたので、いざリストアをしようとするとEFIがどうのこうのとおこ。激おこ。
    このシステムイメージはEFIを使ったコンピューターで作成されましたが、このコンピューターはBIOSを使用しています
    リストアできなかった。
UEFIってのはさっき怒られたEFIとやらの発展形だそうで。
だから何だと聞いてみても何の解決にもならないんだけどね。
実は買ったマザーはUEFI対応なんだそうで。

ただディスクイメージを書き戻せばいいんだよ。
ひたすら1バイトづつ丁寧に書き戻せばいいんだよ。
やってみたうえでダメならわかるけど、やる前から出来ないなんて言うんじゃないよ!!
何の解決にもならないんだけどね。こんなこと書いても。

長いけど項目わけてもあれだからこのまま続けてみる。

まず、UEFIとはなんぞや、というところから調べてみても、ディスクイメージを書き戻すにあたってUEFI経由で書き戻すプログラムが起動していなければならない理由を見つけることができなかった。むちゃくちゃ端折って言えばEFI用のブートファイルがEFI専用パーティション(FAT32)のどっかにありゃいいよ、ってのとパーティション構成が(もっと言えば順番が)あってりゃいいよ、ということだと理解した。

NVRAMにアクセスできないのかな?
出来なくて結構なんだけどな。
EFI用のパーティションもバックアップされているんだから。

リストアプログラムがリストアさせないのは、技術的な問題ではなくセキュリティ的な問題や政治的な問題から抑止しているのかも(かっぱらってきたイメージをそのまま焼かせない、とか、別マシンにリストアしたら動かねえよ、という苦情になんか対応したくない、とか)。
XPぐらいのころからつづくMS様の愚民政策のよーな気がしてならないひがみやさん。
ブートシーケンスも隠すようになって久しいし、何かトラブルが出ても理由は明示されないで、できません。つかえません。管理者にお問い合わせください。の一点張りのケースが増えている気がしてならないんだよねえ。。。

まあ、話は飛びすぎたけど、無理やりリストアするにはどうするか、という問題に対する解決への糸口にはなりそうだけど、OSから再インストールしたほうが早そうだわ。

ただし、この場合はハードウェア構成も変わっていない。
バックアップしてあるんだからそれをそのままリストアしたい。

再インストールとなると、アプリのDVDやらををとっかえひっかえしてインストールするのも大変だし、システムや各アプリの設定だって普段使ってる状態に戻すまでとても時間がかかるし。
リストアが必要って状況はもうかなりへこんでいる状況のはずだから、そんな忍耐力を鍛えるような修行をしたくない。
ていうかこないだvistaからの移行でやったばかりだからすぐバックアップとリストアの検証をしているわけで。

そこで手順を見直してみる。
どうも経緯の項番(5)が引っ掛かる。
レガシーってことはBIOSから起動ってことなんだよねきっと。
リストアプログラムのメッセージの日本語がおかしいんで(現にエラーメッセージがいうところの「システムイメージはEFIを使ったコンピューター」に対してリストアをしようとしているわけで)、このコンピュータはBIOSがどうのこうというよりBIOS経由で起動した場合はリストアできないというように解釈してやると、CSMを有効にしてはいけない、ということになる。

すると、どうやったらUEFI経由でDVDからブートすりゃいいの?という経緯の項番(4)に戻る。
今になって思えば、確かにDVDからは起動できたけど、BIOS経由ではなくてUEFI経由でDVDから起動する方法を問い合わせれば、違う回答が得られたんじゃないかと思う。
そのころにはまだUEFIの知識もなく実際にDVDから起動できているわけだし、聞きようもなかったんだけどね。

CSMを有効にしたり無効にしたり、試行錯誤しているうちに、ようやくわかった。
インストールDVDを入れた状態のままシステムをブートすれば、UEFI経由でインストールDVDを起動元に選択できるということに。
たったそれだけ。

そして実際、UEFI経由で起動したインストールDVDからリストアできた。

ブートメニューを出してから、インストールDVDを入れる、という習慣だったため、ブートメニューが表示されるまでにDVDが認識できてればUEFIからのブートが可能になるなんて思いもしなかった。
これが分かった瞬間、とてもぐったりした。

別の不安もよぎる。
DVDドライブの立ち上がりが遅い場合、ブートメニューが表示されるまでにドライブがスタンバイできない場合、UEFI経由でインストールDVDを起動できないってことだよね。。。

そして後日、windows8.1previewにはwindows 7 のファイルの回復がないということを知ったのであった。

めでたしめでたし。

(さらにその後、定期バッチにはできないけど8.1製品版には手動では行えるツールがつくという話も風のうわさで聞きました。wbadminも残るとか。
まあ、Microsoftアカウントとかいうのは持ってないし、当分縁はなさそう。)

Windows8のUACの切り方

コントロール パネル\システムとセキュリティ\管理ツール\ローカルセキュリティポリシー
にて
ローカルポリシー → セキュリティ オプション →
   ユーザー アカウント制御: 管理者承認モードですべての管理者を実行する
   を
   無効
にする
(再度有効にする際にはコントロール パネル\ユーザー アカウントとファミリー セーフティ\ユーザー アカウント の「ユーザーアカウント制御設定の変更」もチェックすること)

理由

PCがマザーごとHDDも巻き込んで盛大にぶっ壊れた。
たまたまサーバも電源が死んでいてバックアップが取り出せない状態にあった。

いやになって一気にサーバとPCを買い換えた。でもまだ1台死んでる。
ついでにGbEHUBもぶっ壊れていた。
サーバのほうはすぐ復旧できた。こういう時はLinuxみたいなシンプルな構成は助かるなあ。

PCのハードウェアの進化があまりに激しいので、そのままバックアップをリストアしても動くわけがないことは目に見えていた。
案の定、vista導入時にPEで作っておいたリストア用DVDも起動できない。
ディスクIO用の適切なドライバがないからだろう。
やけくそでOSをvista 32bitからwindows8 64bitにしてみた。

あまりの勝手の違いに魂消た。私のPCの知識は2007年で止まっていた。
vistaからwin8という負け進路を選択した自分を誇らしく思った。
ついでに帰ってくることにした。

自分で管理するのが嫌だから間借りすることにした。
お世話になります。