2. Έλεγχος αντοχής Three-Way Mirroring
Στο δεύτερο μέρος αυτού του blogpost θα ασχοληθούμε με τον έλεγχο της αντοχής ενός Storage Space με επίπεδο προστασίας Three-Way Mirroring.
Για την υλοποίηση αυτού του Storage Space, o ελάχιστος αριθμός σκληρών δίσκων που θα χρειαστούν είναι πέντε (5), ενώ η ακεραιότητα των δεδομένων εξασφαλίζεται ακόμη και στην περίπτωση βλάβης δύο (2) δίσκων.
2.1 Δημιουργία δίσκων
Όπως αναλύσαμε στο προηγούμενο άρθρο, το κάθε Storage Space δημιουργείται επί ενός Storage Pool το οποίο με την σειρά του περιλαμβάνει τους σκληρούς δίσκους του συστήματος.
Το πρώτο βήμα λοιπόν, είναι η δημιουργία αυτών των σκληρών δίσκων και η προσθήκη τους στο σύστημα των δοκιμών με λειτουργικό σύστημα Windows Server 2012R2.
Τους δίσκους τους δημιουργούμε και τους συνδέουμε με το VM των δοκιμών μας, εύκολα και απλά μέσω του PowerShell και των παρακάτω εντολών στον Hyper-V host.
# Create five VHDX 1..5| %{New-VHD -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -SizeBytes 20GB -Dynamic} # Attach VHDX disks to a VM 1..5|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI}
Διαπιστώνουμε τόσο την δημιουργία των δίσκων όσο και την σύνδεση τους στο VM, με την Get-PhysicalDisk στο VM
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk2 True OK Healthy Auto-Select 20 GB
PhysicalDisk3 True OK Healthy Auto-Select 20 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk5 True OK Healthy Auto-Select 20 GB
PhysicalDisk1 True OK Healthy Auto-Select 20 GB
PhysicalDisk4 True OK Healthy Auto-Select 20 GB
2.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
2.3 Υλοποίηση Storage Space
Αφού ολοκληρώθηκε η δημιουργία του Storage Pool, μπορούμε να φτιάξουμε το Storage Space με το επίπεδο ασφάλειας που επιθυμούμε. Στην συγκεκριμένη περίπτωση θα δημιουργήσουμε ένα Three-Way Mirror, με τις εξής εντολές στο VM
# Create Storage Space $StorPool=Get-StoragePool -FriendlyName StorPool01 Set-ResiliencySetting -StoragePool $StorPool -Name Mirror -NumberOfColumnsDefault 1 -NumberOfDataCopiesDefault 3 $StorPool | New-VirtualDisk -FriendlyName StorSpace01 -ResiliencySettingName Mirror -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
Εάν θέλουμε να δούμε την κατάσταση του StorageSpace, του partition και των φυσικών δίσκων πάνω στους οποίους έχουν δημιουργηθεί, τότε χρησιμοποιούμε την παρακάτω εντολή
# Display Physical Disks that construct a volume Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | ft –AutoSize
PS C:> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk5 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk4 False OK Healthy Auto-Select 19.25 GB
2.4 Συμπεριφορά σε βλάβη
Όπως είπαμε και στην αρχή, τα δεδομένα που είναι αποθηκευμένα στο Storage Space με προστασία Three-Way Mirror, είναι εξασφαλισμένα ακόμη και στην περίπτωση βλάβης δύο δίσκων.
Θα προσομοιώσουμε λοιπόν την βλάβη δύο δίσκων της συστοιχίας Three-Way Mirror και θα παρατηρήσουμε την συμπεριφορά του Storage Pool και του Storage Space.
Οι ενέργειες που θα γίνουν θα είναι οι εξής
- Αφαίρεση δίσκων
- Επαναφορά δίσκων
- Αφαίρεση και αντικατάσταση με νέους δίσκους
- Προσθήκη του χαλασμένων δίσκων, μετά την αντικατάσταση τους
2.4.1 Αφαίρεση
Η αφαίρεση των δίσκων και συγκεκριμένα των δύο τελευταίων, γίνεται με την παρακάτω εντολή στον Hyper-V Host
# Remove two disks 5..6 | %{Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation $_ -ControllerType SCSI}
Στο Guest VM, διαπιστώνουμε την βλάβη των δίσκων, ως εξής
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk-1 False Lost Communication Warning 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
Ενώ έχουμε και εγγραφές στο SystemEventLog
PS C:> Get-EventLog -LogName System -Source Disk | fl
Index : 649
EntryType : Warning
InstanceId : 2147745949
Message : Disk 5 has been surprise removed.
Category : (0)
CategoryNumber : 0
ReplacementStrings : {DeviceHarddisk5DR14, 5}
Source : disk
TimeGenerated : 23/6/2014 3:23:44 μμ
TimeWritten : 23/6/2014 3:23:44 μμ
UserName :
Index : 648
EntryType : Warning
InstanceId : 2147745949
Message : Disk 4 has been surprise removed.
Category : (0)
CategoryNumber : 0
ReplacementStrings : {…DR13, 4}
Source : disk
TimeGenerated : 23/6/2014 3:23:43 μμ
TimeWritten : 23/6/2014 3:23:43 μμ
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:> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace01 Mirror Incomplete Warning False 30 GB
Μετά την αφαίρεση του δίσκου λοιπόν, το Storage Pool είναι Degraded (υποβαθμισμένο) και το Storage Space είναι σε κατάσταση προειδοποίησης (Warning).
Η λειτουργική κατάσταση όμως του Storage Space με βαθμό προστασίας Three-Way Mirroring μετά την αφαίρεση δύο δίσκων, είναι καλή και τα δεδομένα που είναι αποθηκευμένα εκεί είναι διαθέσιμα.
2.4.2 Επαναφορά
Τους δίσκους που αφαιρέσαμε στην προηγούμενη δοκιμή τους επαναφέρουμε με την παρακάτω εντολή στον Hyper-Vhost
# Reconnect the disk drives 5..6 | %{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI -ControllerNumber 0 -ControllerLocation $_}
Στο Guest VM παρατηρούμε την κατάσταση των φυσικών δίσκων
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk4 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk5 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:> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 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
PhysicalDisk5 False OK Healthy Auto-Select 19.25 GB
Επομένως το Storage Subsystem και συγκεκριμένα τα Storage Spaces, κατάλαβαν την επανασύνδεση των δίσκων, έκαναν όλες τις απαραίτητες ενέργειες αποκατάστασης και η κατάσταση της συστοιχίας είναι και πάλι Healthy.
Όλες αυτές οι ενέργειες έγιναν στο παρασκήνιο, ενώ τα δεδομένα μας ήταν συνεχώς διαθέσιμα.
2.4.3 Αφαίρεση και αντικατάσταση με νέους δίσκους
Στην παράγραφο αυτή θα προσομοιώσουμε την ταυτόχρονη βλάβη δύο δίσκων και την αντικατάσταση τους με νέους.
Για την αφαίρεση των δίσκων, χρησιμοποιούμε την παρακάτω εντολή στον Hyper-VHost
# Remove two disks 5..6 | %{Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation $_ -ControllerType SCSI}
Στο Guest VM διαπιστώνουμε την βλάβη με τους τρόπους που παρουσιάστηκαν στην προηγούμενη παράγραφο 2.4.2 Αφαίρεση.
Η κατάσταση λοιπόν της συστοιχίας είναι η εξής
PS C:> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace01 Mirror Incomplete Warning False 30 GB
Για να αντικαταστήσουμε τους προηγούμενους δίσκους με νέους, πρέπει πρώτα να τους δημιουργήσουμε. Αυτό γίνεται με την εξής εντολή στον Hyper-VHost
1..2| %{New-VHD -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-New-$_.vhdx" -SizeBytes 20GB -Dynamic}
Ενώ η προσθήκη στο guest VM γίνεται με την παρακάτω εντολή
1..2|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-New-$_.vhdx" -ControllerType SCSI}
Οι δύο νέοι δίσκοι εμφανίζονται στο Guest VM, όπως φαίνεται παρακάτω
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk5 True OK Healthy Auto-Select 20 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk-1 False Lost Communication Warning Auto-Select 19.25 GB
PhysicalDisk4 True OK Healthy Auto-Select 20 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk-1 False Lost Communication Warning Auto-Select 19.25 GB
Οι νέοι δίσκοι είναι έτοιμοι να προστεθούν στο StoragePoolκαι να ξεκινήσει η διαδικασία της αποκατάστασης της συστοιχίας.
Πρώτα όμως θα πρέπει να τοποθετηθούν οι «χαλασμένοι» δίσκοι σε κατάσταση Retired. Αυτό γίνεται στο Guest VM ως εξής
Get-PhysicalDisk | where OperationalStatus -like Lost* | Set-PhysicalDisk -Usage Retired
PS C:> Get-PhysicalDisk | where OperationalStatus -like Lost* | Set-PhysicalDisk -Usage Retired
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk5 True OK Healthy Auto-Select 20 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk-1 False Lost Communication Warning Retired 19.25 GB
PhysicalDisk4 True OK Healthy Auto-Select 20 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk-1 False Lost Communication Warning Retired 19.25 GB
Προσθέτουμε τους νέους δίσκους στο Storage Pool με την εντολή στο Guest VM
Add-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk -CanPool $true)
Ενώ για να ξεκινήσει η διαδικασία της αποκατάστασης εκτελούμε την παρακάτω εντολή στο Guest VM
Repair-VirtualDisk -FriendlyName StorSpace01
Με την ολοκλήρωση της αποκατάστασης, η λειτουργική κατάσταση του Storage Space είναι και πάλι καλή (Healthy).
PS C:>
Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace01 Mirror OK Healthy False 30 GB
Ελέγχοντας το StoragePool, παρατηρούμε ότι είναι σε κατάσταση Degraded (υποβαθμισμένο)
PS C:> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
StorPool01 Degraded Warning False False
Primordial OK Healthy True False
Αυτό συμβαίνει γιατί περιλαμβάνει και τους δίσκους που έχουν χαλάσει και έχουν αντικατασταθεί
PS C:> Get-StoragePool -FriendlyName StorPool01 | Get-PhysicalDisk| ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk5 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk-1 False Lost Communication Warning Retired 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 G
Τους δίσκους αυτούς μπορούμε να τους αφαιρέσουμε από το Storage Pool ως εξής
# Remove Failed Disks Remove-PhysicalDisk -StoragePoolFriendlyName StorPool01 -PhysicalDisks (Get-PhysicalDisk | where OperationalStatus -like Lost*)
Μετά την αφαίρεση η κατάσταση του Storage Pool είναι και πάλι Healthy
PS C:> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
StorPool01 OK Healthy False False
Primordial OK Healthy True False
Είναι βέβαια περιττό να αναφέρουμε , ότι όλες αυτές οι ενέργειες γίνονταν στο παρασκήνιο ενώ τα δεδομένα μας είναι διαρκώς διαθέσιμα.
2.4.4 Προσθήκη των χαλασμένου δίσκων μετά την αντικατάσταση τους
Στην δοκιμή αυτή θα εξετάσουμε εάν υπάρχει κάποια επίπτωση στην λειτουργική κατάσταση του Storage Space, στην περίπτωση που οι χαλασμένοι δίσκοι, αφού αφαιρέθηκαν και αντικαταστάθηκαν με νέους, επανασυνδεθούν στο Guest VM.
Ξεκινάμε λοιπόν με την προσθήκη αυτών των δίσκων εκτελώντας στον Hyper-V host την εξής εντολή
# Reconnect the disk drives 4..5 | %{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Hyper-VW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI }
Αφού προστεθούν οι δίσκοι, στο Guest VM έχουμε την εξής εικόνα
PS C:> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk5 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 127 GB
PhysicalDisk7 False Unrecognized Metadata Unhealthy Unknown 20 GB
PhysicalDisk4 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk8 False Unrecognized Metadata Unhealthy Unknown 20 GB
Παρατηρούμε λοιπόν ότι οι δίσκοι αναγνωρίζονται ως Unhealthy με Unrecognized Metadata, δεδομένα δηλαδή των οποίων την περιγραφή δεν φαίνεται να την γνωρίζει το VM.
Η επανασύνδεση αυτών των δίσκων δεν είχε καμία απολύτως επίπτωση στην λειτουργική κατάσταση του StorageSpace, όπως φαίνεται και παρακάτω
PS C:> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace01 Mirror OK Healthy False 30 GB
Στην περίπτωση που θέλουμε να χρησιμοποιήσουμε αυτούς τους δίσκους θα πρέπει να κάνουμε επαναφορά (reset) της κατάστασης τους, ως εξής
Get-PhysicalDisk | where OperationalStatus -like Unrecognized* | Reset-PhysicalDisk
2.5 Βλάβη τριών δίσκων (3) δίσκων
Όπως αναφέραμε στην αρχή, το Three-Way Mirror επιτρέπει την απρόσκοπτη λειτουργία σε περίπτωση βλάβης μέχρι και δύο δίσκων. Εάν υποστούν βλάβη περισσότεροι από δύο (2) δίσκους τότε αναμένεται η συστοιχία να μην λειτουργεί και τα δεδομένα που είναι αποθηκευμένα επάνω της να μην είναι διαθέσιμα.
Αφαιρώντας λοιπόν τρεις δίσκους, μέσω των παρακάτω εντολών στον Hyper-Vhost
# Remove two disks 2..4 | %{Remove-VMHardDiskDrive -VMName W2012R2 -ControllerNumber 0 -ControllerLocation $_ -ControllerType SCSI}
Παρατηρούμε ότι το Storage Pool είναι σε κατάσταση εκτεταμένης βλάβης
PS C:> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
StorPool01 Read-only Unhealthy False False
Primordial OK Healthy True False
Ενώ το Storage Space δεν υπάρχει
PS C:> 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 θα έρθουν και πάλι σε καλή λειτουργική κατάσταση.