Вопрос или проблема
Мне нужна помощь с жесткими дисками, на которые моя система постоянно записывает 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
Для получения подробной информации об этой функции см.: –
Ответ или решение
Для решения проблемы с постоянным использованием дискового пространства вашим процессом jbd2
, который вызывает постоянные 4 КБ записи на жесткие диски, следует предпринять несколько шагов для диагностики и устранения причины. Далее представлены рекомендации и шаги, которые помогут вам в этом.
-
Проверка логов: Ваша первая задача — проверить, не возникает ли большого количества событий, записываемых в логи. Выполните команду для наблюдения за изменениями в размерах логов:
watch ls -lS /var/log/*log | head
Если вы заметите, что какие-либо логи становятся значительно больше (например, более нескольких мегабайт), используйте команду
tail
для проверки конца этих файлов и ищите частые ошибки или сообщения:tail -f /var/log/your-log-file.log
-
Перенастройка параметров файловой системы: Используйте
tune2fs
для проверки и изменения параметров вашей файловой системы. Ваша проблема может быть связана с параметрами журнала, который активно записывается. Вы можете отключить журналирование, хотя это может повлиять на целостность данных, если произойдет сбой.Перед внесением изменений обязательно создайте резервную копию ваших данных. Чтобы отключить журнал, выполните:
sudo tune2fs -O ^has_journal /dev/sdXY
Здесь
sdXY
— это ваше целевое устройство (например,sda1
). Чтобы снова включить журнал, выполните:sudo tune2fs -O has_journal /dev/sdXY
-
Параметры монтирования: Убедитесь, что в вашем файле
/etc/fstab
используются подходящие параметры монтирования, такие какnoatime
, для снижения частоты записи на диск. Например:UUID= ваш-uuid /mnt/ваш-диск ext4 defaults,noatime 0 2
-
Проверка работы приложения: Убедитесь, что приложения, использующие эти диски, (такие как Jellyfin или Nextcloud), корректно настроены и не производят частых записей в базу данных или кэш. Частые изменения в базе данных могут значительно увеличить нагрузку на диски. В некоторых случаях может потребоваться оптимизация настроек или использование SSD для записям, которые требуют высокой производительности.
-
Мониторинг активности: Используйте утилиты, такие как
iotop
, для наблюдения за активностью ввода-вывода и определения, какие процессы вызывают наиболее интенсивные записи. Установите и запуститеiotop
:sudo apt install iotop sudo iotop
Это позволит вам увидеть, какие процессы создают нагрузку на диски.
-
Расширенные проверки: Если проблема не исчезнет, следует запустить более глубокие проверки жесткого диска, такие как
fsck
:sudo fsck /dev/sdXY
Это позволит обнаружить и устранить возможные проблемы с файловой системой.
В случае, если после выполнения всех указанных шагов проблема сохраняется, может потребоваться дополнительная диагностика аппаратного обеспечения — проверьте состояние дисков с помощью SMART:
sudo smartctl -a /dev/sdX
Это может выявить наличие аппаратных проблем с дисками.
Следуя приведенным рекомендациям, вы сможете определить и устранить источники постоянных записей jbd2
, что в свою очередь поможет снизить температуру ваших дисков и улучшить производительность системы.