
Cách dọn dẹp hệ điều hành Ubuntu để giải phóng ổ cứng
Sơ đồ trang
Gần đây tôi gặp 1 case VPS bị đầy ổ cứng, VPS này đang chạy trên hệ điều hành Ubuntu 22.04 và check thư mục chứa website thì khá nhẹ nhưng tại sao lại đầy được?
Sau khi thao tác để xoá bớt rác và các file không cần thiết tôi đã giải phóng rất nhiều dung lượng ổ cứng, tôi viết bài này hy vọng sẽ giúp ích được cho nhiều người mới làm quen với VPS và gặp chung tình trạng.
Trước tiên check ổ cứng xem tình trạng còn trống ổ cứng như thế nào với lệnh df -h
root@vutruso668:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 664K 794M 1% /run /dev/vda1 59G 48G 7.2G 87% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 795M 0 795M 0% /run/user/0
Bạn có thể thấy ổ cứng chỉ còn 7.2G khả dụng.
Bắt đầu các lệnh dưới đây để dọn dẹp ổ cứng nào…
1. Dọn dẹp Cache của Apt
# Xóa các gói đã tải về nhưng không cần thiết sudo apt clean # Xóa các phiên bản cũ của các gói sudo apt autoremove # Xóa các gói đã cài đặt một phần sudo apt autoclean
2. Dọn dẹp Logs
# Xóa các file log cũ của Nginx sudo find /var/log/nginx -type f -name "*.log.*.gz" -delete # Xem dung lượng thư mục logs du -sh /var/log/ # Xóa cache của Nginx (nếu có sử dụng) sudo rm -rf /var/cache/nginx/*
Dọn dẹp thư mục /tmp
# Xóa các file tạm không cần thiết sudo find /tmp -type f -atime +7 -delete # Xóa các file tạm trong thư mục cache sudo rm -rf /var/tmp/*
Tìm các thư mục chứa file lớn
Tìm file lớn (>500MB)
sudo du -ah / | sort -rh | head -n 20
Kết quả sẽ list ra đống file lớn hơn 500mb
root@vutruso668:~# sudo du -ah / | sort -rh | head -n 20
48G /
37G /var
17G /var/www
14G /var/lib
13G /var/lib/mysql
8.1G /swapfile
5.3G /var/log
4.4G /var/www/yyyy/data/www/yyyy.com/wp-content
4.4G /var/www/yyyy/data/www/yyyy.com
4.4G /var/www/yyyy/data/www
4.4G /var/www/yyyy/data
4.4G /var/www/yyyy_usr
4.1G /var/www/yyyy/data/www/yyyy.com
4.1G /var/www/yyyy/data/www
4.1G /var/www/yyyy/data
4.1G /var/log/journal/74a9a1ba06e13820cbe5ac583b37c5c2
4.1G /var/log/journal
4.0G /var/www/yyyy/data/www/yyyy.com/wp-content
3.8G /var/www/yyyy/data/www/yyyy.com/wp-content/uploads
Bạn để ý sẽ thấy các thư mục cần quan tâm là:
- /var/log/journal
- /var/lib/mysql
Thư mục /var/log/journal/
đang chiếm 4.1GB, chủ yếu là log của systemd-journald. Bạn có thể dọn dẹp để giải phóng dung lượng.
Chỉ giữ log trong vòng 7 ngày
sudo journalctl --vacuum-time=7d
Xóa toàn bộ log cũ nếu không cần
sudo rm -rf /var/log/journal/*
Sau đó, khởi động lại systemd-journald
sudo systemctl restart systemd-journald
Làm cách này có thể giúp bạn giải phóng 4.1GB ngay lập tức. Bạn áp dụng xem hiệu quả không nhé! 🚀
Tiếp theo,
37GB trong /var, trong đó:
- 17GB thuộc về /var/www/ (dữ liệu website)
- 13GB thuộc về /var/lib/mysql/ (cơ sở dữ liệu MariaDB)
- 5.3GB thuộc về /var/log/ (log hệ thống)
- 8.1GB dành cho swapfile
Dọn dẹp log hệ thống (/var/log – 5.3GB)
sudo journalctl --vacuum-size=200M sudo journalctl --vacuum-time=7d sudo rm -rf /var/log/*.gz /var/log/*.1 /var/log/*.old
Xóa cache APT và Snap (nếu dùng)
APT là gì?
- APT là hệ thống quản lý gói truyền thống trong các bản phân phối Linux dựa trên Debian (bao gồm Ubuntu).
- Nó sử dụng DEB (Debian package format) để cài đặt, cập nhật và quản lý phần mềm.
- APT tương tác với kho lưu trữ phần mềm chính thức của Ubuntu thông qua các tập tin cấu hình nằm trong /etc/apt/sources.list.
Snap là gì?
- Snap là hệ thống quản lý gói hiện đại do Canonical (công ty phát triển Ubuntu) phát triển.
- Snap sử dụng định dạng “sandboxed” (tách biệt) để chạy các ứng dụng mà không phụ thuộc vào thư viện hệ thống.
- Các gói Snap có định dạng .snap và được quản lý thông qua snapd.
Xoá APT
sudo apt autoremove --purge -y sudo apt autoclean sudo apt clean sudo rm -rf /var/lib/apt/lists/*
Xóa cache Snap
sudo rm -rf /var/lib/snapd/cache/*
Giảm kích thước Swapfile
Tôi đang dùng 8GB swap có vẻ thừa quá nhiều nên tôi sẽ cho nó xuống 4GB
sudo swapoff -a sudo rm -f /swapfile sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
Kiểm tra và xóa file lớn trong /var/lib/mysql/ (13GB)
MariaDB có thể chứa log, file backup, hoặc bảng InnoDB quá lớn. Kiểm tra file nào chiếm nhiều dung lượng:
sudo du -sh /var/lib/mysql/*
Kết quả cho thấy hiện tại, thư mục /var/lib/mysql/ chiếm 13GB, trong đó hơn 9GB là do binlog (binlog.000049 → binlog.000060).
root@vutruso668:~# sudo du -sh /var/lib/mysql/*
4.0K /var/lib/mysql/auto.cnf
1.1G /var/lib/mysql/binlog.000049
1.1G /var/lib/mysql/binlog.000050
1.1G /var/lib/mysql/binlog.000051
1.1G /var/lib/mysql/binlog.000052
1.1G /var/lib/mysql/binlog.000053
1.1G /var/lib/mysql/binlog.000054
1.1G /var/lib/mysql/binlog.000055
1.1G /var/lib/mysql/binlog.000056
1.1G /var/lib/mysql/binlog.000057
582M /var/lib/mysql/binlog.000058
2.2M /var/lib/mysql/binlog.000059
403M /var/lib/mysql/binlog.000060
4.0K /var/lib/mysql/binlog.index
4.0K /var/lib/mysql/ca-key.pem
4.0K /var/lib/mysql/ca.pem
4.0K /var/lib/mysql/client-cert.pem
4.0K /var/lib/mysql/client-key.pem
192K /var/lib/mysql/#ib_16384_0.dblwr
8.2M /var/lib/mysql/#ib_16384_1.dblwr
20K /var/lib/mysql/ib_buffer_pool
76M /var/lib/mysql/ibdata1
12M /var/lib/mysql/ibtmp1
101M /var/lib/mysql/#innodb_redo
804K /var/lib/mysql/#innodb_temp
36K /var/lib/mysql/mysql
41M /var/lib/mysql/mysql.ibd
4.0K /var/lib/mysql/mysql_upgrade_info
1.7M /var/lib/mysql/performance_schema
4.0K /var/lib/mysql/private_key.pem
4.0K /var/lib/mysql/public_key.pem
4.0K /var/lib/mysql/server-cert.pem
4.0K /var/lib/mysql/server-key.pem
116K /var/lib/mysql/sys
12M /var/lib/mysql/u0181024
32M /var/lib/mysql/undo_001
32M /var/lib/mysql/undo_002
MariaDB tạo Binary Log để phục vụ replication và khôi phục dữ liệu, nhưng nếu không cần thiết, bạn có thể xóa log cũ để tiết kiệm dung lượng.
Chạy lệnh sau để kiểm tra binary log đang sử dụng
sudo mysql -e "SHOW MASTER STATUS;"
Đầu ra
root@vutruso668:~# sudo mysql -e “SHOW MASTER STATUS;”
+—————+———–+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———–+————–+——————+——————-+
| binlog.000060 | 422358680 | | | |
+—————+———–+————–+——————+——————-+
Kết quả cho thấy hiện tại MariaDB đang sử dụng binlog.000060, nghĩa là ta có thể xóa tất cả các binlog trước đó để giải phóng dung lượng.
Xóa Binary Logs Trước binlog.000060
Chạy lệnh sau để xóa các file từ binlog.000049 đến binlog.000059
sudo mysql -e "PURGE BINARY LOGS TO 'binlog.000060';"
👉 Sau bước này, bạn có thể giảm ngay 7-9GB dung lượng trong /var/lib/mysql/! 🚀
Có vẻ ổn rồi đấy, giờ bạn hãy check lại xem dung lượng được giải phóng như thế nào rồi nhé
# Kiểm tra dung lượng đã giải phóng được df -h
Kết quả đầu ra
root@vutruso668:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 795M 668K 794M 1% /run
/dev/vda1 59G 30G 26G 54% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 795M 0 795M 0% /run/user/0
Thơm bơ chưa nào, giờ ổ cứng trống đến 26GB rồi.
Vậy tạm ổn rồi, hy vọng bài viết sẽ giúp ích được cho nhiều người.