Недавно я столкнулся с тем, что похоже на сценарии повреждения диска, и хотел бы лучше их понять.
У меня есть сервер сборки, с которым я работаю ежедневно. Во время одной полной сборки последней версии LLVM, которая остановилась со странным сообщением об ошибке, я получил этот отрывок для одного сгенерированного файла (X86GenDisassemblerTables.inc
):
...
/* 0xa5 */
{ /* ModRMDecision */
MODRM_ONEENTRY,
0 /* EmptyTable */
},
/* 0xa6 */
{ /* ModRMDecision */
MODÒM_ONEENTRY, # Ò = 0xD2
0 /* EmptyTable */ # R = 0x52
},
/* 0xa7 */
{ /* ModRMDecision */
MODRM_ONEENTRY,
0 /* EmptyTable */
},
...
Похоже, это одноразрядное повреждение файла. Я удалил файл, сборка сгенерировала его снова и успешно завершилась.
И сегодня в разные машина, это .d
файл был создан во время сборки:
output-gcc-8.2.0-x86_64-linux-gnu/obj/headers.hpp.gch: src/headers.hpp
pp # What's this?
Все остальное - размер файла, разрешения, даже завершающий символ новой строки - было на месте. Удаление файла также позволило сборке без проблем сгенерировать его снова.
Это законные случаи повреждения диска? Какие инструменты я могу использовать для диагностики этого? Эти диски представляют собой твердотельные накопители годовой и двухлетней давности с файловыми системами ext4.
Возможно, вы захотите начать с теста RAM. Жесткие погружения обычно знают, когда у них происходит сбой чтения или записи. Если вы еще не получаете ошибки жесткого диска в сообщениях ядра и не используете ОЗУ ECC, я бы подозревал, что ОЗУ находится над жестким диском.