Чи проводить будь-яку перевірку?


16

Я використовую ddдля копіювання даних зі старого жорсткого диска на новий. Хочу бути впевненим, що цілісність даних захищена.

На цю відповідь Гілль говорить

Якщо [dd] завершено успішно, резервна копія виправлена, усуваючи апаратну помилку ...

Що це означає саме? Чи ddє якась вбудована перевірка?

Якби я замість цього використовував rsync, я також запускаю другий пропуск --checksumдля перевірки. Чи виправдана така параноїя?


Визначте "цілісність безпечна".
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Я маю на увазі, що копія ідентична оригіналу.
Спархак

Якщо у вас є лише плоскі файли, традиційним способом копіювання файлів є використання tar або cpio. GNU tar має прапор підтвердження: gnu.org/software/tar/manual/html_section/tar_81.html . Ці дні rsync, мабуть, були б найпростішими.
Thorbjørn Ravn Andersen

1
"заборона апаратної несправності" вказує на те, що вона не проводить перевірки. Якщо це зробило, це могло б виявити апаратний збій.
Бармар

Відповіді:


20

ddабо будь-яка інша програма не має "вбудованої перевірки" у тому сенсі, про який ви, мабуть, думаєте: вона не зчитує дані з носія даних для порівняння з написаним. Оце робота операційної системи.

Зробити перевірку читання вниз до апаратних засобів із програми не реально. Це працювало б у деяких сценаріях, але в більшості випадків нічого б не досягти. Додаток може прочитати назад те, що він написав, якщо він записується безпосередньо на носій інформації , але це, як правило, зчитується з кешу пам'яті, що не дасть ніякої корисної гарантії. У прикладі, який ви цитуєте , ddпише в трубку, і в цьому випадку він не має контролю над тим, що відбувається з даними далі вниз по лінії. У вашому прикладі rsync другий пропускrsync --checksum безглуздо: теоретично це може призвести до помилки, але на практиці, якщо помилка трапиться, то другий пропуск, ймовірно, не повідомить про щось не так, тож ви витрачаєте зусилля на те, що насправді не дає корисної впевненості.

Тим НЕ менше, додатки дійсно перевірити , що відбувається з даними, в тому сенсі , що вони перевіряють , що операційна система взяла на себе відповідальність за дані. Усі системні дзвінки повертають статус помилки. Якщо системний виклик повертає статус помилки, програма повинна поширювати цю помилку на користувача, як правило, відображаючи повідомлення про помилку та повертаючи ненульовий статус виходу.

Остерігайтеся, що ddце виняток: залежно від параметрів командного рядка, ddможуть ігнорувати деякі помилки . Це надзвичайно незвично: ddє єдиною загальною командою з цим властивістю. Використовуйте catзамість цього dd, ви не ризикуєте корупцією, і це може бути швидше .

У ланцюжку копіювання даних можуть виникнути два види помилок.

  • Корупція: трохи перевертається під час передачі. Немає можливості перевірити це на рівні програми, тому що якщо це трапиться, це пов’язано з помилкою програмування або помилкою апаратних засобів, які, ймовірно, можуть спричинити таку ж пошкодження при читанні назад. Єдиний корисний спосіб переконатись у тому, що подібної корупції не сталося - це фізично відключити носій та спробувати ще раз, бажано на іншому комп’ютері, якщо проблема була з оперативною пам’яттю.
  • Абрізання: усі дані, які були скопійовані, були скопійовані правильно, але деякі дані взагалі не були скопійовані. Це один є перевірка варто іноді, в залежності від складності команди. Для цього вам не потрібно читати дані: просто перевірте розмір.

Я вважаю, що більшість носіїв інформації використовують достатньо FEC для виявлення + виправлення одного біта.
садок

2
Звичайно, якщо ви скопіюєте весь жорсткий диск з dd, а потім відразу порівняйте той жорсткий диск, який ви знаєте, він працював, оскільки кеш недостатньо великий.
Джошуа

1
Дякуємо за відповідь (+1). Я, мабуть, повинен зазначити, що я використовую досить базовий характер dd if=/dev/sdc of=/dev/sdb bs=4M, тому я розумію, що питання ігнорування помилок та швидкості (більш-менш порівняно з cat) суперечать. Ви хочете просто перевірити розмір, встановивши потім df?
Sparhawk

4

Ні, ddне робить явної перевірки. Якщо ви хочете / потребуєте судово-перевірену копію вашого диска або будь-якої його частини, використовуйте dcflddрозширену версію, ddрозроблену лабораторією комп’ютерної криміналістики Міністерства оборони США.


4

Єдиний спосіб бути "впевненим" - це зробити додатковий пропуск читання та порівняння (після скидання кеш-пам'яті).

Крім цього, ddвиявляє помилки читання та запису так само, як і інші програми ... це працює, якщо диски (та інші задіяні компоненти) повідомляють про помилки; для накопичувачів, які приймають дані мовчки без їх фактичного запису, вам не пощастило.

Чи виправдана така параноїя?

Якщо ви не можете довіряти вашому обладнання надійним, все ускладнюється ...


Це складніше, ніж це , як щодо читання та порівняння, так і щодо ddвиявлення помилок.
Жил "ТАК - перестань бути злим"

Що ж, якщо ви їдете так далеко, у вас ddє серйозні проблеми з корупцією, але такі випадки, як це, не були частиною питання.
frostschutz

Ці корупційні проблеми можуть обґрунтувати перевірку даних, отриманих із використанням dd. Справжнє рішення - використовувати що завгодно, але ddоскільки мовчазна корупція даних - це особливість dd.
Жиль "ТАК - перестань бути злим"

2
@Gilles або просто не кажіть ddігнорувати помилки. Ви точно не можете звинувачувати програму у виконанні саме того, про що ви її просили.
Марк

@ Марк І як, моліться, вам сказати ddне ігнорувати помилки? І ні, conv=noerrorне є правильною відповіддю. Див. Приклад відповіді Frostschutz . Я зробити звинувачувати дизайн ddдля виготовлення , ігноруючи помилки режиму за замовчуванням, і один , який не може бути виключений , не знаючи його внутрішню механіку дуже точно.
Жил "ТАК - перестань бути злим"

2

Так, несправне обладнання може вводити випадкові біти помилок у дані з деякою швидкістю як один біт на кількість мегабайт, це можливо і відбувається на практиці іноді.

Зазвичай я використовую хеш md5 або sha1, щоб переконатися, що дані недоторкані, перечитавши як джерело, так і призначення, наприклад:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

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


Достатньо відключити / змонтувати файлову систему, щоб змусити ОС записати кеш файлової системи на пристрій.
чудо173

miracle173, але навіть після синхронізації ОС не зберігає в кеші те, що вона написала? тож я не впевнений, що відключення очистить кеш-пам'ять від оперативної пам'яті.
Метт

1

Від man dd:

По завершенні dd відображає кількість повних та часткових блоків введення та виводу, усічені записи вводу та блоки заміни байтів непарної довжини на стандартний вихід помилок.

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

ddперевіряє відповідність розмірів блоку введення / виведення кожного разу, коли він копіює блок. Якщо вони цього не роблять, він обробляє помилку попередженням або фатальною помилкою (переставленою noerror). Ось чому ddпрацює практично весь час.

Проте це не замінює вручну перевірку цілісності вашого диска. Якщо інформація для вас цінна, то так, ваша параноїя виправдана . Запустити перевірку вручну, як тільки ddбуде завершено.


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