Γενικά
Σε αυτό το άρθρο θα κάνουμε έλεγχο της ανθεκτικότητας των Storage Spaces έναντι βλάβης ενός, δύο ή και περισσοτέρων σκληρών δίσκων πάνω στους οποίους έχουν υλοποιηθεί. Θα εξετάσουμε και τα τρία επίπεδα ασφάλειας που προσφέρονται, δηλαδή τα :
- Two Way Mirroring
- Three Way Mirroring και
- Parity
Υπάρχει μια αντιστοιχία των παραπάνω επιπέδων ασφαλείας με τα γνωστά μας RAID levels, αλλά όχι απόλυτη μια που, όπως θα δούμε, μπορούμε να δημιουργήσουμε ένα Two-Way Mirror με χρήση τριών (3) δίσκων.
Ένα πλήθος με τις συνηθέστερες ερωτήσεις και τις απαντήσεις τους σχετικά με τα Storage Spaces θα βρείτε στο παρακάτω σύνδεσμο :
Storage Spaces Frequently Asked Questions (FAQ)
Ενώ, πολύ χρήσιμος είναι και ο παρακάτω πίνακας στον οποίο παρουσιάζεται ο συσχετισμός των επιπέδων ασφαλείας των Storage Spaces με τον ελάχιστο απαιτούμενο αριθμό δίσκων.
Resiliency type | Minimum number of columns | Column-to-disk correlation | Minimum number of disks |
Two-way mirror |
1 |
1:2 |
2 |
Three-way mirror |
1 |
1:3 |
5 |
Parity |
3 |
1:1 |
3 |
Για την δημιουργία των Storage Spaces και τους ελέγχους της αντοχής τους, την προσομοίωση δηλαδή της βλάβης, θα χρησιμοποιήσουμε το αγαπημένο μας εργαλείο, το PowerShell, ενώ όλες οι δοκιμές θα διεξαχθούν σε εργαστηριακό περιβάλλον που περιλαμβάνει έναν Windows Server 2012R2 Hyper-V host και ένα Guest VM με Windows Server 2012R2
1. Έλεγχος αντοχής Two Way Mirroring
1.1 Δημιουργία δίσκων
Για να δημιουργήσουμε τους σκληρούς δίσκους και τους συνδέουμε στο Guest VM, εκτελώντας τις παρακάτω εντολές στον Hyper-V host
# Create three VHDX
1..3|%{New-VHD -Path "C:Virtual MachinesW2012R2Virtual Hard DisksDisk-$_.vhdx" -LogicalSectorSizeBytes 4096 -PhysicalSectorSizeBytes 4KB -SizeBytes 20GB -Dynamic}
# Attach VHDX disks to a VM
1..3|%{Add-VMHardDiskDrive -VMName W2012R2 -Path "C:Virtual MachinesW2012R2Virtual Hard DisksDisk-$_.vhdx" -ControllerType SCSI}
1.2 Δημιουργία Storage Pool
Το Storage Space υλοποιείται επάνω σε ένα Storage Pool, που το δημιουργούμε με τις παρακάτω εντολές
# Create Storage Pool
$disks = Get-PhysicalDisk -CanPool $true
$StorSubSys =Get-StorageSubSystem -FriendlyName *Spaces*
New-StoragePool -FriendlyName StorPool-01 -PhysicalDisks $disks -StorageSubSystemFriendlyName $StorSubSys.FriendlyName
1.3 Υλοποίηση Storage Space
Έχοντας λοιπόν δημιουργήσει το απαιτούμενο Storage Pool, υλοποιούμε το Two-Way Μirror Storage Space, με το απαιτούμενο partition και το drive letter της επιλογής μας, με τις παρακάτω εντολές
# Create Storage Space
New-VirtualDisk-FriendlyNameStorSpace-01-ResiliencySettingNameMirror-StoragePoolFriendlyNameStorPool-01-UseMaximumSize
$DiskNo= (Get-VirtualDisk-FriendlyNameStorSpace-01|Get-Disk).Number
Set-Disk-Number$DiskNo-IsReadOnly0
Set-Disk-Number$DiskNo-IsOffline0
Initialize-Disk-Number$DiskNo-PartitionStyleMBR
New-Partition-DiskNumber$DiskNo-DriveLetterS-UseMaximumSize
Initialize-Volume-DriveLetterS-FileSystemNTFS-Confirm:$false
Εάν θέλουμε να δούμε την κατάσταση του Storage Space, του partition και των φυσικών δίσκων πάνω στους οποίους έχουν δημιουργηθεί, τότε χρησιμοποιούμε την παρακάτω εντολή
# Display Physical Disks that construct a volume
Get-VolumeS|Get-Partition|Get-Disk|Get-VirtualDisk|Get-PhysicalDisk
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
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
1.4 Βλάβη ενός δίσκου
Θα προσομοιώσουμε τις εξής βλάβες ενός από τους δίσκους που απαρτίζουν την συστοιχία και θα παρατηρήσουμε τα αποτελέσματα στο Storage Pool και στο Storage Space.
- Αφαίρεση
- Επαναφορά
- Αφαίρεση και αντικατάσταση με νέο
- Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση του
1.4.1 Αφαίρεση
Η αφαίρεση του δίσκου και συγκεκριμένα του τρίτου, γίνεται με την παρακάτω εντολή στον Hyper-V Host
# Remove Disk
Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation3-ControllerTypeSCSI
Στο guest VM, διαπιστώνουμε την βλάβη του δίσκου, ως εξής
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk-1 False Lost Communication Warning Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
Ενώ έχουμε και εγγραφές στο System Event Log
PS C:Windowssystem32> Get-EventLog -LogName System -Source Disk | fl
Index : 456
EntryType : Warning
InstanceId : 2147745949
Message : Disk 3 has been surprise removed.
Category : (0)
CategoryNumber : 0
ReplacementStrings : {DR3, 3}
Source : disk
TimeGenerated : 12/4/2014 9:22:20 πμ
TimeWritten : 12/4/2014 9:22:20 πμ
Η κατάσταση του Storage Pool είναι η εξής
PS C:Windowssystem32> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
Primordial OK Healthy True False
StorPool-01 Degraded Warning False False
Η κατάσταση του Storage Space είναι η εξής
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace-01 Mirror Incomplete Warning False 27 GB
Μετά την αφαίρεση του δίσκου λοιπόν, το Storage Pool είναι Degraded (υποβαθμισμένο) και το Storage Space είναι σε κατάσταση προειδοποίησης (Warning).
Η λειτουργική κατάσταση όμως του Storage Space είναι καλή και τα δεδομένα μας διαθέσιμα και ασφαλή.
1.4.2 Επαναφορά
Επαναφέρουμε τον δίσκο που αφαιρέσαμε, με την παρακάτω εντολή στον Hyper-V host
Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-3.vhdx'-ControllerTypeSCSI-ControllerLocation3
Στο Guest VM παρατηρούμε ότι ο δίσκος έχει επανέλθει
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 50 GB
Η κατάσταση του Storage Pool είναι
PS C:Windowssystem32> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
Primordial OK Healthy True False
StorPool-01 OK Healthy False False
Και του Storage Space
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace-01 Mirror OK Healthy False 27 GB
Επομένως το Storage Subsystem και συγκεκριμένα τα Storage Spaces, κατάλαβαν την επαναφορά του δίσκου, έκαναν όλες τις απαραίτητες ενέργειες αποκατάστασης και η κατάσταση της συστοιχίας είναι και πάλι Healthy.
Όλες αυτές οι ενέργειες έγιναν στο παρασκήνιο και τα δεδομένα μας ήταν συνεχώς διαθέσιμα.
1.4.3 Αφαίρεση και αντικατάσταση με νέο
Στην περίπτωση αυτήν θα αντικαταστήσουμε τον δίσκο που θα αφαιρέσουμε με καινούριο. Όπως προηγουμένως, αφαιρούμε τον δεύτερο δίσκο με την παρακάτω εντολή στο Hyper-V Host
Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation2-ControllerTypeSCSI
Στο Guest VM διαπιστώνουμε την βλάβη με τους τρόπους που παρουσιάστηκαν στην παράγραφο 1.5.1 Αφαίρεση.
Η κατάσταση λοιπόν της συστοιχίας είναι η εξής
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace-01 Mirror Incomplete Warning False 27 GB
Προσθέτουμε τον νέο δίσκο στην ίδια θέση που είχε και ο χαλασμένος που αφαιρέθηκε, με τις εξής εντολές στον Hyper-V Host
New-vhd-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2-Repair.vhdx'-LogicalSectorSizeBytes4096-PhysicalSectorSizeBytes4KB-SizeBytes20GB-Dynamic
Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2-Repair.vhdx'-ControllerTypeSCSI-ControllerLocation2
Βλέπουμε τον νέο δίσκο στο guest VM
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk3 False OK Healthy 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
PhysicalDisk0 False OK Healthy Auto-Select 50 GB
PhysicalDisk2 True OK Healthy Auto-Select 20 GB
Για να ξεκινήσει η επιδιόρθωση της συστοιχίας θα πρέπει να αφαιρεθεί ο χαλασμένος δίσκος από το Storage Pool και να προστεθεί ο καινούριος. Αυτό γίνεται με τι εξής εντολές στο Guest VM
Get-PhysicalDisk|whereOperationalStatus-likeLost*|Set-PhysicalDisk-UsageRetired
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk3 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
PhysicalDisk0 False OK Healthy Auto-Select 50 GB
PhysicalDisk2 True OK Healthy Auto-Select 20 GB
Προσθέτουμε τον νέο δίσκο στο Storage Pool με την εντολή
Add-PhysicalDisk-StoragePoolFriendlyNameStorPool-01-PhysicalDisks (Get-PhysicalDisk-CanPool$true)
Για να ξεκινήσει η διαδικασία της αποκατάστασης εκτελούμε την εντολή
Repair-VirtualDisk-FriendlyNameStorSpace-01
Μετά την ολοκλήρωση της αποκατάστασης ελέγχουμε την λειτουργική κατάσταση του Storage Space (συστοιχία) ως εξής
PS C:Windowssystem32>
Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace-01 Mirror OK Healthy False 27 GB
Και του Storage Pool
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
StorPool-01 Degraded Warning False False
To storage Pool είναι σε κατάσταση Degraded γιατί περιλαμβάνει τον δίσκο που έχει χαλάσει
PS C:Windowssystem32> Get-StoragePool -FriendlyName StorPool-01 | Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk3 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
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
Αφαιρώντας λοιπόν αυτόν τον δίσκο
Repair-VirtualDisk-FriendlyNameStorSpace-01
Η κατάσταση της συστοιχίας γίνεται Healthy
PS C:Windowssystem32> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
Primordial OK Healthy True False
StorPool-01 OK Healthy False False
Όλες αυτές οι ενέργειες έγιναν στο παρασκήνιο ενώ τα δεδομένα μας ήταν διαρκώς διαθέσιμα.
1.4.4 Προσθήκη του χαλασμένου δίσκου μετά την αντικατάσταση του
Στην παράγραφο αυτή θα εξετάσουμε την συμπεριφορά των Storage Spaces, εάν προστεθεί ο δίσκος που είχε πριν αφαιρεθεί και αντικατασταθεί με νέο.
Προσθέτουμε λοιπόν πάλι τον δίσκο, εκτελώντας στον Hyper-V host
Add-VMHardDiskDrive-VMNameW2012R2-Path'C:Virtual MachinesW2012R2Virtual Hard DisksDisk-2.vhdx'-ControllerTypeSCSI
Με την προσθήκη του δίσκου στο VM έχουμε την εξής εικόνα
PS C:Windowssystem32> Get-PhysicalDisk | ft -AutoSize
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
———— ——- —————– ———— —– —-
PhysicalDisk3 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 19.25 GB
PhysicalDisk5 False Unrecognized Metadata Unhealthy Unknown 20 GB
PhysicalDisk0 False OK Healthy Auto-Select 50 GB
PhysicalDisk2 False OK Healthy Auto-Select 19.25 GB
Ο δίσκος αναγνωρίζεται ως Unhealthy και φαίνεται να περιλαμβάνει Unrecognized Metadata, δεδομένα δηλαδή των οποίων την περιγραφή δεν φαίνεται να την γνωρίζει το VM.
Για το storage Pool και την συστοιχία δεν έχει αλλάξει τίποτα και είναι σε κατάσταση Healthy
Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
StorPool-01 OK Healthy False False
Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
———— ——————— —————– ———— ————– —-
StorSpace-01 Mirror OK Healthy False 27 GB
Εάν θέλουμε να χρησιμοποιήσουμε αυτόν τον δίσκο, θα πρέπει να γίνει επαναφορά (reset) της κατάστασης του.
Get-PhysicalDisk|whereOperationalStatus-likeUnrecognized*|Reset-PhysicalDisk
Παρατηρούμε λοιπόν ότι η προσθήκη του παλιού δίσκου που ενώ υπήρχε στο Storage Pool και στο Storage Space αφαιρέθηκε και αντικαταστάθηκε με νέο δεν έχει κάποια επίπτωση στην λειτουργία του Storage Space (συστοιχία).
1.5 Αφαίρεση δύο (2) δίσκων
To Storage Space που εξετάζουμε είναι τύπου Two-Way Mirror. Αυτός ο τύπος συστοιχίας επιτρέπει την ομαλή λειτουργία σε περίπτωση βλάβης ενός (1) από τους δίσκους που την απαρτίζουν. Εάν υποστούν βλάβη δύο από τους δίσκους της τότε αναμένεται η συστοιχία να μην λειτουργεί και τα δεδομένα που είναι αποθηκευμένα επάνω της να μην είναι διαθέσιμα.
Ετσι εάν αφαιρέσουμε δύο δίσκους, μέσω των παρακάτω εντολών στον Hyper-V host
Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation1-ControllerTypeSCSI
Remove-VMHardDiskDrive-VMNameW2012R2-ControllerNumber0-ControllerLocation2-ControllerTypeSCSI
Παρατηρούμε ότι το Storage Pool είναι σε κατάσταση εκτεταμένης βλάβης
PS C:Windowssystem32> Get-StoragePool | ft -AutoSize
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
———— —————– ———— ———— ———-
Primordial OK Healthy True False
StorPool-01 Read-only Unhealthy False False
Ενώ το Storage Space δεν υπάρχει
PS C:Windowssystem32> Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
Get-Volume : No MSFT_Volume objects found with property ‘DriveLetter’ equal to ‘S’. Verify the
value of the property and retry.
At line:1 char:1
+ Get-Volume S | Get-Partition | Get-Disk | Get-VirtualDisk | ft -AutoSize
+ ~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (S:Char) [Get-Volume], CimJobException
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound_DriveLetter,Get-Volume
Εάν επανασυνδέσουμε τους δίσκους στο VM τότε το Storage Pool και το Storage Space θα έρθουν και πάλι σε καλή λειτουργική κατάσταση.