У меня возникли проблемы с жестким диском в Ubuntu 18.04, когда система случайным образом перемонтировала мой корневой раздел (/dev/sda4) как доступный только для чтения из-за ошибок.
dmesg|grep 'I/O error'
выявляет очевидные проблемы с sda4. У меня нет точного вывода прямо сейчас, так как коробка была успешно перезагружена и на данный момент не имеет проблем.
Мой план состоял в том, чтобы запустить проверку файловой системы. Я следовалэтот ответа такжеэтот урокосторожно. В последнем уроке я использовал раздел под названием: "Как заставить fsck проверить файловую систему после перезагрузки системы в Linux при использовании systemd"
Однако после перезагрузки файловая система НЕ проверяется, как показывает вывод этой команды:
tune2fs -l /dev/sda4 | grep checked
Last checked: Sat Nov 21 15:36:56 2020
Я пробовал следующие варианты GRUB CMDLINE, но они не увенчались успехом:
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity fsck.mode=force"
и
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity fsck.mode=force fsck.repair=yes"
И да, я бежал update-grub
. Что я упускаю?
Вывод smartctl -a /dev/sda
:
Device Model: Samsung SSD 860 EVO 250GB
Serial Number: S59WNG0MA22770K
LU WWN Device Id: 5 002538 e70265a2a
Firmware Version: RVT03B6Q
User Capacity: 250,059,350,016 bytes [250 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: Unknown(0x09fc), ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is: SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed May 3 11:35:14 2023 MST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Offline data collection
capabilities: (0x53) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
No Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 85) minutes.
SCT capabilities: (0x003d) SCT Status supported.
SCT Error Recovery Control supported.
SCT Feature Control supported.
SCT Data Table supported.
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 038 038 010 Pre-fail Always - 311
9 Power_On_Hours 0x0032 095 095 000 Old_age Always - 21420
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 14
177 Wear_Leveling_Count 0x0013 001 001 000 Pre-fail Always - 2041
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail Always - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Always - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Always - 0
183 Runtime_Bad_Block 0x0013 038 038 010 Pre-fail Always - 311
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0032 067 065 000 Old_age Always - 33
195 Hardware_ECC_Recovered 0x001a 200 200 000 Old_age Always - 0
199 UDMA_CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
235 Unknown_Attribute 0x0012 099 099 000 Old_age Always - 10
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 166281511800
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
No self-tests have been logged. [To run self-tests, use: smartctl -t]
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
256 0 65535 Read_scanning was never started
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
ОБНОВЛЯТЬ:
Сегодня утром сервер снова рухнул (он все еще работает, но /
смонтирован как доступный только для чтения), и вот что я вижу в dmesg:
dmesg |grep sda
[70547.166349] sd 0:0:0:0: [sda] tag#13 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70547.166354] sd 0:0:0:0: [sda] tag#13 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[70948.441912] sd 0:0:0:0: [sda] tag#15 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.441918] sd 0:0:0:0: [sda] tag#15 CDB: Read(10) 28 00 1a cb 1c 00 00 00 08 00
[70948.441922] print_req_error: I/O error, dev sda, sector 449518592
[70948.442312] sd 0:0:0:0: [sda] tag#16 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.442315] sd 0:0:0:0: [sda] tag#16 CDB: Read(10) 28 00 1a cb 1c 00 00 00 08 00
[70948.442316] print_req_error: I/O error, dev sda, sector 449518592
[70948.442955] sd 0:0:0:0: [sda] tag#17 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.442960] sd 0:0:0:0: [sda] tag#17 CDB: Read(10) 28 00 0e 0b 03 08 00 00 20 00
[70948.442962] print_req_error: I/O error, dev sda, sector 235602696
[70948.443389] sd 0:0:0:0: [sda] tag#18 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.443393] sd 0:0:0:0: [sda] tag#18 CDB: Read(10) 28 00 0e 0b 03 08 00 00 08 00
[70948.443396] print_req_error: I/O error, dev sda, sector 235602696
[72347.211525] sd 0:0:0:0: [sda] tag#19 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[72347.211531] sd 0:0:0:0: [sda] tag#19 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[74147.255746] sd 0:0:0:0: [sda] tag#21 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[74147.255752] sd 0:0:0:0: [sda] tag#21 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[75947.299631] sd 0:0:0:0: [sda] tag#23 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[75947.299637] sd 0:0:0:0: [sda] tag#23 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[77747.345291] sd 0:0:0:0: [sda] tag#25 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[77747.345297] sd 0:0:0:0: [sda] tag#25 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[79547.389376] sd 0:0:0:0: [sda] tag#27 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[79547.389382] sd 0:0:0:0: [sda] tag#27 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[81347.432593] sd 0:0:0:0: [sda] tag#29 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[81347.432598] sd 0:0:0:0: [sda] tag#29 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
Я понимаю, что диск нужно заменить, но моя цель — просто запустить fsck
корневой раздел.
решение1
Я не знаю, как принудительно запустить fsck, используя решение, которое вы пытаетесь использовать, но могу предложить альтернативное решение:
Используйте tune2fs
и ограничьте значение до очень низкого количества повторных монтирований и очень низких временных меток.
# To see current settings
sudo tune2fs -l /dev/sda4
# To alter it
sudo tune2fs -c 1 -i 1d /dev/sda4
Это приведет к принудительной проверке при каждом повторном монтировании или каждый день с момента последней проверки, в зависимости от того, что произойдет раньше.
Проверьте SMART
Как уже говорили другие, это просто пластырь для проблем с HW. Иногда HDD умирает, в других случаях это не связанная с HW проблема (выполните memtest), в других случаях это просто отсоединившийся кабель SATA (отсоедините и снова подсоедините его с обоих концов, если это не исправит проблему, попробуйте другой кабель).
Будьте осторожны, в худшем случае блок питания неисправен и повреждает остальное оборудование (в таком случае замена жесткого диска решит проблему только временно, поскольку со временем новый жесткий диск будет поврежден блоком питания). Проверьте, находятся ли напряжения в допустимых пределах.
Публикую вывод smart:
sudo smartctl -a /dev/sda
Может помочь в диагностике того, что может происходить.
Обновлять
Я также не знаю, почему нельзя запустить fsck через tune2fs.
Но я видел ваш SMART. Согласно ему ваш диск стареет, но выглядит здоровым.
Проблема может быть в чем-то другом, например, в кабеле SATA.
Если вам не удаётся заставить fsck работать, то всё, что я могу посоветовать, — это загрузиться с liveUsb и выполнить команду вручную.
Обновление 2
Хорошо, вы опубликовали сообщения dmseg.У нас есть противоречивые сведения от SMART и ОС., поэтому я напишу об этом подробно.
Плохие блоки
SMART сообщает, что на ваших дисках есть плохие блоки. Это нормально для любого SSD, так как они стареют, и диск перераспределит данные в запасные блоки. Как только запас закончится, диск необходимо заменить.
SMART сообщает, что количество плохих блоков находится в пределах нормы.: Наиболее важными атрибутами, которые следует здесь увидеть, являются Reallocated_Sector_Ct
и Runtime_Bad_Block
.
Он говорит, что обнаружил 311 плохих блоков и перераспределил 311 в резервные. Это хорошо. Если было 311 плохих блоков, но только 310 перераспределений, это означает, что данные в одном из блоков были потеряны.
Важно «нормализованное» значение (038). Так производитель сообщает вам, что он считает нормальным.
Значение, где 100 означает идеально, а 0 означает очень плохо. Сейчас это 38, что означает «становится плохо»; но производитель говорит, что это нормально, пока это значение выше 010 (THRESHold).
Вот наша первая противоречивая информация: Used_Rsvd_Blk_Cnt_Tot
говорят, что резерв вообще не был тронут., несмотря на плохие блоки. Это не сходится.
Но я не удивлюсь, если прошивка просто не отслеживает это значение, несмотря на то, что сообщает о нем, поэтому мы пока проигнорируем это.
Выравнивание износа
Это самый проблемный атрибут для чтения. Wear_Leveling_Count
Он равен 001. Обычно значение 1 означает, что ваш диск неисправен и его необходимо заменить как можно скорее.
Это означает, что у него закончились запасные блоки. Но были ошибки прошивки, когда этот атрибут сообщался в обратном порядке, и значение 1 означало, что диск на 99% здоров.
ИспользуяКалькулятор TBWЯ вставил ваше число записанных LBA + размер сектора 512 и получил, что на вашем диске записано 77,43TiB. Согласно Google, ваша модель должна иметь 150TBW, так что этодолженвсе еще быть жизнеспособным.
Боюсь, что лучшим решением здесь будет развернуть Windows-бокс и запуститьCrystalDiskInfoкоторый учитывает эти ошибки прошивки (используя внутреннюю базу данных) и предоставит вам очень точную оценку работоспособности.
Учитывая, что говорит ваш ум, SMART overall-health self-assessment test result: PASSED
я склонен полагать, что он хочет сказать 99%, а не 1%.
Но если я не прав, то на этом можно остановиться: диск необходимо заменить.
Проблемы с кабелем / Проблемы с материнской платой
Ошибки в dmesg Linux в основном говорят о том, что система попыталась прочитать сектор и получила неверные данные.
Ядро даже сообщает, что пыталось прочитать сектор 235602696 дважды и получило разные данные:
- 28 00 0д 0б 03 08 00 002000
- 28 00 0д 0б 03 08 00 000800.
Если диск говорит, что ошибок нет, а ОС говорит, что есть; то данные были повреждены при передаче. Обычно это означает:
- Кабель SATA подключен неплотно
- Кабель SATA поврежден
- Кабель питания неплотно подключен
- Кабель питания поврежден
- Сбой шины материнской платы
- Сбой блока питания
- Сбой оперативной памяти
Но вот где мы имеемнаш второй источник противоречивой информации: UDMA_CRC_Error_Count
равно 0.
Это означает, что диск ни разу не обнаружил ни одной ошибки, вызванной неисправным/ослабленным кабелем или неисправной шиной материнской платы.
Это просто очень маловероятно. SMART говорит, что с диском все в порядке, команды, поступающие от ОС на диск, никогда не повреждаются плохой проводкой; тем не менее ОС дважды прочитала один и тот же сектор и получила другой байт.
Единственное, что, как мне кажется, могло бы сделать это возможным — это плохая оперативная память.Или крайне маловероятная проблема с кабелем, при которой все данные, поступающие на диск, не повреждаются, но данные, которые с него выходят, повреждаются.
Ход действий
Моя интуиция подсказывает мне, что диск плохой. Но:
- Резервное копирование всех данных на другой диск. В LiveUSB (и внешнем USB-накопителе достаточного размера):
sudo apt install zstd
# To backup
sudo zstd -16v < /dev/sda > /media/external_disk/backup_file.zst
# To restore (don't do that on step 1, see step 5)
sudo zstdcat -v /media/external_disk/backup_file.zst > /dev/sda
- Снова создайте резервную копию данных, но на этот раз просто с помощью обычного копирования файлов (если диск выйдет из строя, гораздо проще восстановить его из простой резервной копии, чем пытаться смонтировать сжатый образ zstd диска и прочитать файлы с него).
- Перезагрузите и запустите memtest, чтобы сбросить ошибки RAM.
- Выключите, откройте корпус и отсоедините и снова подсоедините кабели SATA и питания (к приводу). Проверьте, не повреждены ли они. Возможно, замените их.
- Загрузитесь с LiveUSB-накопителя снова и выполните безопасное стирание диска. Если с вашим диском что-то не так, возможно, это вернет его в рабочее состояние (или, возможно, это приведет к последней команде, которую он выполнит, если диск уже не спасти). Это должно занять несколько минут:
sudo blkdiscard -s /dev/sda
- Если до сих пор все прошло хорошо, восстановите резервную копию с помощью
sudo zstdcat
команды из шага 1.
Если с диском по-прежнему есть проблемы, а тест памяти пройден успешно, то лично я бы просто исключил диск из списка неисправных.
Мы не можем игнорировать тот факт, что значение 038 Reallocated_Sector_Ct
означает, что дела идут плохо, несмотря на то, что производитель утверждает, что пока не «настолько» плохо.
Ах! Важно: если в какой-то момент вы оставили диск выключенным более чем на 3 месяца; такой сценарий вполне возможен. Несмотря на распространенное мнение, ячейки NAND могут потерять свою память, если их оставить без питания на слишком долгое время («слишком долго» может длиться от 7 дней до 7 лет; но наиболее распространенный случай — 3 месяца). Особенно если они старые.
Если это произошло с вами, то просто выполните указанные выше действия: сделайте резервную копию данных, выполните безопасную очистку диска, восстановите резервную копию.
Удачи.