Làm cách nào tôi có thể làm chậm rsync?


35

Tôi đang cố gắng sao chép nội dung của ổ USB bị hỏng. Nếu tôi đọc dữ liệu quá nhanh, chip điều khiển của ổ đĩa sẽ bị quá nóng và ổ đĩa sẽ biến mất khỏi hệ thống. Khi điều đó xảy ra, tôi cần rút ổ đĩa ra, đợi một lát hoặc lâu hơn để nó nguội, cắm lại và khởi động lại bản sao.

Tôi đã có một bản sao lưu cũ của nội dung của ổ đĩa, vì vậy cách rõ ràng để lấy phần còn lại của dữ liệu là sử dụng rsyncđể mang lại bản sao lưu cập nhật, nhưng điều này chạy vào toàn bộ "đọc quá nhanh, ổ đĩa biến mất và tôi cần bắt đầu lại ". Có cách nào để rsyncchỉ đọc X megabyte dữ liệu mỗi phút không? Ngoài ra, có thể yêu cầu nó tạm dừng hoạt động khi ổ đĩa biến mất và tiếp tục khi nó được cắm lại không?


24
Bạn đã nghĩ về việc làm mát ổ đĩa?
AEonAX

3
Ổ đĩa đầy đủ như thế nào? Nếu ổ đĩa đã đầy hơn 50%, có thể tốt hơn là chỉ phản chiếu ổ đĩa bị hỏng trước và sau đó chỉ bắt đầu xử lý những thứ phức tạp hơn trên gương.
kasperd

1
@AEonAX: Mặc dù một ý tưởng tuyệt vời (sic!), Tôi không khuyến nghị điều này: bạn đang gây thêm áp lực nhiệt cho thiết bị và nó có thể thất bại hoàn toàn.
Piskvor

Câu trả lời:


46

Không giống như trải nghiệm của DopeGhoti, --bwlimitcờ không giới hạn truyền dữ liệu, với rsync của tôi (v3.1.2).

kiểm tra:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(lưu ý: timeđầu ra của tôi trông khác với hầu hết các timeyêu cầu ( zshtính năng), những lần tôi không chỉnh sửa)

Khác, có lẽ một cái gì đó dọc theo dòng của một đôi -exectrong find. Tôi tin rằng rsync -Rnên tạo và sao chép các thư mục mẹ, nhưng nếu không, thì cp --parentsnên.

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

Lưu ý : cũng kiểm tra ddresTHER , nó có thể đúng với những gì bạn đang tìm kiếm :)


1
Vâng DG có thể đã bị nhầm lẫn bởi từ "băng thông" - nhưng điều đó áp dụng cho bất kỳ kênh mang dữ liệu nào, không chỉ mạng. Trang Man nói cụ thể : --bwlimit=KBPS limit I/O bandwidth; KBytes per second, không đề cập đến mạng. Ngẫu nhiên duyệt mã, điều này giới hạn tốc độ đọc , bất kể đích đến. Thêm vào đó, giai thoại: Tôi đã sử dụng tùy chọn này trong nhiều năm nay để hạn chế tốc độ ghi cục bộ-cục bộ. linux.die.net/man/1/rsync
Piskvor

1
Được rồi, trên cái nhìn thứ hai, nó thực sự đếm số byte được viết và ngủ trong một thời gian tính toán. io.c, dòng 832-3: if (bwlimit_writemax) sleep_for_bwlimit(n);Trong mọi trường hợp, điều này có thể sẽ hoạt động như dự định, đọc trong các đợt ngắn và ngủ ở giữa. Tôi sẽ khuyên bạn nên bắt đầu với giá trị thấp và tăng cẩn thận, hoặc chỉ để chuyển chậm chạy qua đêm.
Piskvor

25

Một chút về giải pháp MacGyver nhưng tôi đã thành công với nó trong quá khứ:
Đặt một trung tâm USB 1 cũ giữa thanh và máy tính. Không có cách nào trong địa ngục nó sẽ sao chép nhanh theo cách đó :-)

Khả năng khác: Nếu bạn có sẵn một thanh khác, hãy đặt nó trên một cổng USB khác được kết nối với cùng một trung tâm gốc (để nó chia sẻ băng thông với thanh vấn đề của bạn).
Bây giờ bắt đầu một thao tác ghi lớn vào thanh bổ sung để cả hai thanh đang cạnh tranh về băng thông. Để kiểm soát hơn nữa, bạn có thể sử dụng ionice để giảm mức độ ưu tiên trên thanh vấn đề hơn nữa.


