Έλεγχος αντοχής των Storage Spaces με την χρήση του PowerShell (Two-Way Mirror)

13 Apr

Γενικά

Σε αυτό το άρθρο θα κάνουμε έλεγχο της ανθεκτικότητας των Storage Spaces έναντι βλάβης ενός, δύο ή και περισσοτέρων σκληρών δίσκων πάνω στους οποίους έχουν υλοποιηθεί. Θα εξετάσουμε και τα τρία επίπεδα ασφάλειας που προσφέρονται, δηλαδή τα :

  • Two Way Mirroring
  • Three Way Mirroring και
  • Parity

Υπάρχει μια αντιστοιχία των παραπάνω επιπέδων ασφαλείας με τα γνωστά μας RAID levels, αλλά όχι απόλυτη μια που, όπως θα δούμε, μπορούμε να δημιουργήσουμε ένα Two-Way Mirror με χρήση τριών (3) δίσκων.

Ένα πλήθος με τις συνηθέστερες ερωτήσεις και τις απαντήσεις τους σχετικά με τα Storage Spaces θα βρείτε στο παρακάτω σύνδεσμο :

Storage Spaces Frequently Asked Questions (FAQ)

Ενώ, πολύ χρήσιμος είναι και ο παρακάτω πίνακας στον οποίο παρουσιάζεται ο συσχετισμός των επιπέδων ασφαλείας των Storage Spaces με τον ελάχιστο απαιτούμενο αριθμό δίσκων.

Resiliency type Minimum number of columns Column-to-disk correlation Minimum number of disks
Two-way mirror

1

1:2

2

Three-way mirror

1

1:3

5

Parity

3

1:1

3

 

Για την δημιουργία των Storage Spaces και τους ελέγχους της αντοχής τους, την προσομοίωση δηλαδή της βλάβης, θα χρησιμοποιήσουμε το αγαπημένο μας εργαλείο, το PowerShell, ενώ όλες οι δοκιμές θα διεξαχθούν σε εργαστηριακό περιβάλλον που περιλαμβάνει έναν Windows Server 2012R2 Hyper-V host και ένα Guest VM με Windows Server 2012R2

1. Έλεγχος αντοχής Two Way Mirroring

1.1 Δημιουργία δίσκων

Για να δημιουργήσουμε τους σκληρούς δίσκους και τους συνδέουμε στο Guest VM, εκτελώντας τις παρακάτω εντολές στον Hyper-V host

# Create three VHDX

1..3|%{New-VHD -Path "C:Virtual MachinesW2012R2Virtual Hard DisksDisk-$_.vhdx" -LogicalSectorSizeBytes 4096 -PhysicalSectorSizeBytes 4KB -SizeBytes 20GB -Dynamic}

# Attach VHDX disks to a VM

1..3|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Virtual MachinesW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI}

1.2 Δημιουργία Storage Pool

Το Storage Space υλοποιείται επάνω σε ένα Storage Pool, που το δημιουργούμε με τις παρακάτω εντολές

# Create Storage Pool

$disks = Get-PhysicalDisk -CanPool $true

$StorSubSys  =Get-StorageSubSystem -FriendlyName *Spaces*

New-StoragePool -FriendlyName StorPool-01 -PhysicalDisks $disks -StorageSubSystemFriendlyName $StorSubSys.FriendlyName

 

1.3 Υλοποίηση Storage Space

Έχοντας λοιπόν δημιουργήσει το απαιτούμενο Storage Pool, υλοποιούμε το Two-Way Μirror Storage Space, με το απαιτούμενο partition και το drive letter της επιλογής μας, με τις παρακάτω εντολές

# Create Storage Space

New-VirtualDisk-FriendlyNameStorSpace-01-ResiliencySettingNameMirror-StoragePoolFriendlyNameStorPool-01-UseMaximumSize

$DiskNo= (Get-VirtualDisk-FriendlyNameStorSpace-01|Get-Disk).Number

Set-Disk-Number$DiskNo-IsReadOnly0

Set-Disk-Number$DiskNo-IsOffline0

Initialize-Disk-Number$DiskNo-PartitionStyleMBR

New-Partition-DiskNumber$DiskNo-DriveLetterS-UseMaximumSize

Initialize-Volume-DriveLetterS-FileSystemNTFS-Confirm:$false

Εάν θέλουμε να δούμε την κατάσταση του Storage Space, του partition και των φυσικών δίσκων πάνω στους οποίους έχουν δημιουργηθεί, τότε χρησιμοποιούμε την παρακάτω εντολή

# Display Physical Disks that construct a volume

Get-VolumeS|Get-Partition|Get-Disk|Get-VirtualDisk|Get-PhysicalDisk

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | ft -AutoSize 

FriendlyName  CanPool OperationalStatus HealthStatus Usage           Size

————  ——- —————– ———— —–           —-

PhysicalDisk3 False   OK                Healthy      Auto-Select 19.25 GB

PhysicalDisk1 False   OK                Healthy      Auto-Select 19.25 GB

PhysicalDisk2 False   OK                Healthy      Auto-Select 19.25 GB

  

1.4 Βλάβη ενός δίσκου

Θα προσομοιώσουμε τις εξής βλάβες ενός από τους δίσκους που απαρτίζουν την συστοιχία και θα παρατηρήσουμε τα αποτελέσματα στο Storage Pool και στο Storage Space.

  1. Αφαίρεση
  2. Επαναφορά
  3. Αφαίρεση και αντικατάσταση με νέο
  4. Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση του

1.4.1 Αφαίρεση

Η αφαίρεση του δίσκου και συγκεκριμένα του τρίτου, γίνεται με την παρακάτω εντολή στον Hyper-V Host

# Remove Disk

Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation3-ControllerTypeSCSI

 

Στο guest VM, διαπιστώνουμε την βλάβη του δίσκου, ως εξής

PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize

FriendlyName   CanPool OperationalStatus  HealthStatus Usage           Size

————   ——- —————–  ———— —–           —-

PhysicalDisk-1 False   Lost Communication Warning      Auto-Select 19.25 GB

PhysicalDisk1  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk2  False   OK                 Healthy      Auto-Select 19.25 GB

Ενώ έχουμε και εγγραφές στο System Event Log

PS C:Windowssystem32> Get-EventLog -LogName System -Source Disk | fl

Index              : 456

EntryType          : Warning

InstanceId         : 2147745949

Message            : Disk 3 has been surprise removed.

Category           : (0)

CategoryNumber     : 0

ReplacementStrings : {DR3, 3}

Source             : disk

TimeGenerated      : 12/4/2014 9:22:20 πμ

TimeWritten        : 12/4/2014 9:22:20 πμ

 

Η κατάσταση του Storage Pool είναι η εξής

PS C:Windowssystem32> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

Primordial   OK                Healthy      True         False

StorPool-01  Degraded          Warning      False        False

 

Η κατάσταση του Storage Space είναι η εξής

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size

———— ——————— —————– ———— ————–  —-

StorSpace-01 Mirror                Incomplete        Warning      False          27 GB

 

Μετά την αφαίρεση του δίσκου λοιπόν, το Storage Pool είναι Degraded (υποβαθμισμένο) και το Storage Space είναι σε κατάσταση προειδοποίησης (Warning).

Η λειτουργική κατάσταση όμως του Storage Space είναι καλή και τα δεδομένα μας διαθέσιμα και ασφαλή.

1.4.2 Επαναφορά

Επαναφέρουμε τον δίσκο που αφαιρέσαμε, με την παρακάτω εντολή στον Hyper-V host

Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-3.vhdx'-ControllerTypeSCSI-ControllerLocation3

 

Στο Guest VM παρατηρούμε ότι ο δίσκος έχει επανέλθει

PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize

FriendlyName  CanPool OperationalStatus HealthStatus Usage           Size

————  ——- —————– ———— —–           —-

PhysicalDisk3 False   OK                Healthy      Auto-Select 19.25 GB

PhysicalDisk1 False   OK                Healthy      Auto-Select 19.25 GB

PhysicalDisk2 False   OK                Healthy      Auto-Select 19.25 GB

PhysicalDisk0 False   OK                Healthy      Auto-Select    50 GB

 

Η κατάσταση του Storage Pool είναι

PS C:Windowssystem32> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

Primordial   OK                Healthy      True         False

StorPool-01  OK                Healthy      False        False

 

Και του Storage Space

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size

———— ——————— —————– ———— ————–  —-

StorSpace-01 Mirror                OK                Healthy      False          27 GB

 

Επομένως το Storage Subsystem και συγκεκριμένα τα Storage Spaces, κατάλαβαν την επαναφορά του δίσκου, έκαναν όλες τις απαραίτητες ενέργειες αποκατάστασης και η κατάσταση της συστοιχίας είναι και πάλι Healthy.

