Cách dọn dẹp hệ điều hành Ubuntu để giải phóng ổ cứng

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.

5/5 - (70 votes)

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan