XenServer VSS Providerの登録手順
以下に、XenServer 5.6を使用した場合の「XenServer VSS Providerのインストール手順」について説明します。
- コマンドプロンプトを起動します。
- %ProgramFiles%\Citrix\XenTools\install-XenProvider.cmdを起動します。
- サービスアプレットで、以下のサービスが開始されていることを確認します。
- 「Volume Shadow Copy」サービス
- 「Virtual Disk Service」サービス
- 「XenVssProvider」サービス
- 「Citrix Tools for Virtual Machines Services」サービス
XenServer Windows GuestにおけるVSSコンポーネント
以下に、XenServer 5.6を使用した場合の「スナップショットの仕組み」について説明します。
- リクエスタ
- Volume Shadow copy Service
- VSS Provider
- ライタ
前項の手順で起動された「Citrix Tools for Virtual Machines Services」サービスが本役割を担います。実行モジュールは"%ProgramFiles%\Citrix\XenTools\XenServices.exeです。
Windows OSにバンドルされている「Volume Shadow copy Service」を使用します。実行モジュールは「%SystemRoot%\System32\vssvc.exe」です。
「XenVssProvider」サービスが本役割を担います。COM+サービスアプリケーションとして実装されており、実行モジュールはdllhost.exe のコンテキストにてロードされる「%ProgramFiles%\Citrix\XenTools\XenVssProvider.dll」です。
Microsoft SQL Serverなど、VSSに対応したアプリケーション。VSSからの通知により、シャドウコピーVolumeの作成中に発行されたI/OはVolSnap.sysでキューイングされます。
デバッガから見たVSSドライバスタック
ここではVolumeスナップショット後に作成されたShadow Copy Volumeを確認してみます。
- VolSnap.sysで関連情報を確認します。
- VolSnap.sysが作成したデバイスオブジェクトが4つあることが確認できます。オリジナルのDisk Volumeが2つと作成済みのShadow Copy Volumeが2つ存在します。
- VolSnap.sysのドライバ初期化時に登録されているDispatchルーチンを確認します。
IRP_MJ_CREATEによりvolsnap!VolSnapCreate()関数が呼ばれ、この関数にてLive Volumeに対するShadow Copyが作成されるであろうことが想像できます。
kd> !drvobj volsnap 7 Driver object (853aeda8) is for: \Driver\VolSnap Driver Extension List: (id , addr) (f73ad058 853ae990) Device Object list: 851a4030 851a5368 852b0b28 852af220 DriverEntry: f73c266b volsnap!GsDriverEntry DriverStartIo: 00000000 DriverUnload: 00000000 AddDevice: f73ad058 volsnap!VolSnapAddDevice Dispatch routines: [00] IRP_MJ_CREATE f73a8896 volsnap!VolSnapCreate [01] IRP_MJ_CREATE_NAMED_PIPE f73a7070 volsnap!VolSnapDefaultDispatch [02] IRP_MJ_CLOSE f73a7070 volsnap!VolSnapDefaultDispatch [03] IRP_MJ_READ f73a086a volsnap!VolSnapRead [04] IRP_MJ_WRITE f73a10c8 volsnap!VolSnapWrite [05] IRP_MJ_QUERY_INFORMATION f73a7070 volsnap!VolSnapDefaultDispatch [06] IRP_MJ_SET_INFORMATION f73a7070 volsnap!VolSnapDefaultDispatch [07] IRP_MJ_QUERY_EA f73a7070 volsnap!VolSnapDefaultDispatch [08] IRP_MJ_SET_EA f73a7070 volsnap!VolSnapDefaultDispatch [09] IRP_MJ_FLUSH_BUFFERS f73a7070 volsnap!VolSnapDefaultDispatch [0a] IRP_MJ_QUERY_VOLUME_INFORMATION f73a7070 volsnap!VolSnapDefaultDispatch [0b] IRP_MJ_SET_VOLUME_INFORMATION f73a7070 volsnap!VolSnapDefaultDispatch [0c] IRP_MJ_DIRECTORY_CONTROL f73a7070 volsnap!VolSnapDefaultDispatch [0d] IRP_MJ_FILE_SYSTEM_CONTROL f73a7070 volsnap!VolSnapDefaultDispatch [0e] IRP_MJ_DEVICE_CONTROL f73c0b72 volsnap!VolSnapDeviceControl [0f] IRP_MJ_INTERNAL_DEVICE_CONTROL f73a7070 volsnap!VolSnapDefaultDispatch [10] IRP_MJ_SHUTDOWN f73a7070 volsnap!VolSnapDefaultDispatch [11] IRP_MJ_LOCK_CONTROL f73a7070 volsnap!VolSnapDefaultDispatch [12] IRP_MJ_CLEANUP f73a09e4 volsnap!VolSnapCleanup [13] IRP_MJ_CREATE_MAILSLOT f73a7070 volsnap!VolSnapDefaultDispatch [14] IRP_MJ_QUERY_SECURITY f73a7070 volsnap!VolSnapDefaultDispatch [15] IRP_MJ_SET_SECURITY f73a7070 volsnap!VolSnapDefaultDispatch [16] IRP_MJ_POWER f73a0f70 volsnap!VolSnapPower [17] IRP_MJ_SYSTEM_CONTROL f73a7070 volsnap!VolSnapDefaultDispatch [18] IRP_MJ_DEVICE_CHANGE f73a7070 volsnap!VolSnapDefaultDispatch [19] IRP_MJ_QUERY_QUOTA f73a7070 volsnap!VolSnapDefaultDispatch [1a] IRP_MJ_SET_QUOTA f73a7070 volsnap!VolSnapDefaultDispatch [1b] IRP_MJ_PNP f73c0518 volsnap!VolSnapPnp kd> !devobj 851a4030 Device object (851a4030) is for: HarddiskVolumeShadowCopy3 \Driver\VolSnap DriverObject 853aeda8 Current Irp 00000000 RefCount 10 Type 00000024 Flags 00001050 Vpb 851a5228 Dacl e137faa4 DevExt 851a40e8 DevObjExt 851a43a8 Dope 851a51d0 DevNode 8519f340 ExtensionFlags (0000000000) Device queue is not busy. kd> !devstack 851a4030 !DevObj !DrvObj !DevExt ObjectName > 851a4030 \Driver\VolSnap 851a40e8 HarddiskVolumeShadowCopy3 !DevNode 8519f340 : DeviceInst is "STORAGE\VolumeSnapshot\HarddiskVolumeSnapshot3" kd> !devstack 851a5368 !DevObj !DrvObj !DevExt ObjectName > 851a5368 \Driver\VolSnap 851a5420 HarddiskVolumeShadowCopy2 !DevNode 8519f468 : DeviceInst is "STORAGE\VolumeSnapshot\HarddiskVolumeSnapshot2" kd> !devstack 852af220 !DevObj !DrvObj !DevExt ObjectName > 852af220 \Driver\VolSnap 852af2d8 852af8a0 \Driver\Ftdisk 852af958 HarddiskVolume1 !DevNode 852af5e8 : DeviceInst is "STORAGE\Volume\1&30a96598&0&Signature39CB39CAOffset7E00Length1FF582800" ServiceName is "volsnap" kd> !devstack 852af220 !DevObj !DrvObj !DevExt ObjectName > 852af220 \Driver\VolSnap 852af2d8 852af8a0 \Driver\Ftdisk 852af958 HarddiskVolume1 !DevNode 852af5e8 : DeviceInst is "STORAGE\Volume\1&30a96598&0&Signature39CB39CAOffset7E00Length1FF582800" ServiceName is "volsnap"