Tutorial : Αλλαγή Δίσκου σε Dedicated Server στη Hetzner
Η hetzner αποτελεί την αγαπημένη επιλογή αρκετών εταιρειών web development λόγο προσιτών τιμών . Φυσικά αυτό έρχεται με το αντίστοιχο τίμημα μιας και απαιτείται το monitoring του server μας να γίνεται από εμάς .
Μία από τις πιο δύσκολες περιπτώσεις που μπορεί να συναντήσουμε σε έναν dedicated server είναι να έχει χτυπήσει ένας ή περισσότεροι σκληροί δίσκοι. Η διαδικασία που θα πρέπει να ακολουθήσουμε για να μην κλαίμε την μοίρα μας είναι η άμεση αντικατάσταση του δίσκου . Στον παρακάτω οδηγό περιγράφω τα βήματα μιας και είναι ιδιαίτερα αγχωτικό .
Αρχικά να ξεκαθαρίσω πώς το βήμα 0 είναι να έχετε πάρει backup το server σας με κάποιο τρόπο δεν θα το συζητήσουμε εδώ αυτό και το βήμα 1 είναι να έχετε πάρει ξανά backup το server σας .
Στη συνέχεια θα χρειαστούμε ένα χρήσιμο εργαλείο το οποίο θα μας βοηθήσει να δούμε σε τί κατάσταση είναι οι δίσκοι μας , τα serial number αυτών κλπ . Το εργαλείο αυτό είναι το smartmontools. Επίσης σε επόμενο post θα γράψω πώς μπορεί το συγκεκριμένο εργαλείο να χρησιμοποιηθεί για monitoring των δίσκων του server.
Η εγκατάστασή του γίνεται με την εντολή :
yum install smartmontools
Στη συνέχεια πριν τρέξουμε SMART Tests τρέχουμε την παρακάτω εντολή για να δούμε πόσους δίσκους έχουμε στο μηχάνημά μας :
cat /proc/mdstat για να δώ πόσους δίσκους έχει το μηχάνημα
Παρακάτω βλέπουμε το output
[root@dtekhost01 ~]# cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[2] sdb2[1] 523712 blocks super 1.2 [2/2] [UU] md2 : active raid1 sda3[2] sdb3[1] 1073610752 blocks super 1.2 [2/2] [UU] bitmap: 4/8 pages [16KB], 65536KB chunk md0 : active raid1 sda1[2] sdb1[1] 16760832 blocks super 1.2 [2/2] [UU] md3 : active raid1 sda4[2] sdb4[1] 1839090112 blocks super 1.2 [2/2] [UU] bitmap: 0/14 pages [0KB], 65536KB chunk unused devices: none
Στη συνέχεια θα τρέξουμε τα test με το εργαλείο που εγκαταστήσαμε παραπάνω. Δίνουμε επομένως τις παρακάτω δύο εντολές
smartctl -a /dev/sdb
smartctl -a /dev/sda
οι οποίες αναφέρονται στους δίσκους sda και sdb που βρήκαμε πώς έχουμε στο μηχάνημά μας .
Όπως και βλέπετε στο output υπάρχουν αρκετά errors στον sda τα οποία χρήζουν άμεση αντικατάστασή του. Συγκεκριμένα ο δίσκος ξεπέρασε το προσδόκιμο ζωής του.
smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.5.1.el7.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Seagate Barracuda 7200.14 (AF) Device Model: ST3000DM001-9YN166 Serial Number: W1F1ACJ5 LU WWN Device Id: 5 000c50 0538770f2 Firmware Version: CC4B User Capacity: 3,000,592,982,016 bytes [3.00 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: 7200 rpm Device is: In smartctl database [for details use: -P show] ATA Version is: ATA8-ACS T13/1699-D revision 4 SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Wed Feb 27 09:38:21 2019 CET ==> WARNING: A firmware update for this drive may be available, see the following Seagate web pages: http://knowledge.seagate.com/articles/en_US/FAQ/207931en http://knowledge.seagate.com/articles/en_US/FAQ/223651en SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x82) Offline data collection activity was completed without error. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 584) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 343) minutes. Conveyance self-test routine recommended polling time: ( 2) minutes. SCT capabilities: (0x3085) SCT Status supported. SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 113 083 006 Pre-fail Always - 56752808 3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 21 5 Reallocated_Sector_Ct 0x0033 098 098 036 Pre-fail Always - 3184 7 Seek_Error_Rate 0x000f 086 060 030 Pre-fail Always - 449236795 9 Power_On_Hours 0x0032 038 038 000 Old_age Always - 54481 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 21 183 Runtime_Bad_Block 0x0032 097 097 000 Old_age Always - 3 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 842 188 Command_Timeout 0x0032 100 099 000 Old_age Always - 2 4 8 189 High_Fly_Writes 0x003a 097 097 000 Old_age Always - 3 190 Airflow_Temperature_Cel 0x0022 065 053 045 Old_age Always - 35 (Min/Max 21/39) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 13 193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 1671 194 Temperature_Celsius 0x0022 035 047 000 Old_age Always - 35 (0 19 0 0 0) 197 Current_Pending_Sector 0x0012 100 001 000 Old_age Always - 8 198 Offline_Uncorrectable 0x0010 100 001 000 Old_age Offline - 8 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 49556h+56m+00.806s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 70119270344750 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 164905064976389 SMART Error Log Version: 1 ATA Error Count: 831 (device log contains only the most recent five errors) CR = Command Register [HEX] FR = Features Register [HEX] SC = Sector Count Register [HEX] SN = Sector Number Register [HEX] CL = Cylinder Low Register [HEX] CH = Cylinder High Register [HEX] DH = Device/Head Register [HEX] DC = Device Command Register [HEX] ER = Error register [HEX] ST = Status register [HEX] Powered_Up_Time is measured from power on, and printed as DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes, SS=sec, and sss=millisec. It "wraps" after 49.710 days. Error 831 occurred at disk power-on lifetime: 54403 hours (2266 days + 19 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 80 ff ff ff 4f 00 18d+08:07:37.015 READ FPDMA QUEUED 60 00 80 ff ff ff 4f 00 18d+08:07:37.015 READ FPDMA QUEUED 60 00 80 ff ff ff 4f 00 18d+08:07:37.015 READ FPDMA QUEUED 60 00 80 ff ff ff 4f 00 18d+08:07:37.015 READ FPDMA QUEUED 60 00 80 ff ff ff 4f 00 18d+08:07:37.015 READ FPDMA QUEUED Error 830 occurred at disk power-on lifetime: 54402 hours (2266 days + 18 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 80 ff ff ff 4f 00 18d+06:41:30.727 READ FPDMA QUEUED 60 00 00 ff ff ff 4f 00 18d+06:41:30.727 READ FPDMA QUEUED 60 00 00 ff ff ff 4f 00 18d+06:41:30.727 READ FPDMA QUEUED 60 00 00 ff ff ff 4f 00 18d+06:41:30.726 READ FPDMA QUEUED ea 00 00 00 00 00 a0 00 18d+06:41:30.694 FLUSH CACHE EXT Error 829 occurred at disk power-on lifetime: 54400 hours (2266 days + 16 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 30 03 6f 03 Error: UNC at LBA = 0x036f0330 = 57606960 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 80 78 0c 6f 43 00 18d+04:56:29.037 READ FPDMA QUEUED 60 00 00 78 08 6f 43 00 18d+04:56:29.037 READ FPDMA QUEUED 60 00 00 78 04 6f 43 00 18d+04:56:29.037 READ FPDMA QUEUED 60 00 00 78 00 6f 43 00 18d+04:56:29.037 READ FPDMA QUEUED 60 00 00 78 ff 6e 43 00 18d+04:56:29.036 READ FPDMA QUEUED Error 828 occurred at disk power-on lifetime: 54400 hours (2266 days + 16 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 50 09 6d 03 Error: UNC at LBA = 0x036d0950 = 57477456 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 80 f8 0e 6d 43 00 18d+04:56:13.723 READ FPDMA QUEUED 60 00 00 f8 0a 6d 43 00 18d+04:56:13.723 READ FPDMA QUEUED 60 00 00 f8 06 6d 43 00 18d+04:56:13.722 READ FPDMA QUEUED 60 00 00 f8 02 6d 43 00 18d+04:56:13.722 READ FPDMA QUEUED 61 00 08 60 4a 05 43 00 18d+04:56:13.722 WRITE FPDMA QUEUED Error 827 occurred at disk power-on lifetime: 54400 hours (2266 days + 16 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 18 f1 2c 02 Error: UNC at LBA = 0x022cf118 = 36499736 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 80 00 f1 2c 42 00 18d+04:49:25.950 READ FPDMA QUEUED 60 00 80 80 f1 2c 42 00 18d+04:49:25.949 READ FPDMA QUEUED 60 00 80 00 f2 2c 42 00 18d+04:49:25.949 READ FPDMA QUEUED 61 00 08 40 b4 2d 42 00 18d+04:49:25.949 WRITE FPDMA QUEUED 61 00 08 f8 0f ee 43 00 18d+04:49:25.949 WRITE FPDMA QUEUED SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 34206 - # 2 Extended offline Completed without error 00% 34188 - # 3 Extended offline Completed without error 00% 33008 - # 4 Extended offline Completed without error 00% 32990 - # 5 Extended offline Completed without error 00% 32928 - # 6 Short offline Completed without error 00% 32919 - # 7 Extended offline Completed without error 00% 6379 - # 8 Extended offline Aborted by host 90% 6373 - # 9 Short offline Completed without error 00% 6373 - #10 Extended offline Completed without error 00% 5 - SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
Πριν ξεκινήσουμε το rebuild σημειώνουμε τα serial numbers τα οποία μας τα δίνει το smartctl για κάθε δίσκο . Στη συνέχεια αφαιρώ τον δίσκο από το raid table . Προσπάθησα να ακολουθήσω τις εντολές που πρότεινε η hetzner αλλά πήρα το παρακάτω error :
[root@otinanai rebuild]# mdadm /dev/md0 -r /dev/sda1 mdadm: hot remove failed for /dev/sda1: Device or resource busy
Για το λογο αυτό έτρεξα την εντολη :
mdadm --manage /dev/md1 --fail /dev/sda2
για καθε partition του sda. Χρειάζεται προσοχή εδώ επομένως αν το κάνετε πρώτη φορά κάντε καλή επαλήθευση.
Στη συνέχεια τρέχουμε την εξής εντολή :
mdadm /dev/md0 -r /dev/sda1Θα πρέπει να μας επιστρέψει κάτι τέτοιο :
mdadm: hot removed /dev/sda1 from /dev/md0
Αυτό σημαινει ότι αφαιρεθηκε κανονικά επομενως ΠΡΟΣΕΧΤΙΚΑ προχωραμε για τα υπολοιπα
Αφου γίνουν όλα τότε τρέχουμε cat /proc/mdstat όπου ο δίσκος που αφαιρέσαμε θα συμβολίζεται με _
Personalities : [raid1] md2 : active raid1 sdb3[1] 1073610752 blocks super 1.2 [2/1] [_U] bitmap: 7/8 pages [28KB], 65536KB chunk md3 : active raid1 sdb4[1] 1839090112 blocks super 1.2 [2/1] [_U] bitmap: 0/14 pages [0KB], 65536KB chunk md0 : active raid1 sdb1[1] 16760832 blocks super 1.2 [2/1] [_U] md1 : active raid1 sdb2[1] 523712 blocks super 1.2 [2/1] [_U]
To παραπάνω μας δείχνει ότι αφαιρέσαμε τον sda από το RAID επομένως μπορούμε να πούμε την εταιρεία (HETZNER) να αφαιρέσει τον δίσκο . Θα μας ζητήσει το serial number του δίσκου το οποιο το έχουμε βγάλει πιο πάνω
Μόλις ολοκληρώσουν την διαδικάσια θα στείλουν mail οποτε και συνδεομαστε με ssh . Πρέπει να ξέρουμε αν ο δίσκος είανι με MBR ή με GPT
Στη δικια μας περιπτωση ήταν GPT (και GTP φυσικά εννοειται)
Επομένως τρέχουμε τα παρακατω για να γινει αντιγραφη του partition :
sgdisk --backup=sdb_parttable_gpt.bak /dev/sdb sgdisk --load-backup=sdb_parttable_gpt.bak /dev/sdaΚαι την παρακατω εντολή για να βάλουμε καινουριο UUID
sgdisk -G /dev/sdb
Αποτελέσματα των παραπάνω εντολών :
[root@otinanai ~]# sgdisk --backup=sdb_parttable_gpt.bak /dev/sdb The operation has completed successfully. [root@otinanai ~]# sgdisk --load-backup=sdb_parttable_gpt.bak /dev/sda Creating new GPT entries. The operation has completed successfully. [root@otinanai ~]# sgdisk -G /dev/sda The operation has completed successfully.
Χτίζουμε ξανα το raid όπου κάνου αντιστοιχιση του sda σε αυτό .
[root@otinanai ~]# mdadm /dev/md0 -a /dev/sda1 mdadm: added /dev/sda1 [root@otinanai ~]# mdadm /dev/md1 -a /dev/sda2 mdadm: added /dev/sda2 [root@otinanai ~]# mdadm /dev/md2 -a /dev/sda3 mdadm: added /dev/sda3 [root@otinanai ~]# mdadm /dev/md3 -a /dev/sda4 mdadm: added /dev/sda4
Ο συγχρονισμός έχει ξεκινήσει .. Περιμένουμε να τελειώσει. Το συγκεκριμένο σημείο είναι κρίσιμο. Σε ότι πιστεύετε είτε ζητήστε τη βοήθειά του είτε πολύ απλά μην το εξοργίσετε.
[root@otinanai ~]# cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sda2[2] sdb2[1] 523712 blocks super 1.2 [2/1] [_U] resync=DELAYED md2 : active raid1 sda3[2] sdb3[1] 1073610752 blocks super 1.2 [2/1] [_U] resync=DELAYED bitmap: 7/8 pages [28KB], 65536KB chunk md0 : active raid1 sda1[2] sdb1[1] 16760832 blocks super 1.2 [2/1] [_U] [=======>.............] recovery = 37.0% (6212864/16760832) finish=3.4min speed=50984K/sec md3 : active raid1 sda4[2] sdb4[1] 1839090112 blocks super 1.2 [2/1] [_U] resync=DELAYED bitmap: 2/14 pages [8KB], 65536KB chunk
Αφού τελειώσει ο συγχρονισμός τρέχουμε grub2-install /dev/sda προκειμένου να μπορούμε να boot σε περίπτωση επανακκίνησης.
Τώρα στην περίπτωση που είναι χτυπημένος και ο δεύτερος δίσκος όπως συνέβαινε σε εμένα απλά επαναλαμβάνουμε την παραπάνω διαδικασία ξανά αλλά για τον δεύτερο δίσκο.
Οποιοσδήποτε χρειαστεί τη βοηθειά μου ευχαρίστως . Η όλη διαδικασία γνωρίζω πώς είναι ιδιαίτερα αγχωτική για το λόγο αυτό φροντίστε να παίρνετε τακτικά backup.