Sao chép toàn bộ hệ thống phân cấp tệp từ ổ đĩa này sang ổ đĩa khác


95

Tôi muốn sao chép toàn bộ hệ thống phân cấp tệp từ ổ đĩa này sang ổ đĩa khác..tất cả nội dung của mỗi thư mục cũng như các tệp thông thường trong nền tảng Linux. Sẽ rất vui khi biết cách tốt nhất để làm điều đó với các chức năng có thể có của Linux. Hệ thống tập tin là một gia đình ext.


1
Umm ... tình yêu dành cho ddđâu? dd if=/dev/sda1 of=/dev/sdb1 bs=4096
juniorRubyist

@juniorRubyist +1 cho dd. Tôi luôn luôn sử dụng nó. Nhưng sử dụng cờ nào? Tôi sử dụng conv=notrunc,noerror,sync.
BeniBela

-1 vì dd2 lý do: trước hết, đó là một ý tưởng tồi để thực hiện sao chép cấp độ khối của hệ thống tệp được gắn (đó là trường hợp /) và thứ hai ddsẽ không sao chép dữ liệu từ các nguồn được gắn trong hệ thống tệp như /boot/home.
Eric

Câu trả lời:


33

Tôi thường sử dụng

> cp -ax / /mnt

Giả sử / mnt là đĩa mới được gắn trên / mnt và không có giá trị gắn kết nào khác trên /.

-x giữ nó trên một hệ thống tập tin.

Điều này tất nhiên cần phải được thực hiện như root hoặc sử dụng sudo.

Liên kết này có một số lựa chọn thay thế, bao gồm một trong những ở trên

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrad/copy.html


trong khi đây là câu trả lời cũ chết nó vẫn còn đáng chú ý là bạn thường không muốn sao chép tất cả những gì trình bày trong /, trừ ie /dev, /sys, /procvv Vì vậy trước khi ra rằng cptôi khuyên bạn nên tìm kiếm cách tiếp cận tốt hơn (cũng sử dụng rsync)
Marcin Orlowski

2
@MarcinOrlowski Việc sử dụng -xcờ của WolfJM có nghĩa là các hệ thống tệp tổng hợp mà bạn đề cập sẽ không được sao chép.
Jim L.

192

Những gì bạn muốn là rsync .

Lệnh này có thể được sử dụng để đồng bộ hóa một thư mục và cũng tiếp tục sao chép khi nó bị hủy bỏ một nửa. Lệnh sao chép một đĩa là:

rsync -avxHAX --progress / /new-disk/

Các tùy chọn là:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

Để cải thiện tốc độ sao chép, hãy thêm -W( --whole-file), để tránh tính toán deltas / diffs của các tệp. Đây là mặc định khi cả nguồn và đích được chỉ định là đường dẫn cục bộ, vì lợi ích thực sự của thuật toán chuyển đổi delta của rsync là giảm việc sử dụng mạng.

Cũng xem xét thêm --numeric-idsđể tránh ánh xạ giá trị uid / gid theo tên người dùng / nhóm.


1
Thiên tài, cảm ơn bạn. Btw, tôi đã kết thúc việc sử dụng rsync -avxHAWX --numeric-ids --progress / mnt/nhưng tôi nên làm rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out. Tôi nghi ngờ đổ đầu ra cho thiết bị đầu cuối làm chậm quá trình. : D
Chris K

28
--info=progress2thay vì --progresshữu ích cho các chuyển khoản lớn, vì nó mang lại tiến bộ tổng thể, thay vì (hàng triệu dòng cho) các tệp riêng lẻ.
Florian

3
Tôi đã phải thay thế XAbằng E, bởi vì các thuộc tính mở rộng và ACL được bao phủ bởi máy Emac của tôi. Đã kiểm tra:rsync version 2.6.9 protocol version 29
Jonathan Komar

1
Ngoài ra > ~/rsync.out, 2> ~/rsync.errsẽ lưu bất kỳ lỗi nào trong một tệp riêng biệt.
Aneel

2
Nếu bạn đang sao chép từ một số thư mục khác /, lưu ý rằng việc có dấu gạch chéo (hoặc không) trên thư mục nguồn sẽ tạo ra sự khác biệt: rsync source/ dest/sao chép mọi thứ bên trong source/sang dest/, trong khi rsync source dest/sao chép thư mục sourcevà mọi thứ bên trong dest/.
bán ngoài

45

Câu trả lời của Michael Aaron Safyan không giải thích cho các tệp thưa thớt. -Stùy chọn sửa nó.

Ngoài ra, biến thể này không spam với mỗi tiến trình tệp và không thực hiện đồng bộ hóa delta sẽ giết chết hiệu suất trong các trường hợp không thuộc mạng.

Hoàn hảo để sao chép hệ thống tập tin từ một ổ đĩa cục bộ sang một ổ đĩa cục bộ khác.

rsync -axHAWXS --numeric-ids --info=progress2

1
Kinh ngạc. Đây thực sự là một công việc tốt
Gildas

1
Đây nên là câu trả lời được chấp nhận, hoạt động tuyệt vời. Ví dụ55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
vẽ

1
<3 điều này là hoàn hảo
Tim Strijdhorst

6

Đối với một bản sao địa phương bắn từ ổ đĩa này sang ổ đĩa khác, tôi đoán cp đủ như mô tả của Wolfmann ở trên.

Đối với các công việc lớn hơn như sao lưu cục bộ hoặc từ xa chẳng hạn, tốt nhất là rsync .

Tất nhiên, rsync phức tạp hơn đáng kể để sử dụng.

Tại sao rsync:

  • điều này cho phép bạn sao chép (sao chép đồng bộ hóa) tất cả hoặc một phần ổ đĩa A của bạn sang ổ B, với nhiều tùy chọn, như loại trừ một số thư mục khỏi bản sao (ví dụ: loại trừ / Proc).

  • Một lợi thế lớn khác là công cụ gốc này giám sát việc truyền tệp: ví dụ: đối với chuyển lớn, nếu kết nối bị gián đoạn, nó sẽ tiếp tục từ điểm dừng.

  • Và cuối cùng nhưng không kém phần quan trọng, rsync sử dụng kết nối ssh, vì vậy điều này cho phép bạn đạt được các "bản sao" được bảo mật từ xa được đồng bộ hóa. Có một cái nhìn đến trang người đàn ông cũng như ở đây cho một số ví dụ .


4

Giống như Michael Safyan gợi ý ở trên, tôi đã sử dụng rsynccho mục đích này. Tôi đề nghị sử dụng một số tùy chọn bổ sung để loại trừ các thư mục mà bạn có thể không muốn sao chép.

Phiên bản này khá cụ thể đối với các hệ thống dựa trên Gnome và Debian / Ubuntu, vì nó bao gồm các thư mục con của thư mục chính của người dùng dành riêng cho Gnome, cũng như bộ đệm của gói APT.

Dòng cuối cùng sẽ loại trừ bất kỳ thư mục có tên cache / Cache / .cache, có thể quá tích cực đối với một số mục đích sử dụng:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache

2

Thêm hai bit hữu ích vào luồng re rsync: thay đổi cypher và sử dụng --update:

Theo bài đăng của Wolfman, cp -axthanh lịch và tuyệt vời cho những thứ địa phương.

Tuy nhiên, rsynccũng tuyệt vời. Hơn nữa với câu trả lời của Michael -W, thay đổi cypher cũng có thể tăng tốc mọi thứ (mặc dù đọc bất kỳ ý nghĩa bảo mật nào).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

một số cuộc thảo luận (và điểm chuẩn) xung quanh việc CPU chậm là nút cổ chai thực sự, nhưng nó dường như giúp tôi khi máy được tải lên để làm những việc đồng thời khác.

Một trong những lý do lớn khác để sử dụng rsync trong một bản sao đệ quy lớn như thế này là do chuyển đổi -u (hoặc --update ). Nếu có vấn đề trong quá trình sao chép, bạn có thể khắc phục và rsync sẽ chọn nơi nó bị bỏ lại (tôi không nghĩ scp có vấn đề này). Làm điều đó cục bộ, cp cũng có một chuyển đổi -u.

(Tôi không chắc ý nghĩa của --update và --whole-file với nhau là gì, nhưng chúng dường như luôn hoạt động hợp lý với tôi trong loại nhiệm vụ này)

Tôi nhận ra đây không phải là một chủ đề về các tính năng của rsync, nhưng một số phổ biến nhất tôi sử dụng cho việc này là:

  • --delete-after, v.v. (như Michael đã đề cập trong phần tiếp theo), nếu bạn muốn đồng bộ hóa hệ thống mới trở lại vị trí ban đầu hoặc đại loại như thế. Và,
  • --exclude - để bỏ qua các thư mục / tệp, ví dụ như sao chép / tạo một hệ thống mới đến một địa điểm mới trong khi bỏ qua các thư mục nhà của người dùng, v.v. (hoặc bạn đang gắn kết nhà từ một nơi khác hoặc tạo người dùng mới, v.v.).

