Ожидающий нечитаемый сектор - это тот, который возвратил ошибку чтения и который диск пометил для переназначения при первой возможности. Тем не менее, он не может сделать переназначение, пока не произойдет одно из двух:
- Сектор успешно перечитан
- Сектор переписан
До тех пор сектор остается в ожидании. Таким образом, у вас есть два соответствующих способа справиться с этим:
- Продолжайте перечитывать сектор, пока не добьетесь успеха
- Перезаписать этот сектор новыми данными
Очевидно, что (1) не является деструктивным, поэтому вам, вероятно, следует сначала попробовать его, хотя имейте в виду, что если накопитель начинает серьезно выходить из строя, то постоянное чтение из плохой области, вероятно, приведет к его более быстрому выходу из строя. , Если у вас много ожидающих секторов и других ошибок, и вы заботитесь о данных на диске, я рекомендую вывести их из эксплуатации и использовать превосходный инструмент ddrescue для восстановления как можно большего количества данных. Затем выбросьте диск.
Если рассматриваемый сектор содержит данные, которые вам не нужны, или которые можно восстановить из резервной копии, то перезапись этого файла, вероятно, является самым быстрым и простым решением. Затем вы можете просмотреть перераспределенные и ожидающие подсчеты для накопителя, чтобы убедиться, что сектор позаботился.
Как вы узнаете, какому сектору соответствует файловая система? Я нашел отличную статью на Smartmontools веб - сайте, здесь , хотя это довольно технические и специфично для ext2 / 3/4 и файловых систем Райзера.
Более простой подход, который я использовал на одном из моих собственных (Mac) дисков, заключается в том, чтобы использовать find / -xdev -type f -print0 | xargs -0 ...
для чтения всех файлов в системе. Запишите ожидающий подсчет перед запуском. Если сектор находится внутри файла, вы получите сообщение об ошибке от инструмента, который вы использовали для чтения файлов (например, md5sum), с указанием пути к нему. Затем вы можете сосредоточить свое внимание на перечитывании только этого файла, пока он не будет успешно прочитан. Часто это решает проблему, если это нечасто используемый файл, который просто нужно было перечитать несколько раз. Если ошибка исчезнет или вы не столкнетесь ни с какими ошибками при чтении всех файлов, проверьте число ожидающих, чтобы увидеть, уменьшилось ли оно. Если это так, проблема была решена путем чтения.
Если файл не может быть успешно прочитан после нескольких попыток (например, 20), то вам нужно перезаписать файл или блок в файле, чтобы диск мог перераспределить сектор. Вы можете использовать ddrescue для файла (а не для раздела), чтобы перезаписать только один сектор, скопировав во временный файл и затем скопировав обратно. Обратите внимание, что просто удалить файл на этом этапе - плохая идея, потому что плохой сектор попадет в свободный список, где его будет сложнее найти. Полностью перезаписать это тоже плохо, потому что сектора снова попадут в свободный список. Вам нужно переписать существующие блоки. notrunc
Вариант dd
является одним из способов сделать это.
Если вы не столкнулись с ошибками, и число ожидающих не уменьшилось, то сектор должен быть в списке freelist или в части инфраструктуры файловой системы (например, таблица inode). Вы можете попытаться заполнить все свободное пространство cat /dev/zero >tempfile
, а затем проверить количество ожидающих. Если проблема исчезнет, проблема была в свободном списке и теперь исчезла.
Если сектор находится в инфраструктуре, у вас есть более серьезная проблема, и вы, вероятно, столкнетесь с ошибками, просто пройдясь по дереву каталогов. В этой ситуации, я думаю, единственное разумное решение - переформатировать диск, при необходимости используя ddrescue для восстановления данных в случае необходимости.
Внимательно следите за движением. Перераспределение сектора - очень хорошая канарейка в угольной шахте , потенциально предупреждающая о сбое привода. Принимая ранние меры, вы можете предотвратить последующий катастрофический и очень болезненный оползень. Я не предполагаю, что перераспределение нескольких секторов является признаком того, что вы должны отказаться от диска. Все современные диски должны быть перераспределены. Однако, если накопитель не очень старый (<1 года) или вы часто получаете новые перераспределения (> 1 / месяц), то я рекомендую заменить его как можно скорее.
У меня нет эмпирических доказательств, чтобы доказать это, но мой опыт показывает, что проблемы с диском можно уменьшить, читая время от времени весь диск, либо с помощью dd
необработанного диска, либо читая каждый файл с использованием find
. Почти все проблемы с дисками, с которыми я сталкивался в последние несколько лет, сначала возникали в редко используемых файлах или на машинах, которые не используются часто. Это также имеет смысл с точки зрения эвристики, так как, если сектор часто перечитывается, у привода есть шанс перераспределить его, когда он впервые обнаружит небольшую проблему с этим сектором, вместо того, чтобы ждать, пока сектор будет полностью нечитаемым. Накопитель не в состоянии что-либо делать с сектором, если только хост не получит к нему какой-либо доступ, либо прочитав или записав его, либо выполнив один из тестов SMART.
Я хотел бы поэкспериментировать с идеей ночной или еженедельной работы cron, которая читает весь диск. В настоящее время я использую «RAID для бедных», в котором у меня есть второй жесткий диск в машине, и я каждый вечер копирую на него основной диск. В некотором смысле это на самом деле лучше, чем зеркалирование RAID, потому что, если я ошибаюсь и удаляю файл по ошибке, я могу сразу получить вчерашнюю версию с резервного диска. С другой стороны, я считаю, что аппаратный RAID-контроллер хорошо выполняет фоновую работу, отслеживая, сообщая и исправляя проблемы с дисками по мере их появления. Мой текущий скрипт резервного копирования использует, rsync
чтобы избежать копирования данных, которые не изменились, но ввиду необходимости перечитать все сектора, возможно, было бы лучше скопировать все или иметь отдельный скрипт, который читает весь сырой диск каждую неделю.