Ubuntu зависает во время ввода-вывода на внешних NTFS-дисках.

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

У меня есть внешние диски NTFS объемом 1 ТБ, которые я использую для резервного копирования своих данных. Этот диск подключен к ПК примерно раз в месяц. Я заметил, что мой Ubuntu зависает при копировании 300 ГБ данных с этого диска. Я проверил диск на Windows 11 на наличие ошибок и сделал дефрагментацию диска. Диск в целом работает нормально на Windows 11. Ниже приведена информация об операционной системе Ubuntu:

$ lsb_release -a
Нет доступных модулей LSB.
Идентификатор дистрибутива: Ubuntu
Описание:    Ubuntu 24.04 LTS
Версия:    24.04
Кодовое имя:   noble

$ uname -a
Linux asus 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Ниже представлен диск, смонтированный на Ubuntu:

$ sudo fdisk -l
...
...
...
Диск /dev/sdb: 931.51 GiB, 1000204883968 байт, 1953525164 секторов
Модель диска: Внешний USB 3.0
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода/вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xcd281382

Устройство     Загрузка Начало        Конец    Секторы   Размер Id Тип
/dev/sdb1        2048 1953521663 1953519616 931.5G  7 HPFS/NTFS/exFAT

Я пытался просканировать диск на Ubuntu, но NTFS, похоже, не поддерживается. Пожалуйста, смотрите ниже:

$ sudo smartctl -a /dev/sdb1
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.8.0-31-generic] (локальная сборка)
Авторское право (C) 2002-23, Брюс Аллен, Кристиан Франке, www.smartmontools.org

=== НАЧАЛО СЕКЦИИ ИНФОРМАЦИИ ===
Производитель:               TOSHIBA
Продукт:              Внешний USB 3.0
Версия:             0101
Соответствие:           SPC-4
Пользовательская емкость:        1,000,204,883,968 байт [1.00 ТБ]
Логический размер блока:   512 байт
Тип устройства:          диск
Местное время:        Вт Май 28 20:35:47 2024 JST
Поддержка SMART:     Недоступна - устройство не поддерживает возможности SMART.

=== НАЧАЛО СЕКЦИИ ЧТЕНИЯ ДАННЫХ SMART ===
Текущая температура диска:     0 C
Температура отключения диска:        0 C

Список дефектов чтения: запрашивался список выросших, но не был получен
Ведение логов счетчика ошибок не поддерживается

Устройство не поддерживает ведение журнала самодиагностики

Команда ntfsfix не сработала, как показано ниже:

$ ntfsfix /dev/sdb1
Отказано в выполнении операции на устройстве, смонтированном только для чтения и записи /dev/sdb1.

Обратите внимание, что то же самое поведение (зависание Ubuntu) наблюдается с другим NTFS-диском емкостью 2 ТБ. Удивительно, но оба диска работают без проблем на Windows 11. Кстати, это ПК с двойной загрузкой, а быстрый запуск и режим гибернации отключены в Windows 11.

К сожалению, когда Ubuntu зависает, у меня нет другого выбора, кроме как принудительно перезагрузить ПК, что приводит к потере данных. Есть ли способ глубже диагностировать проблему?

Нам нужно провести различные тесты для диагностики неисправности.

В дополнение к dmesg здесь:

  1. Подключите диск и не монтируйте его и ничего не делайте. Подождите щедрое количество времени, скажем, 5 часов или сколько угодно, что гарантирует сбой.
    Если система зависает, это проблема низкого уровня, и вам лучше перейти на SSD, так как цены упали.

  2. Далее тест на чтение

    dd if=/dev/sdb of=/dev/null bs=2048 status=progress

Снова подождите соответствующее количество времени и запишите время сбоя и процент.

  1. Повторите тест 2, происходит ли сбой? Происходит ли сбой через то же количество времени или тот же процент?

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

  1. Теперь давайте смонтируем диск.

    dd if=/dev/zero of=/mount/point/testing.txt bs=2048 count=200000 status=progress

Это создаст файл, содержащий все нули. Если не произойдет сбоя, продолжайте увеличивать количество на 1000000.

Если произойдет сбой, сколько времени потребовалось до сбоя и при каком проценте?

  1. Удалите файл, запустите во второй раз. Также запишите время и процент.

Для чтений, если есть общая точка сбоя по проценту, вероятно, есть конкретная проблема, например, плохой сектор. В любом случае все эти данные имеют диагностическую ценность.

