Як змусити скасувати дискові карти до нечитаних секторів


10

У мене є диск з деякими непрочитаними секторами, на думку smartd. Що було б найпростішим способом змусити їх перезавантажити диск і не зупинити розумних скарг?

Сьогодні я отримую дві такі щогодини:

10 вересня 23:15:35 hylton smartd [3353]: Пристрій: / dev / sdc, 1 Наразі нечитабельні (очікують) сектори

Система являє собою систему x86, на якій працює Ubuntu Linux 9.10 (розм.). Диск входить до групи LVM. Ось як smartctl ідентифікує диск:

Сімейство моделей: сімейство ATA західної цифрової ікри другого покоління
Модель пристрою: WDC WD5000AAKS-00TMA0
Серійний номер: WD-WCAPW4207483
Версія прошивки: 12.01C01
Об'єм користувача: 500,107,862,016 байт

2
Ця проблема вирішилася сама собою; диск почав скаржитися голосніше, тому я його замінив.
dkagedal

Відповіді:


15

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

  1. Сектор успішно перечитується
  2. Сектор переписаний

До цього часу сектор залишається в очікуванні. Отже, у вас є два відповідні способи впоратися з цим:

  1. Продовжуйте намагатися перечитувати сектор, поки вам це не вдасться
  2. Перезапишіть цей сектор новими даними

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

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

Як дізнатися, що відповідає сектору у файловій системі? Я знайшов відмінну статтю на Smartmontools веб - сайті, тут , хоча це досить технічні і специфічно для ext2 / 3/4 і файлових систем Райзера.

Більш простий підхід, який я використовував на одному з моїх власних (Mac) дисків, - це використовувати find / -xdev -type f -print0 | xargs -0 ...для читання кожного файлу в системі. Запишіть підрахунок очікувань перед тим, як запустити це. Якщо сектор знаходиться у файлі, ви отримаєте повідомлення про помилку з інструменту, за допомогою якого ви читали файли (наприклад, md5sum), що показує вам шлях до нього. Потім ви можете зосередити свою увагу на повторному читанні лише цього файлу, поки він не буде успішно прочитаний. Часто це вирішить проблему, якщо це нечасто використаний файл, який просто потрібно було перечитати кілька разів. Якщо помилка усувається або у вас не виникають помилки при читанні всіх файлів, перевірте кількість очікувань, щоб побачити, чи зменшилась вона. Якщо є, проблема була вирішена читанням.

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

Якщо ви не зіткнулися з помилками, а кількість очікувань не зменшилася, сектор повинен бути у вільному списку або в частині інфраструктури файлової системи (наприклад, таблиця inode). Ви можете спробувати заповнити весь вільний простір cat /dev/zero >tempfile, а потім перевірити кількість відкладених. Якщо вона знизиться, проблема була у вільному списку і тепер пішла.

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

Уважно стежте за приводом. Перерозподіл сектору - це дуже хороший канар у вугільній шахті , що потенційно може попереджати про аварійний привід. Вживши ранніх заходів, ви можете запобігти подальшому катастрофічному та дуже болючому зсуву. Я не припускаю, що кілька перерозподілів секторів є ознакою того, що слід відмовитися від накопичувача. Усі сучасні накопичувачі повинні зробити певну перерозподіл. Однак якщо накопичувач не дуже старий (<1 рік) або у вас часті нові перерозподіли (> 1 / місяць), то рекомендую замінити його якнайшвидше.

Я не маю емпіричних доказів, щоб це підтвердити, але мій досвід говорить про те, що проблеми з дисками можна зменшити, читаючи весь диск раз за часом, або ddз необробленого диска, або з допомогою читання кожного файлу за допомогою find. Майже всі проблеми з диском, з якими я стикався за останні кілька років, спочатку з’явилися у рідко використовуваних файлах або на машинах, які не використовуються багато. Це має сенс евристично також у тому, що якщо сектор часто читається, привід має шанс перерозподілити його, коли він вперше виявить незначну проблему з цим сектором, а не чекає, поки сектор повністю не читається. Привід не може нічого робити із сектором, якщо хост якось не звертається до нього, чи читаючи чи записуючи його чи проводячи один із тестів SMART.

Я хотів би поекспериментувати з ідеєю нічної або щотижневої роботи з крон, яка читає весь диск. В даний час я використовую RAID "бідного чоловіка", в якому у мене є другий жорсткий диск в машині, і я створюю резервну копію основного диска на нього щовечора. У чомусь це насправді краще, ніж дзеркальне відображення в RAID, тому що якщо я помиляю і видаляю файл помилково, я можу отримати негайно вчорашню версію з резервного диска. З іншого боку, я вважаю, що апаратний RAID-контролер робить багато хорошої роботи у фоновому режимі, щоб відстежувати, повідомляти та виправляти проблеми з диском під час їх появи. Мій поточний скрипт резервного копіювання використовує rsyncдля уникнення копіювання даних, які не змінилися, але з огляду на необхідність перечитувати всі сектори, можливо, було б краще скопіювати все, або мати окремий скрипт, який щотижня читає весь неочищений диск.


2
Якщо ви робите резервні копії (rsyncing на внутрішньому диску не враховується;)), то всі ваші дані (повторно) читаються через певні проміжки часу (залежно від вашого повного / збільшення резервного розкладу). RAID або rsync не є замінниками резервного копіювання. І до речі, я "вірю", що ви занадто багато вірите в постачальників апаратних засобів RAID. ;)
maxschlepzig

@maxschlepzig: Ви праві. У мене також є окремий режим резервного копіювання. Однак мій досвід свідчить про те, що ймовірність втрати даних через збій накопичувача значно перевищує всі інші ризики (крадіжка, пожежа тощо). Сучасні жорсткі диски мають настільки низьку надійність, що я зараз повністю параноїчний щодо них. Тож мій другий внутрішній привід є основною частиною моєї стратегії.
Ніл Мейхев

Я читав і перечитав вміст диска, використовуючи dd if=/dev/sda ...сектори, і сектори ще тривають, будь-яка ідея чому?
dmansfield

@dmansfield, якщо ви не зіткнулися з помилками, то я не знаю, чому. Я помітив, що лише інтелектуальне значення є точним у інтелектуальному результаті, тож якщо ви дивилися лише на "приготовлене" значення, можливо, у вас немає секторів, що очікують на розгляд.
Ніл Мейхью

1

Використовуйте програму Data Lifeguard Diagnostic для програмного забезпечення DOS (завантажувальний компакт-диск), доступного на веб-сайті Western Digital


1
  1. Резервне копіювання даних
  2. Видаліть цей пристрій із групи LVM
  3. dd if=/dev/zero of=/dev/sdc bs=4k- це видалить усі дані на/dev/sdc
  4. Включіть його знову до групи LVM
  5. Відновіть резервну копію

3
0. Майте резервну копію. :-)
Стівен Д

Але це очікувана помилка читання, тож чи не повинно бути достатньо просто прочитати всі сектори?
dkagedal

1
@dkagedal: Ні, вбудована програма HD вже виявила, що не може прочитати цей один сектор. Він не має можливості відновити його (самостійно, крім того, можливо, повторити і повторити спробу і мати удачу в якийсь момент ... сподіваємось, це не пошкоджені дані потім повернуті) і таким чином встановить цю помилку SMART. Але якщо мікропрограмне забезпечення виявляє запис у цьому конкретному секторі, воно відображає цей сектор (і більше не використовує його) і замість цього відображає запасний (робочий) сектор на цю адресу.
maxschlepzig

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