Miklix

การเปลี่ยนไดรฟ์ที่ล้มเหลวในอาร์เรย์ mdadm บน Ubuntu

ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 22 นาฬิกา 03 นาที 12 วินาที UTC

หากคุณอยู่ในสถานการณ์ที่เลวร้ายจากการที่ไดรฟ์ล้มเหลวในอาร์เรย์ RAID mdadm บทความนี้จะอธิบายวิธีการเปลี่ยนไดรฟ์ดังกล่าวบนระบบ Ubuntu อย่างถูกต้อง


หน้าเพจนี้ได้รับการแปลจากเครื่องคอมพิวเตอร์จากภาษาอังกฤษ เพื่อให้ทุกคนเข้าถึงได้มากที่สุด น่าเสียดายที่การแปลด้วยเครื่องยังไม่ถือเป็นเทคโนโลยีที่สมบูรณ์แบบ จึงอาจเกิดข้อผิดพลาดได้ หากต้องการ คุณสามารถดูเวอร์ชันภาษาอังกฤษต้นฉบับได้ที่นี่:

Replacing a Failed Drive in an mdadm Array on Ubuntu

ข้อมูลในโพสต์นี้ใช้ Ubuntu 18.04 และเวอร์ชันของ mdadm ที่รวมอยู่ในที่เก็บของมัน โดยในขณะที่เขียนคือ v4.1-rc1 ข้อมูลนี้อาจใช้ได้หรืออาจใช้ไม่ได้กับเวอร์ชันอื่น

เมื่อไม่นานนี้ เซิร์ฟเวอร์ไฟล์ที่บ้านของฉันมีปัญหาไดรฟ์ขัดข้องกะทันหัน ซึ่งประกอบด้วยไดรฟ์ 9 ตัวในอาร์เรย์ RAID-6 แบบ mdadm ซึ่งถือเป็นเรื่องที่น่ากลัวเสมอมา แต่โชคดีที่ฉันหาไดรฟ์ทดแทนมาได้อย่างรวดเร็ว และได้รับการส่งมอบในวันถัดไป จึงสามารถเริ่มดำเนินการสร้างใหม่ได้

ยอมรับว่าตอนแรกผมค่อนข้างงกไปหน่อยตอนติดตั้งเซิร์ฟเวอร์ไฟล์ เพราะมีเพียงสองไดรฟ์เท่านั้นที่เป็นไดรฟ์ NAS จริงๆ (Seagate IronWolf) ในขณะที่ไดรฟ์ที่เหลือเป็นไดรฟ์เดสก์ท็อป (Seagate Barracuda) ไม่น่าแปลกใจเลยที่ไดรฟ์เดสก์ท็อปไดรฟ์หนึ่งตัวนั้นพังไป (แม้ว่าจะใช้งานมาเกือบสามปีแล้วก็ตาม) มันพังไปหมดแล้ว หลังจากย้ายมันไปยังกล่อง USB เดสก์ท็อป สิ่งที่ได้ยินจากมันก็คือเสียงคลิกที่น่าขนลุก และทั้ง Ubuntu 20.04 และ Windows 10 ก็ไม่สามารถตรวจจับเสียงนี้ได้

เอาล่ะ มาดูชิ้นส่วนทดแทนกัน (และใช่แล้ว ไดรฟ์ใหม่ที่ฉันซื้อคือ IronWolf บทเรียนที่ได้รับ) - การสูญเสียไดรฟ์ในอาร์เรย์ที่กำลังทำงานนั้นน่ากลัวพอๆ กัน แต่จะยิ่งน่ากลัวกว่าหากคุณไม่ทราบขั้นตอนที่ถูกต้องในการเปลี่ยนไดรฟ์นั้น นี่ไม่ใช่ครั้งแรกที่ฉันต้องเปลี่ยนไดรฟ์ที่เสียในอาร์เรย์ mdadm แต่โชคดีที่ไม่ค่อยเกิดขึ้นบ่อยนักจนฉันต้องค้นหาคำสั่งที่เหมาะสม ครั้งนี้ฉันตัดสินใจจัดทำคู่มือเล็กๆ ของตัวเองเพื่อใช้เป็นข้อมูลอ้างอิงในอนาคต

