Jdb2 постоянно записывает на жесткий диск

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

Мне нужна помощь с жесткими дисками, на которые моя система постоянно записывает 4 КБ данных через процесс, называемый jbd2. Запись никогда не заканчивается, и из-за постоянной активности они становятся крайне горячими.

Сначала я расскажу весь предысторию, как я оказался здесь:

У меня есть старый ноутбук с Ubuntu Server, который я использую в качестве сервера для работы с такими приложениями, как Nextcloud и недавно Jellyfin.

Linux nextcloudlenovo 5.15.0-119-generic #129-Ubuntu SMP Fri Aug 2 19:25:20 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Хранение для моей медиатеки Jellyfin использует старый жесткий диск объемом 500 ГБ, отформатированный с использованием EXT4, который был скопирован с помощью задания crontab на другой жесткий диск объемом 500 ГБ. Оба диска были подключены с помощью док-станции USB на 2 отсека, подобной этой:
Док-станция Inland USB 2 Bay

Все работало отлично с моими старыми дисками, пока я недавно не купил новые жесткие диски объемом 8 ТБ, чтобы заменить свои 500 ГБ, которые теперь заполнены.

Как вы можете заметить, док-станция также является клонировщиком дисков, поэтому, прежде чем установить новые диски в ноутбук, я отключил док-станцию от него и использовал её в автономном режиме, чтобы клонировать данные с 500 ГБ на 8 ТБ. После повторного подключения док-станции к серверу с новыми дисками процесс, похоже, прошел успешно (все мои данные на новых дисках, и я могу получить к ним доступ без проблем).

Теперь о самой проблеме…

Сейчас проблема в том, что как только я монтирую новые диски, jbd2 постоянно делает записи по 4 КБ на каждый из них. Вот вывод, который я сделал, оставив диск смонтированным на несколько минут (sda2-8 – это диск, на который это влияет):

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
Average:        0         1    749.83    209.51      0.08       0  systemd
Average:        0        90      5.53      0.00      0.00       0  kworker/u4:1-flush-8:0
Average:        0        99      0.22      0.00      0.00       0  kworker/u4:3-loop5
Average:        0       303      0.00     19.00      0.00       0  jbd2/sda2-8
Average:        0       375      0.00     14.76      0.00       0  systemd-journal
Average:      107       714      0.00      0.28      0.00       0  rsyslogd
Average:        0       717   1794.02   3103.34     34.04       0  snapd
Average:        0       722      1.12      0.00      0.00       0  udisksd
Average:        0       970      0.00      0.03      0.02       0  nmbd
Average:        0      3682      0.00      0.64      0.00       0  jbd2/sdc1-8
Average:        0      3684     58.33      0.00      0.00       0  ext4lazyinit
Average:        0      3967      1.62      0.00      0.00       0  kworker/u4:0-events_unbound
Average:        0      4793    984.14     71.50     49.24       0  run-httpd
Average:        0      4799      0.03      0.00      0.00       0  nextcloud-fixer
Average:        0      4810      0.36      0.00      0.00       0  start-php-fpm
Average:        0      4816    120.85      0.02      0.00       0  start_mysql
Average:        0      4827     29.23      0.00      0.00       0  nextcloud-cron
Average:        0      4851      0.49      0.00      0.00       0  start-redis-ser
Average:        0      4860    110.75      0.03      0.02       0  renew-certs
Average:        0      5040     36.26      0.05      0.00       0  redis-server
Average:        0      5349      4.76      0.00      0.00       0  mysqld_safe
Average:        0      5580     10.60    133.39      0.06       0  mysqld
Average:        0      5711     32.41      0.03      0.00       0  php-fpm
Average:        0      6365      0.01      0.00      0.00       0  httpd-wrapper
Average:        0      6420      4.42      0.03      0.00       0  httpd
Average:        0      6422      0.08      0.00      0.00       0  httpd
Average:        0      6570      0.73      0.00      0.00       0  php

Сначала я подумал, что это дубликат этого вопроса, поэтому я добавил noatime в fstab, но это ничего не изменило. Затем я подумал, что это может быть дубликат этого другого вопроса, но я не вижу файла в .local/share/gvfs-metadata. Так что опции и идеи у меня заканчиваются.

Я попробовал подключить док-станцию USB к Raspberry Pi 4, который является единственным другим Linux-компьютером, который у меня есть под рукой, чтобы проверить, будут ли диски вести себя иначе (т.е. не выполнять 4 КБ записей с jbd2), но там, как только я монтирую диски, ext4lazyinit выполнялся БЕСКОНЕЧНО. Я оставил его запущенным на Pi больше часа, и он все еще инициализировал диски, тогда как на ноутбуке ext4lazyinit заканчивается за минуту.

Я немного новичок в администрировании систем, так что любая помощь будет очень признательна!

Если вам нужны дополнительные детали об ноутбуке, если это чем-то поможет, вот мой дамп lscpu:

Architecture:             x86_64
  CPU op-mode(s):         32-bit, 64-bit
  Address sizes:          36 bits physical, 48 bits virtual
  Byte Order:             Little Endian
CPU(s):                   2
  On-line CPU(s) list:    0,1
Vendor ID:                GenuineIntel
  Model name:             Pentium(R) Dual-Core CPU       T4400  @ 2.20GHz
    CPU family:           6
    Model:                23
    Thread(s) per core:   1
    Core(s) per socket:   2
    Socket(s):            1
    Stepping:             10
    CPU max MHz:          2200.0000
    CPU min MHz:          1200.0000
    BogoMIPS:             4389.61
    Flags:                fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_pe
                          rfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti dtherm
Caches (sum of all):      
  L1d:                    64 KiB (2 instances)
  L1i:                    64 KiB (2 instances)
  L2:                     1 MiB (1 instance)
NUMA:                     
  NUMA node(s):           1
  NUMA node0 CPU(s):      0,1
Vulnerabilities:          
  Gather data sampling:   Not affected
  Itlb multihit:          KVM: Mitigation: VMX unsupported
  L1tf:                   Mitigation; PTE Inversion
  Mds:                    Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled
  Meltdown:               Mitigation; PTI
  Mmio stale data:        Unknown: No mitigations
  Reg file data sampling: Not affected
  Retbleed:               Not affected
  Spec rstack overflow:   Not affected
  Spec store bypass:      Vulnerable
  Spectre v1:             Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:             Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
  Srbds:                  Not affected
  Tsx async abort:        Not affected

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

ls -lS /var/log/*log | head

Выполняйте в цикле каждые 2 секунды.

watch ls -lS /var/log/*log | head

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


Возможно изменять различные флаги файловой системы и действительно менять файловую систему с помощью tune2fs.

Команда tune2fs позволяет вам просматривать и изменять различные параметры файловой системы Linux ext2, ext3 или ext4. Некоторые параметры, которые вы можете изменять, включают имя объема файловой системы, максимальное количество монтирований, количество монтирований, промежуток времени между двумя проверками файловой системы, время последней проверки и т. д.

tune2fs также может преобразовать файловую систему ext2 в файловую систему ext3 и файловую систему ext3 в файловую систему ext4.

ПРИМЕЧАНИЕ: Сделайте резервную копию ваших данных перед выполнением этих команд, так как они могут вызвать повреждение файловой системы и потерю данных.

Например, чтобы добавить журнал: –

sudo tune2fs -O has_journal /dev/sdXY

А чтобы удалить, добавьте ^ перед флагом.

sudo tune2fs -O ^has_journal /dev/sdXY

Для получения подробной информации об этой функции см.: –

https://www.golinuxcloud.com/tune2fs-command-in-linux/

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

Для решения проблемы с постоянным использованием дискового пространства вашим процессом jbd2, который вызывает постоянные 4 КБ записи на жесткие диски, следует предпринять несколько шагов для диагностики и устранения причины. Далее представлены рекомендации и шаги, которые помогут вам в этом.

  1. Проверка логов: Ваша первая задача — проверить, не возникает ли большого количества событий, записываемых в логи. Выполните команду для наблюдения за изменениями в размерах логов:

    watch ls -lS /var/log/*log | head

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

    tail -f /var/log/your-log-file.log
  2. Перенастройка параметров файловой системы: Используйте tune2fs для проверки и изменения параметров вашей файловой системы. Ваша проблема может быть связана с параметрами журнала, который активно записывается. Вы можете отключить журналирование, хотя это может повлиять на целостность данных, если произойдет сбой.

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

    sudo tune2fs -O ^has_journal /dev/sdXY

    Здесь sdXY — это ваше целевое устройство (например, sda1). Чтобы снова включить журнал, выполните:

    sudo tune2fs -O has_journal /dev/sdXY
  3. Параметры монтирования: Убедитесь, что в вашем файле /etc/fstab используются подходящие параметры монтирования, такие как noatime, для снижения частоты записи на диск. Например:

    UUID= ваш-uuid /mnt/ваш-диск ext4 defaults,noatime 0 2
  4. Проверка работы приложения: Убедитесь, что приложения, использующие эти диски, (такие как Jellyfin или Nextcloud), корректно настроены и не производят частых записей в базу данных или кэш. Частые изменения в базе данных могут значительно увеличить нагрузку на диски. В некоторых случаях может потребоваться оптимизация настроек или использование SSD для записям, которые требуют высокой производительности.

  5. Мониторинг активности: Используйте утилиты, такие как iotop, для наблюдения за активностью ввода-вывода и определения, какие процессы вызывают наиболее интенсивные записи. Установите и запустите iotop:

    sudo apt install iotop
    sudo iotop

    Это позволит вам увидеть, какие процессы создают нагрузку на диски.

  6. Расширенные проверки: Если проблема не исчезнет, следует запустить более глубокие проверки жесткого диска, такие как fsck:

    sudo fsck /dev/sdXY

    Это позволит обнаружить и устранить возможные проблемы с файловой системой.

В случае, если после выполнения всех указанных шагов проблема сохраняется, может потребоваться дополнительная диагностика аппаратного обеспечения — проверьте состояние дисков с помощью SMART:

sudo smartctl -a /dev/sdX

Это может выявить наличие аппаратных проблем с дисками.

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

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

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