Як легко відремонтувати один нечитабельний блок на диску Linux?


22

Моя система Linux почала викидати помилки SMART у syslog. Я відстежив це і вважаю, що проблема - це єдиний блок на диску. Як мені легко дістати диск для перерозподілу цього блоку? Я хотів би знати, який файл був знищений в процесі. (Я знаю, що якщо один диск виходить з ладу на диску, швидше за все, слідкують інші; я маю хорошу постійну резервну копію і просто хочу спробувати підтримувати цей диск.)

Пошук в Інтернеті призводить до поганого блоку HOWTO , який описує ручний процес на відключеному диску. Це здається складним і схильним до помилок. Чи є інструмент для автоматизації цього процесу в Linux? Мій єдиний варіант - це діагностичний інструмент виробника , але я припускаю, що він ушкодить поганий блок, не повідомляючи про те, що було знищено. Найгірший випадок, це можуть бути метадані файлової системи.

Диск, про який йде мова, є основним розділом системи. Використання ext3fs та LVM. Ось журнал помилок у syslog та відповідний біт smartctl.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

На пастебіні є повний дамб на smartctl .


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

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

1
Я нарешті звільнив цей диск. Він пройшов нормально протягом декількох місяців, але після 5-ї помилки читання я відмовився від нього.
Нельсон

Відповіді:


12

Ви можете спробувати hdparm --write-sector <LBA> /dev/ice.

Я не знаю іншого способу зробити це - вам потрібно вручну перетворити LBA в блоки файлової системи (як ви вже знайшли)


О, це новий прапор! Це, безумовно, подбає про перерозподіл поганого блоку. Тепер все, що мені потрібно, - це простий спосіб знайти те, що буде вилазити.
Нельсон

3
Використовуючи цей метод для виправлення диска, я можу сказати, що це правильний метод. Примушування запису до відповідного сектора змусить привід стикатися з сектором і або (a) отримувати успішне записування, або (b) закінчуватися постійною поганою секундою разом з повторним перезаписом.
Avery Payne

Чудово! І набагато простіше , ніж smartmontools.sourceforge.net/badblockhowto.html
Janning

Дивно, що цей ітераційний процес (шукати наступний поганий сектор через SMART і змусити його перерозподілити) не автоматизується простою утилітою! ..
imz - Іван Захарящев

32

Я писав прошивку диска для WD, і одного разу написав прошивку, яка перерозподілила погані блоки.

По-перше, більшість поганих блоків виявляються на читаннях, а не на записі. Записи виконуються наосліп, тобто дані записуються без перевірки. Таким чином, при записі, якщо засоби масової інформації погані, ви не будете знати про це, поки хост не прочитає цей сектор. Існує невелика частина сектора (заголовок сектора), який читається на "запис", щоб знайти правильний сектор, так що, якщо є помилка в читанні заголовка сектора, привід переназначить сектор і запише його з отриманими даними з команди write. Але переважна більшість поганих блоків виявляються на читаннях, і лише тому, що запис вдалося в секторі, це не означає, що засоби масової інформації хороші або що цей сектор переназначений.

Тепер про поганий перерозподіл блоків (також званий перерозподілом). Так, як правило, накопичувач спробує перепризначити сектор, якщо помилка є достатньо поганою (тобто, помилка ECC є поганою), але накопичувач все одно може відновити дані після виправлення ECC. Зазвичай це робиться автоматично. Єдиним винятком є ​​те, що хост міг би раніше сказати накопичувачу не робити автоматичних перерозподілів, але це рідко робиться.

Що ж станеться, якщо накопичувач прочитає і не може відновити дані? Нічого. Про помилку повідомляється хосту, але переназначення не робиться. Проблема полягає в тому, що накопичувач може перепризначити сектор, але він не має найменшого уявлення про те, які дані потрібно записувати в новопризначений сектор. Якби він просто написав купу нулів, скажімо, а потім сектор був прочитаний знову, він поверне всі нулі без жодних вказівок, що дані недійсні. Це по суті те саме, що і корупція даних. Привід не може розраховувати на те, що хост відслідковує помилки з різних причин (наприклад, що робити, якщо диск перенесли на новий хост?), Тому найкращий спосіб дії - нічого не робити, коли дані можуть " не підлягає одужанню.

