Tôi có cần kiểm tra tham nhũng tập tin sau khi scp được thực hiện không?


17

Tôi đã chuyển đệ quy nhiều tệp và thư mục bằng scp, sử dụng lệnh:

scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder

Sau khi quá trình chuyển hoàn tất, tôi có cần kiểm tra xem tất cả các tệp đã được chuyển mà không có bất kỳ tham nhũng nào hay không, hoặc xử scplý nó (tức là hiển thị một số thông báo lỗi nếu bất kỳ tệp nào không được chuyển chính xác)?


Trừ khi bạn nhận được trạng thái thoát không bằng 0 scpvà một thông báo lỗi đi kèm đến thiết bị lỗi chuẩn , nó sẽ sao chép mọi thứ chính xác và hoàn toàn.
roaima

một chút tl; dr vào bài viết của tôi: sử dụng rsyncnếu bạn có thể. Nó sao chép xác thực cho mỗi tệp sau khi giao dịch kết thúc, vì vậy tốt hơn hết là bạn nên sử dụng nó để an toàn hơn một chút.
Polemon

Câu trả lời:


24

scpxác minh rằng nó đã sao chép tất cả dữ liệu được gửi bởi bên kia. Tính toàn vẹn của chuyển tiền được đảm bảo bởi giao thức kênh mật mã. Vì vậy, bạn không cần phải xác minh tính toàn vẹn sau khi chuyển. Điều đó sẽ là dư thừa và rất khó có thể bắt gặp bất kỳ lỗi phần cứng nào vì dữ liệu bạn so sánh có thể sẽ được đọc từ bộ đệm. Xác minh dữ liệu định kỳ có thể hữu ích, nhưng xác minh ngay sau khi chuyển là vô nghĩa.

Tuy nhiên, bạn cần đảm bảo rằng điều đó scpkhông cho bạn biết rằng đã xảy ra sự cố. Cần có một thông báo lỗi, nhưng chỉ báo đáng tin cậy là scptrả về mã thoát không khác nếu có sự cố.

Chính xác hơn, bạn biết rằng tệp đã được truyền chính xác nếu scptrả về 0 (tức là mã trạng thái thành công). Kiểm tra trạng thái thoát là 0 là cần thiết khi bạn chạy bất kỳ lệnh nào. Nếu scptrả về trạng thái lỗi hoặc nếu nó bị chết bởi tín hiệu hoặc nếu nó không bao giờ chết vì hệ thống gặp sự cố hoặc mất điện trong khi nó đang chạy, thì bạn không có gì đảm bảo. Cụ thể, vì scpsao chép tệp trực tiếp vào tên cuối cùng của nó, điều này có nghĩa là bạn có thể kết thúc với một phần tệp trong trường hợp xảy ra sự cố hệ thống. Phần được sao chép được đảm bảo là chính xác nhưng tệp có thể bị cắt ngắn.

Để có độ tin cậy tốt hơn, hãy sử dụng rsync thay vì scp. Trừ khi được hướng dẫn khác, rsync ghi vào một tệp tạm thời và di chuyển nó vào vị trí sau khi hoàn thành. Do đó, nếu rsync trả về mã thành công, bạn biết tệp có mặt và bản sao hoàn chỉnh, chính xác; nếu rsync không trả về mã lỗi thì sẽ không có tệp nào xuất hiện (trừ khi có phiên bản cũ hơn của tệp, trong trường hợp đó phiên bản cũ hơn sẽ không được sửa đổi).


3

Tôi chưa bao giờ gặp vấn đề với tham nhũng sau khi tôi làm scpgì đó nhưng nếu bạn lo lắng về điều đó, bạn luôn có thể chạy md5sum <filename>trên cả hai hệ thống để đảm bảo chúng giống nhau.


3

Đề xuất của Per @ david-king, đây là một md5giải pháp dựa trên để kiểm tra tính toàn vẹn của các tệp sau khi chuyển. Chạy lệnh sau một lần sau khi cding để /source/foldertrên máy cục bộ và một lần sau khi cding để /destination/foldertrên máy chủ từ xa: find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum. Băm kết quả phải giống hệt nhau sau khi chuyển thành công.

Cập nhật: Theo câu trả lời này cho một câu hỏi tương tự trên ServerFault , scpkhông đảm bảo tính toàn vẹn của tệp(Vui lòng kiểm tra câu trả lời này của @Gilles để biết chi tiết). Thay thế cho kiểm tra sau khi chuyển băm tập tin, bạn có thể sử dụng rsyncđể chuyển tập tin và kiểm tra mã trả lại của nó.

Cập nhật 2: Sau đây chỉ kiểm tra xem các tệp và kích thước tương ứng của chúng có khớp sau khi chuyển không:find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum


2
Nếu scp trả về 0, thì tính toàn vẹn được đảm bảo. Hơn nữa, nếu scp không trả về 0, thì vấn đề không phải là tham nhũng chung mà cụ thể là cắt ngắn; xác minh kích thước tệp là đủ (trừ khi đã có phiên bản cũ hơn của tệp đích: nếu scp bị gián đoạn từ rất sớm thì phiên bản cũ hơn vẫn có thể xuất hiện). Kiểm tra tổng kiểm tra ở đây là một sự lãng phí thời gian.
Gilles 'SO- ngừng trở nên xấu xa'

Hội chợ. Tôi cập nhật câu trả lời của tôi.
Mani M

Bạn đã không sửa lỗi cơ bản. Kiểm tra scpmã trả về là đủ và kiểm tra băm là vô ích.
Gilles 'SO- ngừng trở nên xấu xa'

1
Thậm chí nếu scptrả về 0 nó không đảm bảo rằng các hệ thống tập tin đã không sai lầm những thứ lên, để kiểm tra băm vẫn còn hữu ích để kiểm tra tính toàn vẹn của dữ liệu nhạy cảm nếu ai đó chọn để sử dụng scptrên rsync.
Mani M
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.