Di chuyển hình ảnh đĩa thô qua mạng LAN


8

Đây là tình huống của tôi:

  • Hai máy chủ chuyên dụng trong cùng một trung tâm dữ liệu với ethernet gigabit giữa chúng.
  • Cả hai máy chủ chuyên dụng đều khởi động vào môi trường cứu hộ dựa trên Debian Squeeze với các công cụ và tiện ích bổ sung được thêm vào. Ngoài ra còn có nhiều dung lượng tmp (32GB RAM trên cả hai hộp) để tải xuống phần mềm, cài đặt gói và / hoặc biên dịch khi cần.
  • Cả hai máy chủ chuyên dụng có khoảng 3TB không gian có thể sử dụng.
  • Máy chủ "nguồn" có các đĩa 4 x 1,5TB trong Phần cứng RAID-10 với bộ điều khiển cổng Adaptec 4.
  • Máy chủ "đích" có các đĩa 2 x 3TB trong Phần cứng RAID-1 với bộ điều khiển cổng Adaptec 2 - cùng thế hệ với các cổng khác, nhưng số lượng cổng khác nhau.
  • Số lượng các khối có thể sử dụng trên /dev/sdakhác nhau ít hơn 10 MB, nhưng mảng của máy chủ đích là vì một số lý do nhỏ hơn một vài megs.
  • Cả hai mảng RAID đều được cấu hình để sử dụng toàn bộ bề mặt đĩa của tất cả các đĩa cấu thành để tạo một, một ổ RAID.
  • Hệ điều hành khởi động ở chế độ MBR; không khởi động UEFI được sử dụng.

Những gì tôi muốn làm:

  • Sao chép, ở lớp khối, toàn bộ hình ảnh HĐH (chỉ bao gồm bộ tải khởi động GRUB2 trong bảng phân vùng GPT, / phân vùng khởi động và / phân vùng) từ máy chủ "nguồn" sang máy chủ "đích".
  • Nếu có thể , bản sao sẽ diễn ra "trực tiếp": điều này có nghĩa là tôi không có đủ dung lượng để lưu trữ một tệp hình ảnh đĩa thích hợp ở phía đích, trừ khi tôi giải nén hình ảnh đĩa vào đĩa cứng như bản sao đang diễn ra . Kết nối ethernet gigabit giữa các máy chủ đủ tin cậy để tôi cảm thấy thoải mái với điều này và tất nhiên tôi sẽ chạy fsckở cả hai đầu (nguồn và đích) để xác minh hệ thống tập tin có ổn trước và sau khi chuyển.
  • Nếu có thể , không chuyển các khối qua mạng, không được sử dụng bởi các hệ thống tập tin cấu thành trong mỗi phân vùng (tất cả các phân vùng được định dạng là ext4). Điều này là do hơn 50% đĩa "nguồn" là không gian trống trong /phân vùng.
  • Điều chỉnh kích thước của /phân vùng để khi nó được sao chép, nó được thay đổi kích thước để vừa với kích thước chỉ nhỏ hơn của đĩa đích.
  • Khi sao chép thành công, gắn từng ổ đĩa và sửa các tham chiếu đến IP tĩnh để phản ánh IP của máy chủ mới. (Có thể làm điều này tốt mà không cần thêm trợ giúp)

Những câu hỏi của tôi:

  • Trước tiên tôi có nên tính chênh lệch (tính bằng byte) giữa kích thước của /dev/sdamỗi máy chủ không, sau đó sử dụng e2resizeđể giảm không phá hủy kích thước của /phân vùng ở phía nguồn để nó phù hợp với không gian của phía đích?
  • Tôi có nên chạy ddtrên thiết bị khối thô, /dev/sdatừ nguồn đến đích (kết thúc ssh) hay tôi nên tạo bố cục phân vùng tương đương trên đích và chạy ddtrên mỗi phân vùng ? Lưu ý rằng việc xử lý phân vùng tại một thời điểm khiến tôi gặp vấn đề về bộ tải khởi động, nhưng nếu tôi không thực hiện phân vùng đó tại một thời điểm, thì ddcần phải biết dừng truyền dữ liệu khi nó đã ghi nhiều byte như đích có thể giữ (hy vọng sẽ "đóng" phần cuối của /phân vùng trên khối cuối cùng, theo logic "bên phải" tất cả các phân vùng khác trong bố cục phân vùng của nguồn).

Một vài linh tinh. chi tiết cụ thể:

  • Hệ điều hành máy chủ trên hộp nguồn là Ubuntu Server 12.04 đang chạy một số khách OpenVZ
  • Vì cả hai hộp đều được khởi động vào cứu hộ, nên có thể truy cập đĩa trực tiếp mà không mong đợi bất kỳ thay đổi nào đối với dữ liệu cơ bản của hệ điều hành đang chạy.

Bạn có chính xác cần phải sao chép các khối được sử dụng từ các thiết bị, hoặc chỉ hệ thống tập tin hệ điều hành không?
Andrew

Câu trả lời:


6

Điều này là lộn xộn, nhưng có thể làm được.

Tôi đoán ở đây /là trên /dev/sda3và đó /bootlà trên /dev/sda1.

  1. Thu nhỏ hệ thống tập tin trên máy chủ cũ đến kích thước tối thiểu có thể.

    oldserver # resize2fs -M /dev/sda3
    
  2. Phân vùng đĩa của máy chủ mới với kích thước giống hệt nhau /boot, không gian hoán đổi và /phân vùng mới (và bất cứ thứ gì khác bạn cần).

    newserver # parted /dev/sda
    
  3. Sao chép //boothệ thống tập tin.

    oldserver # dd if=/dev/sda1 | ssh root@newserver "dd of=/dev/sda1"
    oldserver # dd if=/dev/sda3 | ssh root@newserver "dd of=/dev/sda3"
    

    Vì phân vùng trên máy chủ mới sẽ nhỏ hơn một chút so với phân vùng trên máy chủ cũ, bạn sẽ nhận được một No space left on devicetin nhắn giả ở cuối phần này. Tuy nhiên, vì bạn đã thu nhỏ hệ thống tập tin ở bước 1, nên điều này không thành vấn đề.

  4. Thay đổi kích thước hệ thống tập tin trên máy chủ mới theo kích thước của phân vùng.

    newserver # resize2fs /dev/sda3
    
  5. Cài đặt GRUB trên đĩa mới.

    newserver # mount /dev/sda3 /mnt
    newserver # mount /dev/sda1 /mnt/boot
    newserver # mount -o bind /dev /mnt/dev
    newserver # mount -o proc proc /mnt/proc
    newserver # chroot /mnt /bin/bash
    
    newserver(chroot) # grub-install /dev/sda
    newserver(chroot) # exit
    
  6. Hoàn thành phần còn lại của bản sửa lỗi của bạn (địa chỉ IP, v.v.).

Bạn có thể tìm cách tránh sao chép không gian trống của phân vùng, nhưng có lẽ bạn sẽ mất nhiều thời gian để nghiên cứu hơn là chỉ sao chép tất cả ...


Tuyệt vời! Tôi ổn với việc sao chép không gian trống của phân vùng vì các hướng dẫn này đáp ứng tất cả các tiêu chí khác của tôi. Mặc dù, sẽ không thay đổi kích thước hệ thống tập tin và phân vùng để oldserverloại bỏ nhu cầu sao chép tất cả không gian trống? Tôi không quan tâm /bootvì nó quá nhỏ, nhưng /ít nhất, tôi có thể làm điều đó, phải không? Chỉ cần đặt khu vực cuối của phân vùng bằng với khu vực nào resize2fsđặt kết thúc của khu vực FS. Chà, ngành, khối ... có lẽ là khối . Nhưng cảm ơn vì điều này! Điều đó thật tuyệt!
allquixotic

Có, nếu bạn cũng giảm kích thước của phân vùng, thì bạn sẽ tránh được một loạt các bản sao. Điều đó có thể giúp bạn tiết kiệm được một vài giờ ... Tôi sẽ bỏ lại một chút, chỉ trong trường hợp toán học của tôi hơi bị tắt.
Michael Hampton

Điều đó cũng sẽ loại bỏ "Không còn chỗ trống trên thiết bị", vì nó sẽ thay đổi kích thước /dev/sda3xuống còn khoảng 1,3 TB và sẽ sao chép nó vào một phân vùng trên điểm đến dự kiến ​​sẽ giữ khoảng 2,9 TB.
allquixotic

Nó sẽ mất một lúc . Nhận ra tôi có một gigabit cổng với phân bổ 100 Mbit / s. Tào lao
allquixotic

5

Tôi muốn mkfshệ thống tập tin mới trên máy chủ mới, sau đó rsyncchúng từ máy chủ cũ. Đó là khả năng khởi động lại, nhất quán và mỗi tệp có thể dễ dàng xác minh riêng lẻ. Khi bạn loại bỏ các phần không được sử dụng của hệ thống tệp (không phải là bản sao pháp y), tôi không thấy bất kỳ lý do nào để không sử dụng phương pháp này. Bạn sẽ phải chạy lại GRUB, nhưng đó không phải là một thách thức.

Việc giải thích một bản sao thô nhận biết hệ thống tệp sẽ khiến tôi mất một lúc, vì vậy trừ khi bạn nhận xét về lý do giải pháp rsync của tôi không hoạt động, tôi sẽ tự mình gõ phím.


Tôi nghĩ rằng partimagecó thể thực hiện các bản sao thô mà hệ thống tập tin nhận biết, nhưng nó không hỗ trợ ext4. Vì vậy, có một tùy chọn ... rsynctrông đẹp hơn như một tùy chọn, miễn là nó bảo toàn tất cả các điều khiển truy cập tùy ý (a la chmod) và có thể sao chép sạch các liên kết và tệp thiết bị ...
allquixotic 21/2/13

Tôi thứ hai câu trả lời của Jeff. Bạn có thể chuyển bố cục phân vùng bằng sfdisk -d / dev / sda | ssh đích "sfdisk / dev / sdb". Tạo hệ thống tập tin của bạn và chuyển với 'rsync -a -e "ssh -c arcfour" / mnt / root @ Destination: / mnt /'. Trả lời theo bước 5 của câu trả lời của Michael Hampton để làm cho đích đến có thể khởi động.
Tim Haegele

1

Nếu bạn THỰC SỰ muốn chuyển dữ liệu ở cấp độ thiết bị khối, tôi có thể nghĩ ra một mẹo khá hữu ích mà tôi đang sử dụng để di chuyển các máy chủ có thời gian ngừng hoạt động tối thiểu.

Vấn đề là, bạn có thể tạo một máy nhân bản xuống cấp trên máy chủ nguồn với phân vùng dữ liệu của bạn là một nửa hoạt động duy nhất của máy nhân bản, sau đó xuất phân vùng đích từ máy chủ thứ hai qua AOE (Tôi cho rằng cả hai máy chủ của bạn đều nằm trong cùng một miền quảng bá). Tại máy chủ nguồn, sau đó bạn kết nối thiết bị khối mạng với máy nhân bản đã xuống cấp để thiết bị sẽ bắt đầu xây dựng lại. Đợi cho đến khi xây dựng lại hoàn tất, dừng gương của bạn, xóa thiết bị đã xuất AOE và bạn vẫn ổn.

Thêm một chút chi tiết theo sau (Tôi sẽ cố gắng giữ cho nó ngắn gọn).

Các thành phần:

  • mdadmvới chế độ xây dựng của nó (gương ad-hoc không có siêu dữ liệu);
  • vblade để xuất thiết bị khối như thiết bị mạng AOE;
  • aoe-tools để nhập thiết bị chặn mạng AOE.

Bạn phải tạo bảng phân vùng trên máy chủ đích của mình, sau đó thu nhỏ phân vùng nguồn để phù hợp với đích. Bạn có thể dễ dàng cài đặt GRUB vào MBR mới của bạn; đồng bộ hóa các phân vùng trên bảng phân vùng mới được tạo sẽ ít bị lỗi hơn một chút.

Về phía nhận, bạn phải xuất phân vùng của mình bằng vbladecông cụ, trên máy chủ nguồn, bạn có thể thấy các thiết bị đã xuất sau khi cài đặt aoe-tools(chạy aoe-discoverrồi nhìn vào /dev/ether/thiết bị).

Sau đó, bạn nên xây dựng thiết bị raid1 trên máy chủ nguồn bằng ổ đĩa nguồn của mình :

mdadm --build /dev/md0 -n2 -l1 --force /dev/sda

Sau này, bạn có thể kiểm tra gương mới được xây dựng:

mdadm --detail /dev/md0
cat /proc/mdstat

Tại thời điểm này, bạn có thể đính kèm phân vùng đích đã xuất vào gương này một cách an toàn:

mdadm /dev/md0 --add /dev/ether/eX.Y

Sau đó, chỉ cần xem qua tiến trình đồng bộ hóa:

watch -n5 cat /proc/mdstat

Sau khi đồng bộ hóa xong, chỉ cần dừng nhân bản: mdadm --stop /dev/md0trên máy chủ nguồn, chấm dứt vbladequá trình trên máy chủ đích, cài đặt GRUB trên máy chủ thứ hai, thay đổi địa chỉ IP của bạn, v.v.

Trên thực tế, với thủ thuật này, có thể di chuyển máy chủ giữa các hộp gần như trực tiếp, với thời gian chết chỉ để khởi động lại các hộp được đồng bộ hóa.


Vì lý do hiệu suất, tôi cũng khuyên bạn nên tăng MTU của liên kết (hoặc thiết lập Vlan riêng với các khung jumbo được bật, nếu có thể).

Lưu ý, bạn cũng có thể sử dụng một cái gì đó như nbd-server/ nbd-client(hoặc thậm chí iSCSI, nếu bạn muốn nó thô) thay thế cho AOE, nhưng AOE ( vblade+ aoe-tools) có giao diện rất đơn giản và hiệu suất tuyệt vời (không có phí TCP / IP),


Tôi cũng nói thêm rằng việc đồng bộ hóa ở cấp thiết bị khối đôi khi có thể THỰC SỰ nhanh hơn so với chuyển tệp qua tệp bằng rsync, đặc biệt là khi bạn có hàng triệu tệp (tương đối) trên hệ thống tệp.
artyom

mdadm? Tôi đang sử dụng RAID phần cứng. Và tôi không biết AOE là gì và chưa bao giờ sử dụng iSCSI. Tôi không nghĩ rằng các máy chủ của tôi ở trong cùng một miền quảng bá, chỉ trong cùng một trung tâm dữ liệu. Có ít nhất một hoặc hai công tắc giữa các máy chủ.
allquixotic

Tôi nghĩ rằng đây là một ý tưởng tuyệt vời! Nhưng làm thế nào để nó đối phó với kích thước khác nhau của đĩa?
Tim Haegele

@allquixotic, tuy nhiên, bạn có thể thử sơ đồ sau thay thế AOE bằng nbd (thiết bị khối mạng, được cung cấp bởi nbd-servernbd-clientcác gói). mdadmđược sử dụng chỉ để đồng bộ hóa hai thiết bị khối, không có siêu dữ liệu nào được ghi trong buildchế độ, do đó bạn có thể sử dụng nó trên đầu của bất kỳ thiết bị khối nào (trước tiên phải được ngắt kết nối). Vấn đề là, tôi thường thiết lập một hệ thống mới trên mdadm raid1 đã xuống cấp ngay cả khi tôi có cuộc đột kích phần cứng bên dưới, bằng cách này tôi có thể áp dụng kỹ thuật được mô tả mà không phải ngắt kết nối phân vùng, giảm thời gian di chuyển xuống thời gian khởi động lại.
artyom
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.