Швидше відновлення з диска з поганими секторами


13

Нещодавно я спробував ddз нездорового жорсткого диска в файл. Я звик dd if=/dev/sdb of=somefile bs=4096 conv=noerror,sync. Моя проблема полягала в тому, що ddвитрачалася багато часу, коли вона стикалася з поганим блоком. У моєму випадку використання я б із задоволенням заплатив деякими втратами даних за швидший результат.

Чи є спосіб швидше обробити помилку? Можливо, ядро ​​ядра (підказка жорсткому диску зробити менше зусиль для читання блоку)? Або інша програма?

Відповіді:


29

По-перше, для використання програмного забезпечення: ви можете спробувати використовувати ddrescueзамість dd.

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

Приклад використання:

# ddrescue -n /dev/sda /dev/sdb rescue.log
# ddrescue -r1 /dev/sda /dev/sdb rescue.log

З ddrescueінформаційної сторінки:

   -n, --no-scrape     
          Skip the scraping phase. Avoids spending a lot of time
          trying to rescue the most difficult parts of the file.

   -r, --retry-passes=<n>
          Exit after given number of retry passes. Defaults to 0.
          -1 means infinity. Every bad sector is tried only once 
          in each pass. To retry bad sectors detected on a previous
          run, you must specify a non-zero number of retry passes.

Ось кілька додаткових джерел використання ddrescue:


Редагувати

У разі , якщо жорсткий диск сам по собі займає надто багато часу, ви можете спробувати включити функцію під назвою TLER ( T IME L imited E rror R ecovery) або КЦТЛІ ( C ommand C ompletion T IME L IMIT). Не всі жорсткі диски мають його, але ви можете використовувати його для обмеження часу на самому контролері жорсткого диска. Такий підхід можна ddrecue, звичайно, поєднувати з використанням .

У Linux є інструмент під назвою smartctlsmartmontoolsпакеті).

Щоб перевірити поточний параметр ("вимкнено" означає необмежений час, який ви не хочете):

# smartctl -l scterc /dev/sda

Щоб встановити його на фіксованому значенні (у цьому прикладі 5,0 секунди. Якщо встановити його на 0, вимикає TLER):

# smartctl -l scterc,50,50 /dev/sda

Джерело для TLER: http://en.wikipedia.org/wiki/TLER


2
Ще один інструмент для перегляду - dc3dd, який є криміналістичною версією DD
fpmurphy

о, добре, я не знав цього інструменту!
Slizzered

2
Я не мав уявлення про той TLER, але це дійсно врятувало мені день. На моєму диску це було відключено, і кожен раз, коли я запускав ddrescue, мій диск блокувався через пару секунд. Вимкнення, включення та наступна спроба. Тепер я встановив його на 2 секунди за вказаною вами командою, і вона ніколи не блокується, вона пропускає деякі сектори, але принаймні продовжується без перерв.
Свен Ріке

2

Я мав хороші результати від інакше нечитаних дисків із цим програмним забезпеченням.

http://www.cgsecurity.org/wiki/TestDisk

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

http://www.cgsecurity.org/wiki/PhotoRec


2

Для швидкого та швидкого варіанту порятунку диска ви можете використовувати файл скрипту sh та запустити файл з sh. Він містить цей рядок, просто повторіть sudo ddrescueі ще sleep 3кілька разів. Сон використовується для того, щоб привід відпочив кілька секунд:

#! /bin/sh -e 
sudo ddrescue -d -r0 -e +0 -T 1s -n /dev/drivepartition file.img log.logfile 
sleep 3

Параметри, які використовуються вище:

  • -r0 : без повторних спроб
  • -e +0: вихід при першій помилці
  • -T 1s: вихід з прочитаною помилкою 1 секунди
  • -d : Прямий ввід / вивід
  • -n : без вискоблювання

Ви можете використовувати -Rпісля закінчення з опцією -Aодин раз, що скасує та видалить усі помилки та почнеться знову назад. Значить, вона буде читати помилки по-різному.