Όλες αυτές οι ενέργειες έγιναν στο παρασκήνιο και τα δεδομένα μας ήταν συνεχώς διαθέσιμα.

 

1.4.3 Αφαίρεση και αντικατάσταση με νέο

Στην περίπτωση αυτήν θα αντικαταστήσουμε τον δίσκο που θα αφαιρέσουμε με καινούριο. Όπως προηγουμένως, αφαιρούμε τον δεύτερο δίσκο με την παρακάτω εντολή στο Hyper-V Host

Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation2-ControllerTypeSCSI

 

Στο Guest VM διαπιστώνουμε την βλάβη με τους τρόπους που παρουσιάστηκαν στην παράγραφο 1.5.1 Αφαίρεση.

Η κατάσταση λοιπόν της συστοιχίας είναι η εξής

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size

———— ——————— —————– ———— ————–  —-

StorSpace-01 Mirror                Incomplete        Warning      False          27 GB

 

Προσθέτουμε τον νέο δίσκο στην ίδια θέση που είχε και ο χαλασμένος που αφαιρέθηκε, με τις εξής εντολές στον Hyper-V Host

New-vhd-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2-Repair.vhdx'-LogicalSectorSizeBytes4096-PhysicalSectorSizeBytes4KB-SizeBytes20GB-Dynamic

Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2-Repair.vhdx'-ControllerTypeSCSI-ControllerLocation2

 

Βλέπουμε τον νέο δίσκο στο guest VM

PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize

FriendlyName   CanPool OperationalStatus  HealthStatus Usage           Size

————   ——- —————–  ———— —–           —-

PhysicalDisk3  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk1  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk-1 False   Lost Communication Warning      Auto-Select 19.25 GB

PhysicalDisk0  False   OK                 Healthy      Auto-Select    50 GB

PhysicalDisk2  True    OK                 Healthy      Auto-Select    20 GB

 

Για να ξεκινήσει η επιδιόρθωση της συστοιχίας θα πρέπει να αφαιρεθεί ο χαλασμένος δίσκος από το Storage Pool και να προστεθεί ο καινούριος. Αυτό γίνεται με τι εξής εντολές στο Guest VM

Get-PhysicalDisk|whereOperationalStatus-likeLost*|Set-PhysicalDisk-UsageRetired

 PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize

FriendlyName   CanPool OperationalStatus  HealthStatus Usage           Size

————   ——- —————–  ———— —–           —-

PhysicalDisk3  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk1  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk-1 False   Lost Communication Warning      Retired     19.25 GB

PhysicalDisk0  False   OK                 Healthy      Auto-Select    50 GB

PhysicalDisk2  True    OK                 Healthy      Auto-Select    20 GB

 

Προσθέτουμε τον νέο δίσκο στο Storage Pool με την εντολή

Add-PhysicalDisk-StoragePoolFriendlyNameStorPool-01-PhysicalDisks (Get-PhysicalDisk-CanPool$true)

 

Για να ξεκινήσει η διαδικασία της αποκατάστασης εκτελούμε την εντολή

Repair-VirtualDisk-FriendlyNameStorSpace-01

 

Μετά την ολοκλήρωση της αποκατάστασης ελέγχουμε την λειτουργική κατάσταση του Storage Space (συστοιχία) ως εξής

PS C:Windowssystem32>

Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size

———— ——————— —————– ———— ————–  —-

StorSpace-01 Mirror                OK                Healthy      False          27 GB

 

Και του Storage Pool

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

StorPool-01  Degraded          Warning      False        False

 

To storage Pool είναι σε κατάσταση Degraded γιατί περιλαμβάνει τον δίσκο που έχει χαλάσει

PS C:Windowssystem32> Get-StoragePool -FriendlyName StorPool-01 | Get-PhysicalDisk | ft -AutoSize

FriendlyName   CanPool OperationalStatus  HealthStatus Usage           Size

————   ——- —————–  ———— —–           —-

PhysicalDisk3  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk1  False   OK                 Healthy      Auto-Select 19.25 GB

PhysicalDisk-1 False   Lost Communication Warning      Retired     19.25 GB

PhysicalDisk2  False   OK                 Healthy      Auto-Select 19.25 GB

 

Αφαιρώντας λοιπόν αυτόν τον δίσκο

Repair-VirtualDisk-FriendlyNameStorSpace-01

 

Η κατάσταση της συστοιχίας γίνεται Healthy

PS C:Windowssystem32> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

Primordial   OK                Healthy      True         False

StorPool-01  OK                Healthy      False        False

 

Όλες αυτές οι ενέργειες έγιναν στο παρασκήνιο ενώ τα δεδομένα μας ήταν διαρκώς διαθέσιμα.

1.4.4 Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση του

Στην παράγραφο αυτή θα εξετάσουμε την συμπεριφορά των Storage Spaces, εάν προστεθεί ο δίσκος που είχε πριν αφαιρεθεί και αντικατασταθεί με νέο.

 Προσθέτουμε λοιπόν πάλι τον δίσκο, εκτελώντας στον Hyper-V host

Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2.vhdx'-ControllerTypeSCSI

 

Με την προσθήκη του δίσκου στο VM έχουμε την εξής εικόνα

PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize

FriendlyName  CanPool OperationalStatus     HealthStatus Usage           Size

————  ——- —————–     ———— —–           —-

PhysicalDisk3 False   OK                    Healthy      Auto-Select 19.25 GB

PhysicalDisk1 False   OK                    Healthy      Auto-Select 19.25 GB

PhysicalDisk5 False   Unrecognized Metadata Unhealthy    Unknown        20 GB

PhysicalDisk0 False   OK                    Healthy      Auto-Select    50 GB

PhysicalDisk2 False   OK                    Healthy      Auto-Select 19.25 GB

 

Ο δίσκος αναγνωρίζεται ως Unhealthy και φαίνεται να περιλαμβάνει Unrecognized Metadata, δεδομένα δηλαδή των οποίων την περιγραφή δεν φαίνεται να την γνωρίζει το VM.

Για το storage Pool και την συστοιχία δεν έχει αλλάξει τίποτα και είναι σε κατάσταση Healthy

Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

StorPool-01  OK                Healthy      False        False

 Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach  Size

———— ——————— —————– ———— ————–  —-

StorSpace-01 Mirror                OK                Healthy      False          27 GB

 

Εάν θέλουμε να χρησιμοποιήσουμε αυτόν τον δίσκο, θα πρέπει να γίνει επαναφορά (reset) της κατάστασης του.

Get-PhysicalDisk|whereOperationalStatus-likeUnrecognized*|Reset-PhysicalDisk

 

Παρατηρούμε λοιπόν ότι η προσθήκη του παλιού δίσκου που ενώ υπήρχε στο Storage Pool και στο Storage Space αφαιρέθηκε και αντικαταστάθηκε με νέο δεν έχει κάποια επίπτωση στην λειτουργία του Storage Space (συστοιχία).

1.5 Αφαίρεση δύο (2) δίσκων

 To Storage Space που εξετάζουμε είναι τύπου Two-Way Mirror. Αυτός ο τύπος συστοιχίας επιτρέπει την ομαλή λειτουργία σε περίπτωση βλάβης ενός (1) από τους δίσκους που την απαρτίζουν. Εάν υποστούν βλάβη δύο από τους δίσκους της τότε αναμένεται η συστοιχία να μην λειτουργεί και τα δεδομένα που είναι αποθηκευμένα επάνω της να μην είναι διαθέσιμα.

Ετσι εάν αφαιρέσουμε δύο δίσκους, μέσω των παρακάτω εντολών στον Hyper-V host

Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation1-ControllerTypeSCSI

Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation2-ControllerTypeSCSI

 

Παρατηρούμε ότι το Storage Pool είναι σε κατάσταση εκτεταμένης βλάβης

PS C:Windowssystem32> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly

———— —————– ———— ———— ———-

Primordial   OK                Healthy      True         False

StorPool-01  Read-only         Unhealthy    False        False

 

Ενώ το Storage Space δεν υπάρχει

PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

Get-Volume : No MSFT_Volume objects found with property ‘DriveLetter’ equal to ‘S’.  Verify the

value of the property and retry.

At line:1 char:1

+ Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize

+ ~~~~~~~~~~~~

+ CategoryInfo          : ObjectNotFound: (S:Char) [Get-Volume], CimJobException

+ FullyQualifiedErrorId : CmdletizationQuery_NotFound_DriveLetter,Get-Volume

 

Εάν επανασυνδέσουμε τους δίσκους στο VM τότε το Storage Pool και το Storage Space θα έρθουν και πάλι σε καλή λειτουργική κατάσταση.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.