Tôi có thể tạo phần mềm RAID 1 bằng một thiết bị không


20

Tôi có một đĩa duy nhất mà tôi muốn tạo một bản sao; Hãy gọi đĩa này sda. Tôi vừa mua một đĩa có kích thước giống hệt nhau, mà chúng ta có thể gọi sdb. sdasdbcó một phân vùng được gọi sda1sdb1tương ứng.

Khi tạo một cuộc đột kích, tôi không muốn quét sdasạch và bắt đầu lại, tôi chỉ muốn nó bắt đầu phản chiếu sdb. Chuyến tàu tư tưởng của tôi là để làm:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... Để tạo mảng không có sdbđĩa, sau đó chạy một cái gì đó như (Tôi đang nghĩ to câu lệnh sau, vì tôi không chắc làm thế nào để đạt được bước này)

mdadm /dev/md0 --add /dev/sdb1

Lưu ý sdb1được coi là được định dạng tương tự nhưsda1

Điều này có thể không?


Vâng, bạn có thể. Điều đó không đơn giản như --add, và bạn cần cẩn thận, nhưng nó không phức tạp lắm . Xem Cách thiết lập phản chiếu đĩa trong Ubuntu? (Tôi không thể đề xuất câu hỏi đó như một bản sao vì các quy tắc mới.)
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


28

Câu trả lời đơn giản cho câu hỏi trong tiêu đề là "Có". Nhưng những gì bạn thực sự muốn làm là bước tiếp theo, đó là lấy dữ liệu hiện có được nhân đôi.

Có thể chuyển đổi đĩa hiện có, nhưng rủi ro, như đã đề cập, do vị trí siêu dữ liệu. Tốt hơn nhiều để tạo một bản sao trống (bị hỏng) với đĩa mới và sao chép dữ liệu hiện có vào nó. Sau đó, nếu nó không hoạt động, bạn chỉ cần khởi động lại bản gốc chưa được nhân đôi.

Đầu tiên, khởi tạo /dev/sdb1như mới /dev/md0với một ổ đĩa bị thiếu và khởi tạo hệ thống tập tin (tôi giả sử là ext3, nhưng lựa chọn là của bạn)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Bây giờ, /dev/sda1rất có thể là hệ thống tệp gốc của bạn ( /) vì vậy để an toàn, bạn nên thực hiện bước tiếp theo từ đĩa CD trực tiếp, đĩa cứu hộ hoặc hệ thống khởi động khác có thể truy cập cả hai /dev/sda1/dev/md0mặc dù tôi đã thực hiện thành công điều này bằng cách chuyển sang chế độ người dùng.

Sao chép toàn bộ nội dung của hệ thống tập tin trên /dev/sda1để /dev/md0. Ví dụ:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Chỉnh sửa /etc/fstabhoặc đảm bảo rằng trên lần khởi động tiếp theo, /dev/md0được gắn thay vì /dev/sda1. Hệ thống của bạn có thể được thiết lập để khởi động từ /dev/sda1và các tham số khởi động có thể chỉ định đây là thiết bị gốc, vì vậy khi khởi động lại, bạn nên thay đổi thủ công để root là /dev/md0(giả sử /dev/sda1là root). Sau khi khởi động lại, hãy kiểm tra xem /dev/md0bây giờ đã được gắn ( df) và nó đang chạy dưới dạng nhân bản xuống cấp ( cat /proc/mdstat). Thêm /dev/sda1vào mảng:

mdadm /dev/md0 --add /dev/sda1

Vì việc xây dựng lại sẽ ghi đè lên /dev/sda1, phiên bản siêu dữ liệu bạn sử dụng là không liên quan. Như mọi khi khi thực hiện các thay đổi lớn, hãy sao lưu toàn bộ (nếu có thể) hoặc ít nhất là đảm bảo rằng mọi thứ không thể được tạo lại đều an toàn.

Bạn sẽ cần phải tạo lại cấu hình khởi động của mình để sử dụng /dev/md0làm root (nếu /dev/sda1là root) và có lẽ cần phải tạo lại mdadm.confđể đảm bảo /dev/md0luôn được khởi động.


Hoàn hảo chính xác những gì tôi cần: D
whoami 6/213

2
Không sử dụng cpđể sao chép hệ thống tập tin, bạn sẽ bỏ lỡ một số thứ như liên kết cứng, thuộc tính mở rộng ... Sử dụng tarhoặc rsyncvới các tùy chọn phù hợp. Khi khởi động Live CD, hãy cẩn thận khi ánh xạ người dùng uid khác nhau (xem các tùy chọn --numeric-own của tar / rsync). Xem thêm clone2fs để nhân bản hệ thống tệp extx.
Stéphane Chazelas

1
Các tùy chọn để cpxử lý việc giữ liên kết (-d), chế độ, quyền sở hữu và dấu thời gian (-p), thực hiện đệ quy (-R) và duy trì trên một hệ thống tệp (-x), nhưng tôi nghĩ bạn có thể đúng về liên kết cứng và mở rộng thuộc tính.
StarNamer

rsync -aH --delete /mnt/olddisk/ /mnt/newarray/là một lựa chọn tốt. Thêm -vih --progressnếu bạn muốn thực sự thấy những gì nó đang làm.
rudolfbyker

4

Chắc chắn, bạn có thể tạo nó chỉ định rằng đĩa thứ hai hiện tại missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1

Cảm ơn rất nhiều, tôi chắc chắn là OCD ở đây, nhưng có một lý do tại sao bạn đã thêm mất tích trước / dev / sda1, thứ tự có quan trọng không?
whoami

Tôi nghĩ rằng thứ tự không quan trọng.
eppesuig

3
Cẩn thận với điều đó! với --metadata = 1.2 (mặc định mới), siêu dữ liệu RAID (1MB) sẽ được chèn vào lúc bắt đầu (ghi đè nội dung ở đó). Và bắt đầu của mảng md sẽ bắt đầu 1MB trong / dev / sda1 (/ dev / md0 sẽ ngắn hơn 1MB so với / dev / sda1). Với siêu dữ liệu = 0,9 (mặc định cũ), siêu dữ liệu (64kB) sẽ được chèn vào cuối ghi đè lên những gì ở đó. Vì vậy, sử dụng --metadata = 0.9 và thay đổi kích thước FS trước. Dù bạn làm gì, hãy sao lưu trước.
Stéphane Chazelas

3

Bạn có thể làm điều đó. Bạn cần cẩn thận một chút, nhưng điều này không nguy hiểm - nếu bạn rất cẩn thận không gõ nhầm bất cứ thứ gì và nó không để lại bất kỳ vấn đề nào trong thiết lập.

Tôi đặc biệt khuyên bạn không nên thực hiện bất kỳ thao tác nào trên hệ thống trực tiếp. Nó có thể trong một số trường hợp nhưng cần được chăm sóc thêm. Khởi động từ một liveCD / liveUSB như Parted hoặc SystemResTHERCD .

Đầu tiên, bạn cần thu nhỏ âm lượng một chút, để nhường chỗ cho siêu dữ liệu md sợ (siêu khối). Có một số định dạng siêu dữ liệu , bạn phải sử dụng một định dạng đặt siêu dữ liệu ở cuối đĩa. (Trong một số thiết lập, bạn có thể có đủ không gian để đặt siêu khối ngay từ đầu, nhưng điều đó phức tạp và dễ gặp rủi ro hơn nên tôi đi sâu vào vấn đề đó.)

Bạn phải đảm bảo rằng 128kB cuối cùng từ thiết bị khối không được sử dụng, để nhường chỗ cho siêu khối. Vì vậy, bạn sẽ cần phải thu nhỏ hệ thống tập tin trên /dev/sda1. Nếu đây là hệ thống tệp ext2 / ext3 / ext4, hãy lấy kích thước hệ thống tệp hiện tại với tune2fs /dev/sda1, sau đó chạy resize2fs /dev/sda1 NNNtrong đó NNN có kích thước đó trừ 128kB. Bạn có thể làm điều này với Parted thay thế. Nếu bạn cần thu nhỏ hệ thống tệp extN, trước tiên bạn cần ngắt kết nối hệ thống đó; một hệ thống tập tin btrfs có thể được thu nhỏ trực tiếp.

Khi bạn đã đảm bảo rằng 128kB cuối cùng của thiết bị khối là miễn phí, hãy gọi mdadm --createđể tạo âm lượng RAID-1. Điều này không chạm vào bất kỳ phần nào của âm lượng ngoài siêu khối. Ban đầu, âm lượng sẽ có một thành phần duy nhất: tất cả các thành phần khác được đặt là không thành công. Bạn phải vượt qua --level=1(hoặc tương đương -n 1) (phương pháp này chỉ hoạt động đối với RAID-1) và --metadata=0.9hoặc --metadata=1.0(định dạng siêu khối mặc định 1.2 đặt siêu khối gần đầu thiết bị, có thể ghi đè lên dữ liệu). Đối số cho --raid-devices( -n) là số lượng thành phần (bao gồm các thành phần bị thiếu) trong ổ RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Bây giờ bạn có thể kích hoạt mảng và thêm các thành phần khác.

mdadm --add /dev/md0 /dev/sdb1

Một lưu ý về bộ tải khởi động: Grub2 hiểu Linux RAID-1 và có thể khởi động từ nó. Bộ tải khởi động như Grub1 không hiểu RAID đọc trong suốt từ khối lượng nhân bản, nhưng hệ thống của bạn sẽ không khởi động nếu ổ đĩa bộ tải khởi động đang đọc bị lỗi. Nếu ổ đĩa RAID nằm trên một phân vùng, hãy đảm bảo cài đặt khu vực khởi động của Grub trên cả hai ổ đĩa.

¹ Hãy chắc chắn đã sao lưu. Không có gì nguy hiểm, có nghĩa là, bạn có thể sẽ không cần đến họ, chứ không phải là người đánh bạc dữ liệu của bạn.

Đăng lại và điều chỉnh một chút từ Cách thiết lập phản chiếu đĩa (RAID-1)

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.