Коррупция диска, вызванная синхронизацией большого количества мелких файлов на внешний жесткий диск с форматом NTFS.

Вопрос или проблема

Я замечаю странное явление при передаче большого количества мелких файлов (сотни тысяч фотографий, например) на внешний HDD с помощью rsync: это всегда приводит к ошибке ввода-вывода, как показано ниже (вывод команды dmesg):

[102560.315796] blk_update_request: ошибка ввода-вывода, устройство sdc, сектор 2088 операция 0x0:(ЧТЕНИЕ) флаги 0x0 физический сегмент 1 приоритет класс 0
[102560.315800] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы
[102560.315868] blk_update_request: ошибка ввода-вывода, устройство sdc, сектор 2184 операция 0x0:(ЧТЕНИЕ) флаги 0x0 физический сегмент 1 приоритет класс 0
[102560.315870] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 17, асинхронное чтение страницы
[102560.315877] blk_update_request: ошибка ввода-вывода, устройство sdc, сектор 2120 операция 0x0:(ЧТЕНИЕ) флаги 0x0 физический сегмент 1 приоритет класс 0
[102560.315878] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 9, асинхронное чтение страницы
[102560.315935] blk_update_request: ошибка ввода-вывода, устройство sdc, сектор 2088 операция 0x0:(ЧТЕНИЕ) флаги 0x0 физический сегмент 1 приоритет класс 0
[102560.315936] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы
[102560.315944] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы
[102560.315956] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 17, асинхронное чтение страницы
[102560.315965] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы
[102560.315972] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы
[102560.315979] Ошибка ввода-вывода в буфере на устройстве sdc1, логический блок 5, асинхронное чтение страницы

После этого HDD становится не монтируемым, но каждый раз, когда это происходило, я мог исправить это с помощью ntfsfix, так что я сомневаюсь, что это проблема с оборудованием. Вывод ntfsfix приведен ниже:

Монтирование тома... $MFTMirr не соответствует $MFT (запись 0).
НЕ УДАЛОСЬ
Попытка исправить ошибки... 
Обработка $MFT и $MFTMirr...
Чтение $MFT... ОК
Чтение $MFTMirr... ОК
Сравнение $MFTMirr с $MFT... НЕ УДАЛОСЬ
Исправление различий в записи $MFTMirr 0...ОК
Обработка $MFT и $MFTMirr завершена успешно.
Установка необходимых флагов на разделе... ОК
Идет очистка журнала ($LogFile)... ОК
Проверка альтернативного загрузочного сектора... ОК
Версия NTFS тома - 3.1.
NTFS раздел /dev/sdc1 был успешно обработан.

Поэтому мне действительно любопытно, что могло привести к таким частым повреждениям HDD даже для самых базовых операций ввода-вывода файлов. Повреждение HDD происходило более 20 раз за последние два дня. Это проблема системы, или rsync, или самого диска?

Еще одно странное явление: после передачи большого количества файлов, даже если ошибка ввода-вывода не возникает, размонтирование диска занимает очень много времени (~10 минут).

Я использую Ubuntu 20.04, а HDD – это Seagate SDC003 (2TB, отформатирован как NTFS).


Обновление: Вывод команды smartctl -a. Я запустил это сразу после очередной ошибки rsync.

smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.15.0-69-generic] (локальная сборка)
Авторские права (C) 2002-19, Брюс Аллен, Кристиан Франке, www.smartmontools.org

=== НАЧАЛО СЕКЦИИ ИНФОРМАЦИИ ===
Семейство модели:     Seagate Barracuda 2.5 5400
Модель устройства:     ST2000LM015-2E8174
Серийный номер:    WDZXFWCV
ID устройства LU WWN: 5 000c50 0e08ae450
Версия прошивки: 0001
Пользовательская емкость:    2,000,398,934,016 байт [2.00 TB]
Размеры секторов:     512 байт логический, 4096 байт физический
Скорость вращения:    5400 об/мин
Форм-фактор:      2.5 дюйма
Устройство:        В базе данных smartctl [для получения подробной информации используйте: -P show]
Версия ATA:   ACS-3 T13/2161-D ревизия 3b
Версия SATA:  SATA 3.1, 6.0 Гбит/с (текущая: 6.0 Гбит/с)
Местное время:    Пт Июн 16 16:28:00 2023 CST
Поддержка SMART:: Доступна - устройство имеет возможность SMART.
Поддержка SMART: Включена