Тест на чтение проверяет базовое аппаратное обеспечение и не использует драйверов. Тест на запись смонтирует диск, поэтому это протестирует драйверы.

Кроме того, полезно открыть второе окно терминала и периодически запускать dmesg. Начало результатов всегда повторяется, самые новые данные в конце. Поэтому следите за последними 10-20 строками на предмет ошибок во время выполнения тестов.

зависает при копировании 300 ГБ данных с этого диска. Я проверил диск на Windows 11 на наличие ошибок

с диска .. И, пожалуйста, обратите внимание, что Windows chkdsk по умолчанию не является обширным тестом и в основном касается согласованности файловой системы.

Я предлагаю вам использовать что-то вроде ‘Victoria for Windows’ или HDTune и выполнить только чтение поверхностного сканирования. При отсутствии SMART это практически единственное, что у вас есть для диагностики самого устройства (не файловой системы).

https://www.majorgeeks.com/files/details/victoria_for_windows.html
https://www.majorgeeks.com/files/details/hd_tune.html

У меня такая же проблема с моим внешним жестким диском WD емкостью 4 ТБ. Обычно я просто запускаю rsync, чтобы копировать данные с моего внутреннего SSD на внешний HDD и наоборот, но это вызывает быстрое зависание всей системы в Ubuntu 24.04.

Я попробовал запустить rsync на отдельных файлах вместо многогигабайтного каталога, и это, похоже, сработало. Но мне также пришлось сначала создать структуру каталогов.

# Создать каталоги
while read DIR; do
    #echo "${DEST}/${DIR#"${SRC}"}"
    mkdir -p "${DEST}/${DIR#"${SRC}"}"
done < <(find "${SRC}" -type d)

# rsync файлы
n=1
while read FILE; do
    rsync -avz --no-perms --no-owner --no-group \
        "${FILE}" \
        "${DEST}/${FILE#"${SRC}"}" > /dev/null

    # Печать прогресса каждые 100 файлов
    if [[ $((n % 100)) -eq 0 ]]; then
        echo "${n}: ${FILE#"${SRC}"}"
    fi
    n=$((n+1))
done < <(find "${SRC}" -type f)

Судя по всему, это работает, но это определенно не идеально.

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

Проблема зависания Ubuntu при работе с внешними NTFS-дисками: Исследование и Решения

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

Устранение проблем с дисками NTFS в Ubuntu

  1. Диагностика состояния диска:

    • Проверьте состояние внешнего диска в Windows, используя утилиты, такие как Victoria или HDTune, для выполнения поверхностного сканирования. Эти инструменты помогут выявить физические проблемы с диском, такие как поврежденные сектора, которые могут не обнаруживаться стандартными методами.
  2. Тестирование на Ubuntu:

    • После подключения диска в Ubuntu не монтируйте его сразу. В данном случае полезно выполнить пару низкоуровневых тестов. Выполните команду:
      sudo dd if=/dev/sdb of=/dev/null bs=2048 status=progress

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

  3. Проверка записи на диск:

    • После успешного чтения попробуйте создать тестовый файл, чтобы проверить возможность записи:
      sudo dd if=/dev/zero of=/mnt/your_mount_point/testing.txt bs=2048 count=200000 status=progress

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

  4. Использование rsync для копирования больших объемов данных:

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

      while read DIR; do
       mkdir -p "${DEST}/${DIR#"${SRC}"}"
      done < <(find "${SRC}" -type d)
      
      n=1
      while read FILE; do
       rsync -avz --no-perms --no-owner --no-group "${FILE}" "${DEST}/${FILE#"${SRC}"}" > /dev/null
       if [[ $((n % 100)) -eq 0 ]]; then
           echo "${n}: ${FILE#"${SRC}"}"
       fi
       n=$((n+1))
      done < <(find "${SRC}" -type f)
  5. Мониторинг системы:

    • Во время выполнения всех тестов полезно периодически проверять вывод команды dmesg, чтобы отслеживать появляющиеся ошибки.

Устранение проблем на программном уровне

  • Параметры монтирования (fstab): Убедитесь, что диск монтируется с правильными параметрами. Например, использование параметра nofail, чтобы избежать зависания системы в случае проблем с диском.
  • Обновление драйверов: Проверьте наличие обновлений для ядра и драйверов, так как новые версии могут содержать исправления для работы с NTFS-дисками.

Заключение

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

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

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