Làm cách nào để thiết lập nhân bản đĩa với đường hầm dd, netcat và ssh?


26

Tôi muốn sao chép hàng loạt (sao chép lại đĩa bằng cách sử dụng dd) với netcat từ máy chủ A đến B thông qua kênh được mã hóa ssh trên Linux.

Tôi nên gõ những lệnh nào ở cả hai đầu?

Câu trả lời:


28

Sao chép từ nguồn vào mục tiêu nơi mục tiêu có sshd đang chạy:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

Sao chép từ nguồn vào đích qua sshd_host khi đích không chạy sshd.

  • Mục tiêu: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Nguồn: ssh -L 62222:target:62222 sshd_host &
  • Nguồn: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - if = là nguồn, of = là đích, bs = là kích thước khối. Kích thước khối khác nhau có thể cải thiện hiệu suất. 16 thường là một điểm khởi đầu khá hợp lý. Bạn cũng có thể sử dụng Count = để cho biết có bao nhiêu khối cần sao chép.

    nc - -p chỉ ra cổng sử dụng cho các dịch vụ. -l được sử dụng để bắt đầu một dịch vụ. -w thiết lập thời gian chờ dữ liệu trong đường ống trước khi thoát.

    ssh - -L thiết lập đường hầm trên máy chủ từ xa. Các định dạng của đối số là local_port:target_host:target_port. Chương trình cục bộ của bạn (nc) kết nối với local_port, kết nối này được tạo đường hầm và kết nối với target_port trên target_host.

Các tùy chọn được xác định chỉ là những tùy chọn được sử dụng cho việc này. Nhìn vào các trang người đàn ông để biết thêm chi tiết.

Một vài lưu ý:

  1. Nếu bạn đang làm điều này trên bất cứ thứ gì ngoại trừ mạng LAN, tôi khuyên bạn nên nén luồng dữ liệu bằng gzip hoặc nén. Bzip2 cũng hoạt động nhưng phải mất thêm một chút thời gian CPU. Cái đầu tiên có một ví dụ về cách sử dụng đó.
  2. Sẽ tốt hơn nếu phân vùng nguồn không được gắn hoặc được gắn ở chế độ chỉ đọc. Nếu không bạn sẽ cần fsck hình ảnh đích.
  3. Trừ khi một trong các máy có netcat nhưng không phải ssh, netcat không thực sự cần thiết ở đây. Trường hợp đó sẽ như thế nào:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd hoạt động tốt nhất nếu nguồn và mục tiêu có cùng kích thước. Nếu không phải mục tiêu phải lớn hơn trong 2.
  2. Nếu bạn đang sử dụng ext2 / 3 hoặc xfs, dump (hoặc xfsdump) và khôi phục có thể là một lựa chọn tốt hơn. Nó không xử lý khu vực khởi động nhưng nó hoạt động khi mục tiêu và nguồn có kích thước khác nhau.

4

Nếu bạn muốn sử dụng netcat mà không cần ssh. Tôi cho rằng đó là cách nhanh nhất và không phải là cách an toàn, bạn có thể sao chép và khôi phục toàn bộ đĩa như thế này:
Trên máy tính A có IP 192.168.0.1

cat /dev/hdb | nc -p 9000
Trên máy tính B
nc -l 192.168.0.1 9000 > /dev/hdb

Hãy nhớ rằng theo man nc, tùy chọn -l là:

  -l Được sử dụng để xác định rằng nc nên lắng nghe một kết nối đến thay vì bắt đầu một kết nối đến một máy chủ từ xa. Đó là một lỗi khi sử dụng tùy chọn này kết hợp với các tùy chọn -p, -s hoặc -z.

3

netcat là không cần thiết.

trên máy src chạy:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

tôi giả sử không có phân vùng trên sdX và sdY được gắn kết. bạn có thể khởi động cả hai hộp với knoppix hoặc bản phân phối trực tiếp tương tự khác.

dd - mất dữ liệu từ nếu [nếu không được cung cấp - mất nó từ stdin], gửi dữ liệu tới của [nếu không được cung cấp - dữ liệu được gửi đến stdout]. bs - kích thước khối ... sẽ tăng tốc mọi thứ.

ssh - thực thi lệnh được cung cấp trong dấu ngoặc kép trên hộp từ xa, tất cả dữ liệu được bơm vào stdin của ssh sẽ được chuyển đến máy từ xa và được chuyển thành stdin để lệnh được thực thi ở đó.


Vì vậy, nó sẽ là không thể trên đĩa gắn?
Evgeny

@Evgeny sẽ ổn nếu đĩa được gắn dưới dạng chỉ đọc. mặt khác - không làm điều đó ... bản sao của bạn sẽ không nhất quán.
pQd

3

Máy chủ A là hình ảnh, máy chủ B là hình ảnh sẽ được lưu trữ trên:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

Khôi phục vào đĩa sẽ chỉ trao đổi hai.


1

Các bản sao cơ bản với netcat được mô tả ở đây .

Nếu bạn cần để SSH tham gia vào việc này, bạn có thể sử dụng chuyển tiếp cổng qua đó,

-R [bind_address:]port:host:hostport

Nhưng, về tổng thể, bạn chỉ có thể thực hiện chuyển SSH ở vị trí đầu tiên (không có netcat).


1

Miễn là các hệ thống tập tin đều chưa được kết nối, dd hoạt động tốt.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

Bạn sẽ cần thiết lập xác thực mã khóa trước thời hạn nếu không, dấu nhắc mật khẩu sẽ khiến bản sao bị lỗi.

Làm điều này trên một khối lượng gắn kết sẽ tạo ra kết quả kém.


cảm ơn. là trích dẫn cần thiết?
Evgeny

1

Hoặc, bạn có thể sử dụng clonezilla và "gắn kết" bộ nhớ từ xa của mình thông qua sshfs.


Nếu bạn đang sao chép một phân vùng, bạn không muốn phân vùng đích không được đếm? Chi tiết hơn về tùy chọn này sẽ hữu ích.
Mark Stosberg

1

Tôi đã thử kết hợp các tùy chọn được cung cấp ở trên và đang chia sẻ kết quả với bạn. nhanh nhất đến chậm nhất bằng cách sử dụng kết hợp kích thước khối dd, thuật toán nén gzip và gzip.

Như bạn có thể thấy gzip chỉ giúp tôi cải thiện khi sử dụng thuật toán nhanh kết hợp với kích thước khối 1M.

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

Hai máy chủ nhanh đã được sử dụng kết nối với GigE thông qua bộ chuyển đổi Enterprise GigE bằng đĩa cục bộ qua LVM.


0

Có vẻ như bạn đang sử dụng búa tạ để bẻ đai ốc ở đây - hoặc có lẽ một sự tương tự tốt hơn là cố gắng cắt cỏ của bạn bằng kéo :)

Tôi thực sự khuyên bạn nên xem xét một số công cụ hiện có để thực hiện một công việc như thế này trừ khi bạn có lý do tuyệt vời để làm việc đó trong nhà.

Trinity Rescue Kit là một đĩa CD trực tiếp miễn phí, hỗ trợ các ổ đĩa hình ảnh qua phát đa hướng, và có thể làm những gì bạn muốn (hoặc thực sự là bất kỳ ai khác nghĩ trên cùng một dòng), mà không cần đến các hệ thống hình ảnh đầy đủ.

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.