Діагностика Ubuntu: Покроковий довідник з реальними командами та відповідями

📋 Про цей довідник

Цей документ побудований на реальній сесії діагностики: система Ubuntu гальмувала,

і я крок за кроком знаходив та усував всі причини. Кожен розділ містить

команду → реальний вивід → пояснення → дію.

Частина 1. Моніторинг ресурсів у реальному часі

Перший крок це зрозуміти, що саме навантажує систему.

1.1 Перегляд активних процесів

Команди:

top

# або зручніша кольорова версія:

htop

# Топ-10 процесів за CPU:

ps -eo pcpu,pmem,user,args –sort=-pcpu | head -n 10

Реальний вивід (приклад з сесії):

%CPU %MEM USER COMMAND

61.2 0.9 alex ffmpeg -fflags nobuffer -rtsp_transport tcp …

61.0 0.8 alex ffmpeg -fflags nobuffer -rtsp_transport tcp …

14.7 2.1 alex /opt/google/chrome/chrome …

7.4 0.8 alex /opt/google/chrome/chrome –type=renderer …

6.5 1.0 alex /usr/share/code/code –type=zygote

🔍 Що означає вивід

%CPU — відсоток завантаження процесора. Два ffmpeg разом дають 120%+ (більше одного ядра).

%MEM — відсоток оперативної пам’яті.

У мому випадку виявлено: Python-скрипт запускав окремий ffmpeg на кожного клієнта!

Рішення: переписати скрипт так, щоб ffmpeg запускався один для всіх підключень.

1.2 Стан оперативної пам’яті

Команда:

free -h

Реальний вивід:

загалом використ. вільна спільна буфери/кеш дост.

Пам’: 31Gi 8,8Gi 16Gi 253Mi 5,6Gi 21Gi

Своп: 2,0Gi 0B 2,0Gi

🔍 Що означає вивід

“дост.” (available) 21 ГБ — пам’яті більш ніж достатньо.

Своп = 0B — система навіть не торкнулась swap-розділу. Проблема не в RAM.

Якщо “дост.” близьке до нуля — система починає використовувати swap і гальмує.

Частина 2. Діагностика дискової системи

2.1 Перевірка системних логів (dmesg)

Команда:

sudo dmesg -T | tail

# Тільки помилки:

dmesg -T –level=err,warn

Реальний вивід (виявлено проблему):

[пн бер 9 11:26:52 2026] FAT-fs (sdc1): Volume was not properly unmounted.

Some data may be corrupt. Please run fsck.

[пн бер 9 11:26:54 2026] EXT4-fs (sdc2): recovery complete

[пн бер 9 11:26:54 2026] EXT4-fs (sdc2): mounted filesystem r/w

⚠️ Що означає вивід

“Volume was not properly unmounted” — флешка/диск відключена некоректно.

Система намагається читати пошкоджені сектори → I/O wait → фризи.

Рішення: розмонтувати пристрій і запустити fsck для виправлення помилок.

2.2 Виправлення файлової системи (fsck)

Кроки:

# 1. Розмонтувати розділи

sudo umount /dev/sdc1

sudo umount /dev/sdc2

# Якщо “target is busy”:

sudo umount -l /dev/sdc2

 

# 2. Виправити FAT-розділ

sudo fsck.vfat -a /dev/sdc1

 

# 3. Виправити EXT4-розділ

sudo e2fsck -p /dev/sdc2

Реальний вивід (успішне виправлення):

fsck.fat 4.2 (2021-01-31)

Dirty bit is set. Automatically removing dirty bit.

*** Filesystem was changed ***

/dev/sdc1: 599 files, 261648/516190 clusters

 

/dev/sdc2: без помилок, 332906/1937712 файлів, 3385954/7740923 блоків

Результат

“без помилок” — файлова система тепер чиста.

Після виправлення фізично витягніть пристрій і перевірте, чи зникли фризи.

2.3 Перевірка вільного місця

Команди:

# Місце на дисках

df -h

 

# Кількість файлів (inodes)

df -i

Реальний вивід (знайдено критичну проблему):

Ф. система Розм Вик Дост Вик% змонтований на

/dev/sdb3 439G 396G 21G 96% /

tmpfs 16G 240M 16G 2% /dev/shm

/dev/sdb2 512M 6,1M 506M 2% /boot/efi

🚨 Критично: 96% заповнення системного диску!

Коли на SSD менше 10% вільного місця — контролер не може виконувати TRIM.

Це призводить до різкого падіння швидкості запису і мікрофризів.