1
Tôi chắc chắn nên có một cách để làm cho các cổng hoạt động như USB 1.1 thông qua một giải pháp phần mềm, có thể bằng cách cung cấp các tùy chọn cho mô-đun hạt nhân USB.
André Borie

@ AndréBorie: Có - bbs.archlinux.org/viewtopic.php?pid=1342593#p1342593 , nhưng vì có các điều tiết hiệu quả trong SW, đây là một chút giải pháp vũ phu.
Piskvor

@Piskvor nó đàm phán tốc độ truyền thấp hơn với thiết bị, giống như sử dụng bộ chia USB 1 sẽ làm được. Tôi không thấy bất cứ điều gì "vũ phu" về nó.
André Borie

Được rồi, lựa chọn từ xấu, tôi thừa nhận. Nhưng các thiết bị cấu hình lại IMHO sẽ yêu cầu các đặc quyền đặc biệt (root hoặc ít nhất là% adm), trong khi việc kiểm soát tốc độ đọc trên mỗi quy trình sẽ đơn giản hơn. (Ngoài ra, có những thiết bị hoàn toàn không hoạt động bên ngoài USB 2.0 - vi phạm thông số kỹ thuật)
Piskvor

13

Bạn có thể sử dụng rsync --bwlimit=RATEđể điều chỉnh tốc độ truyền tệp, dựa trên các nhận xét bên dưới, thực sự có vẻ đặc biệt hoạt động bằng cách điều chỉnh tốc độ đọc dữ liệu, đó chính xác là những gì bạn đang tìm kiếm.



3
ionice chỉ ưu tiên, nếu hai thứ đang đọc thì mặc định họ nhận được 50/50. ionice có thể điều chỉnh điều đó, nhưng nếu chỉ có một điều đọc, thì nó sẽ nhận được 100%.
coteyr

@coteyr Bạn nói đúng và đó là lý do tại sao bạn cần kết hợp nó với quy trình ăn băng thông thứ 2 trên cùng một trung tâm gốc USB. Xem câu trả lời của tôi.
Tonny

2
May mắn thay, câu trả lời của bạn không chính xác: --bwlimitđặt giới hạn I / O, không nhất thiết là giới hạn mạng . Thử nghiệm nhiều lần trong các tình huống khác nhau: tùy chọn này làm cho rsync hạn chế cứ vào đọc , không phụ thuộc vào đích. (Tìm thấy điều này trong một kịch bản tương tự, trong đó việc ghi nhanh vào một thiết bị cục bộ chậm khiến chúng thất bại)
Piskvor

1
@piskvor - cảm ơn vì điều đó! Đó là những gì tôi yêu thích ở nơi này; Tôi tiếp tục học những điều mới (:
DopeGhoti

8

Nhiều giải pháp hơn, ngoài rsync --bwlimit=100100KiB / s.

  1. Sử dụng ddrescuevới --max-read-ratetùy chọn cho một bản sao đĩa đầy đủ. Điều này cũng sẽ cho phép bạn khởi động lại một bản sao đĩa đầy đủ, nơi nó bị bỏ lại sau một lỗi.

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescuecũng có rất nhiều tùy chọn khác liên quan đến phục hồi dữ liệu, xem hướng dẫn ở đây .

  1. Sử dụng pv("trình xem đường ống") với --rate-limittùy chọn hoặc throttlecông cụ để xếp hạng các đường ống giới hạn. pvcũng có thể cho thấy sự tiến bộ. Bạn có thể thực hiện công việc này cho bất kỳ công cụ nào sử dụng đường ống hoặc có thể sử dụng đường ống:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    hoặc là

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    Hãy xem trang chủ pv để biết thêm các cài đặt và ví dụ. Đối với throttle, bạn cũng có thể muốn thử -wtùy chọn, xác định cách tính tốc độ, xem trang hướng dẫn điều tiết .


Bây giờ đó là một công cụ hữu ích, không biết điều đó, cảm ơn! pvmanpage thậm chí còn có nhiều ví dụ về các cách sử dụng khác nhau.
Piskvor

Tôi đã liên lạc pvnhiều lần kể từ khi phát hiện ra trong những ngày quay băng của mình. Trở lại khi tar viết vào ổ đĩa băng. :)
Dan Garthwaite
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.