Tăng / thay đổi kích thước RAID khi nâng cấp kích thước hiển thị của đĩa


10

Ban đầu tôi đã tạo một RAID phần mềm bằng bộ điều khiển chỉ có thể giải quyết 2TB cho mỗi đĩa. Các đĩa là 3 đĩa TB. Nó hoạt động tốt, nhưng chỉ sử dụng 2TB đầu tiên của mỗi đĩa.

Bây giờ tôi đã thay đổi bộ điều khiển để xem 3TB đầy đủ. Do đó, tôi cũng muốn /dev/md0sử dụng 1 TB cuối cùng.

Tôi đã thử:

# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K

Nhưng như bạn có thể thấy nó chỉ thấy 2TB. Nếu tôi cố gắng buộc nó cao hơn:

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

Vì vậy, bằng cách nào đó hệ thống có thể thấy các đĩa là 3TB (in /proc/partitions), nhưng RAID không thể xem chúng là 3TB.

chi tiết mdadm:

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

Kích thước đĩa:

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

Biên tập:

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

RAID6 sử dụng các đĩa đầy đủ (tức là không có phân vùng)

Sáng nay hệ thống bị sập. Sau khi khởi động lại, hệ thống không tìm thấy RAID (điều này thật tồi tệ). Tất cả các đĩa hiển thị dưới dạng phụ tùng (S):

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

Ngay cả ở đây rõ ràng là mdadmkhông tìm thấy kích thước 3 TB.

Tôi chạy mdadm --stop /dev/md0. Đã xóa mục trong /etc/mdadm/mdadm.conf. Ran mdadm -A --scan --force, khiến RAID lên mạng và xây dựng lại.


Bạn đang sử dụng toàn bộ 20 đĩa cho RAID6 - đúng không? Không có phân vùng trên mỗi đĩa? Không fdisk -l /dev/sddthể hiện điều gì? Bạn đang sử dụng hệ điều hành nào, phiên bản mdadm là gì?
Nils

Câu trả lời:


5

Tôi chọc quanh / sys và đến gần hơn với câu trả lời.

# cd /sys/block/md0/md
# cat component_size
2147479552

Điều đó đồng ý với những gì chúng ta đã thấy trước đây. Nhưng điều này:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

dường như giải thích tại sao RAID thấy kích thước sai: Hầu hết các ổ đĩa hiển thị là 2TB trong khi 2 ổ đĩa được thay thế hiển thị là 3TB. Tất cả các ổ đĩa là cùng một mô hình, vì vậy hãy cho chúng tôi xem, nếu chúng tôi có thể thay đổi kích thước cảm nhận:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

Voila. Thành phần vẫn còn nhỏ, mặc dù:

# cat component_size
2147479552

Có lẽ nó có thể được thay đổi bởi mdadm:

# mdadm --grow /dev/md0 --size=max

Điều này không may khóa mdadmvà truy cập tiếp theo vào / dev / md0 bị chặn. Và truy cập vào thành phần:

# cat component_size   # This blocks

Sucks. Nhưng phần tốt là trong syslog nó nói:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

Hệ thống tập tin trên / dev / md0 vẫn chạy.

Sau khi khởi động lại, tôi phải thực hiện lại 'mdadm --grow / dev / md0 --size = max'. Sau đó chờ đợi resyncđể hoàn thành. Một lần nữa quyền truy cập vào / dev / md0 đã bị chặn. Vì vậy, một khởi động lại khác, tiếp theo xfs_growfs /dev/md0và sau đó thay đổi kích thước đã hoàn tất.


Tôi hoàn toàn thích cách cắm song song (1), Ole :) Cảm ơn bạn đã điều tra, chỉ cần gặp một trường hợp tương tự.
Michael Shigorin

1
Tôi đoán "mdadm --update = deviceize" cũng sẽ làm điều đó, xem trang man: "Điều này sẽ khiến mdadm xác định dung lượng có thể sử dụng tối đa trên mỗi thiết bị và cập nhật trường có liên quan trong siêu dữ liệu."
rudimeier

3

Tôi nghĩ rằng trong quá trình tạo kích thước của thiết bị đã được đăng ký ở đâu đó trong siêu dữ liệu. Thay đổi bộ điều khiển không thay đổi siêu dữ liệu.

Loại bỏ phụ tùng khỏi md, sau đó thêm lại vào bộ RAID như một ổ đĩa mới. Bạn có thể phải xóa siêu dữ liệu (kiểm tra trang man cho --zero-superblock hoặc xóa toàn bộ đĩa). Nếu nó hoạt động cho một đĩa đơn, hãy lặp lại quy trình cho tất cả các ổ đĩa còn lại. Sau đó, cuối cùng làm --grow.

Đừng xóa đĩa bổ sung cho đến khi đồng bộ hóa xong !!


Không rõ ràng với tôi nếu bạn đã kiểm tra rằng điều này thực sự hoạt động. Việc xây dựng lại mất khoảng 1,5 ngày. Thay thế tất cả 20 ổ đĩa sẽ khiến việc chạy xuống cấp trong cả tháng. Khi bạn viết "Nếu nó hoạt động cho một đĩa đơn", làm thế nào để kiểm tra xem nó có hoạt động cho một đĩa không?
Ole Tange

Không tôi chưa thử nghiệm điều này, nhưng tôi đã thấy một số vấn đề md trước đây và tôi có cảm giác về cách nó hoạt động ... và thất bại. Tôi không có ổ đĩa với siêu dữ liệu xấu nằm xung quanh để kiểm tra nó. Tôi nhận thức được thời gian đồng bộ hóa dài, đó là lý do tại sao tôi khuyên bạn nên sử dụng phụ tùng. Bạn có RAID6, có nghĩa là 2 ổ đĩa có thể bị lỗi và bạn có một bản dự phòng. Điều đó có nghĩa là tổng cộng 3 ổ đĩa có thể bị lỗi trước khi bạn gặp sự cố. Bạn có thể kiểm tra với một ổ đĩa, ít nhất bạn biết nếu đây là vấn đề của bạn. Tôi chỉ có thông tin hạn chế về thiết lập của bạn. Đừng lấy ổ đĩa từ bộ RAID của bạn nếu bạn không thoải mái khi làm điều đó
jippie

Ồ, tôi hiểu câu hỏi của bạn. mdadm sẽ cảnh báo bạn rằng bạn đang cố gắng thêm một thiết bị lớn hơn nhiều so với các thiết bị khác. Nó không bận tâm về một vài byte, nhưng nó cảnh báo bạn khi nó chênh lệch tương đối lớn.
jippie

1
Bạn có thể failmột ổ đĩa, sau đó removenó, sau đó zero-superblocknó để loại bỏ siêu dữ liệu. Vì bộ RAID của bạn đang được sử dụng, bạn có thể thêm nó dưới dạng dự phòng, điều đó có nghĩa là nó sẽ không đồng bộ hóa cho đến khi một ổ đĩa khác bị lỗi (đó là hành vi bình thường) nhưng nó chỉ hoạt động cho một ổ đĩa HOẶC bạn addvà nó yêu cầu đồng bộ hóa. Tôi biết nó sẽ mất mãi mãi. Hoặc bạn chấp nhận thực tế là bạn không thể thêm tất cả dung lượng lưu trữ có sẵn. Một trong những lợi thế của việc sử dụng bảng phân vùng mà bạn đã không làm. Không sử dụng bảng phân vùng không phải là xấu, nhưng trong trường hợp cụ thể này sẽ giúp bạn.
jippie

1
Xem nhận xét của tôi ở trên: "mdadm sẽ cảnh báo bạn rằng bạn đang cố gắng thêm một thiết bị lớn hơn nhiều so với các thiết bị khác."
jippie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.