Обновлять

Обновлять

У меня возникли проблемы с жестким диском в 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 говорит, что с диском все в порядке, команды, поступающие от ОС на диск, никогда не повреждаются плохой проводкой; тем не менее ОС дважды прочитала один и тот же сектор и получила другой байт.

Единственное, что, как мне кажется, могло бы сделать это возможным — это плохая оперативная память.Или крайне маловероятная проблема с кабелем, при которой все данные, поступающие на диск, не повреждаются, но данные, которые с него выходят, повреждаются.

Ход действий

Моя интуиция подсказывает мне, что диск плохой. Но:

  1. Резервное копирование всех данных на другой диск. В 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
  1. Снова создайте резервную копию данных, но на этот раз просто с помощью обычного копирования файлов (если диск выйдет из строя, гораздо проще восстановить его из простой резервной копии, чем пытаться смонтировать сжатый образ zstd диска и прочитать файлы с него).
  2. Перезагрузите и запустите memtest, чтобы сбросить ошибки RAM.
  3. Выключите, откройте корпус и отсоедините и снова подсоедините кабели SATA и питания (к приводу). Проверьте, не повреждены ли они. Возможно, замените их.
  4. Загрузитесь с LiveUSB-накопителя снова и выполните безопасное стирание диска. Если с вашим диском что-то не так, возможно, это вернет его в рабочее состояние (или, возможно, это приведет к последней команде, которую он выполнит, если диск уже не спасти). Это должно занять несколько минут:
sudo blkdiscard -s /dev/sda
  1. Если до сих пор все прошло хорошо, восстановите резервную копию с помощью sudo zstdcatкоманды из шага 1.

Если с диском по-прежнему есть проблемы, а тест памяти пройден успешно, то лично я бы просто исключил диск из списка неисправных.

Мы не можем игнорировать тот факт, что значение 038 Reallocated_Sector_Ctозначает, что дела идут плохо, несмотря на то, что производитель утверждает, что пока не «настолько» плохо.

Ах! Важно: если в какой-то момент вы оставили диск выключенным более чем на 3 месяца; такой сценарий вполне возможен. Несмотря на распространенное мнение, ячейки NAND могут потерять свою память, если их оставить без питания на слишком долгое время («слишком долго» может длиться от 7 дней до 7 лет; но наиболее распространенный случай — 3 месяца). Особенно если они старые.

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

Удачи.

Связанный контент