Фон / контекст:
В даний час я запускаю GNU ddrescue 1.18.1 для відновлення даних з USB, який зазнав відключення кабелю під час запису віртуального диска на розділ disk2s1. Спочатку я відновляю свій другий розділ (disk2s2) і помічаю, що я досяг третьої фази (Розщеплення). Я розміщую зображення на мережевому сховищі.
Питання:
Я помітив, що ця фаза петлює. Чи є спосіб обчислити кількість циклів, які я, мабуть, зазнаю, враховуючи мою інформацію про поточний стан (я показую лише дві помилки)?
Статус:
Оновлення / редагування:
Тож мене все ще дуже цікавить, як можна оцінити цикли / час завершення за допомогою інструмента ddrescue. Відповідно до коментарів, я додаю оцінку файлу журналу для мого розділу2 disk2s1, який зараз працює (disk2s2 завершився через 14.5 годин, з одним перервою користувача протягом приблизно 6 годин).
Завершений журнал розділів
Щойно завершений розділ, ось результат перевірки журналу.
Довідка (примітки алгоритму відновлення):
4 Алгоритм
GNU ddrescue не є похідною від dd, і жодним чином не пов'язаний з dd, за винятком того, що обидва можуть використовуватися для копіювання даних з одного пристрою на інший. Ключова відмінність полягає в тому, що ddrescue використовує складний алгоритм для копіювання даних з несправних дисків, завдаючи їм якомога менше додаткових збитків.
Ddrescue ефективно керує статусом аварійної порятунку та намагається спочатку врятувати хороші частини, плануючи зчитування в поганих (або повільних) областях на потім. Це максимально збільшує кількість даних, які можна остаточно відновити з несправного накопичувача.
Стандартна утиліта dd може використовуватися для збереження даних з несправного накопичувача, але вона читає дані послідовно, що може зношувати диск, не врятуючи нічого, якщо помилки знаходяться на початку диска.
Інші програми читають дані послідовно, але переходять на читання невеликих розмірів, коли знаходять помилки. Це погана ідея, оскільки означає витрачати більше часу на місцях помилок, пошкоджуючи поверхню, голови та механіку приводу, замість того, щоб якнайшвидше виходити з них. Така поведінка зменшує шанси на порятунок решти хороших даних.
Алгоритм ddrescue полягає в наступному (користувач може перервати процес в будь-який момент, але пам’ятайте, що поганий диск може тривалий час блокувати ddrescue, поки ядро не здасться):
1) За бажанням прочитайте файл журналу, що описує стан багатокористувацької або попередньо перерваної аварійної роботи. Якщо файл журналу не вказаний або порожній або не існує, позначте весь рятувальний домен як неперевірений.
2) (Перша фаза; Копіювання) Прочитайте неперевірені частини вхідного файлу, позначивши невдалі блоки як не обрізані та пропускаючи їх за межі. Пропускайте також за межі повільних областей. Пропущені області намагаються пізніше через два додаткові проходи (перед обрізкою), змінюючи напрямок після кожного проходу, поки не буде спробувано весь рятувальний домен. Третій прохід - розгорнутий пропуск, із пропуском відключений. (Метою є швидке розмежування великих помилок, збереження журналу файлів невеликим та створення хороших вихідних точок для обрізки). Лише пробні області читаються великими блоками. Обрізання, розщеплення та повторне пробування здійснюються по секторах. Кожен сектор випробовується не більше двох разів; перший на цьому кроці (як правило, у складі читання великого блоку, але іноді як зчитування одного сектору), другий на одному з етапів нижче, як прочитаний окремий сектор.
3) (Друга фаза; Обрізка) Читайте вперед по одному сектору за один раз від переднього краю найменшого не обрізаного блоку, поки не буде знайдено поганий сектор. Потім читайте назад по одному сектору за часом від крайнього краю того ж блоку, поки не буде знайдено поганий сектор. Для кожного не обрізаного блоку позначте погані сектори як поганий сектор, а решту цього блоку позначте як нерозщеплений, не намагаючись прочитати його. Повторюйте, поки не буде більше необрізаних блоків. (Великі не обрізані блоки утворюються шляхом об'єднання менших, і частка їх хороших даних у краях менша).
4) (Третя фаза; Розщеплення) Прочитайте вперед по одному сектору за часом від центру найбільшого нерозщепленого блоку, поки не буде знайдено поганий сектор. Потім, якщо знайдений поганий сектор не вперше спробували, читайте по одному сектору за часом від центру того ж блоку, поки не буде знайдений поганий сектор. Якщо файл журналу більший за "--loglog-size", читайте послідовно найбільші нерозбиті блоки, поки кількість записів у файлі журналу не опуститься нижче "-logfile-size". Повторіть, поки всі інші нерозщеплені блоки не матимуть 7 секторів. Потім читайте решта нерозщеплених блоків послідовно.
5) (Четверта фаза; Повторне намагання) Необов'язково спробуйте прочитати ще раз погані сектори, поки не буде досягнуто заданої кількості пропусків. Кожен поганий сектор випробовується лише один раз за кожен прохід. Ddrescue не може знати, чи поганий сектор не підлягає відновленню чи він буде зрештою прочитаний після деяких спроб.
6) За бажанням запишіть файл журналу для подальшого використання.
Загальний розмір помилок ("помилка") - це сума розмірів усіх блоків, що не обрізані, не розбиваються і не відповідають сектору. Він збільшується під час фази копіювання та може зменшуватися під час обрізання, розщеплення та повторного повторного повторного повторного повторного повторного повторного повторного огляду. Зауважте, що як ddrescue розбиває невдалі блоки, роблячи їх меншими, загальний розмір помилок може зменшуватися, тоді як кількість помилок збільшується.
Файл журналу періодично зберігається на диску, а також після завершення або переривання ddrescue. Тож у випадку аварії ви можете відновити порятунок з невеликим відшкодуванням. Інтервал між збереженнями змінюється від 30 секунд до 5 хвилин, залежно від розміру журналу файлів (більші журнали зберігаються з більш тривалими інтервалами).
Також один і той же журнал може використовуватися для декількох команд, що копіюють різні області вхідного файлу, і для декількох спроб відновлення для різних підмножин. Дивіться цей приклад:
Спочатку врятуйте найважливішу частину диска. ddrescue -i0 -s50MiB / dev / hdc журнал hdimage ddrescue -i0 -s1MiB -d -r3 / dev / hdc журнал файлів hdimage
Потім врятуйте деякі ключові області диска. ddrescue -i30GiB -s10GiB / dev / hdc журнал hdimage ddrescue -i230GiB -s5GiB / dev / hdc журнал hdimage
Тепер рятуйте решту (не відновлює те, що вже зроблено). ddrescue / dev / hdc файл журналу hdimage ddrescue -d -r3 / dev / hdc журнал hdimage
ddrescuelog -t YourLog.txt
в іншому терміналі?
ddrescue
можна лише спробувати відновити фізичні проблеми і зовсім не допоможе з логічними помилками. Для останнього спробуйте fsck
або подібне ..
ddrescue
лише в тому випадку, якщо на диску є погані блоки, які не були б викликані "відключенням кабелю". Якщо у вас проблеми з кабелем, просто спробуйте інший кабель ...