dd
або будь-яка інша програма не має "вбудованої перевірки" у тому сенсі, про який ви, мабуть, думаєте: вона не зчитує дані з носія даних для порівняння з написаним. Оце робота операційної системи.
Зробити перевірку читання вниз до апаратних засобів із програми не реально. Це працювало б у деяких сценаріях, але в більшості випадків нічого б не досягти. Додаток може прочитати назад те, що він написав, якщо він записується безпосередньо на носій інформації , але це, як правило, зчитується з кешу пам'яті, що не дасть ніякої корисної гарантії. У прикладі, який ви цитуєте , dd
пише в трубку, і в цьому випадку він не має контролю над тим, що відбувається з даними далі вниз по лінії. У вашому прикладі rsync другий пропускrsync --checksum
безглуздо: теоретично це може призвести до помилки, але на практиці, якщо помилка трапиться, то другий пропуск, ймовірно, не повідомить про щось не так, тож ви витрачаєте зусилля на те, що насправді не дає корисної впевненості.
Тим НЕ менше, додатки дійсно перевірити , що відбувається з даними, в тому сенсі , що вони перевіряють , що операційна система взяла на себе відповідальність за дані. Усі системні дзвінки повертають статус помилки. Якщо системний виклик повертає статус помилки, програма повинна поширювати цю помилку на користувача, як правило, відображаючи повідомлення про помилку та повертаючи ненульовий статус виходу.
Остерігайтеся, що dd
це виняток: залежно від параметрів командного рядка, dd
можуть ігнорувати деякі помилки . Це надзвичайно незвично: dd
є єдиною загальною командою з цим властивістю. Використовуйте cat
замість цього dd
, ви не ризикуєте корупцією, і це може бути швидше .
У ланцюжку копіювання даних можуть виникнути два види помилок.
- Корупція: трохи перевертається під час передачі. Немає можливості перевірити це на рівні програми, тому що якщо це трапиться, це пов’язано з помилкою програмування або помилкою апаратних засобів, які, ймовірно, можуть спричинити таку ж пошкодження при читанні назад. Єдиний корисний спосіб переконатись у тому, що подібної корупції не сталося - це фізично відключити носій та спробувати ще раз, бажано на іншому комп’ютері, якщо проблема була з оперативною пам’яттю.
- Абрізання: усі дані, які були скопійовані, були скопійовані правильно, але деякі дані взагалі не були скопійовані. Це один є перевірка варто іноді, в залежності від складності команди. Для цього вам не потрібно читати дані: просто перевірте розмір.