記憶域スペースを管理するPowerShellのCmdlet

Windows Server 2012 Essentials

記憶域スペースの管理方法

記憶域スペースの管理方法には、以下の3つの方法があります。

コントロールパネル(クライアントOSのみ)

※但しWindows Server 2012 Essentials などのEssentialsエディションでは、例外的にコントロールパネルからも管理可能
121125010

サーバーマネージャーのファイルサービスと記憶域サービス(サーバーOSのみ)

121125011

PowerShell (クライアントOSとサーバーOSの両方)

121125013

コントロールパネルやサーバーマネージャーのGUIからは設定出来ない属性等もあり、実際に記憶域スペースを意図する通りに使いこなすには、PowerShellのCmdletを利用する必要があります。

PowerShellの利用方法

  1. リモートデスクトップまたはローカルコンソールからデスクトップを開きます。
  2. タスクバーにある Windows PowerShellのアイコンをクリックします。ない場合は、スタートメニューからPowerShellを見つけます。
    121124100
    管理者権限で起動するときは、Windows PowerShellのアイコンを右クリックして、[管理者として実行する]を押下します。UACの警告が表示された場合は、[はい]を押下します。 特に Set 系の Cmdlet を実行する場合は管理者権限が必要になります。
    121124101
  3. PowerShellのコマンドプロンプトが起動します。
    121124103
  4. 実行したいCmdletを入力します。

記憶域スペースをPowerShellで作成/管理するCmdlet

PowerShellを利用して記憶域スペースを作成/管理するには、記憶域スペースの構造とCmdletを理解する必要があります。

記憶域スペースの構造

記憶域スペースは、以下のような構造になっています。

Storage Management API Stack

参考:Deep Dive: Volumes in Storage Spaces Direct

記憶域スペース(Storage Spaces)は、物理ディスクを束ねて1つの物理ディスクのように扱う記憶域プール(Storage Pool)と、記憶域プールの上に作成する仮想ディスク(Virtual Disk)を総称した名称です。

記憶域プールを使ってボリュームを作成する場合、上の図の下から順に構築していくこととなります。

記憶域スペースの管理に利用するPowerShell

 

記憶域スペースでよく利用する主なコマンドレット

PowerShellのコマンドレットは通常、実行する操作(英語でいうと動詞)と対象(英語でいうと目的語)を組み合わせて、「動詞-目的語」という構造のコマンドレットが多いです。

記憶域スペースも同様で、上の図で示した構造となっている対象に対して、動詞との組み合わせのコマンドレットが以下のように用意されており、よく使う主なコマンドレットとなります。

下の表は実行する操作を横軸、操作対象を縦軸にプロットしてクロスしたコマンドレットの一覧表になります。新規に記憶域スペースを使ってボリュームを作成する場合、下のレイヤから順に操作を行っていくことから、以下表の左下から上に順次コマンドレットを実行するイメージで捉えていただくとわかりやすいのではないかと思います。

 

実行する操作
作成
(New-)
設定
(Set-)
参照
(Get-)
追加
(Add-)
修復
(Repair-)
削除
(Remove-)
対象 ボリューム(Volume) New-Volume Set-Volume Get-Volume Repair-Volume Remove-Volume
パーティション
(Partition)
New-Partition Set-Partition Get-Partition Remove-Partition
ディスク
(Disk)
Set-Disk Get-Disk
仮想ディスク
(VirtualDisk)
New-VirtualDisk Set-VirtualDisk Get-VirtualDisk Repair-VirtualDisk Remove-VirtualDisk
記憶域階層
(StorageTier)
New-StorageTier Set-StorageTier Get-StorageTier
記憶域プール
(StoragePool)
New-StoragePool Set-StoragePool Get-StoragePool
 物理ディスク
(PhysicalDisk)
Set-PhysicalDisk Get-PhysicalDisk Add-PhysicalDisk Remove-PhysicalDisk

 

上の表では、先に示した以下の図に対し、記憶域プール(Storage Pool)の下に存在する物理ディスク(Physical-Disk)と、記憶域プール(Storage Pool)と仮想ディスク(Virtual-Disk)の間に存在する記憶域階層(Storage-Tier)を加えています。

Storage Management API Stack

利用出来る詳細なCmdletはOS毎に若干異なります。詳細は、以下を参照してください。

Windows Server 2016、Windows 10 Storage
Windows Server 2012 R2、Windows 8.1 Storage Cmdlets in Windows PowerShell
Windows Server 2012、Windows8 Storage Cmdlets in Windows PowerShell

Cmdletのヘルプを表示する方法

Get-Help <Cmdlet>

<Cmdlet>はヘルプを確認したいCmdletの名称

例: Get-Help Get-VirtualDisk

と入力してエンターを押下すると、指定したCmdletのヘルプを確認出来ます。

 記憶域スペースの作成を簡略化するコマンドレット

例えば、記憶域スペースを作成するには通常上記のコマンドレットを使いながら、

  1. 記憶域プールに追加するディスクの選定
  2. 記憶域プールの作成
  3. 記憶域スペースの作成
  4. 仮想ディスクの初期化
  5. パーティションの作成
  6. フォーマット

といった手順を踏み、それぞれをCmdletで行う必要があります。

これら標準のコマンドレットではやや煩瑣となる操作を、1つのCmdletで行うことが出来るなど、記憶域スペースの管理を容易にするFunctionを追加できるPowerShellのモジュールがリリースされています。

Storage Spaces module for Windows PowerShellからモジュールをダウンロードし、StorageSpaces module for Windows PowerShell.docxに従って導入、利用出来るCmdletの確認をしてください。

Tips

記憶域スペースから物理ディスクを取り外すCmdlet

記憶域スペースから物理ディスクを取り外す場合、以下の手順を実行します。

  • 記憶域スペースの空き容量、利用可能ディスクを確認し、不足している場合は新たな物理ディスクを記憶域プールに追加する。
  • 取り外したい物理ディスクの Usage 属性を、retired に変更する。
  • 物理ディスクが属していた全ての記憶域スペースに対して、Repair-VirtualDisk コマンドを実行して記憶域スペースの修復を行う。
  • 記憶域プールから削除する物理ディスクに対して、 Remove-PhysicalDisk コマンドを実行する。

Set-PhysicalDisk –FriendlyName PhysicalDisk1 –Usage Retired
Get-PhysicalDisk –FriendlyName PhysicalDisk1 | Get-VirtualDisk | Repair-VirtualDisk

PhysicalDisk1 は取り外す物理ディスクのフレンドリーネーム

このコマンドを実行後、記憶域スペースの状態が「正常」になったことを確認して、以下のコマンドを実行します。

$PDToRemove = Get-PhysicalDisk -Friendlyname “PhysicalDisk1”
Remove-PhysicalDisk -PhysicalDisks $PDToRemove -StoragePoolFriendlyName “記憶域プール”

記憶域プール は取り外す記憶域スペースのフレンドリーネーム

記憶域スペースのTroubleShootに利用するその他のPowerShellのCmdlet

Understand and Troubleshoot Storage Spaces in Windows Server “8” Betaに掲載されているCmdletの例です。

正常でない記憶域スペースをリストアップする

Get-VirtualDisk | Where-Object {$_.HealthStatus –ne “Healthy”}

仮想ディスクを修復する

Repair-VirtualDisk –FriendlyName

正常でない記憶域プールの一覧をリストアップする

Get-StoragePool | Where-Object {$_.HealthStatus –ne “Healthy”}

正常でない物理ディスクの一覧をリストアップする

Get-PhysicalDisk | Where-object {$_.HealthStatus –ne “Healthy”}

記憶域プールから取り除いた物理ディスクから記憶域プールの情報を削除する

物理HDDには記憶域プールの管理情報が書込まれているため、他のOSに接続しても、ディスクの管理からドライブレターを割り当てることが出来ません。それを防ぐために、ディスク内の記憶域プールに関する情報を削除します。

Reset-PhysicalDisk -FriendlyName

Windowsの再インストール後、または別のWindowsに物理ディスクを接続した場合に、記憶域スペースと記憶域プールを利用可能にする

Get-StoragePool | Where-Object {$_.IsReadonly –eq $True } | Set-StoragePool –IsReadonly $False
Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True} | Set-VirtualDisk –IsManualAttach $False

このコマンドは非常に重要です。Windows のディスクに関する新しいポリシー(及びフェールオーバークラスタをサポートしたこと)によって、Windows の新規インストールを実行した場合、接続されている記憶域プールは読取専用モードで認識され、記憶域スペースはデタッチされた状態となります。記憶域スペースを利用可能にするには、上記の2つのコマンドを実行して、記憶域プールの読取専用属性を解除し、記憶域スペースの手動アタッチ属性も解除する必要があります。
PowerShellからこのコマンドを実行せずにGUIから記憶域プールをアタッチしても、次回のOS再起動後には再びデタッチ状態となります。

手動アタッチ属性解除後に、デタッチ状態の仮想ディスクをGUIではなくPowerShellでアタッチするには、以下のコマンドを実行します。

Get-VirtualDisk | Where-Object -Filter { $_.OperationalStatus -eq "Detached"} | Connect-VirtualDisk

コメント

タイトルとURLをコピーしました