ก่อนอื่นเลย เมื่อคุณได้รับอีเมลแจ้งเหตุการณ์ล้มเหลวอันน่าปวดหัวจาก mdadm คุณต้องระบุไดรฟ์ที่ล้มเหลว แน่นอนว่า mdadm จะแจ้งชื่ออุปกรณ์ให้คุณทราบ (ในกรณีของฉันคือ /dev/sdf) แต่คงไม่ชัดเจนว่าไดรฟ์จริงคือไดรฟ์ใด เนื่องจากชื่อเหล่านั้นอาจเปลี่ยนแปลงได้เมื่อบูตเครื่อง

หากคุณไม่แน่ใจว่าชื่ออุปกรณ์ใดที่ล้มเหลว คุณสามารถใช้คำสั่งต่อไปนี้เพื่อค้นหา (แทนที่ /dev/md0 ด้วยอุปกรณ์ RAID ของคุณ):

mdadm -–query -–detail /dev/md0

ตามที่กล่าวไปแล้ว ในกรณีของฉันเป็น /dev/sdf ดังนั้นเราจะดำเนินการต่อด้วยเรื่องนั้น

จากนั้นคุณสามารถลองค้นหาหมายเลขซีเรียลของไดรฟ์ที่ล้มเหลวได้โดยออกคำสั่งนี้:

smartctl -–all /dev/sdf | grep -i 'Serial'

(หากไม่พบ smartctl คุณจำเป็นต้องติดตั้งแพ็คเกจ smartmontools บน Ubuntu)

จากนั้นสามารถนำหมายเลขซีเรียลไปเปรียบเทียบกับหมายเลขซีเรียลบนฉลากบนไดรฟ์เพื่อดูว่าไดรฟ์ใดมีปัญหา

ครั้งนี้ฉันไม่โชคดีเท่าไรนัก ไดรฟ์เสียสนิทและไม่ยอมให้ข้อมูล SMART หรือข้อมูลอื่น ๆ รวมถึงหมายเลขซีเรียลด้วย

เนื่องจากฉันสามารถเข้าถึงเซิร์ฟเวอร์ได้จริง (ซึ่งจำเป็นจริงๆ หากคุณจะเปลี่ยนไดรฟ์จริงด้วยตัวเอง ฉันเดานะ ;-)) และ เซิร์ฟเวอร์กำลังทำงานอยู่เมื่อดิสก์ขัดข้อง (และยังคงทำงานได้ดีด้วยซ้ำเนื่องจาก RAID-6) ฉันจึงเลือกใช้แนวทางที่เรียบง่ายมาก แต่ได้ผลจริงและชัดเจนมาก นั่นคือการคัดลอกไฟล์ขนาดใหญ่ไปยังเซิร์ฟเวอร์และดูว่าไฟ HDD ตัวใดไม่กะพริบ ภายในไม่กี่วินาที ฉันก็ระบุตัวการได้แล้ว

ก่อนที่จะดึงไดรฟ์ทางกายภาพออก ควรแจ้ง mdadm อย่างเป็นทางการถึงจุดประสงค์นี้ โดยออกคำสั่งนี้ (เปลี่ยนชื่ออุปกรณ์ด้วยชื่อของคุณเองตามความเหมาะสม):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

หากประสบความสำเร็จ mdadm จะตอบกลับด้วยข้อความที่แจ้งว่าได้ "ถอดไดรฟ์ออกทันที" เนื่องจากอุปกรณ์ RAID เสมือนกำลังทำงานอยู่ในขณะนั้น

หากล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดคล้ายกับ "อุปกรณ์หรือทรัพยากรไม่ว่าง" อาจเป็นเพราะ mdadm ไม่ได้ลงทะเบียนไดรฟ์เพื่อให้ล้มเหลวโดยสมบูรณ์ หากต้องการให้ล้มเหลวโดยสมบูรณ์ ให้ใช้คำสั่งนี้ (อย่าลืมเปลี่ยนชื่ออุปกรณ์ด้วยชื่อของคุณเองตามความเหมาะสม):

mdadm --manage /dev/md0 --fail /dev/sdf

หลังจากนั้นคุณก็สามารถลบอุปกรณ์ออกจากอาร์เรย์ได้ด้วยคำสั่งก่อนหน้า

ตอนนี้ถึงเวลาเปลี่ยนไดรฟ์แล้ว หากคุณมั่นใจ จริงๆ ว่า เครื่องและตัวควบคุมของคุณรองรับการสลับเปลี่ยนขณะเครื่องร้อน คุณก็สามารถทำได้โดยไม่ต้องปิดเครื่อง ซึ่งถือเป็นวิธีหนึ่งสำหรับระบบการผลิตที่สำคัญที่ทำงานบนฮาร์ดแวร์เซิร์ฟเวอร์ที่เหมาะสมและคุณทราบดีว่าสามารถจัดการได้ เซิร์ฟเวอร์ไฟล์ที่บ้านของฉันใช้เมนบอร์ดเดสก์ท็อประดับผู้บริโภคที่มีตัวควบคุม SATA กึ่งไม่มีชื่อสองสามตัวในสล็อต PCIe เพื่อให้มีพอร์ต SATA เพิ่มเติม

แม้ว่าโดยทั่วไปแล้ว SATA จะ รองรับการสลับเปลี่ยนฮาร์ดดิสก์แบบ Hot Swap แต่ฉันไม่ได้เสี่ยงอะไรเลยในการตั้งค่านี้ ดังนั้น ฉันจึงเลือกที่จะปิดเครื่องขณะเปลี่ยนไดรฟ์

ก่อนจะทำเช่นนั้น ควรใส่เครื่องหมายแสดงความคิดเห็นในไฟล์ /etc/fstab เพื่อไม่ให้ Ubuntu พยายามติดตั้งอุปกรณ์โดยอัตโนมัติเมื่อบูตเครื่องครั้งต่อไป เนื่องจากอาจทำให้ระบบค้างและบังคับให้เข้าสู่โหมดการกู้คืนเนื่องจากอาร์เรย์ RAID ที่เสื่อมประสิทธิภาพ ซึ่งปัญหาดังกล่าวอาจไม่ใช่ปัญหาใหญ่หากเป็นระบบเดสก์ท็อป แต่ฉันใช้เซิร์ฟเวอร์นี้แบบไม่มีหน้าจอและไม่มีจอภาพหรือแป้นพิมพ์ต่ออยู่ ดังนั้นอาจเกิดปัญหาเล็กน้อย

หลังจากบูตเครื่องด้วยไดรฟ์ใหม่เอี่ยมที่ติดตั้งแล้ว ให้ใช้ lsblk หรือวิธีอื่นเพื่อระบุไดรฟ์นั้น หากคุณไม่ได้เปลี่ยนแปลงอะไรอย่างอื่น ไดรฟ์นั้น อาจ มีชื่อเดียวกับไดรฟ์ที่คุณเปลี่ยน (แต่ก็ไม่ จำเป็น ) ในกรณีของฉัน ชื่อไดรฟ์ใหม่จึงเรียกว่า /dev/sdf ด้วย

เนื่องจากอาร์เรย์ของฉันใช้พาร์ติชันแทนอุปกรณ์ทางกายภาพ ฉันจึงจำเป็นต้องคัดลอกตารางพาร์ติชันจากไดรฟ์ที่ใช้งานไปยังไดรฟ์ใหม่เพื่อให้แน่ใจว่าเป็นพาร์ติชันเดียวกันทุกประการ หากคุณเรียกใช้อาร์เรย์บนอุปกรณ์ทางกายภาพแทน คุณสามารถข้ามขั้นตอนนี้ได้

ฉันใช้ sgdisk เพื่อวัตถุประสงค์นี้ โดยคัดลอกตารางพาร์ติชั่นจาก /dev/sdc ไปยัง /dev/sdf อย่าลืมเปลี่ยนชื่ออุปกรณ์ให้ตรงกับชื่ออุปกรณ์ของคุณเองตามความเหมาะสม

โปรดสังเกต ลำดับที่นี่: คุณต้องระบุไดรฟ์ "ถึง" ก่อน! นี่อาจดูขัดกับสัญชาตญาณของฉันเล็กน้อย แต่ให้แน่ใจว่าคุณทำถูกต้องเพื่อที่คุณจะได้ไม่เกิดความล้มเหลวของไดรฟ์อีกในอาร์เรย์ ;-)

sgdisk -R /dev/sdf /dev/sdc

จากนั้นเพื่อหลีกเลี่ยงความขัดแย้งของ UUID ให้สร้าง UUID ใหม่สำหรับไดรฟ์ใหม่:

sgdisk -G /dev/sdf

และตอนนี้ในที่สุดก็ถึงเวลาเพิ่มไดรฟ์ใหม่ลงในอาร์เรย์และเริ่มงานสร้างใหม่! (โอเค จริงๆ แล้วไม่ใช่ปาร์ตี้หรอก มันเป็นกระบวนการที่ช้าและน่ากังวลทีเดียว เพราะคุณคงไม่อยากให้ไดรฟ์อื่นล้มเหลวในตอนนี้หรอก แต่เบียร์อาจช่วยได้)

หากต้องการเพิ่มไดรฟ์ใหม่ลงในอาร์เรย์ ให้ใช้คำสั่งนี้ (อีกครั้ง ตรวจสอบให้แน่ใจว่าได้เปลี่ยนชื่ออุปกรณ์ด้วยชื่อของคุณเองตามความเหมาะสม):

mdadm -–manage /dev/md0 -–add /dev/sdf1

หากทุกอย่างเป็นไปด้วยดี ไดรฟ์จะถูกเพิ่มเข้าไปในอาร์เรย์โดยไม่มีสะดุด ฉันเชื่อว่าไดรฟ์นี้ถูกเพิ่มเข้ามาเป็น "Hot Spare" ตามค่าเริ่มต้น แต่เนื่องจากอาร์เรย์นี้ไม่มีดิสก์ (ดิสก์ที่เสีย) จึงถูกนำไปใช้งานทันทีและกระบวนการสร้างใหม่จะเริ่มต้นขึ้น

คุณสามารถคอยติดตามได้ดังนี้:

watch cat /proc/mdstat

วิธีนี้จะใช้เวลาสักพัก บนเซิร์ฟเวอร์ระดับล่างของฉัน (โดยอิงตามฮาร์ดแวร์ระดับผู้บริโภคและไดรฟ์เดสก์ท็อปเป็นหลัก) สามารถทำความเร็วได้ต่ำกว่า 100 MB/วินาที โปรดทราบว่านี่คือ RAID-6 ดังนั้นจึงต้องมีการคำนวณพาริตี้จำนวนมากในการสร้างใหม่ RAID-10 จะเร็วกว่ามาก เครื่องนี้โดยเฉพาะมี CPU AMD A10 9700E แบบควอดคอร์ ("E" หมายถึงเป็นรุ่นประหยัดพลังงานที่ลดความเร็วลง กล่าวคือ ไม่เร็วเป็นพิเศษ) เพื่อให้คุณทราบว่าจะคาดหวังอะไรได้บ้าง ด้วยไดรฟ์ขนาด 8 TB จำนวน 9 ตัวในเซ็ตอัปของฉัน การสร้างใหม่ทั้งหมดใช้เวลาเพียง 24 ชั่วโมงเศษ

ระหว่างการสร้างใหม่ คุณสามารถเมาท์ระบบไฟล์บนอาร์เรย์และใช้งานได้ตามปกติหากคุณต้องการ แต่ฉันแนะนำให้ปล่อยให้การสร้างใหม่เสร็จสิ้นก่อน โปรดทราบว่าหากไดรฟ์หนึ่งล้มเหลว ไดรฟ์อื่นอาจตามมาในไม่ช้า ดังนั้น คุณจึงต้องการให้การสร้างใหม่เสร็จสิ้นโดยเร็วที่สุด เนื่องจากคุณคงไม่อยากให้ไดรฟ์อื่นล้มเหลวในระหว่างนั้น ดังนั้น อย่าสร้างภาระให้กับ IO อื่นๆ ที่ไม่จำเป็นอย่างยิ่ง

เมื่อเสร็จแล้ว ให้เพิ่มกลับเข้าไปในไฟล์ /etc/fstab รีบูต และเพลิดเพลินไปกับไฟล์ของคุณ :-)

แชร์บนบลูสกายแชร์บนเฟสบุ๊คแชร์บน LinkedInแชร์บน Tumblrแชร์บน Xแชร์บน LinkedInปักหมุดบน Pinterest

มิคเคล บัง คริสเตนเซ่น

เกี่ยวกับผู้เขียน

มิคเคล บัง คริสเตนเซ่น
ไมเคิล คือผู้สร้างและเจ้าของเว็บไซต์ miklix.com เขามีประสบการณ์เป็นโปรแกรมเมอร์/นักพัฒนาซอฟต์แวร์คอมพิวเตอร์มืออาชีพมากว่า 20 ปี และปัจจุบันทำงานเต็มเวลาให้กับบริษัทไอทีขนาดใหญ่แห่งหนึ่งในยุโรป เมื่อไม่ได้เขียนบล็อก เขาจะใช้เวลาว่างไปกับความสนใจ งานอดิเรก และกิจกรรมต่างๆ มากมาย ซึ่งในระดับหนึ่งอาจสะท้อนให้เห็นได้จากหัวข้อต่างๆ มากมายที่กล่าวถึงในเว็บไซต์นี้