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.
Οι ενέργειες που θα γίνουν θα είναι οι εξής
- Αφαίρεση δίσκου
- Επαναφορά δίσκου
- Αφαίρεση και αντικατάσταση με νέο
- Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση
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 θα έρθουν και πάλι σε καλή λειτουργική κατάσταση.