Чи потрібно перевіряти наявність корупції файлів, коли буде зроблено scp?


17

Я рекурсивно передав багато файлів і папок за scpдопомогою команди:

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

Після завершення передачі мені потрібно перевірити, чи всі файли передані без будь-яких пошкоджень, чи не scpпіклуються про неї (тобто відображається якесь повідомлення про помилку, якщо якийсь із файлів неправильно передано)?


Якщо ви не отримаєте ненульовий статус виходу з scpсупровідного повідомлення про помилку в stderr , воно скопіює все правильно та повністю.
roaima

трохи tl; д-р до мого посту: використовуйте, rsyncякщо можете. Він виконує копіювання перевірок для кожного файлу після завершення транзакції, тому корисно використовувати це, щоб бути трохи безпечнішим.
полемон

Відповіді:


24

scpпідтверджує, що він скопіював усі дані, надіслані іншою стороною. Цілісність передачі гарантується протоколом криптографічного каналу. Тому вам не потрібно перевіряти цілісність після передачі. Це було б надлишком, і малоймовірно, що ви знайдете будь-яку апаратну помилку, оскільки дані, з якими порівнюєте, ймовірно, будуть прочитані з кеша. Періодична перевірка даних може бути корисною, але перевірити відразу після передачі безглуздо.

Однак вам потрібно переконатися, що scpвам не скажуть, що щось пішло не так. Має бути повідомлення про помилку, але надійним показником є ​​те, що scpповертає ненульовий код виходу, якщо щось пішло не так.

Точніше, ви знаєте, що файл передано правильно, якщо scpповертає 0 (тобто код статусу успіху). Перевірка того, що статус виходу 0 , необхідна, якщо ви все одно запустите будь-яку команду. Якщо scpповертається стан помилки, або якщо він загинув сигналом, або якщо він ніколи не вмирає, оскільки система виходить з ладу або втрачає живлення під час роботи, то у вас немає гарантій. Зокрема, оскільки scpкопіюється файл безпосередньо до його остаточного імені, це означає, що ви можете отримати частковий файл у разі збоїв системи. Частина, яка була скопійована, гарантована як коректна, але файл може бути врізаний.

Для кращої надійності використовуйте rsync замість scp. Якщо не вказано інше, rsync записує у тимчасовий файл і переміщує його на місце після його закінчення. Таким чином, якщо rsync повертає код успіху, ви знаєте, що файл присутній і правильна, повна копія; якщо rsync не повернув код помилки, то жодного файлу не буде (якщо тільки не була старіша версія файлу; в цьому випадку старіша версія не буде змінена).


3

У мене ніколи не було проблем з корупцією після scpчого-небудь, але якщо ви переживаєте за це, ви завжди можете працювати md5sum <filename>в обох системах, щоб переконатися, що вони однакові.


3

За пропозицією @ David-King це md5засноване рішення для перевірки цілісності файлів після передачі. Виконайте наступну команду відразу після cdІНГ /source/folderна локальній машині , і відразу ж після cdІНГ /destination/folderна віддалений хост: find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum. Отриманий хеш повинен бути ідентичним після успішної передачі.

Оновлення: Відповідно до цієї відповіді на подібне запитання на ServerFault , scpце не гарантує цілісність файлу(Будь ласка, перевірте цю відповідь на @Gilles для детальної інформації). Альтернативу перевірки хешів файлів після перенесення можна використовувати rsyncдля передачі файлів і перевірки її повернення.

Оновлення 2: Наступне перевіряє, чи файли та їх розміри відповідають після передачі:find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum


2
Якщо УПП повертає 0, то цілісність буде гарантована. Крім того, якщо scp не повертає 0, проблема не є загальною корупцією, а конкретно усіченням; достатньо перевірити розмір файлу (якщо тільки вже не існувала старіша версія цільового файлу: якщо scp був перерваний дуже рано, то стара версія все ще може бути присутнім). Перевірка контрольних сум тут - марна трата часу.
Жил "ТАК - перестань бути злим"

Справедливий. Я оновив свою відповідь.
Мані М

Ви не виправили основний недолік. Перевірка scpзворотного коду достатня, а перевірка хешей марно.
Жил "ТАК - перестань бути злим"

1
Навіть якщо scpповертає 0, це не гарантує, що файлова система не переплутала речі, тому перевірка хешей все-таки корисна для перевірки цілісності конфіденційних даних, якщо хтось вирішить використовувати scpбільше rsync.
Мані М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.