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).
/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.
/dev/sdb đã lỗi và chúng tôi muốn thay thế nó.
Bạn cũng có thể chạy
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.
Đầu tiên, chúng ta đánh dấu /dev/sdb1 là không thành công:
Đầu ra của
sẽ trông như thế này:
Sau đó, chúng ta xóa /dev/sdb1 khỏi /dev/md0:
Đầu ra sẽ như thế này:
Và
sẽ hiển thị như sau:
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):
Sau đó, tắt nguồn hệ thống:
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).
Đ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:
Đối với các bản phân phối Linux dựa trên RedHat như CentOS, hãy sử dụng:
và đối với OpenSuSE, hãy sử dụng:
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.
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:
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
Bạn có thể chạy
để 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:
Bây giờ cả hai mảng (/dev/md0 và /dev/md1) sẽ được đồng bộ hóa. Chạy
để 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:
Khi quá trình đồng bộ hóa hoàn tất, đầu ra sẽ trông như thế này:
Vậy là xong, bạn đã thay thế thành công /dev/sdb!
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
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
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
Mã:
cat /proc/mdstat
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:
Mã:
mdadm --manage /dev/md0 --remove /dev/sdb1
Mã:
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
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]sdb2[1]
24418688blocks[2/2][UU]
unuseddevices:
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:
Mã:
shutdown -h now
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
Mã:
yum install gdisk
Mã:
yast install gdisk
Mã:
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
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
Mã:
sgdisk -G /dev/sdb
Mã:
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
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
Mã:
cat /proc/mdstat
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:
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: