2013/04/29

RDM経由でSATA認識、あわよくばWindows起動

VMWare Viewがアップグレードされ、VMWare Horizon Viewとなっている。
http://www.vmware.com/jp/products/desktop_virtualization/view/overview
ようやくまとまった時間がとれるようになったので、Viewの検証しようと思っていたが、
昨年末から自宅環境の構成を放置していたので、すっかり構成内容を忘れていた。

そして、ローカルサーバに接続しているSATAディスクに対し、RDMで利用できないか模索していたまま、中途半端にそのまま放置していたのを思い出した。

SATAでRDM
年末に、共有ディスク用のQNAP NASを購入したので、仮想OSはそちらに保存することとし、
ESXiデータはUSBフラッシュメモリ上に保存し、メモリを刺すだけでESXiで起動できるようにしている。
structure
ここで問題となったのは旧型機のML110はシングルコアの為、VMWareESXi5以降を起動させることができない点だ。
せっかく共有Diskを購入したのに、vMotionなどの利用に制限がかかるのはちょっと残念。
そんなこともあり、ESXiが入ったUSBメモリをもう一個用意し、
普段利用しているメイン機(192.168.11.2)に指し、年季の入った古いノートPCにvSphereClientをいれることで、検証環境を作った。


さて、これで一応の環境は整ったものの、検証するたびにメイン機が利用できなくなるのも面倒くさい。
メイン機をESXiで起動させ、共有Diskを見ると同時に、ローカルSATAを認識させ、さらにはRDMをつかって仮想OSとして普段使っているWindowsOSも起動できないか、、と考えたのである。
a
パススルーでSATAを認識させる方法もあるのだけど、
結局それだとSATAをVMFSにフォーマットして入れなおしが発生しちゃうので、あまりよくない。
やはりRDMで現在利用しているWindowsOSをそのまま残しつつ、
仮想化変換などの面倒な作業もとっぱらってそのまま利用できるのが理想。


2013/04/20

Windows8ガジェット

Windows8からは、デスクトップガジェットが廃止されている。
Vistaからはじまったこの機能、なかなか短命である。
今まで特に必要とはしていなかったけれど、
CPUやネットワークなどのメーターガジェットはコンパクトかつ視認性にすぐれているので
なきゃないで困る。
Googleデスクトップもサービス廃止されているし、あまりこの分野はもう発展性はないのかもしれない。


ともあれ、無理やりWindows8にガジェット機能をもたせるためには、
8GadgetPack というソフトがあるようだ。
http://filedir.com/windows/desktop/8gadgetpack-download-3552099.html


色々なガジェットがあらかじめ付いているみたいだけれど、
とりあえずシステム状態が見れるものを追加。
しばらくどんなものか使ってみよう。


2013/04/19

VCP510証明書が届いた


VCPの資格証明書が米国から届く。
はじめ不在者届けできていたから、国際郵便での届けに何事かと思ったさ。

試験合格は3月初旬だったけれど、なんだかんだで届くのに1ヶ月はかかる模様。
なおテスト勉強の知識のみで実技が伴ってないので、またぼちぼち動かしていこう。

Windows7 USBメモリ不可設定

USBメモリの利用不可設定の方法はいくつかあるが、
僕はグループポリシーよりも いろいろカスタマイズができるスクリプトを利用した制御のほうが
好き

@IT USB大容量記憶装置ドライバを無効にする
http://www.atmarkit.co.jp/fwin2k/win2ktips/629usb2/usb2.html

上記に書かれている通り、
KEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\USBSTOR の
Start の値を4に変更するとUSBメモリを指しても認識しなくなる。

ただし、新しいメモリを刺した場合、USBメモリのドライバを取ってくるときに、上記のレジストリはクリアされ、(値が3に戻る)再び利用可能となってしまう。

対応方法として、%SystemRoot%\inf\ 配下の以下の2つのファイルのアクセス権を無効にする必要があるらしい
UsbStor.inf
UsbStor.pnf

ただ、僕のWindows7環境では上記のアクセス権を無効にしても、相変わらずドライバはインストールされ続け、USB利用も可能になってしまった。なので以下のファイルのアクセス権を無効にした。
C:\Windows\System32\DriverStore\INFCACHE.1

上記ファイルのSystem、Everyoneのアクセス権をフルコントロールで拒否することで、
ドライバのインストールは試みるものの失敗するようになり、USBメモリを利用できない動きが確認できた。

あとはどのように上記アクセス権を変更するかだが、
Windows7の場合icaclsコマンドがあるので、それを利用する。
ただし、そのままアクセス権変更を実施してもUACが邪魔するので、解除した上で実行する必要がある。
また、一般ユーザーでは変更権限をもたないので、GPOのスタートアップスクリプトを利用して展開するのが理想。

以下、スクリプト
nonusb.vbs
<# 


On Error Resume Next
'listがoffの場合には、'System権限、Users権限をなくすスクリプト。
'スタートアップによる実施が必要

Dim objWMI, objShell, osInfo, os
Dim objWsh, objNetwork, objFS, objTS
Dim CompName, objFile, host

Set objWsh = WScript.CreateObject("WScript.Shell")
Set objNetwork = WScript.CreateObject("WScript.Network")
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")

' Vistaかどうかチェックし管理者権限に昇格させる
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
    Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set osInfo = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
  
    For Each os in osInfo
        If left(os.Version, 3) < 6.0 Then exit do
    Next
    
    ' 引数付きでwscriptを管理者権限で再実行
    Set objShell=CreateObject("Shell.Application")  
    objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " uac","","runas",1
    WScript.Quit
loop


CompName =  objNetwork.ComputerName   'コンピュータ名を変数に保存
objFile = "usblist.txt"
Set objTS = objFS.OpentextFile(objFile)


Do Until objTS.AtEndOfStream
 List = objTS.readline
' WScript.Echo host
'カンマで区切ったものを配列に入れる
 List_Item = Split(List,",")
 Host = List_Item(0)
'大文字、小文字の両方で利用可能にする
 oomoji = Ucase(Host)

 If host = CompName OR oomoji = CompName Then

  Select Case List_Item(1)

  Case "ON","on"
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /reset")
   objWsh.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", "3","REG_DWORD"
  Case "OFF","off"
   objWsh.Run("cmd /c takeown /F C:\Windows\System32\DriverStore\INFCACHE.1 /A")
   WScript.sleep(100)
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /inheritance:d")
   WScript.sleep(100)
   objWsh.Run("cmd /c icacls C:\Windows\System32\DriverStore\INFCACHE.1 /deny system:F /deny users:F /deny everyone:F")

   objWsh.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", "4","REG_DWORD"

  End Select

 End If
Loop

usblist.txtを用意し、
PC名,off
PC名,on
と書かれたリストを用意し、任意のPCがonの場合はUSB利用許可、offの場合は不可となるようにする。