Jump to content
  • entries
    57
  • comments
    2
  • views
    22858

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


kavag

407 views

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.

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

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

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.

 

Source

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...