High DPI Windows 8 Cursor Setで作成したカーソルファイルの導入と設定を自動化するツールとして、High DPI Cursor Changerを作成しました。Windows 8でDPIを200%以上に上げたときにカーソルの輪郭が汚くなる問題に対応するものです。
DPIを200%にしたときの見た目はこんな感じです。標準のカーソルに似せていますが、全てスクラッチで、個人的に気になった点は変えたりもしているので、微妙に違いがあります。
現状、DPIを200%以上にしている人は少ないかもしれませんが、おいおい需要が増えてくるものと予想して。
プロジェクトサイト: High DPI Cursor Changer 英語 / 日本語 at SourceForge.net
実行ファイル from SourceForge.net
2012/12/29
2012/12/21
ReadyNASにSSD
大容量SSDの価格低下もそこそこ進んでいるので、先々はNASにもSSDを入れることを考えて、ReadyNAS Ultra 2にIntel X25-M G1を入れてみるテスト。
HDDと入れ替えると、HDDと同様にRAIDiatorがインストールされて(X-RAID2を指定)普通に起動。FrontViewからSSDの情報も見られる。
温度は1C/33Fと出ているが、RAIDar Protocolで返ってくるのを見ると-1C/31Fで、食い違っていた。
ここからSMARTも一応表示される。
が、この中に温度はない。また、寿命に関係するAvailable Reserved SpaceとMedia Wearout Indicatorは項目には出ているが、正しい値は取れてない。
このSMARTはPCに接続してCrystalDiskInfo、SSD Toolbox、Smartmotoolsで見たときには、それぞれこんな感じ。
先に温度について考えると、一見して明らかなように、このSSDはSMARTのデータに温度(IDは16進数でC2、10進数で194)を含んでいない。SSDの中には0Cと返すものもあるようだが、このSSDはそもそも温度のデータを返さない。
したがって、ReadyNASが示す1C/33Fあるいは-1C/31Fはダミーの数字で、それもたぶん-1C/31Fの方が本来の数字で(コードの世界では該当するものが存在しないときに-1を返したりする)、その摂氏のマイナス符号を認識し損ねて1Cと取った上で華氏をそれに合わせて計算したのが1C/33Fではないか、という気がする。
意外だったのはReadyNASがIntelのSSDに特有のAvailable Reserved Space(E8)とMedia Wearout Indicator(E9)を認識したことで、このIDが示すもののデータを持っていなければこの名前は出てこないはず……。
と、ReadyNASではたぶん字数を減らすために「e」を抜いて「Available Reservd Space」となっているが、上にある「Reallocated Sector Count」は字数が多いにもかかわらずそのままで、少し不自然。一方、この「Available Reservd Space」はSmartmontoolsの表記と同じで、「Intel Internal」も同じ。ということから、ReadyNASは標準的な項目以外はSmartmontoolsと同じデータを利用しているのではないか、という推測を立て得る。
それはともかくとして、値の方は出してくるものを間違えていて、意味を成してないわけだが。この当たり、各ベンダー独自の仕様に合わせてデータを処理するようにしないと意味のある数字は拾い出せない、という当然のことを示している。
NASの動作としてはごく普通で、スピンダウン時でもスピンアップを待つことなくすぐにアクセスできる(SSDの場合にスピンダウンが実際にどう動いているのかは未確認)。
という意味で普通に使う分には問題なさそうだが、SMARTの監視は実質的にできず、各ベンダーの仕様がばらばらである限り、NAS側の対応もなかなか進まないような気がするので(add-onでも出てくれば別だが)、SSDの状態が気になるなら時々外してPCに接続してチェックするしかないと思う。
[追記1]
そういえばSmartmontoolsはたいていのLinuxディストリビューションに含まれている……ことを思い出して、ReadyNASのSSHアクセスを有効にしてログインすると、しっかりRAIDiatorにも入っていた。
これでSMARTを見てみると、PCとの接続時と同じように表示される。
したがって、ReadyNASに入れたままでも、これで定期的にチェックするようにすればSMARTの値を監視できることになる。
以上、後はしいて言えばTrimがどうなるかという点を除けば、ReadyNASでSSDを使う上での障害は実質的になさそうということが分かった。
[追記2]
WindowsのクライアントPCからSMARTの値をチェックするためのスクリプトを書いてみた。PuTTYを使ってSSHアクセスし、smartctlを実行して、結果からSMARTの目的の項目を拾い出してCSV形式で保存する。
手順としては、
1. SMART
HDDと入れ替えると、HDDと同様にRAIDiatorがインストールされて(X-RAID2を指定)普通に起動。FrontViewからSSDの情報も見られる。
温度は1C/33Fと出ているが、RAIDar Protocolで返ってくるのを見ると-1C/31Fで、食い違っていた。
ここからSMARTも一応表示される。
が、この中に温度はない。また、寿命に関係するAvailable Reserved SpaceとMedia Wearout Indicatorは項目には出ているが、正しい値は取れてない。
このSMARTはPCに接続してCrystalDiskInfo、SSD Toolbox、Smartmotoolsで見たときには、それぞれこんな感じ。
温度
先に温度について考えると、一見して明らかなように、このSSDはSMARTのデータに温度(IDは16進数でC2、10進数で194)を含んでいない。SSDの中には0Cと返すものもあるようだが、このSSDはそもそも温度のデータを返さない。
したがって、ReadyNASが示す1C/33Fあるいは-1C/31Fはダミーの数字で、それもたぶん-1C/31Fの方が本来の数字で(コードの世界では該当するものが存在しないときに-1を返したりする)、その摂氏のマイナス符号を認識し損ねて1Cと取った上で華氏をそれに合わせて計算したのが1C/33Fではないか、という気がする。
寿命
意外だったのはReadyNASがIntelのSSDに特有のAvailable Reserved Space(E8)とMedia Wearout Indicator(E9)を認識したことで、このIDが示すもののデータを持っていなければこの名前は出てこないはず……。
と、ReadyNASではたぶん字数を減らすために「e」を抜いて「Available Reservd Space」となっているが、上にある「Reallocated Sector Count」は字数が多いにもかかわらずそのままで、少し不自然。一方、この「Available Reservd Space」はSmartmontoolsの表記と同じで、「Intel Internal」も同じ。ということから、ReadyNASは標準的な項目以外はSmartmontoolsと同じデータを利用しているのではないか、という推測を立て得る。
それはともかくとして、値の方は出してくるものを間違えていて、意味を成してないわけだが。この当たり、各ベンダー独自の仕様に合わせてデータを処理するようにしないと意味のある数字は拾い出せない、という当然のことを示している。
2. 評価
NASの動作としてはごく普通で、スピンダウン時でもスピンアップを待つことなくすぐにアクセスできる(SSDの場合にスピンダウンが実際にどう動いているのかは未確認)。
という意味で普通に使う分には問題なさそうだが、SMARTの監視は実質的にできず、各ベンダーの仕様がばらばらである限り、NAS側の対応もなかなか進まないような気がするので(add-onでも出てくれば別だが)、SSDの状態が気になるなら時々外してPCに接続してチェックするしかないと思う。
[追記1]
そういえばSmartmontoolsはたいていのLinuxディストリビューションに含まれている……ことを思い出して、ReadyNASのSSHアクセスを有効にしてログインすると、しっかりRAIDiatorにも入っていた。
これでSMARTを見てみると、PCとの接続時と同じように表示される。
したがって、ReadyNASに入れたままでも、これで定期的にチェックするようにすればSMARTの値を監視できることになる。
以上、後はしいて言えばTrimがどうなるかという点を除けば、ReadyNASでSSDを使う上での障害は実質的になさそうということが分かった。
[追記2]
WindowsのクライアントPCからSMARTの値をチェックするためのスクリプトを書いてみた。PuTTYを使ってSSHアクセスし、smartctlを実行して、結果からSMARTの目的の項目を拾い出してCSV形式で保存する。
手順としては、
- ReadyNASに「Enable Root SSH Access」Add-onをインストールしてSSHアクセスを可能にする。
- PuTTYをダウンロードして適当なフォルダーに置く。使うのはコマンドライン用のPLINK.EXE。
- 以下の内容のバッチファイルを作成して、ファイル名はここでは「smartctl.bat」として同じフォルダーに保存する。
plink nas-XX-XX-XX -l root -pw netgear1 ^ "smartctl -A -f brief /dev/sda" > result.txt
- nas-XX-XX-XXはReadyNASのホスト名かIPアドレス
- -pwの後ろは管理者パスワード
- /dev/sdaは1番目のディスクの意味
- 以下の内容のVBScriptを作成して、ファイル名はここでは「checksmart.vbs」として同じフォルダーに保存する。ATTRIBUTESで目的の項目を指定。
Option Explicit Dim FILE_BAT 'Batch file to execute smartctl through SSH Dim FILE_RLT 'File to store result of smartctl temporarily Dim FILE_RCD 'File to record (append) result of smartctl FILE_BAT = "smartctl.bat" FILE_RLT = "result.txt" 'Must be the same file in batch file FILE_RCD = "record.csv" Dim ATTRIBUTES 'SMART attributes (separated by space) ATTRIBUTES = "Available_Reservd_Space Media_Wearout_Indicator" 'Execute smartctl through SSH Dim objShell Set objShell = WScript.CreateObject("WScript.Shell") Dim result 'Return value to avoid error in using Run method result = objShell.Run(FILE_BAT, 0, True) Set objShell = Nothing 'Process result of smartctl Dim strBuf Dim objFSO Dim objFile Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(FILE_RLT) strBuf = objFile.ReadAll Set objFile = Nothing Set objFSO = Nothing Dim strLines strLines = Split(strBuf, vbLf) Dim strSer 'Array to hold names of attributes strSer = Split(ATTRIBUTES) Dim strVal 'Array to hold values of attributes ReDim strVal(UBound(strSer)) Dim objRegExp Set objRegExp = New RegExp objRegExp.Pattern = " \d{3} " 'Pattern of value of attributes objRegExp.IgnoreCase = True objRegExp.Global = True Dim i Dim j For i = 0 To UBound(strLines) For j = 0 To UBound(strSer) If 0 < InStr(1, strLines(i), strSer(j), 1) Then Dim objMatches Set objMatches = objRegExp.Execute(strLines(i)) If 0 < objMatches.Count Then strVal(j) = objMatches(0).Value End If Set objMatches = Nothing End If Next Next Set objRegExp = Nothing 'Record result of smartctl Dim strRec strRec = Now() & "," For j = 0 To UBound(strVal) strRec = strRec & Trim(strVal(j)) & "," Next Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Not objFSO.FileExists(FILE_RCD) Then 'If first record, add header line strRec = "Date," & Join(strSer, ",") & "," & vbCrLf & strRec End If Set objFile = objFSO.OpenTextFile(FILE_RCD, 8, True) objFile.Write(strRec & vbCrLf) Set objFile = Nothing Set objFSO = Nothing
(smartctl.batの内容をFILE_BATの部分に直接書いても良さそうなものだが、そうするとなぜかrecord.txtがホスト側に作成されてしまうので、分けた。)