Тема не новая и, в чём-то, стандартная.
Имеется кластер из серверов Hadoop, на каждом сервере 15 дисков. Диски там - это RAID0 из 1 винта через контроллер HP Smart Array 420i (почему так через жопу и почему не HBA - тема отдельная), но в общем и целом это не важно. Каждый диск форматирован в XFS и смонтирован в отдельную директорию (в духе /data/XX) и юзается как HDFS Volume.
В какой-то момент один из винтов сдыхает и начинается веселье:
kernel: sd 0:0:0:8: [sdi] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
kernel: sd 0:0:0:8: [sdi] Sense Key : Medium Error [current]
kernel: sd 0:0:0:8: [sdi] Add. Sense: Unrecovered read error
kernel: sd 0:0:0:8: [sdi] CDB: Read(10): 28 00 00 00 52 10 00 00 10 00
kernel: end_request: critical medium error, dev sdi, sector 21008
...
kernel: XFS (sdi): metadata I/O error: block 0x5210 ("xfs_trans_read_buf") error 61 buf count 8192
kernel: XFS (sdi): xfs_imap_to_bp: xfs_trans_read_buf() returned error 61.
kernel: XFS (sdi): metadata I/O error: block 0x5210 ("xfs_trans_read_buf") error 61 buf count 8192
kernel: XFS (sdi): xfs_imap_to_bp: xfs_trans_read_buf() returned error 61.
Что было сделано:
- Сначала пытался убрать ноду из HDFS без его перезапуска, не вышло - процесс реконфигурирования залип.
- Попытался закрыть дескриптор файла (он там был один) - не вышло, дебаггер gdb зависал при подключении к процессу.
- Затем была попытка потушить HDFS штатно - не вышло, убил через kill -9 - процесс превратился в зомби но при этом продолжил усиленно насиловать этот диск
- umount -f не прошло, umount -l выполнился, но это ничего не изменило - ошибки продолжали лезть и зомби мучил диск
- Финально ребут сервера - тоже залип т.к. не смог отмонтировать все ФС и убить процессы (зомби то висит)
- В итоге резет
Собсно вопрос - как (и можно ли) эту ситуацию решить *штатно*, без таких радикальных мер. Может это проблемы конкретно XFS что оно не возвращает нормально софту ошибку i/o? Или это проблемы Hadoop что он её штатно не обрабатывает? Если что - пока не экспериментировал.
Ось - центос 6.