Павло Щербуха

Logo

Персональна освітня сорінка

Розробка на Node.js, VUE.js, Python, IBM Integration Bus (App Connect Ent) , ORACLE PL/SQL
20 February 2026

Hyper-v ubuntu. Expend disk size

by Pavlo Shcherbukha

1. Про що цей блог

Останнійм часом дуже часто використовую віртуалки hyper-V для тимчасових робіт. Це дозволяє мені ізолювати якусь розробку і встановити там якісь тестові елементи, а потім це видалити, практично безслідно. Також, дуже часто корпоративні обмеження вплаивають на використання чи вивчення потрібних інструментів.

Тому, я часто використовую лінуксові віртуалки UBUNU під hyper-v. Там мінімум адміністрування і максимум ефективності для розробника. Але є нюанс, коли встановлюєш віртуалку з “коробки” hyper-v виникає проблема з розміром жорсткого диску. Ці проблеми уже не перший раз, тому вирішив записати послідовність дій, щоб потім знову не шукати.

2. Перевірки та очищення існуючої файлової системи

2.1. Швидка перевірка: чи дійсно закінчилося місце?

Іноді проблема не у фізичному місці, а в inodes (кількості файлів). Виконуємо команду:


df -h   # Перевірити вільні Гб
df -i   # Перевірити вільні іноди

Якщо /home заповнені на 100%, переходимо до розширення.

2.2. Очищення “сміття”

Перш ніж щось розширювати, видалимо сміття, яке точно там є:


    sudo apt-get clean

    set -e
    snap list --all | awk '/disabled/{print $1, $3}' |
        while read snapname revision; do
            sudo snap remove "$snapname" --revision="$revision"
        done

    sudo journalctl --vacuum-time=3d

    pip cache purge

Якщо є контейнери, які завершилися з помилкою (Exited 1). Вони займають місце, але не працюють

docker system prune

Це видалить усі зупинені контейнери, неробочі мережі та “висячі” (dangling) образи.

Особливо контейнери з базами даних дуже полюбляють писати багато логів. Якщо контейнер колись працював довго, його лог-файл міг розростися до кількох гігабайт. Перевірите розмір логів:

sudo du -sh /var/lib/docker/containers/*/*-json.log

Якщо бачимо там великі файли, очистити їх можна командою:

sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log

Якщо після очищення місця все одно мало, перевірити, куди поділися наші ГБ, яких не бачить графічний інтерфейс:


sudo du -sh /* 2>/dev/null | sort -h

3. Розширення диска

Це робиться у два етапи: спочатку “надуваємо” віртуальний диск в Windows, потім розтягуємо файлову систему всередині Ubuntu.

3.1. Крок А: В Hyper-V (Windows)

3.2. Крок Б: В Ubuntu

Після запуску Ubuntu побачить нове місце, але не зможе його використовувати, поки ми не розширимо розділ.


sudo apt update && sudo apt install cloud-guest-utils


    sudo growpart /dev/sda 1
    sudo resize2fs /dev/sda1

4. Як встановлювати великі пакети Python, щоб вони не з’їдали місце

При встановленні великих пакетів (TensorFlow, PyTorch) використовуйте –no-cache-dir, щоб pip не зберігав копію інсталятора, яка займає зайве місце:


pip install --no-cache-dir torch torchvision

Окрім –no-cache-dir, великі пакети часто потребують багато місця в /tmp під час розпакування. Якщо /tmp малий, інсталяція впаде навіть при вільному /home.

Рішення: Можна вказати тимчасову папку прямо в домашній директорії:


TMPDIR=~/pshdev/temp pip install --no-cache-dir ultralytics

5. Як обмежити логи Docker (Log Rotation)

За замовчуванням Docker зберігає лог-файли контейнерів необмежено довго, що призводить до накопичення сміття у /var/lib/docker.

5.1. Спосіб 1: Глобальне налаштування для всіх нових контейнерів

Це найкращий варіант. Потрібно створити або змінити файл конфігурації демона Docker.

Відкрити файл конфігурації:


    sudo nano /etc/docker/daemon.json

Додати (або відредагувати) наступні параметри:


    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }

де:

Перезапустити Docker:


    sudo systemctl restart docker

5.2. Спосіб 2: Налаштування для конкретного контейнера (через Docker Compose)

Якщо ви запускаєте проєкт через docker-compose.yml, можна додати обмеження прямо в опис сервісу:


services:
  app:
    image: my-app:latest
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

tags: