Персональна освітня сорінка
by Pavlo Shcherbukha
Останнійм часом дуже часто використовую віртуалки hyper-V для тимчасових робіт. Це дозволяє мені ізолювати якусь розробку і встановити там якісь тестові елементи, а потім це видалити, практично безслідно. Також, дуже часто корпоративні обмеження вплаивають на використання чи вивчення потрібних інструментів.
Тому, я часто використовую лінуксові віртуалки UBUNU під hyper-v. Там мінімум адміністрування і максимум ефективності для розробника. Але є нюанс, коли встановлюєш віртуалку з “коробки” hyper-v виникає проблема з розміром жорсткого диску. Ці проблеми уже не перший раз, тому вирішив записати послідовність дій, щоб потім знову не шукати.
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
Це робиться у два етапи: спочатку “надуваємо” віртуальний диск в Windows, потім розтягуємо файлову систему всередині Ubuntu.
3.1. Крок А: В Hyper-V (Windows)
Вимкнути віртуальну машину.
Зайти в Параметри (Settings) VM -> Hard Drive.
Натиснути Edit -> Expand.
Вказати новий розмір (наприклад, додати ще 20-40 ГБ).
3.2. Крок Б: В Ubuntu
Після запуску Ubuntu побачить нове місце, але не зможе його використовувати, поки ми не розширимо розділ.
sudo apt update && sudo apt install cloud-guest-utils
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1
При встановленні великих пакетів (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
За замовчуванням Docker зберігає лог-файли контейнерів необмежено довго, що призводить до накопичення сміття у /var/lib/docker.
Це найкращий варіант. Потрібно створити або змінити файл конфігурації демона Docker.
Відкрити файл конфігурації:
sudo nano /etc/docker/daemon.json
Додати (або відредагувати) наступні параметри:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
де:
max-size: максимальний розмір одного файлу логів (тут — 10 МБ).
max-file: скільки файлів зберігати, перш ніж старі почнуть видалятися (тут — 3 файли).
Перезапустити Docker:
sudo systemctl restart docker
Якщо ви запускаєте проєкт через docker-compose.yml, можна додати обмеження прямо в опис сервісу:
services:
app:
image: my-app:latest
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
tags: