Miklix

Thay thế ổ đĩa bị lỗi trong mảng mdadm trên Ubuntu

Đã xuất bản: lúc 22:03:13 UTC 15 tháng 2, 2025
Cập nhật lần cuối: lúc 08:50:08 UTC 12 tháng 1, 2026

Nếu bạn đang gặp phải tình huống khó chịu là ổ cứng bị lỗi trong mảng RAID mdadm, bài viết này sẽ hướng dẫn cách thay thế ổ cứng đó một cách chính xác trên hệ thống Ubuntu.


Trang này được dịch máy từ tiếng Anh để có thể tiếp cận được với nhiều người nhất có thể. Thật không may, dịch máy vẫn chưa phải là công nghệ hoàn thiện, do đó có thể xảy ra lỗi. Nếu bạn thích, bạn có thể xem phiên bản tiếng Anh gốc tại đây:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Thông tin trong bài viết này dựa trên Ubuntu 18.04 và phiên bản mdadm có trong kho lưu trữ của nó; tại thời điểm viết bài là v4.1-rc1. Thông tin này có thể đúng hoặc không đúng đối với các phiên bản khác.

Gần đây, máy chủ lưu trữ tại nhà của tôi gặp sự cố hỏng ổ cứng đột ngột. Máy chủ này gồm chín ổ cứng trong mảng RAID-6 mdadm. Điều đó luôn đáng sợ, nhưng may mắn thay, tôi đã nhanh chóng tìm được ổ cứng thay thế và nó đã được giao ngay ngày hôm sau, vì vậy tôi có thể bắt đầu quá trình khôi phục.

Thú thật là ban đầu khi thiết lập máy chủ tập tin, tôi hơi tiết kiệm quá mức; chỉ có hai ổ là ổ NAS thực sự (Seagate IronWolf), còn lại là ổ cứng máy tính để bàn (Seagate Barracuda). Không có gì ngạc nhiên khi một trong những ổ cứng máy tính để bàn đó bị hỏng (sau gần ba năm sử dụng). Nó hoàn toàn chết; sau khi chuyển nó sang hộp đựng ổ cứng USB dành cho máy tính để bàn, tất cả những gì tôi nghe được chỉ là tiếng lách cách khó chịu và cả Ubuntu 20.04 lẫn Windows 10 đều không thể nhận diện được nó.

Thôi được, giờ đến phần thay thế (và đúng vậy, ổ cứng mới tôi mua là IronWolf, bài học kinh nghiệm) - việc mất một ổ cứng trong hệ thống đang hoạt động đã đáng sợ rồi, nhưng còn đáng sợ hơn nếu bạn không biết quy trình thay thế chính xác. Đây không phải lần đầu tiên tôi phải thay thế ổ cứng bị lỗi trong hệ thống mdadm, nhưng may mắn là việc này rất hiếm khi xảy ra nên tôi thường phải tra cứu các lệnh thích hợp. Lần này tôi quyết định tự soạn một hướng dẫn nhỏ để tham khảo trong tương lai.

Vì vậy, trước hết, khi bạn nhận được email thông báo lỗi từ mdadm, bạn cần xác định ổ đĩa nào bị lỗi. Chắc chắn, nó sẽ cho bạn biết tên thiết bị (trong trường hợp của tôi là /dev/sdf), nhưng có lẽ không dễ để xác định đó là ổ đĩa vật lý nào vì tên của chúng có thể thay đổi khi máy khởi động.

Nếu bạn thậm chí không chắc chắn thiết bị nào bị lỗi, bạn có thể sử dụng lệnh sau để tìm ra (thay thế /dev/md0 bằng tên thiết bị RAID của bạn):

mdadm -–query -–detail /dev/md0

Như đã đề cập, trong trường hợp của tôi đó là /dev/sdf, vậy chúng ta hãy tiếp tục với phần đó.

Sau đó, bạn có thể thử tìm số sê-ri của ổ đĩa bị lỗi bằng cách nhập lệnh này:

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

(Nếu không tìm thấy smartctl, bạn cần cài đặt gói smartmontools trên Ubuntu)

Sau đó, số sê-ri có thể được so sánh với số sê-ri trên nhãn vật lý của ổ đĩa để xác định ổ nào bị lỗi.

Lần này thì tôi không may mắn như vậy. Ổ cứng đã hoàn toàn hỏng và thậm chí không cung cấp thông tin SMART hay bất kỳ dữ liệu nào khác, kể cả số seri.

Vì tôi có thể trực tiếp tiếp cận máy chủ (điều này thực sự cần thiết nếu bạn định tự thay thế ổ cứng vật lý, tôi đoán vậy ;-)) và máy chủ vẫn đang hoạt động khi ổ đĩa bị lỗi (và tiếp tục hoạt động tốt nhờ tính năng dự phòng RAID-6), nên tôi đã chọn phương pháp khá thô sơ nhưng thực sự hiệu quả và dễ hiểu: chỉ cần sao chép một tập tin lớn vào máy chủ và quan sát xem đèn báo trên ổ cứng nào không nhấp nháy. Chỉ trong vài giây, tôi đã xác định được thủ phạm.

Trước khi tháo ổ cứng vật lý, bạn nên thông báo chính thức cho mdadm về ý định này bằng cách thực hiện lệnh sau (thay thế tên thiết bị bằng tên thiết bị của bạn nếu cần):

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

Khi thành công, mdadm sẽ trả lời bằng một thông báo cho biết nó đã "gỡ bỏ nóng" ổ đĩa, rõ ràng là vì thiết bị RAID ảo đang thực sự hoạt động vào thời điểm đó.

Nếu gặp lỗi tương tự như "thiết bị hoặc tài nguyên đang bận", có thể là do mdadm chưa thực sự ghi nhận ổ đĩa đã bị lỗi hoàn toàn. Để khắc phục điều này, hãy thực hiện lệnh sau (lưu ý thay thế tên thiết bị bằng tên thiết bị của bạn nếu cần):

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

Sau đó, bạn có thể xóa thiết bị khỏi mảng bằng lệnh trước đó.

Giờ là lúc thực sự thay thế ổ cứng. Nếu bạn thực sự, thực sự - kiểu như, thực sự chắc chắn - rằng máy và bộ điều khiển của bạn hỗ trợ thay thế nóng, bạn có thể làm điều này mà không cần tắt máy. Đó sẽ là cách làm đối với các hệ thống sản xuất quan trọng chạy trên phần cứng máy chủ thực sự, chuyên nghiệp mà bạn biết chắc chắn có thể xử lý được. Tuy nhiên, máy chủ tập tin tại nhà của tôi dựa trên bo mạch chủ máy tính để bàn cấp người tiêu dùng với một vài bộ điều khiển SATA không rõ nguồn gốc trong các khe PCIe để cung cấp thêm cổng SATA.

Mặc dù SATA thường hỗ trợ thay thế nóng, nhưng tôi không muốn mạo hiểm trong trường hợp này, vì vậy tôi đã chọn cách tắt máy trong khi thay thế ổ cứng.

Trước khi làm điều đó, tốt nhất là nên vô hiệu hóa thiết bị RAID trong tệp /etc/fstab để Ubuntu không tự động cố gắng gắn kết nó khi khởi động lần sau, vì điều này có thể gây treo máy và buộc bạn phải vào chế độ phục hồi do mảng RAID bị lỗi. Điều đó có thể không phải là vấn đề lớn nếu đó là hệ thống máy tính để bàn, nhưng tôi chạy máy chủ này mà không có màn hình hoặc bàn phím, vì vậy việc này sẽ hơi rắc rối.

Sau khi khởi động máy với ổ cứng mới được cài đặt, hãy sử dụng lệnh lsblk hoặc một phương pháp khác để xác định nó. Nếu bạn không thay đổi bất cứ điều gì khác, nó có thể (nhưng không nhất thiết) sẽ có cùng tên với ổ cứng bạn đã thay thế. Trong trường hợp của tôi, nó cũng vậy, vì vậy ổ cứng mới cũng được gọi là /dev/sdf.

Vì hệ thống lưu trữ của tôi dựa trên các phân vùng chứ không phải thiết bị vật lý, nên tôi cần sao chép bảng phân vùng từ ổ đĩa đang hoạt động sang ổ đĩa mới để đảm bảo chúng hoàn toàn giống nhau. Nếu bạn sử dụng hệ thống lưu trữ trên các thiết bị vật lý, bạn có thể bỏ qua bước này.

Tôi đã sử dụng sgdisk cho mục đích này, sao chép bảng phân vùng từ /dev/sdc sang /dev/sdf. Hãy nhớ thay thế tên thiết bị cho phù hợp với tên thiết bị của bạn.

Hãy chú ý thứ tự ở đây: bạn liệt kê ổ đĩa "đến" trước! Điều này có vẻ hơi ngược với trực giác của tôi, nhưng chỉ cần đảm bảo bạn làm đúng để tránh xảy ra lỗi ổ đĩa khác trong hệ thống ;-)

sgdisk -R /dev/sdf /dev/sdc

Sau đó, để tránh xung đột UUID, hãy tạo UUID mới cho ổ đĩa mới:

sgdisk -G /dev/sdf

Và cuối cùng thì thời điểm thêm ổ cứng mới vào hệ thống và bắt đầu quá trình tái cấu trúc cũng đã đến! (Thực ra thì không hẳn là một bữa tiệc, mà là một quá trình khá chậm và căng thẳng vì bạn thực sự không muốn một ổ cứng khác bị hỏng vào lúc này. Bia có thể giúp bạn bớt lo lắng đấy).

Tóm lại, để thêm ổ đĩa mới vào mảng, hãy thực hiện lệnh này (lưu ý thay thế tên thiết bị bằng tên của bạn nếu cần):

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

Nếu mọi việc suôn sẻ, ổ đĩa sẽ được thêm vào mảng mà không gặp sự cố. Tôi tin rằng nó được thêm vào như một "ổ dự phòng nóng" theo mặc định, nhưng vì mảng này thiếu một ổ đĩa (ổ bị lỗi), nên nó sẽ được đưa vào sử dụng ngay lập tức và quá trình xây dựng lại sẽ bắt đầu.

Bạn có thể theo dõi nó như sau:

watch cat /proc/mdstat

Quá trình này có lẽ sẽ mất khá nhiều thời gian; trên máy chủ cấu hình thấp của tôi (chủ yếu dựa trên phần cứng cấp độ người tiêu dùng và ổ cứng máy tính để bàn), tốc độ đạt được chỉ dưới 100 MB/giây. Cần lưu ý rằng đây là RAID-6, vì vậy có rất nhiều phép tính chẵn lẻ liên quan đến quá trình khôi phục; RAID-10 sẽ nhanh hơn nhiều. Máy này có CPU lõi tứ AMD A10 9700E (chữ "E" có nghĩa là đây là một model tiết kiệm năng lượng với xung nhịp thấp hơn, tức là không siêu nhanh), để bạn có thể hình dung được hiệu năng. Với chín ổ cứng 8 TB trong cấu hình của tôi, quá trình khôi phục hoàn toàn mất hơn 24 giờ.

Trong quá trình khôi phục, bạn có thể gắn hệ thống tệp vào mảng và sử dụng nó như bình thường nếu muốn, nhưng tôi thích để quá trình khôi phục hoàn tất. Hãy nhớ rằng nếu một ổ đĩa bị lỗi, ổ khác có thể sẽ sớm bị lỗi theo sau, vì vậy bạn muốn quá trình khôi phục được thực hiện càng nhanh càng tốt vì bạn thực sự không muốn một ổ đĩa khác bị lỗi trong quá trình đó. Do đó, đừng gây thêm tải cho nó bằng các tác vụ I/O khác không thực sự cần thiết.

Sau khi hoàn tất, hãy thêm lại vào tệp /etc/fstab, khởi động lại máy và tận hưởng các tập tin của bạn :-)

Chia sẻ trên BlueskyChia sẻ trên FacebookChia sẻ trên LinkedInChia sẻ trên TumblrChia sẻ trên XChia sẻ trên LinkedInGhim trên Pinterest

Mikkel Christensen

Về tác giả

Mikkel Christensen
Mikkel là người sáng lập và chủ sở hữu của miklix.com. Ông có hơn 20 năm kinh nghiệm làm lập trình viên máy tính/nhà phát triển phần mềm chuyên nghiệp và hiện đang làm việc toàn thời gian cho một tập đoàn CNTT lớn của Châu Âu. Khi không viết blog, ông dành thời gian rảnh rỗi cho nhiều sở thích, thú vui và hoạt động, có thể được phản ánh ở một mức độ nào đó trong nhiều chủ đề được đề cập trên trang web này.