troubleshooting - andyceo/documentation GitHub Wiki
На этой странице рассматриваются различные проблемы, которые могут возникнуть с дисками и/или файловыми системами, и методы их починки. Диагностика и починка файловой системы Ext4 рассматривается на странице, посвященной Ext4
На современных винчестерах бед блоки ремапятся на аппаратном уровне автоматически, делается это в несколько шагов. С начала сектора на подозрении попадают в очередь Reallocated_Event_Count
, в смарте винта можно посмотреть сколько таких секторов на текущий момент:
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
если после нескольких проходов диагноз подтверждается, то контроллер винчестера их перемещает в очередь Current_Pending_Sector
, параметр в смарте отражает количество таких секторов в очереди:
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
и только после этого такие сектора ремапятся и попадают в таблицу переназначенных секторов, количество таких секторов мы видим в параметре смарта:
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
Это в упрощенном варианте. Так что если у Вас во всех трех пунктах значение столбца RAW не нулевые - значит ваш винчестер активно отбрасывает коньки.
Можно заставить винчестер заремапить тот или иной сектор вручную, с помощью утилиты hdparm
. Эта утилита читает диск напрямую, в обход всех файловых систем и слоя блочного доступа в Linux. Нужно знать номер сектора, который вы хотите заремапить. См. раздел Диагностика, чтобы узнать номер сектора/секторов. Допустим, у нас есть номер плохого сектора и он равен 1261069669
.
Убедимся, что этот сектор действительно не может быть прочитан:
sudo hdparm --read-sector 1261069669 /dev/sda
Вывод:
/dev/sda: Input/Output error
Будьте внимательны, такой вывод может быть дан и в том случае, если вы указали номер сектора за пределами всего диска вообще. Также попробуйте почитать соседние сектора, 1261069668
и 1261069670
.
Теперь запишем в сектор нули. Это заставит диск перераспределить плохой сектор в другое место (sector reallocate). Имейте в виду, что прошлые данные в этом секторе будут потеряны навсегда!
sudo hdparm --write-sector 1261069669 /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.
Нужно предоставить флаг --yes-i-know-what-i-am-doing
, чтобы команда была действительно выполнена:
sudo hdparm --write-sector 1261069669 –yes-i-know-what-i-am-doing /dev/sda
Вывод:
/dev/sda: re-writing sector 1261069669: succeeded
Теперь, можно использовать hdparm
снова, чтобы проверить доступность перераспределенных секторов:
sudo hdparm --read-sector 1261069669 /dev/sda
Вывод:
/dev/sda:
reading sector 1261069669: succeeded
(... выведется много нулей...)
Проверим через S.M.A.R.T., что значения соответствующих счетчиков изменились:
sudo smartctl -a -d ata /dev/sda | grep -i reallocated
Вывод:
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always – 2
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always – 2
Эту процедуру нужно повторить для всех сбойных секторов.
Этот алгоритм запрограммирован в скрипте hdcure.sh. Используйте его аккуратно и на свой страх и риск!
О проблемах с диском или файловой системой можно узнать несколькими способами. Рассмотрим два из них:
- S.M.A.R.T
- dmesg
- journalctl (для систем с systemd)
В первом случае, любой из смарт-тестов, закончившийся ошибкой, или не закончившийся из-за ошибки, говорит о проблеме с диском. Ясно, что из-за проблемы с диском может быть проблема с файловой системой, но она может никак себя не проявлять, если проблемное место пока не используется файловой системой. Запустите полный смарт-тест в фоновом режиме, чтобы проверить диск:
sudo smartctl -t long /dev/sda
Можно периодически подсматривать за прогрессом (-d ata
представляет SATA-диск):
sudo smartctl -d ata -a /dev/sda
или
sudo smartctl -c /dev/sda | grep remain -B 1
В случае ошибок, тест не будет завершен, а при просмотре логов смарта командой sudo smartctl -d ata -a /dev/sda
можно будет заметить следующие строки:
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 50% 10623 893916872
# 2 Short offline Completed: read failure 90% 10621 893916872
# 3 Short offline Completed: read failure 90% 10621 893916872
# 4 Extended offline Completed: read failure 50% 10620 893916872
После этого, надо выяснить, какому разделу (partition) принадлежит этот битый лог, какой файловой системе, и запустить команды из пункта Починка.
Во втором, по мере использования компьютера, и чтения данных с диска, можно заметить в журнале примерно следующее:
[149070.165738] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
[149070.165749] ata1.00: irq_stat 0x40000001
[149070.165756] ata1.00: failed command: READ DMA EXT
[149070.165768] ata1.00: cmd 25/00:08:58:3e:59/00:00:39:00:00/e0 tag 18 dma 4096 in
[149070.165768] res 51/40:08:58:3e:59/00:00:39:00:00/e0 Emask 0x9 (media error)
[149070.165774] ata1.00: status: { DRDY ERR }
[149070.165778] ata1.00: error: { UNC }
[149070.510765] ata1.00: configured for UDMA/133
[149070.510799] sd 0:0:0:0: [sda]
[149070.510804] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[149070.510808] sd 0:0:0:0: [sda]
[149070.510812] Sense Key : Medium Error [current] [descriptor]
[149070.510819] Descriptor sense data with sense descriptors (in hex):
[149070.510822] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
[149070.510838] 39 59 3e 58
[149070.510847] sd 0:0:0:0: [sda]
[149070.510851] Add. Sense: Unrecovered read error - auto reallocate failed
[149070.510856] sd 0:0:0:0: [sda] CDB:
[149070.510859] Read(10): 28 00 39 59 3e 58 00 00 08 00
[149070.510874] end_request: I/O error, dev sda, sector 962149976
[149070.510906] ata1: EH complete
Эти записи попадают в журнал, когда невозможно прочитать сектор, в данном случае - сектор 962149976
. Также как и в случае со S.M.A.R.T., нужно выяснить, на какой раздел и какую файловую систему приходится данный сектор, и запустить на нем команды из пункта Починка.
Посмотреть все найденные плохие сектора за время текущей сессии можно следующей командой:
dmesg | grep "dev sda, sector"
Получите примерно следующий вывод:
[195026.031492] end_request: I/O error, dev sda, sector 962151624
[195027.962659] end_request: I/O error, dev sda, sector 962151624
[195152.097729] end_request: I/O error, dev sda, sector 962119200
[209373.151869] end_request: I/O error, dev sda, sector 893916872
[209375.274001] end_request: I/O error, dev sda, sector 893916872
[209377.180616] end_request: I/O error, dev sda, sector 893918616
[209379.111782] end_request: I/O error, dev sda, sector 893918616
Можно собрать все подобные сектора в один файл:
dmesg | grep "dev sda, sector" | cut -d " " -f 8 | uniq | sort > badsectors.txt
Нижеследующая команда сканирует записи за все доступное в журнале время, выявляет сообщения об ошибках для диска sda
, затем выводит номера секторов, сортирует их (это требуется для последующей работы команды uniq
), и записывает в файл с указанием количества, сколько раз тот или иной сектор встречался в логах (иными словами, формирует файл, в котором сохранены номера проблемных секторов с указанием количества неудачных попыток чтения того или иного сектора).
Не забудьте поменять sda
на нужный диск:
sudo journalctl -p err | grep 'print_req_error.*dev sda, sector' | awk '{print $12}' | sort | uniq -c > sda_badblocks.txt
После выполнения в файле sda_badblocks.txt
будут перечислены найденные проблемные сектора, над которыми нужно запустить команды из пункта Починка.
- права для папок внутри
/home
по умолчанию750
- Smartmontools Ubuntu Wiki [en]
- Бэдблоки, (почти)умерший хард и как мне удалось разобраться со всем этим делом
- Восстановление сбойных секторов на диске в Ubuntu
- Что делать если в dmesg - reallocate failed? НЕ ПОВТОРЯТЬ ОПАСНО ДЛЯ ЖИЗНИ!
- Подробное описание полей S.M.A.R.T.
- Forcing a hard disk to reallocate bad sectors
- Гальванизация трупа: как удалось оживить битый HDD для хранения чего-нибудь ненужного
- The Analysis of Drive Issues
- I used to write disk firmware for WD... - комментарий про работу современных винчестеров от человека, который писал для них прошивки
-
Copying Files from Failing Drive - в основном про
ddrescue