Cách thay thế ổ cứng bị lỗi trong RAID phần mềm Linux

theanh

Administrator
Nhân viên
Hướng dẫn này chỉ cách loại bỏ ổ cứng bị lỗi khỏi mảng RAID1 Linux (RAID phần mềm) và cách thêm ổ cứng mới vào mảng RAID1 mà không làm mất dữ liệu. Tôi sẽ sử dụng gdisk để sao chép sơ đồ phân vùng, do đó nó cũng sẽ hoạt động với các ổ cứng lớn có GPT (Bảng phân vùng GUID).


1 Lưu ý sơ bộ​

Trong ví dụ này, tôi có hai ổ cứng, /dev/sda và /dev/sdb, với các phân vùng /dev/sda1 và /dev/sda2 cũng như /dev/sdb1 và /dev/sdb2.

/dev/sda1 và /dev/sdb1 tạo nên mảng RAID1 /dev/md0.

/dev/sda2 và /dev/sdb2 tạo nên mảng RAID1 /dev/md1.
Mã:
/dev/sda1 + /dev/sdb1 = /dev/md0
Mã:
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sdb đã lỗi và chúng tôi muốn thay thế nó.

2 Làm sao để biết ổ cứng có bị lỗi không?​

Nếu ổ cứng bị lỗi, bạn có thể sẽ thấy rất nhiều thông báo lỗi trong tệp nhật ký, ví dụ: /var/log/messages hoặc /var/log/syslog.

Bạn cũng có thể chạy
Mã:
cat /proc/mdstat
và thay vì chuỗi [UU], bạn sẽ thấy [U_] nếu mảng RAID1 của bạn bị suy giảm.


3 Xóa đĩa bị lỗi​

Để xóa /dev/sdb, chúng tôi sẽ đánh dấu /dev/sdb1 và /dev/sdb2 là lỗi và xóa chúng khỏi mảng RAID tương ứng (/dev/md0 và /dev/md1).

Đầu tiên, chúng ta đánh dấu /dev/sdb1 là không thành công:
Mã:
mdadm --manage /dev/md0 --fail /dev/sdb1
Đầu ra của
Mã:
cat /proc/mdstat
sẽ trông như thế này:
Mã:
server1:~#cat/proc/mdstat
Personalities:[linear][multipath][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]sdb1[2](F)
24418688blocks[2/1][U_]
 
md1:activeraid1sda2[0]sdb2[1]
24418688blocks[2/2][UU]
 
unuseddevices:
Sau đó, chúng ta xóa /dev/sdb1 khỏi /dev/md0:
Mã:
mdadm --manage /dev/md0 --remove /dev/sdb1
Đầu ra sẽ như thế này:
Mã:
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

Mã:
cat /proc/mdstat
sẽ hiển thị như sau:
Mã:
server1:~#cat/proc/mdstat
Personalities:[linear][multipath][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]
24418688blocks[2/1][U_]
 
md1:activeraid1sda2[0]sdb2[1]
24418688blocks[2/2][UU]
 
unuseddevices:
Bây giờ chúng ta thực hiện lại các bước tương tự cho /dev/sdb2 (là một phần của /dev/md1):
Mã:
mdadm --manage /dev/md1 --fail /dev/sdb2
Mã:
cat /proc/mdstat
Mã:
server1:~#cat/proc/mdstat
Cá tính:[tuyến tính][đa đường dẫn][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]
24418688 khối[2/1][U_]
 
md1:activeraid1sda2[0]sdb2[2](F)
24418688 khối[2/1][U_]
 
thiết bị chưa sử dụng:
Mã:
mdadm --manage /dev/md1 --remove /dev/sdb2
Mã:
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot đã xóa /dev/sdb2
Mã:
cat /proc/mdstat
Mã:
server1:~#cat/proc/mdstat
Personalities:[linear][multipath][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]
24418688blocks[2/1][U_]
 
md1:activeraid1sda2[0]
24418688blocks[2/1][U_]
 
unuseddevices:
Sau đó, tắt nguồn hệ thống:
Mã:
shutdown -h now
và thay thế /dev/sdb với ổ cứng mới (nó phải có kích thước ít nhất bằng ổ cứng cũ - nếu nó chỉ nhỏ hơn ổ cứng cũ vài MB thì việc xây dựng lại mảng sẽ không thành công).


4 Thêm ổ cứng mới​

Sau khi bạn đã thay đổi ổ cứng /dev/sdb, hãy khởi động hệ thống.

Điều đầu tiên chúng ta phải làm bây giờ là tạo phân vùng chính xác giống như trên /dev/sda. Chúng ta có thể thực hiện việc này bằng lệnh sgdisk từ gói gdisk. Nếu bạn chưa cài đặt gdisk, hãy chạy lệnh này để cài đặt trên Debian và Ubuntu:
Mã:
apt-get install gdisk
Đối với các bản phân phối Linux dựa trên RedHat như CentOS, hãy sử dụng:
Mã:
yum install gdisk
và đối với OpenSuSE, hãy sử dụng:
Mã:
yast install gdisk
Bước tiếp theo là tùy chọn nhưng được khuyến nghị. Để đảm bảo rằng bạn có bản sao lưu của lược đồ phân vùng, bạn có thể sử dụng sgdisk để ghi lược đồ phân vùng của cả hai đĩa vào một tệp. Tôi sẽ lưu trữ bản sao lưu trong thư mục /root.
Mã:
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
Trong trường hợp xảy ra lỗi, bạn có thể khôi phục các bảng phân vùng bằng tùy chọn --load-backup của lệnh sgdisk.

Bây giờ hãy sao chép lược đồ phân vùng từ /dev/sda sang /dev/sdb và chạy:
Mã:
sgdisk -R /dev/sdb /dev/sda
Sau đó, bạn phải ngẫu nhiên hóa GUID trên ổ cứng mới để đảm bảo rằng chúng là duy nhất
Mã:
sgdisk -G /dev/sdb
Bạn có thể chạy
Mã:
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
để kiểm tra xem cả hai ổ cứng có cùng phân vùng hay không.

Tiếp theo, chúng ta thêm /dev/sdb1 vào /dev/md0 và /dev/sdb2 vào /dev/md1:
Mã:
mdadm --manage /dev/md0 --add /dev/sdb1
Mã:
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: đã thêm lại /dev/sdb1
Mã:
mdadm --manage /dev/md1 --add /dev/sdb2
Mã:
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: đã thêm lại /dev/sdb2
Bây giờ cả hai mảng (/dev/md0 và /dev/md1) sẽ được đồng bộ hóa. Chạy
Mã:
cat /proc/mdstat
để xem khi nào hoàn tất.

Trong quá trình đồng bộ hóa, đầu ra sẽ trông như thế này:
Mã:
server1:~#cat/proc/mdstat
Personalities:[linear][multipath][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]sdb1[1]
24418688blocks[2/1][U_]
[=>................................]recovery=9.9%(2423168/24418688)finish=2.8minspeed=127535K/sec
 
md1:activeraid1sda2[0]sdb2[1]
24418688blocks[2/1][U_]
[=>...................]recovery=6.4%(1572096/24418688)finish=1.9minspeed=196512K/sec
 
unuseddevices:
Khi quá trình đồng bộ hóa hoàn tất, đầu ra sẽ trông như thế này:
Mã:
server1:~#cat/proc/mdstat
Personalities:[linear][multipath][raid0][raid1][raid5][raid4][raid6][raid10]
md0:activeraid1sda1[0]sdb1[1]
24418688blocks[2/2][UU]
 
md1:activeraid1sda2[0]sdb2[1]
24418688blocks[2/2][UU]
 
unuseddevices:
Vậy là xong, bạn đã thay thế thành công /dev/sdb!
 
Back
Bên trên