Tôi đã bắt gặp câu trả lời này do nhầm lẫn, nhưng trong trường hợp bất kỳ ai cũng tò mò, đây là câu trả lời được hỗ trợ bởi các thí nghiệm.
Phiên bản ngắn
Câu hỏi thưởng: tôi có thể tạo một md(4)
mảng RAID từ các thiết bị khối có kích thước không đồng đều không? Có, nhưng mảng RAID sẽ có kích thước của thiết bị khối nhỏ nhất (cộng với một số chi phí chung cho việc vệ sinh riêng của nó). Nếu kích thước thiết bị không nằm trong phạm vi 1% của nhau, bạn sẽ nhận được cảnh báo.
Câu hỏi 1: Tôi có thể thêm vào md(4)
mảng RAID hiện tại một thiết bị nhỏ hơn thành viên nhỏ nhất hiện tại không? Không, xin lỗi. mdadm
sẽ từ chối làm điều đó để bảo vệ dữ liệu của bạn.
Câu hỏi 2: bạn có thể thay đổi kích thước một mảng md hiện có không? Vâng (đọcmdadm
manpge!), Nhưng nó có thể không đáng nỗ lực. Bạn sẽ phải sao lưu mọi thứ, sau đó thay đổi kích thước nội dung của thiết bị RAID, sau đó thay đổi kích thước chính thiết bị - tất cả điều này khá dễ xảy ra lỗi, tính toán sai và những thứ khác sẽ khiến bạn mất dữ liệu (nói về trải nghiệm đau đớn) .
Nó không đáng để mạo hiểm và nỗ lực. Nếu bạn có một đĩa mới, trống, đây là cách thay đổi kích thước và cũng giữ nguyên từ một đến hai bản sao của tất cả dữ liệu của bạn (giả sử bạn có RAID1 2 đĩa):
- Tạo một
md(4)
mảng mới trên đó (thiếu một đĩa).
- Tái tạo cấu trúc của nội dung mảng (Crypto, LVM, bảng phân vùng, bất kỳ sự kết hợp nào của chúng, bất cứ thứ gì nổi lên thuyền của bạn).
- Sao chép dữ liệu từ đĩa hiện có sang đĩa mới.
- Khởi động lại, sử dụng đĩa mới.
- Xóa bảng phân vùng của đĩa cũ (hoặc không có
md(4)
siêu khối). Nếu cần, hãy tạo các phân vùng cần thiết để khớp với sơ đồ trên đĩa mới.
- Thêm đĩa cũ vào mảng mới.
- Chờ cho các thành viên mảng đồng bộ hóa. Uống cà phê Bay đến Mỹ Latinh và chọn hạt cà phê của riêng bạn, cho vấn đề đó. :) (Nếu bạn sống ở Mỹ Latinh, hãy bay đến Châu Phi thay thế).
Lưu ý: có, đây là kỹ thuật tương tự 0xC0000022L được mô tả trong câu trả lời của anh ấy.
Câu hỏi 3. Điều gì xảy ra nếu ổ đĩa ngắn 1G? :) Đừng lo lắng về nó. Rất có thể ổ đĩa thay thế của bạn sẽ lớn hơn. Trong thực tế, với một chiến lược như trên, nó trả tiền để có được các ổ đĩa lớn hơn rẻ hơn bất cứ khi nào thất bại (hoặc để nâng cấp rẻ hơn). Bạn có thể nhận được một bản nâng cấp lũy tiến.
Bằng chứng thực nghiệm
Thiết lập thử nghiệm
Đầu tiên, hãy giả mạo một số thiết bị khối. Chúng tôi sẽ sử dụng /tmp/sdx
và /tmp/sdy
(mỗi 100M) và /tmp/sdz
(99M).
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
Đây bộ lên ba tác phẩm như ba block device loopback: /dev/loop0
, /dev/loop1
và /dev/loop2
, lập bản đồ đến sdx
, sdy
và sdz
tương ứng. Hãy kiểm tra kích thước:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
Theo dự kiến, chúng tôi có hai thiết bị vòng lặp chính xác 100M (102400 KiB = 100 MiB) và một trong 99M (chính xác là 99 × 1024 khối 1K).
Tạo một mảng RAID từ các thiết bị có kích thước giống hệt nhau
Đây là:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
Kiểm tra kích thước:
sudo grep md100 /proc/partitions
9 100 102272 md100
Đây là precicely những gì chúng ta mong đợi: một cái nhìn tại hướng dẫn mdadm nhắc nhở chúng ta rằng phiên bản 1.2 Metadata mất 128K: 128 + 102.272 = 102400. Bây giờ chúng ta hãy tiêu diệt nó để chuẩn bị cho cuộc thử nghiệm thứ hai.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
Tạo một mảng RAID từ các thiết bị có kích thước không đồng đều
Lần này chúng ta sẽ sử dụng thiết bị khối nhỏ.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
Vâng, chúng tôi đã cảnh báo, nhưng mảng đã được thực hiện. Hãy kiểm tra kích thước:
sudo grep md100 /proc/partitions
9 100 101248 md100
Những gì chúng tôi nhận được ở đây là 101.248 khối. 101248 + 128 = 101376 = 99 × 1024. Không gian có thể sử dụng là của thiết bị nhỏ nhất (cộng với siêu dữ liệu RAID 128K). Hãy đưa tất cả xuống một lần nữa cho thử nghiệm cuối cùng của chúng tôi:
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
Và cuối cùng: Thêm một thiết bị nhỏ hơn vào một mảng đang chạy
Trước tiên, hãy tạo một mảng RAID1 chỉ với một trong các đĩa 100M. Mảng sẽ bị xuống cấp, nhưng chúng tôi không thực sự quan tâm. Chúng tôi chỉ muốn một mảng bắt đầu . Các missing
từ khóa là một trình giữ chỗ có nội dung 'Tôi chưa có thiết bị cho bạn, hãy bắt đầu sử dụng mảng này ngay bây giờ và tôi sẽ thêm một thiết bị sau'.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
Một lần nữa, hãy kiểm tra kích thước:
sudo grep md100 /proc/partitions
9 100 102272 md100
Chắc chắn, nó ngắn 128K với 102400 khối. Thêm đĩa nhỏ hơn:
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
Bùng nổ! Nó sẽ không cho phép chúng tôi, và lỗi rất rõ ràng.