Рішення: звільнити місце (кеш, логи, перенос файлів на HDD).

2.4 Пошук великих папок

Команда:

sudo du -h –max-depth=1 /home/alex | sort -h

Реальний вивід (топ найбільших):

141G /home/alex/www

25G /home/alex/Музика

19G /home/alex/.cache

16G /home/alex/.local

12G /home/alex/.config

9G /home/alex/Android

5G /home/alex/snap

🔍 Аналіз

www (141 ГБ) — основний робочий каталог розробника. Кандидат для переносу на HDD.

.cache (19 ГБ) — можна безпечно видалити, він перествориться автоматично.

Музика/Відео — медіафайли краще зберігати на великому HDD.

2.5 Швидке звільнення місця

Безпечні команди для очищення:

# Видалити кеш завантажених пакетів

sudo apt clean

 

# Обрізати системні логи до 500 МБ

sudo journalctl –vacuum-size=500M

 

# Очистити кошик

rm -rf ~/.local/share/Trash/*

 

# Очистити кеш програм (перествориться автоматично)

rm -rf ~/.cache/*

 

Частина 3. Перевірка фізичного стану дисків (S.M.A.R.T.)

3.1 Встановлення та визначення дисків

Команди:

# Встановити smartmontools

sudo apt install smartmontools

 

# Побачити список дисків

lsblk

Реальний вивід lsblk:

sda 8:0 0 1,8T 0 disk ← великий HDD 1.8 ТБ

├─sda1 … 579M

├─sda2 … 846,8G

├─sda3 … 466,9G

└─sda5 … 548,8G

sdb 8:16 0 447,1G 0 disk

└─sdb3 8:19 0 446,6G 0 part / ← системний SSD!

sdc 8:32 1 29,8G 0 disk ← флешка/зовнішній диск

3.2 Перевірка здоров’я диска

Команди:

# Загальний стан (PASSED / FAILED)

sudo smartctl -H /dev/sdb

 

# Деталі для SSD

sudo smartctl -A /dev/sdb | grep -E “Percentage|Media|Error”

 

# Критичні параметри для HDD

sudo smartctl -A /dev/sda | grep -E “Reallocated|Pending|Offline”

Реальний вивід (здоровий SSD):

smartctl 7.2 2020-12-30 r5155 [x86_64-linux-6.8.0-101-generic]

 

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED

📖 На що дивитися в smartctl -A

Для HDD:

Reallocated_Sector_Count > 0 → диск починає “сипатися”, плануйте заміну.

Current_Pending_Sector → сектори, які не вдалося прочитати.

UDMA_CRC_Error_Count росте → проблема в кабелі SATA.

Для SSD:

Percentage Used → знос пам’яті у відсотках.

Media and Data Integrity Errors → мають бути нулями.

3.3 Тест реальної швидкості диска

Команда:

sudo hdparm -tT /dev/sdb

Реальний вивід (відмінний результат):

/dev/sdb:

Timing cached reads: 21824 MB in 1.99 seconds = 10962.49 MB/sec

Timing buffered disk reads: 1558 MB in 3.00 seconds = 519.05 MB/sec

📊 Орієнтири для порівняння

SSD SATA — 400–550 MB/s (наш результат 519 MB/s — відмінно!).

SSD NVMe — 2000–7000 MB/s.

HDD — 80–160 MB/s.

Якщо SSD показує < 200 MB/s — можливі проблеми з контролером або перегрів.

 

Частина 4. Монтування великого диска та перенос даних

4.1 Визначення та монтування розділу

Команди:

# Дізнатися тип файлової системи

blkid /dev/sda2

 

# Якщо ext4 — монтувати так:

sudo mkdir -p /mnt/storage

sudo mount /dev/sda2 /mnt/storage

 

# Якщо NTFS (Windows-диск) — отримаємо помилку:

# “Mount is denied because the NTFS volume is already exclusively opened”

# → перевірити, куди вже змонтовано:

lsblk | grep sda2

⚠️ Увага: NTFS

Якщо диск NTFS (Windows), Linux не може монтувати його двічі.

Перевірте: lsblk — можливо, система вже автоматично змонтувала диск у /media/alex/…

Використовуйте цей шлях замість /mnt/storage.

4.2 Автомонтування через fstab

Команди:

# Дізнатися UUID розділу

blkid /dev/sda2

 

# Відкрити fstab для редагування

sudo nano /etc/fstab

 

# Додати рядок (для ext4):

UUID=ВАШ-UUID /mnt/storage ext4 defaults 0 2

 

# Перевірити без перезавантаження

sudo mount -a

4.3 Безпечний перенос папки через rsync

Команди (БЕЗПЕЧНИЙ метод):

# rsync покаже прогрес і не видалить оригінал

sudo rsync -avP ~/www /mnt/storage/alex/

 

# ТІЛЬКИ після перевірки, що дані скопійовані!

ls -la /mnt/storage/alex/www

 

# Видаляти оригінал тільки після підтвердження

rm -rf ~/www

 

# Створити символічне посилання

ln -s /mnt/storage/alex/www ~/www

🛡️ Правило безпеки при переносі даних

НІКОЛИ не видаляйте оригінал перед тим, як перевірити копію.

Використовуйте rsync -avP — він показує прогрес і перевіряє цілісність.

Після переносу перевірте: ls -la і розмір папки (du -sh).

Символічне посилання (ln -s) дозволяє системі “бачити” папку на старому місці.

Частина 5. Оптимізація Python MJPEG-проксі

Це реальний кейс: скрипт для трансляції RTSP-камери в браузер запускав окремий ffmpeg для кожного підключеного клієнта.

5.1 Проблема: N клієнтів = N процесів ffmpeg

🔴 Архітектурна помилка

Оригінальний код: метод _stream() запускав subprocess.Popen(FFMPEG_CMD) при кожному підключенні.

2 відкриті вкладки браузера = 2 ffmpeg = 120%+ CPU.

При 5 вкладках система “лягала” повністю.

Рішення: один глобальний ffmpeg, всі клієнти читають з нього.

5.2 Оптимізована команда ffmpeg

Зміни в параметрах:

FFMPEG_CMD = [

“ffmpeg”, “-fflags”, “nobuffer”, “-rtsp_transport”, “tcp”,

“-i”, RTSP_URL,

“-f”, “mjpeg”, “-q:v”, “5”,

“-r”, “10”, # ← було 15, знижено до 10 FPS

“-preset”, “ultrafast”, # ← новий параметр: мін. навантаження на CPU

“-vf”, “scale=1280:-1”, # ← -1 замість 960: зберігає пропорції

“pipe:1”

]

5.3 Патерн StreamManager: один ffmpeg для всіх

Ключовий код:

class StreamManager:

def __init__(self):

self.last_frame = b””

self.lock = threading.Lock()

self.running = True

 

def start(self):

threading.Thread(target=self._run_ffmpeg, daemon=True).start()

 

def _run_ffmpeg(self):

while self.running:

proc = subprocess.Popen(

FFMPEG_CMD, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,

preexec_fn=lambda: os.nice(10) # Низький пріоритет

)

# … читаємо кадри і зберігаємо в self.last_frame

 

def get_frame(self):

with self.lock:

return self.last_frame

 

# Глобальний менеджер — один для всього сервера

manager = StreamManager()

manager.start()

Результат після оптимізації

ffmpeg завжди запущений в одному екземплярі.

10 відкритих вкладок браузера = навантаження CPU таке ж, як при одній.

os.nice(10) — процес поступається ресурсами системі та іншим програмам.

Кадри оновлюються в єдиній змінній, клієнти читають з неї без запуску нових процесів.

 

Частина 6. Підсумок діагностики

Що перевіряли Що знайшли Рішення
Процесор Python-скрипт запускав окремий ffmpeg на кожного клієнта (120%+ CPU) Переписано на SharedStreamManager + os.nice(10)
Оперативна пам’ять 32 ГБ, зайнято 8 ГБ, Swap = 0 — проблем немає Не потребує дій
Зовнішній диск (sdc) Пошкоджена FAT і EXT4 файлова система fsck.vfat + e2fsck виправили помилки
Системний SSD (sdb) 96% заповнення — критично! Перенос www/Музики на HDD, очищення кешу
S.M.A.R.T. SSD PASSED, швидкість 519 MB/s Диск справний, нічого не потрібно

Швидкий чеклист діагностики

  1. ps -eo pcpu,pmem,user,args –sort=-pcpu | head -n 10 — хто їсть CPU
  2. free -h — стан RAM та Swap
  3. df -h — вільне місце на дисках (критично якщо > 90%)
  4. sudo dmesg -T | tail — помилки обладнання в логах
  5. sudo smartctl -H /dev/sdX — здоров’я диска (PASSED/FAILED)
  6. sudo hdparm -tT /dev/sdX — реальна швидкість читання
  7. sudo du -h –max-depth=1 /home/USER | sort -h — де зайняте місце

Сформовано на основі реальної сесії діагностики Ubuntu · Березень 2026

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *