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

30 Jun

3. Έλεγχος αντοχής προστασίας τύπου Parity

Στο τρίτο και τελευταίο μέρος αυτού του blogpost θα ασχοληθούμε με τον έλεγχο της αντοχής ενός Storage Space με επίπεδο προστασίας Parity, που είναι κάτι αντίστοιχο με το γνωστό μας RAID 5.

Στην περίπτωση αυτού του επιπέδου ασφαλείας, του Parity, o ελάχιστος αριθμός σκληρών δίσκων για την υλοποίηση είναι τρεις (3), ενώ προσφέρεται προστασία των δεδομένων στην περίπτωση βλάβης ενός δίσκου.

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

Το πρώτο βήμα είναι η δημιουργία των σκληρών δίσκων και η προσθήκη τους στο σύστημα των δοκιμών που είναι ένα Virtual Machine με λειτουργικό σύστημα Windows Server 2012R2.

Για να γίνει αυτό θα χρησιμοποιήσουμε το PowerShell και τις παρακάτω εντολές στον Hyper-V host.

# Create three VHDXs
1..3| %{New-VHD -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -SizeBytes 20GB -Dynamic}

# Attach VHDX disks to a VM
1..3|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI}

Διαπιστώνουμε τόσο την δημιουργία των δίσκων όσο και την σύνδεση τους στο VM, με την Get-PhysicalDisk στο VM

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

FriendlyName CanPool OperationalStatus HealthStatus Usage         Size
------------ ------- ----------------- ------------ -----         ----
PhysicalDisk3 True   OK               Healthy     Auto-Select 20 GB
PhysicalDisk0 False  OK               Healthy     Auto-Select 127 GB
PhysicalDisk2 True   OK               Healthy     Auto-Select 20 GB
PhysicalDisk1 True   OK               Healthy     Auto-Select 20 GB

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

Αφού δημιουργήσαμε τους σκληρούς δίσκους και τους συνδέσαμε στο VM, φτιάχνουμε το Storage Pool με τις παρακάτω εντολές στο VM

# Create Storage Pool
$disks=Get-PhysicalDisk -CanPool $true
$StorSubSys=Get-StorageSubSystem -FriendlyName *Spaces*
New-StoragePool -FriendlyName StorPool01 -PhysicalDisks $disks -StorageSubSystemFriendlyName $StorSubSys.FriendlyName

Πιστοποιούμε την ολοκλήρωση του Storage Pool, με την παρακάτω εντολή στο VM

PS C:> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   OK              Healthy     False       False
Primordial   OK               Healthy     True         False

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

Αφού ολοκληρώθηκε η δημιουργία του Storage Pool, μπορούμε να φτιάξουμε το Storage Space με το επίπεδο ασφάλειας που επιθυμούμε. Στην συγκεκριμένη περίπτωση θα δημιουργήσουμε ένα Parity Storage Space, με τις εξής εντολές στο VM

# Create Storage Space (Parity)
$StorPool=Get-StoragePool -FriendlyName StorPool01
Set-ResiliencySetting -StoragePool $StorPool -Name Parity -AutoNumberOfColumns
$StorPool | New-VirtualDisk -FriendlyName StorSpace01 -ResiliencySettingName Parity -UseMaximumSize

To Storage Space που δημιουργήθηκε είναι ένας νέος δίσκος για το σύστημα μας, ο οποίος χρειάζεται αρχικοποίηση (initialization), δημιουργία partition και format, κατά τα γνωστά.

# Assign Drive Letter and format new drive
$DiskNo = (Get-VirtualDisk -FriendlyName StorSpace01 | Get-Disk).Number
Set-Disk -Number $DiskNo -IsReadOnly 0
Set-Disk -Number $DiskNo -IsOffline 0
Initialize-Disk -Number $DiskNo -PartitionStyle MBR
New-Partition -DiskNumber $DiskNo -DriveLetter S -UseMaximumSize
Initialize-Volume -DriveLetter S -FileSystem NTFS -Confirm:$false

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

# Display Physical Disks that construct a volume
Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | ft –AutoSize
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
PhysicalDisk2 False   OK               Healthy     Auto-Select 19.25 GB
PhysicalDisk1 False   OK               Healthy     Auto-Select 19.25 GB

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               OK              Healthy     False         36 GB

 3.4 Προσομοίωση βλάβης δίσκου

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

Οι ενέργειες που θα γίνουν θα είναι οι εξής

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

3.4.1 Αφαίρεση

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

# Remove a Disk
Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation 2 -ControllerType SCSI

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

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

FriendlyName   CanPool OperationalStatus HealthStatus Usage           Size
------------   ------- ----------------- ------------ -----           ----
PhysicalDisk3 False   OK                 Healthy     Auto-Select 19.25 GB
PhysicalDisk0 False   OK                 Healthy     Auto-Select   127 GB
PhysicalDisk2 False   OK                Healthy     Auto-Select 19.25 GB
PhysicalDisk-1 False   Lost Communication Warning     Auto-Select 19.25 GB

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

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

Index            : 1065
EntryType         : Warning
InstanceId         : 2147745949
Message           : Disk 1 has been surprise removed.
Category           : (0)
CategoryNumber     : 0
ReplacementStrings : {DeviceHarddisk1DR5, 1}
Source             : disk
TimeGenerated     : 25/6/2014 4:59:12 μμ
TimeWritten       : 25/6/2014 4:59:12 μμ
UserName           :

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

PS C:> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   Degraded         Warning     False       False
Primordial   OK               Healthy     True         False

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

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               Incomplete       Warning     False         36 GB

 

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

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

3.4.2 Επαναφορά

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

# Reconnect the disk drives

Add-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1.vhdx' -ControllerType SCSI

Στο Guest VM παρατηρούμε την κατάσταση των φυσικών δίσκων

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

FriendlyName CanPool OperationalStatus HealthStatus Usage           Size
------------ ------- ----------------- ------------ -----           ----
PhysicalDisk2 False   OK               Healthy     Auto-Select 19.25 GB
PhysicalDisk0 False   OK               Healthy     Auto-Select   127 GB
PhysicalDisk1 False   OK               Healthy     Auto-Select 19.25 GB
PhysicalDisk4 False   OK               Healthy     Auto-Select 19.25 GB

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

PS C:> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   OK               Healthy     False       False
Primordial   OK               Healthy     True         False

 Και του Storage Space

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               OK               Healthy     False         36 GB

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

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

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

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

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

# Remove a Disk

Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation 2 -ControllerType SCSI

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

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

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               Incomplete       Warning     False         36 GB

Για να αντικαταστήσουμε τον «χαλασμένο» δίσκο, θα δημιουργήσουμε έναν καινούριο, τον οποίο μετά θα τον συνδέσουμε στο Guest VM. Οι παρακάτω εντολές στον Hyper-VHost, θα κάνουν τις ενέργειες αυτές.

# New Disk creation
New-VHD -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1-New.vhdx' -SizeBytes 20GB -Dynamic

# Add new disk to VM
Add-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1-New.vhdx' -ControllerType SCSI -ControllerNumber 0

Ο νέος δίσκος εμφανίζεται στο Guest VM, όπως φαίνεται παρακάτω

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

FriendlyName   CanPool OperationalStatus HealthStatus Usage           Size
------------   ------- ----------------- ------------ -----           ----
PhysicalDisk2 False   OK                 Healthy     Auto-Select 19.25 GB
PhysicalDisk4 True   OK                 Healthy     Auto-Select   20 GB
PhysicalDisk0 False   OK                 Healthy     Auto-Select   127 GB
PhysicalDisk1 False   OK                Healthy     Auto-Select 19.25 GB
PhysicalDisk-1 False   Lost Communication Warning     Auto-Select 19.25 GB

Ο νέος δίσκος είναι στην διάθεση μας και μπορούμε να τον προσθέσουμε στο Storage Pool και να ξεκινήσει η διαδικασία της αποκατάστασης της συστοιχίας.

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

Get-PhysicalDisk | where OperationalStatus -like Lost* | Set-PhysicalDisk -Usage Retired

PS C:Windowssystem32> Get-PhysicalDisk | where OperationalStatus -like Lost* | Set-PhysicalDisk -Usage Retired

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

FriendlyName   CanPool OperationalStatus HealthStatus Usage           Size
------------   ------- ----------------- ------------ -----           ----
PhysicalDisk2 False   OK                 Healthy     Auto-Select 19.25 GB
PhysicalDisk4 True   OK                 Healthy     Auto-Select   20 GB
PhysicalDisk0 False   OK                 Healthy     Auto-Select   127 GB
PhysicalDisk1 False   OK                 Healthy     Auto-Select 19.25 GB
PhysicalDisk-1 False   Lost Communication Warning     Retired     19.25 GB

Αφού θέσουμε τον «χαλασμένο» δίσκο σε κατάσταση Retired, προσθέτουμε τον νέο δίσκο στο Storage Pool με την παρακάτω εντολή στο Guest VM

# Add New disk to Storage Pool

Add-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk -CanPool $true)

Ενώ για να ξεκινήσει η διαδικασία της αποκατάστασης εκτελούμε την παρακάτω εντολή στο Guest VM

# Repair Storage Space

Repair-VirtualDisk -FriendlyName StorSpace01

Με την ολοκλήρωση της αποκατάστασης, η λειτουργική κατάσταση του Storage Space είναι και πάλι καλή (Healthy).

PS C:Windowssystem32> Repair-VirtualDisk -FriendlyName StorSpace01

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               OK               Healthy     False         36 GB

 Ελέγχοντας όμως το Storage Pool, παρατηρούμε ότι είναι σε κατάσταση Degraded (υποβαθμισμένο)

PS C:> Get-StoragePool | ft -AutoSize

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   Degraded         Warning     False       False
Primordial   OK               Healthy     True         False

Αυτό συμβαίνει γιατί περιλαμβάνει και τους δίσκους που έχουν χαλάσει και έχουν αντικατασταθεί

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

FriendlyName   CanPool OperationalStatus HealthStatus Usage           Size
-----------   ------- ----------------- ------------ -----           ----
PhysicalDisk2 False   OK                 Healthy     Auto-Select 19.25 GB
PhysicalDisk4 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

Όμως αυτόν τον δίσκο μπορούμε να τον αφαιρέσουμε εύκολα από το Storage Pool ως εξής

# Remove Failed Disks

Remove-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk | where OperationalStatus -like Lost*)

Μετά την αφαίρεση η κατάσταση του Storage Pool είναι και πάλι Healthy

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

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   OK                Healthy     False       False
Primordial   OK               Healthy     True         False

 Είναι βέβαια περιττό να αναφέρουμε , ότι όλες αυτές οι ενέργειες γίνονταν στο παρασκήνιο ενώ τα δεδομένα μας είναι διαρκώς διαθέσιμα.

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

Στην δοκιμή αυτή θα εξετάσουμε εάν υπάρχει κάποια επίπτωση στην λειτουργική κατάσταση του storage Space, στην περίπτωση που ο χαλασμένος δίσκος αφού αφαιρέθηκε και αντικαταστάθηκε με νέο, επανασυνδεθεί στο Guest VM.

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

# Reconnect the disk drives

Add-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1.vhdx' -ControllerType SCSI

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

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

FriendlyName CanPool OperationalStatus     HealthStatus Usage           Size
------------ ------- -----------------     ------------ -----           ----
PhysicalDisk2 False   OK                   Healthy     Auto-Select 19.25 GB
PhysicalDisk4 False   OK                   Healthy     Auto-Select 19.25 GB
PhysicalDisk0 False   OK                   Healthy     Auto-Select   127 GB
PhysicalDisk1 False   OK                   Healthy     Auto-Select 19.25 GB
PhysicalDisk5 False   Unrecognized Metadata Unhealthy   Unknown       20 GB

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

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

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

FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
StorSpace01 Parity               OK               Healthy     False         36 GB

Στην περίπτωση που θέλουμε να χρησιμοποιήσουμε αυτούς τους δίσκους θα πρέπει να κάνουμε επαναφορά (reset) της κατάστασης τους, ως εξής

Get-PhysicalDisk | where OperationalStatus -like Unrecognized* | Reset-PhysicalDisk

3.5 Βλάβη δύο (2) δίσκων δίσκων

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

Αφαιρώντας λοιπόν δύο δίσκους με την παρακάτω εντολή στον Hyper-V host

# Remove two disks

3..4 | %{Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation $_ -ControllerType SCSI}

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

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

FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
StorPool01   Read-only         Unhealthy   False       False
Primordial   OK               Healthy     True         False

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

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

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

At line:1 char:1

+ Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | f …

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

   + 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.