Ngẫu nhiên, nếu tôi phải sử dụng windows, tôi sử dụng rsync từ cygwin để tạo các bản sao đệ quy lớn, vì nhà thám hiểm hơi chết não muốn bắt đầu lại từ đầu (mặc dù tôi thấy Finder là OS X thậm chí còn tệ hơn)


2

rsync

"Cách tiếp cận này được coi là tốt hơn so với nhân bản đĩa với dd vì nó cho phép sử dụng một kích thước khác nhau, bảng phân vùng và hệ thống tệp và tốt hơn là sao chép bằng cp -a, vì nó cho phép kiểm soát tốt hơn các quyền, tệp thuộc tính , Danh sách điều khiển truy cập (ACL) và các thuộc tính mở rộng. "

Từ:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Người đàn ông ở đây


2

Như đã đề cập trong các ý kiến ​​của juniorRubyist, cách tiếp cận ưa thích ở đây nên được sử dụng dd. Lý do chính là hiệu suất, đó là bản sao theo từng khối thay vì theo từng tệp.

Nhân bản một phân vùng

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Nhân bản toàn bộ đĩa

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Người giới thiệu

  1. https://wiki.archlinux.org/index.php/disk_claming

ddlà một ý tưởng rất tệ vì 2 lý do: trước tiên thực hiện sao chép cấp độ khối của hệ thống tệp được gắn (đó là trường hợp /) sẽ có nhiều khả năng dẫn đến lỗi hệ thống tệp đích và thứ hai ddsẽ không sao chép dữ liệu từ các nguồn được gắn trong hệ thống tập tin như /boot/home. Liên kết của bạn hợp lệ để nhân bản đĩa, không phải nhân bản "phân cấp tệp"
Eric

1

'dd' là tuyệt vời, nhưng ddresTHER (apt install gddresTHER) thậm chí còn tốt hơn. Nếu dd bị gián đoạn, không có cách nào để khởi động lại (một lý do chính đáng khác để sử dụng rsync). Khi bạn sử dụng ddresTHER với logfile, nó sẽ theo dõi những khối nào đã được sao chép.

Khi sao lưu hệ thống Windows / Linux khởi động kép, tôi sử dụng ntfsclone cho các phân vùng Windows và ddresTHER cho phân vùng Linux và dd cho MBR. (Tôi chưa thử sao lưu hệ thống khởi động kép bằng GPT / UEFI.)

Những gì tôi muốn thấy là một công cụ ddresTHER có thể tạo các tệp như ntfsclone trong đó không gian chưa phân bổ được đánh dấu bằng các ký tự điều khiển. Điều này làm cho hình ảnh không thể gắn trực tiếp, nhưng cho phép nó chỉ lớn bằng dữ liệu chứa.

Ai đó làm ơn đưa ra "định dạng hình ảnh đặc biệt" của ntfsclone cho ddresTHER ...


0

rsync là giải pháp hoàn hảo như đã giải thích ở trên.

Tôi chỉ cần thêm -Svào " xử lý các tệp thưa thớt một cách hiệu quả " trong trường hợp có khối lượng devicemapper docker hoặc tương tự sẽ được sao chép.


0

Tôi đã thử các lệnh rsync được đề xuất ở đây nhưng cuối cùng tôi đã nhận được kết quả nhanh hơn và nhanh hơn partclone. Ngắt kết nối các phân vùng nguồn và đích rồi chạy như sau:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Điều này thực hiện các bước sau:

  1. Nhân bản (chỉ các phần được sử dụng của) phân vùng
  2. đảm bảo hệ thống tập tin ổn (resize2fs thực thi bước này)
  3. Thay đổi kích thước phân vùng thành hệ thống tập tin mới

Các công việc trên trong trường hợp phân vùng đích có cùng kích thước hoặc lớn hơn nguồn. Nếu mục tiêu của bạn nhỏ hơn nguồn (nhưng phù hợp với tất cả dữ liệu) thì hãy làm như sau:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M thu nhỏ hệ thống tập tin về kích thước tối thiểu trước khi nhân bản dữ liệu.

Lưu ý rằng partclonekhông được cài đặt theo mặc định trên hầu hết các hệ thống. Sử dụng một bản phân phối trực tiếp như clonezilla hoặc cài đặt partclone từ trình quản lý gói phân phối của bạn ( apt-get install partclonetrên các sytsems dựa trên debian).

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.