Έλεγχος αντοχής των Storage Spaces με την χρήση του PowerShell (Parity)
3. Έλεγχος αντοχής προστασίας τύπου Parity
Στο τρίτο και τελευταίο μέρος αυτού του blogpost θα ασχοληθούμε με τον έλεγχο της αντοχής ενός Storage Space με επίπεδο προστασίας Parity, που είναι κάτι αντίστοιχο με το γνωστό μας RAID 5.
Στην περίπτωση αυτού του επιπέδου ασφαλείας, του Parity, o ελάχιστος αριθμός σκληρών δίσκων για την υλοποίηση είναι τρεις (3), ενώ προσφέρεται προστασία των δεδομένων στην περίπτωση βλάβης ενός δίσκου.3.1 Δημιουργία δίσκων
Το πρώτο βήμα είναι η δημιουργία των σκληρών δίσκων και η προσθήκη τους στο σύστημα των δοκιμών που είναι ένα Virtual Machine με λειτουργικό σύστημα Windows Server 2012R2.
Για να γίνει αυτό θα χρησιμοποιήσουμε το PowerShell και τις παρακάτω εντολές στον Hyper-V host.
# Create three VHDXs1..3| %{New-VHD -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -SizeBytes 20GB -Dynamic}# Attach VHDX disks to a VM1..3|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI}
Διαπιστώνουμε τόσο την δημιουργία των δίσκων όσο και την σύνδεση τους στο VM, με την Get-PhysicalDisk στο VM
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk3 True OK Healthy Auto-Select 20 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk2 True OK Healthy Auto-Select 20 GBPhysicalDisk1 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 -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 OK Healthy False FalsePrimordial OK Healthy True False
3.3 Υλοποίηση Storage Space
Αφού ολοκληρώθηκε η δημιουργία του Storage Pool, μπορούμε να φτιάξουμε το Storage Space με το επίπεδο ασφάλειας που επιθυμούμε. Στην συγκεκριμένη περίπτωση θα δημιουργήσουμε ένα Parity Storage Space, με τις εξής εντολές στο VM
# Create Storage Space (Parity)$StorPool=Get-StoragePool -FriendlyName StorPool01Set-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).NumberSet-Disk -Number $DiskNo -IsReadOnly 0Set-Disk -Number $DiskNo -IsOffline 0Initialize-Disk -Number $DiskNo -PartitionStyle MBRNew-Partition -DiskNumber $DiskNo -DriveLetter S -UseMaximumSizeInitialize-Volume -DriveLetter S -FileSystem NTFS -Confirm:$false
Εάν θέλουμε να δούμε την κατάσταση του Storage Space, του partition και των φυσικών δίσκων πάνω στους οποίους έχουν δημιουργηθεί, τότε χρησιμοποιούμε την παρακάτω εντολή
# Display Physical Disks that construct a volumeGet-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 -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk3 False OK Healthy Auto-Select 19.25 GBPhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSizeFriendlyName 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 DiskRemove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation 2 -ControllerType SCSI
Στο guest VM, διαπιστώνουμε την βλάβη, ως εξής
]PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk3 False OK Healthy Auto-Select 19.25 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk-1 False Lost Communication Warning Auto-Select 19.25 GB
Ενώ έχουμε και εγγραφές στο System Event Log
PS C:Windowssystem32> Get-EventLog -LogName System -Source Disk | flIndex : 1065EntryType : WarningInstanceId : 2147745949Message : Disk 1 has been surprise removed.Category : (0)CategoryNumber : 0ReplacementStrings : {DeviceHarddisk1DR5, 1}Source : diskTimeGenerated : 25/6/2014 4:59:12 μμTimeWritten : 25/6/2014 4:59:12 μμUserName :
Η κατάσταση του Storage Pool είναι η εξής
]PS C:> Get-StoragePool | ft -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 Degraded Warning False FalsePrimordial OK Healthy True False
Η κατάσταση του Storage Space είναι η εξής
]PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSizeFriendlyName 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 drivesAdd-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1.vhdx' -ControllerType SCSI
Στο Guest VM παρατηρούμε την κατάσταση των φυσικών δίσκων
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPhysicalDisk4 False OK Healthy Auto-Select 19.25 GB
Η κατάσταση του Storage Pool είναι
PS C:> Get-StoragePool | ft -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 OK Healthy False FalsePrimordial OK Healthy True False
Και του Storage Space
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSizeFriendlyName 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 DiskRemove-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 -AutoSizeFriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size------------ --------------------- ----------------- ------------ -------------- ----StorSpace01 Parity Incomplete Warning False 36 GB
Για να αντικαταστήσουμε τον «χαλασμένο» δίσκο, θα δημιουργήσουμε έναν καινούριο, τον οποίο μετά θα τον συνδέσουμε στο Guest VM. Οι παρακάτω εντολές στον Hyper-VHost, θα κάνουν τις ενέργειες αυτές.
# New Disk creationNew-VHD -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1-New.vhdx' -SizeBytes 20GB -Dynamic# Add new disk to VMAdd-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1-New.vhdx' -ControllerType SCSI -ControllerNumber 0
Ο νέος δίσκος εμφανίζεται στο Guest VM, όπως φαίνεται παρακάτω
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk4 True OK Healthy Auto-Select 20 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPhysicalDisk-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 RetiredPS C:Windowssystem32> Get-PhysicalDisk | where OperationalStatus -like Lost* | Set-PhysicalDisk -Usage RetiredPS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk4 True OK Healthy Auto-Select 20 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPhysicalDisk-1 False Lost Communication Warning Retired 19.25 GB
Αφού θέσουμε τον «χαλασμένο» δίσκο σε κατάσταση Retired, προσθέτουμε τον νέο δίσκο στο Storage Pool με την παρακάτω εντολή στο Guest VM
# Add New disk to Storage PoolAdd-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk -CanPool $true)
Ενώ για να ξεκινήσει η διαδικασία της αποκατάστασης εκτελούμε την παρακάτω εντολή στο Guest VM
# Repair Storage SpaceRepair-VirtualDisk -FriendlyName StorSpace01
Με την ολοκλήρωση της αποκατάστασης, η λειτουργική κατάσταση του Storage Space είναι και πάλι καλή (Healthy).
PS C:Windowssystem32> Repair-VirtualDisk -FriendlyName StorSpace01PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSizeFriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size------------ --------------------- ----------------- ------------ -------------- ----StorSpace01 Parity OK Healthy False 36 GB
Ελέγχοντας όμως το Storage Pool, παρατηρούμε ότι είναι σε κατάσταση Degraded (υποβαθμισμένο)
PS C:> Get-StoragePool | ft -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 Degraded Warning False FalsePrimordial OK Healthy True False
Αυτό συμβαίνει γιατί περιλαμβάνει και τους δίσκους που έχουν χαλάσει και έχουν αντικατασταθεί
PS C:Windowssystem32> Get-StoragePool -FriendlyName StorPool01 | Get-PhysicalDisk| ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size----------- ------- ----------------- ------------ ----- ----PhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk4 False OK Healthy Auto-Select 19.25 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPhysicalDisk-1 False Lost Communication Warning Retired 19.25 GB
Όμως αυτόν τον δίσκο μπορούμε να τον αφαιρέσουμε εύκολα από το Storage Pool ως εξής
# Remove Failed DisksRemove-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk | where OperationalStatus -like Lost*)
Μετά την αφαίρεση η κατάσταση του Storage Pool είναι και πάλι Healthy
PS C:Windowssystem32> Get-StoragePool | ft -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 OK Healthy False FalsePrimordial OK Healthy True False
Είναι βέβαια περιττό να αναφέρουμε , ότι όλες αυτές οι ενέργειες γίνονταν στο παρασκήνιο ενώ τα δεδομένα μας είναι διαρκώς διαθέσιμα.3.4.4 Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση του
Στην δοκιμή αυτή θα εξετάσουμε εάν υπάρχει κάποια επίπτωση στην λειτουργική κατάσταση του storage Space, στην περίπτωση που ο χαλασμένος δίσκος αφού αφαιρέθηκε και αντικαταστάθηκε με νέο, επανασυνδεθεί στο Guest VM.
Ξεκινάμε λοιπόν με την προσθήκη του δίσκου, εκτελώντας στον Hyper-V host την εξής εντολή
# Reconnect the disk drivesAdd-VMHardDiskDrive -VMName W2012R2 -Path 'C:Hyper-VW2012R2Virtual Hard DisksDisk-1.vhdx' -ControllerType SCSI
Με την προσθήκη του δίσκου, στο Guest VM έχουμε την εξής εικόνα
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSizeFriendlyName CanPool OperationalStatus HealthStatus Usage Size------------ ------- ----------------- ------------ ----- ----PhysicalDisk2 False OK Healthy Auto-Select 19.25 GBPhysicalDisk4 False OK Healthy Auto-Select 19.25 GBPhysicalDisk0 False OK Healthy Auto-Select 127 GBPhysicalDisk1 False OK Healthy Auto-Select 19.25 GBPhysicalDisk5 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 -AutoSizeFriendlyName 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 disks3..4 | %{Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation $_ -ControllerType SCSI}
Παρατηρούμε ότι το Storage Pool είναι σε κατάσταση εκτεταμένης βλάβης
PS C:Windowssystem32> Get-StoragePool | ft -AutoSizeFriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly------------ ----------------- ------------ ------------ ----------StorPool01 Read-only Unhealthy False FalsePrimordial 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 θα έρθουν και πάλι σε καλή λειτουργική κατάσταση.
The post Έλεγχος αντοχής των Storage Spaces με την χρήση του PowerShell (Parity) appeared first on Vaggelis Kappas.
0 Comments
Recommended Comments
There are no comments to display.