=== НАЧАЛО СЕКЦИИ ЧТЕНИЯ ДАННЫХ SMART ===
Результат самодиагностики SMART: УСПЕШНО

Общие значения SMART:
Статус сбора оффлайн-данных:  (0x00) Оффлайн-сбор данных никогда не начинался.
                                        Авто сбора оффлайн-данных: Отключено.
Статус выполнения самотестирования:      (   0) Предыдущая процедура самотестирования завершилась
                                        без ошибок или самотестирование никогда не 
                                        выполнялось.
Общее время для завершения оффлайн 
сбора данных:                (    0) секунд.
Возможности оффлайн-сбора данных:                    (0x71) SMART выполняет оффлайн немедленно.
                                        Нет поддержки авто оффлайн-сбора данных.
                                        Приостановить оффлайн-сбор данных по новому
                                        команде.
                                        Нет поддержки оффлайн-поверхностного сканирования.
                                        Поддержка самотестирования.
                                        Поддержка тестирования передачи.
                                        Поддержка выборочного самотестирования.
Возможности SMART:            (0x0003) Сохраняет данные SMART перед переходом в
                                        режим энергосбережения.
                                        Поддерживает автоматический таймер сохранения SMART.
Возможности журнальной записи ошибок:        (0x01) Поддержка журналирования ошибок.
                                        Поддержка общего журналирования.
Рекомендуемое время опроса краткой процедуры 
самотестирования:        (   1) минута.
Рекомендуемое время опроса расширенной процедуры
самотестирования:        ( 326) минут.
Рекомендуемое время опроса процедуры
самотестирования передачи:        (   2) минуты.
Возможности SCT:              (0x3035) Поддержка статуса SCT.
                                        Поддержка управления функциями SCT.
                                        Поддержка таблицы данных SCT.

Структура данных атрибутов SMART версия: 10
Специфические атрибуты SMART с порогами:
ID# НАЗВАНИЕ_АТРИБУТА          ФЛАГ     ЗНАЧЕНИЕ ХУДШИЙ ПОРОГ ТИП      ОБНОВЛЕНО  ПРИ_НЕУДАЧЕ СЫРОЕ_ЗНАЧЕНИЕ
  1 Ставка_ошибок_чтения     0x000f   075   064   006    Предаварийное  Всегда       -       30523320
  3 Время_разгона            0x0003   099   099   000    Предаварийное  Всегда       -       0
  4 Количество_включений      0x0032   100   100   020    Старый_возраст   Всегда       -       449
  5 Количество_перераспределенных_секторов   0x0033   100   100   036    Предаварийное  Всегда       -       0
  7 Ставка_ошибок_поиска         0x000f   071   060   045    Предаварийное  Всегда       -       13036046
  9 Часы_включения          0x0032   094   094   000    Старый_возраст   Всегда       -       6120 (197 141 0)
 10 Количество_попыток_перезапуска        0x0013   100   100   097    Предаварийное  Всегда       -       0
 12 Количество_циклов_питания       0x0032   100   100   020    Старый_возраст   Всегда       -       90
184 Ошибка_конц_к_концу        0x0032   100   100   099    Старый_возраст   Всегда       -       0
187 Неисправленный_отчет      0x0032   100   100   000    Старый_возраст   Всегда       -       0
188 Тайм-аут_команды         0x0032   100   100   000    Старый_возраст   Всегда       -       0
189 Высокие_записи         0x003a   100   100   000    Старый_возраст   Всегда       -       0
190 Температура_воздуха_в_Цельсия 0x0022   052   047   040    Старый_возраст   Всегда       -       48 (Мин/Макс 47/48)
191 Ставка_ошибок_гравитации      0x0032   100   100   000    Старый_возраст   Всегда       -       11
192 Количество_снижений_питания 0x0032   100   100   000    Старый_возраст   Всегда       -       32
193 Количество_циклов_нагрузки        0x0032   100   100   000    Старый_возраст   Всегда       -       1715
194 Температура_по_Цельсию     0x0022   048   053   000    Старый_возраст   Всегда       -       48 (0 13 0 0 0)
197 Текущий_ожидание_сектора  0x0012   100   100   000    Старый_возраст   Всегда       -       0
198 Оффлайн_неисправимые   0x0010   100   100   000    Старый_возраст   Оффлайн      -       0
199 Счетчик_ошибок_UDMA    0x003e   200   200   000    Старый_возраст   Всегда       -       0
240 Часы_полетов_голов       0x0000   100   253   000    Старый_возраст   Оффлайн      -       175 (86 165 0)
241 Всего_записанных_LBAs      0x0000   100   253   000    Старый_возраст   Оффлайн      -       5808417042
242 Всего_прочитанных_LBAs         0x0000   100   253   000    Старый_возраст   Оффлайн      -       1793836935
254 Датчик_свободного_падения        0x0032   100   100   000    Старый_возраст   Всегда       -       0

Версия журнала ошибок SMART: 1
Ошибок не зарегистрировано

Структура журнала самотестирования SMART версия 1
Нет зарегистрированных самотестов.  [Чтобы выполнить самотесты, используйте: smartctl -t]

Структура данных выборочного самотестирования SMART версия 1
 СПАН  MIN_LBA  MAX_LBA  ТЕКУЩИЙ_СТАТУС_ТЕСТА
    1        0        0  Не_тестируется
    2        0        0  Не_тестируется
    3        0        0  Не_тестируется
    4        0        0  Не_тестируется
    5        0        0  Не_тестируется
Флаги выборочного самотестирования (0x0):
  После сканирования выбранных спанов, не ЧИТАТЬ остаток диска.
Если выборочное самотестирование ожидает включения питания, возобновить после 0 минут задержки.

Не совсем ответ, а скорее предположение: это может быть связано с индексаторами файлов.

Это произошло со мной с разными файловыми системами (exFAT, NTFS, ext4), разными типами внешних дисков различных брендов (WD HDD, Seagate HDD, SanDisk SSD) и операционными системами (Ubuntu, Kubuntu, MacOS). Даже если я форматирую внешний диск и начинаю заново, происходит то же самое. Однако я обнаружил, что проблема магическим образом исчезает, когда индексаторы файлов отключены. Для Kubuntu это Baloo, а для MacOS – это MDS.

Ответ или решение

Вопрос о повреждении диска при использовании rsync для передачи большого количества мелких файлов на внешние HDD, отформатированные в NTFS, является актуальным и нуждается в детальном разборе. Анализ данной ситуации требует внимания к различным аспектам — техническим, программным и системным.

1. Технические аспекты

Передача большого объема данных (в вашем случае — сотни тысяч изображений) может создавать значительную нагрузку на устройство хранения и файловую систему. NTFS, хотя и является стабильной, может страдать от ошибок, особенно если устройство перегружено. Ваши сообщения об ошибках, такие как Buffer I/O error и blk_update_request: I/O error, указывают на проблемы с доступом к определённым секторам диска.

Возможные причины:

  • Ограниченные ресурсы HDD: Возможно, что ваш внешний HDD не справляется с нагрузками из-за недостаточной производительности, особенно если это диск со скоростью вращения 5400 об/мин.
  • Состояние самой файловой системы: Ошибки, обнаруженные в результате анализа с помощью ntfsfix, указывают на несоответствие между главной и резервной таблицей аля MFT, что может быть результатом некорректных операций записи в файловую систему.

2. Программные аспекты

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

Рекомендации:

  • Используйте опцию --bwlimit для ограничения скорости передачи, чтобы снизить нагрузку на диск.
  • Попробуйте использовать параметр --inplace, который может сократить количество операций записи.
  • Также вы можете использовать --compress, чтобы уменьшить размер передаваемых файлов во время передачи.

3. Системные аспекты

Обратите внимание на параметр, связанный с индексированием файловой системы, как вы и упомянули. Системные процессы, такие как Baloo или MDS, могут оказывать влияние на доступ к диску. Если индексирование активно, это может привести к конфликтам на уровне I/O, особенно в моменты высокой нагрузки.

Решение:

  • Отключите индексирование файлов во время выполнения операций rsync.

4. Аппаратные аспекты

Вы приводите вывод команды smartctl, который показывает, что ваш диск пока что не имеет явных аппаратных ошибок. Однако стоит отметить, что всего лишь отсутствие ошибок не означает полной надежности.

Действия:

  • Продолжайте мониторить другие SMART параметры, особенно Reallocated_Sector_Ct и Current_Pending_Sector, и если они начнут изменяться, рассмотрите возможность замены диска.

Заключение

Ваша проблема включает множество факторов, от аппаратного состояния HDD до программных взаимодействий. Проверьте состояние устройства, используемые настройки rsync и влияние индексации на процесс. Системный мониторинг и использование оптимизированных методов передачи данных помогут уменьшить вероятность повреждения диска в будущем.

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

Оцените материал
Добавить комментарий

Капча загружается...