signal=BUS (status=7/BUS) в systemd
BUS похож на SEGV, но причина у него более узкая: программа обратилась к памяти, которая физически не может быть предоставлена. Классический случай — файл, отображённый в память, был усечён или закончилось место на разделе, где он лежит.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Файл, отображённый в память, изменился или усечён
Если программа отобразила файл и кто-то сократил его снаружи, обращение к отсутствующей области даёт BUS. Так ломаются базы и кеши при ручном вмешательстве в их файлы.
-
Закончилось место на разделе с отображённым файлом
Запись в отображённую область требует выделения блоков на диске. Если места нет, ядро не может её выполнить и посылает BUS.
-
Ошибка выравнивания или проблема оборудования
На некоторых архитектурах обращение по невыровненному адресу даёт BUS. Реже причина в самой памяти или диске.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Заполненный раздел — самая частая объяснимая причина BUS у служб с базами.
df -hТрассировка: показывает, на какой операции с памятью произошёл сбой.
coredumpctl info myapp | head -40Записи ядра об ошибках ввода-вывода и оборудования.
journalctl -k -b --no-pager | grep -iE "I/O error|mce"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Если программа отобразила файл и кто-то сократил его снаружи, обращение к отсутствующей области даёт BUS. Так ломаются базы и кеши при ручном вмешательстве в их файлы.
- Как проверить
-
Посмотрите, какие файлы отображала служба и не менялись ли они.
sudo ls -l /var/lib/myapp/ journalctl -u myapp.service -n 40 --no-pager
- Как исправить
- Не изменяйте файлы работающей службы снаружи. Восстановите файл из резервной копии и перезапустите службу.
- Почему происходит
- Запись в отображённую область требует выделения блоков на диске. Если места нет, ядро не может её выполнить и посылает BUS.
- Как проверить
-
Посмотрите свободное место и записи ядра.
df -h journalctl -k -b --no-pager | tail -20
- Как исправить
- Освободите место и перезапустите службу. Для разделов с базами полезен мониторинг заполнения: BUS — довольно позднее оповещение о проблеме с местом.
- Почему происходит
- На некоторых архитектурах обращение по невыровненному адресу даёт BUS. Реже причина в самой памяти или диске.
- Как проверить
-
Посмотрите записи ядра об ошибках оборудования и трассировку дампа.
journalctl -k -b --no-pager | grep -iE "mce|edac|I/O error" coredumpctl info myapp | head -30
- Как исправить
- При следах ошибок оборудования планируйте проверку памяти и диска. При невыровненном доступе нужна правка программы.
Пример вывода
Раздел с файлом базы заполнен. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× db.service - Database
Active: failed (Result: core-dump) since Mon 2026-09-15 15:22:19 MSK; 12s ago
Main PID: 15100 (code=dumped, signal=BUS)
kernel: EXT4-fs (vda2): warning: no space left on device
systemd[1]: db.service: Main process exited, code=dumped, signal=BUS
systemd[1]: db.service: Failed with result 'core-dump'.
Связанные ошибки
- signal=SEGV (status=11/SEGV) в systemd Процесс службы завершён сигналом SEGV: обращение к недопустимой памяти. Как собрать дамп и что смотреть.
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- Failed with result 'core-dump' Состояние core-dump: процесс службы аварийно завершился и сохранил дамп памяти. Как открыть дамп и прочитать трассировку.
- signal=ABRT (status=6/ABRT) в systemd Процесс службы завершён сигналом ABRT: программа сама прервала работу после внутренней проверки. Где искать причину.
- signal=FPE (status=8/FPE) в systemd Процесс службы завершён сигналом FPE: арифметическая ошибка, чаще всего деление на ноль в целочисленной арифметике.
- signal=ILL (status=4/ILL) в systemd Процесс службы завершён сигналом ILL: недопустимая инструкция процессора. Обычно сборка не под этот процессор.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
Где встречается чаще всего
Источники
-
coredumpctl(1)
Дампы и трассировки аварийных завершений. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на заполненном разделе с отображённым в память файлом.