Однак сучасні накопичувачі врятують місце поганого сектору, коли його неможливо перерозподілити. Кількість поганих секторів, які очікують перерозподілу, можна знайти в даних SMART. Що відбувається, якщо запис робиться в один з поганих секторів, що очікує перерозподілу, перерозподіл виконується, тому що накопичувач тепер має дійсні дані для запису в нього після перерозподілу. Таким чином, коли люди кажуть, що писати в поганий сектор перерозподіляє це, це насправді лише половина історії. Спочатку слід прочитати диск, щоб він виявив усі погані сектори, які неможливо перерозподілити автоматично. Таким чином, ви можете записати цілий диск, і дані SMART скажуть, що немає поганих секторів, які очікують перерозподілу, але ви не обов'язково очистили диск усіх поганих секторів. Тож якщо ви дійсно хочете очистити привід усіх поганих секторів,

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


1
Не варто також зазначити, що принаймні деякі жорсткі диски Seagate підтримують функцію Write-Read-Verify, яку можна ввімкнути за допомогою hdparm -R(якщо вважати досить недавній hdparm). Це спричиняє значну штрафну ефективність запису (приблизно вдвічі зменшує пропускну здатність запису і запису IOPS, тому що кожне записування тепер має наступне зчитування), але якщо ваше обладнання підтримує це, а навантаження навантажена читанням, то це може бути дуже корисним запобіжним заходом.
CVn

2

Я думаю, що все, що вам потрібно зробити, це:

e2fsck -c /dev/hda1

припускаючи, що / dev / hda1 є (не відремонтованим) розділом. Або:

e2fsck -c -c /dev/hda1

зробити тест (повільніше) на неруйнівне читання-запис. Його все одно доведеться демонтувати. Я не думаю, що це дасть вам детальну інформацію про втрачені дані.


Але шкода, що, схоже, не використовується інформація SMART про погані блоки. Цікаво, чому не існує інструменту fsck, який би використовував неправильну інформацію про блок SMART і намагався уникати їх або відновлювати пошкоджені файли, як описано в smartmontools.sourceforge.net/badblockhowto.html або serverfault.com/a/106130/68972 . ..
imz - Іван Захарящев

2

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

У мене був накопичувач ноутбука, який кілька років тому почав робити шуми. Badblocks показали, що накопичувач має 118 або більше поганих блоків, видимих ​​для кінцевого користувача. Оскільки у мене вже була копія SpinRite, я вирішив спробувати її перед придбанням нового диска. Після запуску спинриту на диску накопичувачі показали 0 поганих блоків і звуки припинилися. З цього часу накопичувач працював понад два роки.


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

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

Вибачте, що я перейшов до висновків, побачивши, що 2 відповіді проголосували швидко, і ви відповідаєте на іншу відповідь, я припустив, що це ви.
3вплив

2
Ви вірні, що поганий перезапис сектору відбувається, коли запис не вдається блокувати. Якщо у вас просто пошкоджений блок, що стосується файлової системи, тоді fsck може розібратися з вашою проблемою, якщо йдеться про блок метаданих. fsck дійсно просто сканує та виправляє помилки в метаданих. Таким чином, це не дає гарантій щодо самих даних. Наступні файлові системи gen, такі як BTRFS і ZFS, можуть виявити, і якщо у вас надмірність виправити помилки даних. Spinrite також змушує це робити, читаючи, потім записує перевернуті дані, перечитує, а потім повертає дані про кожен блок як частину його сканування.
3вплив

1

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

Я б використовував MHDD, це досить простий у використанні, і поки ви пам’ятаєте, що ваш HDD в Bios буде емулювати IDE, а потім повернутися до AHCI, коли ваша робота виконана, вам нічого не турбуватися.

Після завантаження на MHDD виберіть тип свого накопичувача в команді ERASE та підтвердьте свій вибір.

Отримайте собі кофти, це може зайняти деякий час.

Після нуля Диска запустіть сканування (f4) з Remap, встановленим на УВІМКНЕНО (за замовчуванням вимкнено). Якщо з накопичувачем все ще виникають проблеми (це означало б, що на тарілці є фізичні пошкодження, а привід знаходиться на схилі вниз по схилу), ця опція дозволить "виправити" їх, відобразивши пошкоджену ділянку на здорові частини накопичувача.

Якщо немає помилок UNC, то вітаємо вас і ваш привід все одно можете дружити на довгі роки.


-1

Якщо диск йде погано, замініть його. Не варто ризикувати, що вона більше розвалиться.


Я чітко розумів, що диск є поганим, і створити резервні копії, щоб уникнути ризику.
Нельсон

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

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