0

Залежить від розміру вашого жорсткого диска та кількості поганих блоків. Зазвичай у мене потрібно 20 хв для резервного копіювання, використовуючи DD 1 терапевтичний здоровий hd. З поганими блоками я щойно оговтався сьогодні вранці, зайняв мене вдвічі більше часу. У мене виникли проблеми з копіюванням (створення резервної копії диска) з приблизно 30 поганими блоками. Перше, що я зробив - це резервне копіювання файлів за допомогою звичайної Filezilla для резервного копіювання всіх хороших даних. Я зауважую, що один великий файл копіював неправильно (Зупинка посередині та перезапуск передачі). На щастя, у мене є попередня резервна копія цього ж файлу. Щоб дублювати диск, мені довелося знайти погані блоки на диску за допомогою цієї процедури:

Спершу з’ясуйте проблемний диск, що ідентифікує інформацію про HD, використовуючи fdisk -l

По-друге, якщо скажемо, що ваш диск є / dev / sdb, тоді вам потрібно запустити команду badblocks -v / dev / sdb, вона перелічить усі ваші погані блоки на диску. На щастя, їх буде кілька. Якщо поганих блоків не знайдено, значить, ваші блоки приводу в порядку, і вам потрібно розібратися щось інше. Мій розмір блоку - 512, тому я використовую цей номер за замовчуванням для запуску DD

3-й кожен блок має розмір 512, тому те, що я зробив, - це встановити bs = 512

Кожен раз, коли я регулярно запускаю DD, як завжди, мої дані після помилок виходять зіпсованими. Тоді я використовую параметри, як пояснено на сторінці https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html, шукаю частину "Для несправних дисків".

dd if=/dev/sdb of=/dev/sda bs=512 conv=noerror,sync iflag=fullblock 

Минув деякий час. Кожен поганий блок стикався зі звуком, як ударом по несправному диску. Це копіює блок за блоком, і через всі мої погані блоки видається однаковий шум. Кількість разів видавало шум, оскільки він знайшов ще один поганий блок і повідомляє про помилку на дисплеї. Те, що робить "conv = noerror, синхронізація" , - це виправлення поганих читань за допомогою NUL, тоді як "iflag = fullblock" забезпечує коротке читання, але синхронізує ваші дані до кінця. Жодної корупції взагалі немає, вона просто не копіює несправні блоки та заповнює її порожніми NUL.

Після того, як копія з DD була зроблена, я просто замінюю цей поганий файл, який повертає Filezilla з минулого резервного копіювання, і все працювало нормально. Я сподіваюся, що це буде корисно для інших, хто намагається створити резервну копію несправних дисків.

ПРИМІТКА: Мої погані блоки, де майже близькі один до одного. Близько 4 блоків одночасно разом у групах, де виявлено погано. Якщо ваші блоки знаходяться на всьому диску, це може вплинути на кілька файлів. На щастя, на мій випадок вплинув лише великий 4gb файл великої бази даних.


1
Якщо одна і та ж відповідь стосується декількох запитань, є хороший шанс, що питання є дублікатами. Якщо так, то краще відповісти на одне і позначити інше як можливий дублікат. Це дозволяє уникнути напливу повторюваних відповідей, а зв’язування питань полегшує читачам знайти всі відповіді.
fixer1234

Не дуже, але якщо ви так думаєте, дайте мені знати, щоб я стерв свою відповідь. Я всюди шукав правильне рішення, але знайшов спосіб вирішити проблему на своєму сервері. Є кілька інших подібних питань, які не відповіли на мою проблему. Поки що я знайшов близько десятка подібних питань, пов'язаних з усього. Я просто відповів пару, щоб написати свій досвід і як мені вдалося це вирішити. Дайте мені знати, якщо ви хочете, щоб я стерв свою відповідь, і я буду радий це зробити. З повагою
Луїс Н Кабреджо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.