Thông báo lỗi No space left on device trên Ubuntu nghĩa là phân vùng đang dùng đã hết tài nguyên khiến hệ thống không ghi thêm dữ liệu. Nguyên nhân thường gặp nhất là do đầy dung lượng ổ đĩa hoặc hết inodes do có quá nhiều file nhỏ. Trong bài viết dưới đây, mình sẽ hướng dẫn bạn các khắc phục lỗi này hiệu quả, chi tiết.
Những điểm chính
- Định nghĩa lỗi “no space left on device”: Hiểu rõ lỗi này xảy ra khi phân vùng root cạn kiệt tài nguyên lưu trữ, có thể do hết dung lượng vật lý hoặc hết inodes.
- Nguyên nhân gây lỗi: Nắm được các nguyên nhân chính khiến phân vùng root bị đầy, làm cơ sở để xác định hướng khắc phục.
- Cách khắc phục lỗi hiệu quả: Nắm vững quy trình từng bước để chẩn đoán và giải phóng dung lượng, từ việc kiểm tra bằng
df -hđến dọn dẹp cache, log và các phiên bản kernel cũ. - Cách ngăn ngừa lỗi: Biết được các biện pháp phòng ngừa hiệu quả để tránh gặp lại lỗi này, bao gồm quy hoạch phân vùng, kiểm soát log và tự động hóa việc dọn dẹp.
- Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề thực tế như cách phân biệt giữa hết dung lượng và hết inode, cách dọn dẹp Docker và khi nào nên chỉnh lại phân vùng.
Lỗi Ubuntu No space left on device root là gì?
“No space left on device” (Mã lỗi hệ thống: ENOSPC) là thông báo lỗi tới hạn từ Kernel Linux cho biết phân vùng gốc đã hết tài nguyên lưu trữ và không thể thực hiện tác vụ ghi dữ liệu mới. Trong kỹ thuật hệ thống, lỗi này được định nghĩa qua hai trường hợp cụ thể:
- Cạn kiệt khối dữ liệu: Tổng dung lượng vật lý được cấp phát cho phân vùng root đã bị chiếm dụng 100%.
- Cạn kiệt Inode: Mặc dù dung lượng ổ cứng có thể vẫn còn trống, nhưng bảng quản lý file đã đầy.

Nguyên nhân gây lỗi No space left on device trong Linux
Một số nguyên nhân phổ biến gồm:
- Dung lượng ổ đĩa root quá nhỏ so với nhu cầu sử dụng ban đầu.
- Log hệ thống tăng quá nhanh (đặc biệt trong /var/log) do dịch vụ hoặc ứng dụng ghi lỗi liên tục.
- Cài đặt nhiều gói phần mềm, cập nhật hoặc kernel cũ nhưng chưa được dọn dẹp.
- Thư mục cache và file tạm (như /var/cache/apt, /tmp) chiếm nhiều dung lượng.
- Ứng dụng hoặc container (Docker, Snap, VM) lưu dữ liệu trực tiếp trên phân vùng root.
- File lớn hoặc dữ liệu sao lưu vô tình được lưu trong / thay vì phân vùng khác.
Khi phân vùng root bị đầy, nhiều dịch vụ có thể hoạt động không ổn định hoặc ngừng hẳn, vì vậy cần kiểm tra và giải phóng dung lượng kịp thời.
Cách khắc phục lỗi Ubuntu No space left on device root hiệu quả
Bước 1: Kiểm tra hiện trạng phân vùng
Đầu tiên, bạn cần xác định dung lượng khả dụng trên hệ thống file bằng lệnh df kết hợp với tham số -h để hiển thị thông tin dễ đọc:
df -hLệnh trên sẽ hiển thị dung lượng của các phân vùng, bao gồm phân vùng root (/). Nếu cột Use% hiển thị tỷ lệ cao (ví dụ: 90% – 100%) và cột Avail (dung lượng trống) ở mức thấp, đây là nguyên nhân trực tiếp gây ra lỗi.

Ở đây, phân vùng root (/dev/sda1) chỉ còn 3GB dung lượng trống và đang sử dụng tới 93% dung lượng. Lúc này, hệ thống sẽ không thể cài đặt thêm phần mềm hoặc ghi các file mới vào phân vùng này.
Bước 2: Giải phóng dung lượng Root
Để khôi phục hoạt động của hệ thống, bạn cần dọn dẹp và thu hồi không gian lưu trữ theo các bước sau:
1. Dọn dẹp cache trình quản lý gói và Log hệ thống
Các file tạm thời từ trình quản lý gói và nhật ký hệ thống thường chiếm dụng nhiều tài nguyên.
- Xóa cache của APT: Bạn tiến hành xóa các gói tin đã tải về và gỡ bỏ các gói phụ thuộc không còn cần thiết bằng cách chạy lệnh sau:
sudo apt clean
sudo apt autoremove
- Tối ưu hóa Journal Logs: Cách này sẽ giúp bạn giới hạn dung lượng lưu trữ của journal logs. Ví dụ, để giữ lại tối đa 100MB, bạn thực hiện lệnh sau đây:
sudo journalctl --vacuum-size=100M
2. Kiểm tra và xử lý thư mục /var
Thư mục /var là nơi chứa dữ liệu biến đổi thường xuyên như log, cache ứng dụng,… Để xác định các thư mục con đang chiếm dụng nhiều dung lượng nhất, bạn sử dụng lệnh sau:
sudo du -sh /var/*Bạn hãy kiểm tra các thư mục lớn có thể chưa nhiều file không cần thiết như /var/log và /var/cache rồi thực hiện xóa hoặc xoay vòng các file cũ không còn giá trị sử dụng.

3. Xóa các file không cần thiết trong /home
Trong trường hợp thư mục /home không được phân tách thành phân vùng riêng, dữ liệu người dùng sẽ chiếm dụng không gian của root. Bạn tiến hành kiểm tra dung lượng chi tiết bằng lệnh sau:
sudo du -sh /home/*Sau đó, bạn xác định các user chiếm nhiều dung lượng để xóa bỏ hoặc di chuyển dữ liệu sang phân vùng lưu trữ khác.

4. Loại bỏ các phiên bản Kernel cũ
Hệ điều hành Linux thường giữ lại các phiên bản kernel cũ sau khi cập nhật gây tiêu tốn đáng kể dung lượng phân vùng /boot hoặc root. Để xóa các kernel cũ, bạn thực hiện các bước sau:
Bước 1: Bạn chạy lệnh sau để liệt kê các kernel đã cài đặt:
dpkg --list | grep linux-image
Bước 2: Tiếp theo, bạn thực hiện lệnh dưới đây để chỉ giữ lại phiên bản kernel đang hoạt động và gỡ bỏ các phiên bản cũ cụ thể:
sudo apt-get remove --purge linux-image-<version>Thay thế <version> bằng phiên bản kernel cụ thể bạn cần xóa.
5. Sử dụng Live USB
Nếu phân vùng root đã đầy và bạn không thể thực hiện các lệnh dọn dẹp trực tiếp, bạn có thể sử dụng một Live USB của Ubuntu hoặc các bản phân phối Linux. Việc này giúp bạn truy cập vào hệ thống mà không cần phải khởi động trực tiếp từ ổ cứng đang bị đầy.
- Bước 1: Đầu tiên, bạn khởi động hệ thống từ Live USB.
- Bước 2: Tiếp theo, bạn mở Terminal và gắn kết (mount) phân vùng root của ổ cứng:
sudo mount /dev/sda1 /mnt
# Thay sda1 bằng phân vùng root của bạn- Bước 3: Sau đó, bạn truy cập vào
/mntđể xóa các file không cần thiết, giải phóng dung lượng tối thiểu để hệ thống có thể khởi động lại.
Cách ngăn ngừa lỗi Ubuntu No space left on device root
Để hạn chế và tránh gặp lỗi No space left on device, bạn có thể áp dụng các biện pháp sau:
- Phân bổ dung lượng hợp lý ngay từ đầu: Tạo phân vùng root (/) đủ lớn hoặc tách riêng các thư mục như /home, /var, /tmp sang các phân vùng khác có dung lượng lớn hơn để giảm tải cho phân vùng gốc.
- Theo dõi dung lượng ổ đĩa thường xuyên: Sử dụng các công cụ giám sát, tác vụ định kỳ (cron) hoặc cảnh báo email để phát hiện sớm khi dung lượng root gần đầy.
- Dọn dẹp hệ thống định kỳ: Xóa file tạm, cache, log cũ và các gói phần mềm không còn sử dụng để giải phóng không gian.
- Tự động hóa việc dọn dẹp: Áp dụng các công cụ như logrotate hoặc cron job để xoay vòng, xóa hoặc lưu trữ log cũ tự động.
- Tránh lưu file lớn trong thư mục /: Các file sao lưu, dữ liệu tải về hoặc media nên được lưu trên phân vùng dữ liệu riêng hoặc ổ đĩa đã mount, không để chiếm dung lượng phân vùng gốc.

Câu hỏi thường gặp
Làm sao phân biệt hết dung lượng ổ đĩa và hết inode khi lỗi ENOSPC?
Bạn có thể dùng df -h để kiểm tra dung lượng và df -i để kiểm tra inode; nếu Use% của inode ở mức 100% trong khi dung lượng vẫn còn, nghĩa là bạn bị đầy inode chứ không phải hết dung lượng vật lý. Trong trường hợp này, cần tập trung xóa bớt số lượng file nhỏ thay vì chỉ tìm các file lớn.
Khi dùng Docker trên Ubuntu hay bị “No space left on device”, nên dọn dẹp thế nào cho an toàn?
Docker thường chiếm nhiều dung lượng qua image, container dừng, volume không dùng và build cache. Bạn có thể dùng docker system df để xem chi tiết, sau đó dùng docker system prune hoặc docker system prune -a --volumes và lên kế hoạch gắn thêm phân vùng/ổ đĩa riêng cho Docker nếu workload lớn.
Có nên chỉnh lại phân vùng khi root thường xuyên đầy, hay chỉ dọn dẹp là đủ?
Nếu lỗi chỉ xảy ra thỉnh thoảng do log tăng đột biến thì bạn dọn dẹp, tối ưu logrotate, journalctl, APT cache,… là đủ. Nhưng nếu phân vùng root quá nhỏ so với mô hình sử dụng (dịch vụ log nhiều, dùng Docker/Kubernetes, CI/CD,…) thì bạn nên quy hoạch lại bằng cách: Dùng LVM hoặc tăng dung lượng/di dời dữ liệu sang phân vùng riêng như /var, /home, /var/lib/docker để tránh tái diễn.
Lỗi Ubuntu No space left on device root là sự cố phổ biến trong vận hành Linux, đặc biệt với các máy chủ có tài nguyên hạn chế. Việc nắm vững quy trình kiểm tra df, du và kỹ năng dọn dẹp hệ thống là yêu cầu thiết yếu để duy trì hiệu suất và tính sẵn sàng cho hệ thống của bạn.




