Łączenie kilku dysków w Storage Pool

17 Kwietnia 2018

Czasem się zdarza, że zaczyna nam brakować miejsca na dysku. Mając pod ręką kilka starych dysków twardych o małych pojemnościach, możemy je połączyć w jedną dużą przestrzeń dyskową przy użyciu Storage Spaces w systemie Windows. Ja akurat nie miałem fizycznego dysku, więc poniższy opis zawiera również tworzenie dysków wirtualnych VHD.

Storage Pool

Storage Pool pozwala na utworzenie wirtualnej przestrzeni na wirtualne dyski. W tym celu należy posiadać fizyczne dyski twarde (mogą to być urządzenia albo zamontowane pliki .vhd/.vhdx) o pojemności conajmniej 5GB każdy.

Tworzenie nowego Storage Pool

Poniższy skrypt tworzy 4 pliki dyskowe .vhdx i tworzy z nich StoragePool. Upewnij się najpierw, że posiadasz moduły Storage i Hyper-V. Jeśli nie masz modułu Hyper-V, a masz zamiast tego kilka pustych dysków twardych to możesz użyć ich zamiast tych plików.

$VHD_Disks = foreach ($i in (0,1,2,3)) {
    New-VHD .\array$i.vhdx -Fixed -SizeBytes 5GB `
    | Mount-VHD -PassThru `
    | Initialize-Disk -PartitionStyle GPT -PassThru
}

$PhysicalDisks = Get-PhysicalDisk -UniqueId $VHD_Disks.UniqueId

New-StoragePool "Windows Storage*" -FriendlyName "MyPool" -PhysicalDisks $PhysicalDisks

Polecenie New-VHD tworzy nowy virtualny dysk twardy w postaci pliku .vhd lub .vhdx. Następnie ten plik montujemy aby był dostępny w systemie. Poleceniem Initialize-Disk tworzy w nim tablicę partycji, ale żadnych partycji tworzyć na razie nie będziemy. Opcja -PassThru oznacza, że cmdlet zwraca obiekt, mimo że normalnie nic by nie zwracał.

Tworzymy 4 dyski, każdy po 5GB, każdy od razu w pełni alokujemy na dysku twardym (-Fixed a nie -Dynamic).

Storage Pool działa w ten sposób, że korzysta z niezaalokowanego miejsca na dysku, bądź dyskach, i sprawia wrażenie ciągłej pamięci.

Polecenie New-StoragePool jako pierwszy parametr przyjmuje nazwę podsystemu, w którym będziemy tworzyli nasz Storage Pool. Domyślnie będzie to “Windows Storage*” (jeśli chcemy poznać jak konkretnie się nazywa możemy użyć polecenia Get-StorageSubSystem). Następnie określamy nazwę dla naszego Storage Poola przez parametr -FriendlyName. Następnie musimy podać obiekty do parametru -PhysicalDisks, który określa, które dyski zostaną częścią Storage Poola.

Moglibyśmy uźyć polecenia

Get-PhysicalDisk -CanPool $true

aby uzyskać wszystkie dyski, jakie możemy połączyć w Storage Pool, ale tutaj chcemy połączyć tylko te nowo utworzone. Dlatego dochodzi do tej zabawy użycie zmiennych $VHD_Disks i $PhysicalDisks.

Tworzenie wirtualnego dysku w Storage Pool

Utworzyliśmy przed chwilą nowy Storage Pool (w skrócie SP) o nazwie “MyPool”. Będziemy chcieli teraz utworzyć w nim wirtualny dysk, który będziemy mogli podzielić na partycje i używać jak każdy inny dysk w naszym komputerze.

W tym celu użyjemy polecenia

New-VirtualDisk "MyPool" -FriendlyName "MyPool_Disk0" -UseMaximumSize -ResiliencySettingName Simple -NumberOfColumns 1

Zamiast -UseMaximumSize moglibyśmy użyć parametru -Size z odpowiednim rozmiarem dla naszego dysku.

Domyślnie dysk jest tworzony w trybie Mirror, co oznacza, że dane są duplikowane na wypadek awarii. Ja zdecydowałem się na tryb Simple, aby maksymalnie wykorzystać dostępne miejsce. Jest jeszcze tryb Parity, który odpowiada niejako logice RAID 5.

Liczba kolumn określa liczbę dysków na jakich zostanie dany plik zapisany. W przypadku gdy liczba kolumn jest równa 2, to połowa pliku zostanie zapisana na jednym dysku, a połowa na drugim (mniej więcej).

Będziemy chcieli utworzyć sobie partycję na dane, która będzie obejmowała cały dysk.

Get-Disk -FriendlyName "MyPool_Disk0" `
| Initialize-Disk -PassThru `
| New-Partition -UseMaximumSize -AssignDriveLetter `
| Format-Volume -FileSystem NTFS

Pobieramy obiekt dysku przez nadaną mu nazwę, inicjalizujemy ten dysk, tworzymy nową partycję obejmującą cały dysk, której nadajemy pierwszą wolną literę i na koniec formatujemy ją systemem plików NTFS.

Można używać 😁

Co dalej?

Zachęcam do przeczytania jeszcze dwóch poniższych artykułów, żeby lepiej zrozumieć możliwości Storage Spaces.

Istnieje też coś takiego jak Hot Spare, czyli dysk który nie jest częścią wirtualnego dysku ale zostanie użyty gdy jakiś inny dysk się zepsuje.