Поврежденный сектор указывает на сбойный диск?

Я думаю, что возможно при присоединении процесса связанного интерпретатора к gdb. Я попробовал его этой остротой жемчуга

 perl -e 'do { print "x\n"; sleep(1) } while(1)'

и это работает, но к сожалению не с подобным сценарием удара.


В первую очередь, необходимо выяснить PID того процесса, чей производит Вас, хотят получить. Затем запустите gdb в другом терминале и выполняют следующие gdb-команды

attach PID
call close(2)
call open("/abs/olu/te/path/filename", 65, 384)
detach PID

после этого целые данные, которые записаны в stderr перенаправляется к /abs/olu/te/path/filename, с тех пор

  • attach PID присоединяет процесс к gdb и останавливает его
  • call close(2) завершения stderr filedescriptor процесса (для stdout filedescriptor 1)
  • call open(...) открывает новый файл и берет самое низкое неиспользованное целое число для недавно созданного filedescriptor и
  • detach PID продолжает процесс

По крайней мере, на моей машине. Первыми двумя строками является совместимый POSIX, но не третий.

Второе и третий аргумент open в третьей строке документируются в man 2 open. В моем случае 65 средств это open должен создать файл и открыть файл, только для записи т.е. O_WRONLY | O_CREAT (определенный в fcntl.h). Третий аргумент говорит открытый создавать файл с чтением и разрешением записи для пользователя т.е. S_IWUSR | S_IRUSR (определенный в sys/stat.h). Таким образом, возможно, необходимо узнать соответствующие значения на машине собой.

16
18.03.2018, 01:35
3 ответа

Поврежденные секторы всегда являются признаком провального жесткого диска, на самом деле момент, Вы видите ошибку ввода-вывода, такую как это, Вы, вероятно, уже теряли/повреждали некоторые данные. Сделайте резервное копирование, если Вы уже не имеете того, работаете сам тест smartctl -t long /dev/disk и проверьте УМНЫЕ данные smartctl -a /dev/disk. Получите замену, если Вы можете.

Поврежденные секторы не могут быть восстановлены, только заменены резервными секторами, который вредит производительности жесткого диска, поскольку они требуют дополнительный, ищет на резервные секторы каждый раз, когда к ним получают доступ. Отмечание таких секторов настолько плохо на слое файловой системы помогает, как к ним никогда не будут получать доступ затем; однако трудно определить, какие секторы были уже перераспределены диском, таким образом, возможности являются файловой системой, не будет знать для обхода затронутого региона.

17
27.01.2020, 19:48
  • 1
    Спасибо. Действительно полезный для знания, поскольку это всегда была серая область для меня. Я собираюсь обнулить диск и передать его обратно, как это в рамках гарантии. –  MrNorm 09.11.2013, 15:46
  • 2
    Не так. Поврежденные секторы просто указывают на чрезвычайно интенсивный трафик к сектору. В большинстве случаев это действительно указывает на сбойный диск. Можно настроить Ваш искать скорость для маркировки более медленных ответов как плохие хотя... Это слишком сложно для высказывания всегда все же. –  RobotHumans 09.11.2013, 15:49
  • 3
    Также читайте, ошибки могут быть замечены для файловой системы, которая по некоторым причинам больше, чем фактическая дисковая емкость. –  Thorbjørn Ravn Andersen 10.11.2013, 10:37
  • 4
    @frostschutz, из чего значение Get a replacement if you can.? Вы имеете в виду, заменяют Диск? –  aircraft 20.11.2017, 10:28

Нет, поврежденные секторы являются не всегда признаком сбойного диска. Иногда, если запись будет происходить во время сбоя питания, то данные в секторе будут повреждены, приводя к ошибке, когда Вы попытаетесь считать его. Попытка записать новые данные в сектор может работать просто великолепно, так как нет ничего физически неправильно с ним.

Можно работать badblocks -n на диске читать и переписать каждый сектор, или в Вашем случае, так как Вы уже знаете количество рассматриваемого сектора, можно использовать dd записать нули в него. Можно проверить УМНУЮ статистику с smartctl -a. Необходимо видеть, что ожидание перераспределило количество, указывают, сколько секторов не удалось читать, и после попытки записать сектору, это количество понизится. Перераспределенное количество сектора может повыситься, в этом случае это было физически плохо и было повторно отображено на запасном пуле, и это может быть знаком, что диск продвигается. В противном случае затем затем это было просто скремблировано и должно быть прекрасным теперь.

Попытайтесь читать сектор сначала:

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

Если это перестало работать, то Вы имеете право числа, то можно обнулить его с:

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

Двойная проверка, чтобы Вы ввели команду точно перед ударом, входит.

7
27.01.2020, 19:48
  • 1
    Интересно, что Вы говорите это, потому что я получил некоторую интересную информацию после Ваших команд. Я исправил свой вопрос выше. –  MrNorm 11.11.2013, 10:25
  • 2
    Разве Ваш диск не поддерживает УМНЫЙ по некоторым причинам или почему случается так, что Вы еще не проверили это? –  frostschutz 11.11.2013, 12:29
  • 3
    @frostschutz "На обоих количествах, Reallocated_Sector_Ct остался 0". Кажется, что OP проверил УМНЫЙ. –  a CVn 11.11.2013, 12:39
  • 4
    @MrNorm, добавьте полное smartctl -a вывод к Вашему вопросу. –  psusi 11.11.2013, 16:32
  • 5
    Не используйте это (это даже всегда не работает), и если Вы будете путать пропуск и будете искать, то Вы перезапишете свой MBR вместо этого. См. мой ответ –  Antti Haapala 06.09.2015, 10:57

Чтобы заставить диск перераспределить секторы, обычно в них нужно что-то записать. Однако, dd (Disk Destroyer) не всегда работает и очень небезопасен: Если перепутать опции skip и seek, можно легко выстрелить в ногу, пропустив skip ping первые блоки N из /dev/zero и записав блок с этого "смещения" над сектором 0 вашего жесткого диска.

Если вы действительно знаете, что хотите, чтобы сектор был перезаписан нулями, вам следует использовать hdparm:

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

Да, сектор 833192656 также не прошел smart-тестов. Чтобы записать в него нули, используйте --write-сектор :

% sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.

В качестве защиты, hdparm на самом деле ничего не записывает, если только вы не передадите переключатель --yes-know-what-i-am-doing в hdparm:

% sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% sudo hdparm --read-sector 833192656 /dev/sda                              

/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[      ... more zeroes here...        ]
0000 0000 0000 0000 0000 0000 0000 0000

%
10
27.01.2020, 19:48

Теги

Похожие вопросы