Làm thế nào để đột kích phân vùng gốc hiện có?


7

Tôi muốn phản chiếu phân vùng gốc (và duy nhất) trên ổ SSD sang ổ đĩa khác. Nó phải là một loại RAID-1, không đối xứng * . Tôi biết có tùy chọn mdadm --write-behind, nên làm điều đó.

Nhưng tôi không biết nếu có thể với việc giữ nguyên ngữ cảnh của phân vùng hiện có. Tôi tưởng tượng nó như thế nào

  • tạo phân vùng "nô lệ"
  • thiết lập RAID cho nó biết rằng phân vùng nô lệ không được khởi tạo
  • hãy để nó khởi tạo nó bằng cách nhân bản phân vùng chính

Nhưng có lẽ tôi quá lạc quan, phải không?


* Tất cả các lần đọc nên truy cập vào đĩa đầu tiên và ghi nên được coi là kết thúc khi đĩa đầu tiên được ghi.


1
Một người bạn của bạn tôi gần đây đã thu thập tất cả dữ liệu của anh ấy bằng cách chạy mdadm --createtrong khi cố gắng đạt được điều tương tự. Tôi không biết làm thế nào cho đúng nhưng đó không phải là cách.
stribika

@stribika: Bạn có thể chạy mdadm --createtrên một đĩa hiện có miễn là bạn chọn phiên bản siêu khối đi đến cuối đĩa và thu nhỏ hệ thống tệp tương ứng.
Gilles 'SO- đừng trở nên xấu xa'

@Gilles: Tôi nghĩ rằng anh ta đã không thực hiện thủ thuật xuống cấp chỉ thêm cả hai đĩa vào mảng và hy vọng nó sẽ đồng bộ hóa đúng cách.
stribika

Câu trả lời:


7

Bạn có thể tạo một mảng RAID-1 bắt đầu bằng một phân vùng hiện có. Đầu tiên, bạn cần phải nhường chỗ cho siêu khối mdadm, có nghĩa là bạn cần thu nhỏ hệ thống tập tin của mình một chút.

Hiện tại, định dạng siêu khối thông thường là 0,9 . Vị trí của nó nằm trong khoảng từ 128kB đến 60kB từ cuối phân vùng, nó dài 4kB và nó bắt đầu trên một địa chỉ có thể là 64kB. Vì vậy, thu nhỏ hệ thống tập tin của bạn bằng 128kB, hoặc chính xác hơn là ((device_size mod 64kB) - 1) * 64kB.

Nếu bạn muốn có nhiều hơn 2TB mỗi sọc, bạn cần định dạng siêu khối 1.0 , chưa được hỗ trợ ngoài luồng bởi tất cả các bản phân phối. Superblock 1.0 nằm ở cuối thiết bị, điều này tôi hiểu là bạn chỉ cần thu nhỏ hệ thống tập tin của mình thêm 8kB.

Bây giờ bạn đã thu nhỏ hệ thống tập tin, bạn có thể tạo mảng. Đầu tiên tạo ra một mảng xuống cấp chỉ với dữ liệu hiện có. Hãy chắc chắn rằng hệ thống tập tin không được gắn kết tại thời điểm này. Đối với trường hợp sử dụng của bạn, bitmap có ý định ghi phải nằm trên một phân vùng riêng. Sử dụng -e 1.0để sử dụng định dạng siêu khối phiên bản 1 mới hơn.

mdadm --create /dev/md0 -e 0.9 -l 1 -n 2 \
      --write-behind=256 --bitmap=/path/to/bitmap /dev/sda1 missing

Bây giờ bạn có thể gắn hệ thống tập tin vào /dev/md0. Thêm đĩa thứ hai tại niềm vui của bạn. Dữ liệu sẽ được sao chép vào ổ đĩa mới trong nền.

mdadm --add /dev/md0 --write-mostly /dev/sdb1

Tôi đã tạo một mảng được nhân đôi như thế này, nhưng không có chế độ ghi phía sau. Tôi không nghĩ chế độ ghi phía sau sẽ làm mất hiệu lực thủ tục.


Tuyệt quá. Điều này sẽ mất một nửa thời gian phương pháp của tôi mất.
stribika

Tôi có thể loại bỏ ý định viết sau này không?
Lionel

@Lionel: Tôi chưa bao giờ thử bản thân mình, nhưng trang mdadm tài liệu như sau: * trong "Đối với chế độ Quản lý", người ta có thể đặt lại - chủ yếu là với mdadm --readwrite --re-add /dev/sdb1* bên dưới --bitmap, người ta có thể sử dụng --grow /dev/md0 --bitmap=none. BTW, định dạng 1.0 có vẻ 'mặc định' hơn bây giờ.
Blaisorblade

2

Tôi có ý này. Tôi đã thử nghiệm điều này với các hệ thống tập tin nhỏ trên các thiết bị lặp. Tôi khuyên bạn nên làm như vậy trước khi tự mình thử. Trong câu trả lời này / dev / sda là đĩa của bạn với dữ liệu quan trọng và / dev / sdb là đĩa emtpy mới.

export DATA_DISK='/dev/sda'
export EMPTY_DISK='/dev/sdb'
  1. Tạo một mảng RAID1 xuống cấp từ đĩa trống . Điều này quan trọng!

    mdadm --create /dev/md0 --level=1 --raid-devices=2 "${EMPTY_DISK}" missing
    
  2. Sau đó thu nhỏ hệ thống tập tin trên đĩa bạn muốn phản chiếu. (Hy vọng nó được hỗ trợ.) Điều này là cần thiết vì các mảng RAID có tiêu đề và hệ thống tập tin đầy đủ sẽ không phù hợp với mảng.

  3. Sao chép dữ liệu vào mảng xuống cấp mới .

    dd if="${DATA_DISK}" of=/dev/md0 bs=4k
    
  4. Thêm đĩa gốc vào mảng.

    mdadm --manage /dev/md0 --add "${DATA_DISK}"
    
  5. Bạn có thể xem tiến trình đồng bộ hóa.

    watch 'cat /proc/mdstat'
    

Quy trình này có thể được điều chỉnh theo một số cách (rsync thay vì sao chép thô, cài đặt để chọn băng thông đồng bộ hóa, v.v.). Một trang mô tả các kỹ thuật như vậy có vẻ tốt là wiki.archlinux.org/index.php/ , mặc dù tôi đã không tự mình thử nó.
Blaisorblade
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.