← Назад к вопросам

Как посмотреть свободное место на диске в Linux?

1.0 Junior🔥 101 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Проверка свободного места на диске в Linux

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

1. df — основная команда

Самая распространённая команда для проверки дискового пространства:

# Базовая команда
df
# Вывод:
# Filesystem     1K-blocks     Used Available Use% Mounted on
# /dev/sda1     1048576 524288  524288  50% /
# /dev/sdb1     2097152 1048576 1048576 50% /home

# С понятным форматом (GB, MB, KB)
df -h
# Вывод:
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1       1.0G  500M  500M  50% /
# /dev/sdb1       2.0G  1.0G  1.0G  50% /home

# Только информация о конкретной точке монтирования
df -h /home
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sdb1       2.0G  1.0G  1.0G  50% /home

# Показать файловые системы (типы)
df -T
# Filesystem     Type     1K-blocks     Used Available Use%
# /dev/sda1      ext4      1048576 524288  524288  50%

# Показать только локальные файловые системы (исключить сетевые)
df -l

# Показать в инодах (количество файлов, не размер)
df -i
# Filesystem     Inodes   IUsed   IFree IUse% Mounted on
# /dev/sda1      131072   65536   65536   50% /

Интерпретация вывода:

  • Size: общий размер раздела
  • Used: использовано
  • Avail: доступно для использования (может быть меньше Free)
  • Use%: процент используемого пространства

2. du — глубокий анализ использования

Для поиска, что занимает место на диске:

# Размер текущей директории
du
# Вывод:
# 4     ./subdir1
# 8     ./subdir2
# 12    .

# С понятным форматом
du -h
# 4.0K   ./subdir1
# 8.0K   ./subdir2
# 12K    .

# Только итоговый размер директории
du -sh /home
# 512G   /home

# Размер каждого подкаталога (не рекурсивно)
du -sh /home/*
# 100G   /home/user1
# 150G   /home/user2
# 250G   /home/user3

# Найти 10 самых больших директорий
du -sh /* | sort -hr | head -10
# 512G   /home
# 256G   /var
# 100G   /usr
# 50G    /root

# Рекурсивный анализ всех подполапок
du -h --max-depth=2 /home
# 100G   /home/user1
# 50G    /home/user1/documents
# 40G    /home/user1/videos

# Исключить определённые директории
du -h --exclude="node_modules" --exclude=".git" /myapp

3. Быстрые одноленеры для анализа

# Процент использования диска (проверить, не переполнен ли)
df -h | grep -E '(^Filesystem|/$)'

# Показать только диски с более чем 80% заполнением
df -h | awk '$5 > "80%" {print}'

# Найти все файлы больше 1GB
find / -size +1G -type f 2>/dev/null

# Найти все файлы больше 100MB в /home
find /home -size +100M -type f 2>/dev/null | sort -k1 -hr

# Размер логов
du -sh /var/log/*

# Проверить занятое место в /tmp
du -sh /tmp

# Размер БД
du -sh /var/lib/mysql

4. ncdu — интерактивный анализатор

Удобный инструмент для визуального анализа:

# Установка
sudo apt-get install ncdu  # Debian/Ubuntu
sudo yum install ncdu      # RHEL/CentOS

# Анализ директории
ncdu /home

# Результат: интерактивное меню, где можно:
# - стрелками вверх/вниз навигироваться
# - Enter для входа в папку
# - d удалить файл (безопасно, спросит)
# - ? справка

5. lsof — поиск открытых файлов, занимающих место

Помогает найти файлы, которые удалены, но ещё открыты процессом:

# Показать все открытые файлы
lsof | grep deleted
# Это часто причина, когда место не освобождается после удаления

# Пример: логи, которые не удаляются полностью
sudo lsof | grep /var/log | grep deleted
# Решение: перезагрузить процесс, держащий файл открытым

6. Мониторинг в реальном времени

# Watch команда для отслеживания изменений
watch -n 5 'df -h'
# Обновляет df каждые 5 секунд

# Аналитика дискового I/O
iostat -h 1 5
# Показывает 5 записей с интервалом в 1 сек

7. Python: программный доступ

import os
import shutil
import psutil

# Способ 1: shutil
stat = shutil.disk_usage("/")
print(f"Total: {stat.total / (1024**3):.2f} GB")
print(f"Used: {stat.used / (1024**3):.2f} GB")
print(f"Free: {stat.free / (1024**3):.2f} GB")

# Способ 2: psutil (современный способ)
import psutil

usage = psutil.disk_usage("/")
print(f"Total: {usage.total / (1024**3):.2f} GB")
print(f"Used: {usage.used / (1024**3):.2f} GB")
print(f"Free: {usage.free / (1024**3):.2f} GB")
print(f"Percent: {usage.percent}%")

# Все смонтированные разделы
for partition in psutil.disk_partitions():
    print(f"\nDevice: {partition.device}")
    print(f"Mount point: {partition.mountpoint}")
    
    try:
        usage = psutil.disk_usage(partition.mountpoint)
        print(f"Used: {usage.percent}%")
    except PermissionError:
        print("Permission denied")

# Способ 3: os.statvfs (низкоуровневый)
stat = os.statvfs("/")
block_size = stat.f_frsize
total = stat.f_blocks * block_size
available = stat.f_bavail * block_size
used = (stat.f_blocks - stat.f_bfree) * block_size

print(f"Total: {total / (1024**3):.2f} GB")
print(f"Used: {used / (1024**3):.2f} GB")
print(f"Available: {available / (1024**3):.2f} GB")

8. Мониторинг дискового пространства

# alert_disk_space.py
import psutil
import logging

logging.basicConfig(level=logging.WARNING)

def check_disk_space(threshold=80):
    \"\"\"Проверить, не превышает ли использование порог\"\"\" 
    for partition in psutil.disk_partitions():
        if partition.fstype == '':
            continue
        
        try:
            usage = psutil.disk_usage(partition.mountpoint)
            
            if usage.percent >= threshold:
                logging.warning(
                    f"Disk {partition.device} at {usage.percent}% capacity. "
                    f"Only {usage.free / (1024**3):.2f} GB free."
                )
        except PermissionError:
            pass

if __name__ == "__main__":
    check_disk_space(threshold=80)

9. Очистка дискового пространства

# Очистить временные файлы
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# Очистить кэш пакетного менеджера
sudo apt-get clean      # Debian/Ubuntu
sudo yum clean all      # RHEL/CentOS

# Очистить старые логи (старше 7 дней)
find /var/log -type f -mtime +7 -delete

# Сжать логи
sudo gzip /var/log/*.log

# Очистить журнал systemd (старше 1 месяца)
sudo journalctl --vacuum=time=1month

# Очистить Docker образы и контейнеры
sudo docker system prune -a  # Осторожно!

# Очистить npm кэш
npm cache clean --force

# Очистить pip кэш
pip cache purge

10. Примеры для DevOps

# Алёрт для мониторинга (Nagios/Zabbix)
#!/bin/bash
USED=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USED" -gt 90 ]; then
    echo "CRITICAL: Disk usage at ${USED}%"
    exit 2
elif [ "$USED" -gt 80 ]; then
    echo "WARNING: Disk usage at ${USED}%"
    exit 1
else
    echo "OK: Disk usage at ${USED}%"
    exit 0
fi

# Скрипт для ежедневной проверки
0 8 * * * /usr/local/bin/check_disk.sh | mail -s "Daily Disk Report" admin@example.com

Практический пример: поиск места для очистки

#!/bin/bash
# find_large_files.sh

echo "=== Disk Usage Summary ==="
df -h /

echo "\n=== Top 10 Largest Directories ==="
du -sh /* 2>/dev/null | sort -hr | head -10

echo "\n=== Top 20 Largest Files ==="
find / -type f -size +100M 2>/dev/null | xargs du -h | sort -hr | head -20

echo "\n=== Old Log Files (>30 days) ==="
find /var/log -type f -mtime +30 2>/dev/null | head -20

Сравнение команд

КомандаЦельПример
dfОбщее использованиеdf -h
duРазмер директорийdu -sh /home
ncduВизуальный анализncdu /home
lsofОткрытые файлыlsof | grep deleted
findПоиск больших файловfind / -size +1G

Итог

Для быстрой проверки:

df -h          # Общий обзор
du -sh /home   # Размер конкретной папки

Для детального анализа:

du -sh /* | sort -hr    # Топ папок
find / -size +1G        # Большие файлы
ncdu /                  # Интерактивный анализ

В Python:

import psutil
usage = psutil.disk_usage("/")
print(f"{usage.percent}% used")  # Процент