Máy tính trục trặc thì khởi động lại. Đó là cách sửa lỗi người ta dùng từ thời xưa, và tới giờ vẫn có người hỏi vì sao nó hiệu nghiệm: câu hỏi Why does restarting solve so many tech problems? trên Quora có 82 câu trả lời. Cách giải thích hay gặp là khởi động lại làm trống RAM và xoá trạng thái của phần mềm đang chạy. Một trang meme IT trên Facebook còn đùa rằng 90% sự cố IT chỉ cần một nút Restart.
Tối 26/10/2026, cách cũ đó lại có tác dụng trên chiếc MacBook của mình, lần này với ổ đĩa: ổ 228 GB còn 121 MB trống, và khởi động lại trả về khoảng 36 GB. Phần trả về cũng là trạng thái của phần mềm đang chạy, có điều nằm trên ổ đĩa. Bài này giải thích đó là những gì, vì sao Mac chậm khi ổ đĩa gần đầy, vì sao chỉ khởi động lại hoặc thoát app mới dọn được, và cách bạn tự kiểm tra trên Mac của mình. Các con số trong bài đo trên macOS 26.6, do Claude (AI, chạy trong Claude Code) đo trong lúc xử lý ổ đĩa đầy.
Ổ đĩa còn 121 MB
Khoảng 22:00 tối hôm đó, máy đang chạy nhiều phiên Claude Code cùng các công cụ lập trình. Một lệnh Claude chạy không khởi động được vì ổ đĩa đã đầy, và kiểm tra thì chỉ còn 121 MB trống. Claude bắt đầu đo xem thư mục nào lớn, nhưng chưa đo xong thì máy được khởi động lại, lúc 22:12.
df, lệnh xem dung lượng ổ đĩa, trước và sau khi khởi động lại cho thấy dung lượng đi đâu:
| Trước khi khởi động lại (22:02) | Sau khi khởi động lại (22:26) | |
|---|---|---|
| Swap | khoảng 14 GB | 0 |
| Đã dùng trên ổ dữ liệu | 192 GB | 170 GB |
| Còn trống | 121 MB | 37 GB |
Hai dòng đầu giảm tổng cộng khoảng 36 GB, gần bằng phần trống có thêm. Trong 25 phút sau đó, df còn báo 49 GB rồi 59 GB trống; bước từ 49 lên 59 GB là lúc một phiên Claude khác xoá một bộ cache Docker 10,6 GB, không liên quan tới khởi động lại.
Ba thứ khởi động lại dọn đi
Cả ba đều là dữ liệu của các app đang chạy, và macOS giữ chúng trên ổ đĩa chừng nào app còn cần.
Swap: bộ nhớ được ghi từ RAM ra ổ đĩa
RAM là bộ nhớ làm việc của máy: app đang mở giữ dữ liệu của nó trong RAM. Khi các app cần nhiều bộ nhớ hơn số RAM máy có, macOS ghi phần bộ nhớ đang không dùng ra ổ đĩa để lấy chỗ cho phần đang cần, theo tài liệu của Apple về bộ nhớ ảo. Phần nằm trên ổ đĩa đó gọi là swap. Cũng theo tài liệu này, macOS không dành sẵn một phân vùng cố định cho swap mà dùng chỗ trống trên ổ khởi động, nên swap lớn thêm bao nhiêu thì dung lượng trống giảm bấy nhiêu.
Trên máy này, swap nằm trong một volume (ổ logic) riêng tên VM, gắn tại /System/Volumes/VM, cùng một container APFS với volume chứa dữ liệu của bạn. Hướng dẫn Disk Utility của Apple ghi rằng các volume trong cùng một container dùng chung chỗ trống của container đó, nên swap và file của bạn lấy từ cùng một chỗ.
Bạn xem được swap trong Activity Monitor, tab Memory, dòng Swap Used. Theo hướng dẫn Activity Monitor, đó là dung lượng trên ổ khởi động đang được dùng để chuyển dữ liệu qua lại với RAM.
Khởi động lại làm trống RAM, nên swap không còn gì để giữ: sau lần khởi động lại lúc 22:12, swap trên máy này về 0. Swap cũng quay lại khi các app lấp đầy RAM: 80 phút sau, các file swap đã chiếm lại 7 GB trên ổ đĩa, trong đó gần 6 GB đang chứa dữ liệu (con số Activity Monitor hiện ở dòng Swap Used).
Thư mục tạm
App ghi file tạm, những file cần trong lúc làm việc rồi bỏ, vào /tmp hoặc vào thư mục tạm riêng của mỗi người dùng, nằm trong /var/folders. Trên macOS, /tmp chỉ là đường dẫn tắt (symlink) tới /private/tmp, một thư mục bình thường trên ổ đĩa. Nó không nằm trong RAM như /tmp trên một số bản Linux: từ Debian 13 chẳng hạn, /tmp mặc định được giữ trong bộ nhớ bằng tmpfs. Claude kiểm tra trên máy này: df /private/tmp cho thấy thư mục này nằm trên volume dữ liệu, cùng chỗ với file của bạn, và không có ổ tmpfs hay RAM disk nào được gắn. Vì vậy file tạm chiếm dung lượng ổ đĩa như mọi file khác.
Trang hướng dẫn hier của macOS, trang mô tả các thư mục của hệ thống (gõ man hier trong Terminal, hoặc đọc bản chép trên web), ghi /tmp là nơi chứa file tạm, /var/folders là nơi chứa file tạm và cache của từng người dùng, còn /var/tmp (tức /private/var/tmp) là nơi chứa file tạm được giữ lại qua các lần khởi động lại.
macOS dọn /private/tmp và thư mục tạm của người dùng theo hai cách:
- Hằng ngày, macOS xoá các file không được dùng tới trong 3 ngày. Một kỹ sư hỗ trợ của Apple giải thích cơ chế này trên diễn đàn dành cho lập trình viên, và lưu ý rằng chi tiết có thể khác nhau giữa các bản macOS.
- Lúc khởi động,
/private/tmpđược dọn sạch. Claude không tìm thấy tài liệu nào của Apple ghi điều này; nguồn rõ nhất là một ghi chú trong mã nguồn Chromium. Claude kiểm tra sau lần khởi động lại: cả/private/tmplẫn thư mục tạm của người dùng không còn file nào cũ hơn lúc khởi động, còn/private/var/tmpvẫn giữ file cũ, khớp với mô tả của nó tronghier.
Khi máy đang chạy, các app có thể còn cần file trong những thư mục này, nên tự tay xoá chúng không an toàn. Lúc khởi động thì chưa app nào dùng chúng.
File đã xoá nhưng app vẫn mở
Xoá một file trên macOS là xoá tên của nó khỏi thư mục. Theo trang hướng dẫn của unlink, hàm hệ thống dùng để xoá file, nếu một chương trình còn mở file đó thì dữ liệu chỉ được giải phóng khi mọi chương trình đã đóng nó. Trong lúc chờ, file không còn tên ở thư mục nào, nên Finder và mọi công cụ dọn dẹp duyệt thư mục đều không thấy, dù nó vẫn chiếm chỗ. Thoát app đang giữ file, hoặc khởi động lại, là dung lượng đó trở lại. Trên máy này sau khi khởi động lại, các file như vậy chỉ còn khoảng 42 MB, phần lớn do tiến trình nền của macOS và Chrome giữ.
Trong Terminal, lệnh lsof liệt kê được các file này. Theo trang hướng dẫn của lsof, +L1 chọn các file đang mở đã bị xoá, còn -a để lệnh chỉ lấy file thoả mọi điều kiện (thiếu nó, lệnh liệt kê mọi file đang mở trên ổ đĩa):
lsof -a -nP +L1 /System/Volumes/Data
Vì sao Mac chậm khi ổ đĩa gần đầy
Trong hướng dẫn If your Mac runs slowly, Apple liệt kê hai nguyên nhân đi cùng nhau: ổ khởi động không còn đủ chỗ trống, và app đang dùng cần nhiều bộ nhớ hơn số bộ nhớ máy còn sẵn. Swap nối hai nguyên nhân đó:
- Khi RAM đã đầy, mỗi lần app cần tới dữ liệu đã bị chuyển ra swap, macOS phải đọc nó lại từ ổ đĩa. Theo tài liệu bộ nhớ ảo của Apple, việc này chậm hơn nhiều so với đọc từ RAM, và khi phải chuyển qua lại quá nhiều, máy tốn nhiều thời gian đọc và ghi ổ đĩa thay vì chạy chương trình. Bạn thấy app phản hồi chậm.
- Swap chỉ lớn thêm được khi ổ khởi động còn chỗ trống. Khi ổ đĩa gần đầy, macOS không còn chỗ để chuyển thêm dữ liệu ra swap, trong khi RAM đã đầy.
- App cũng ghi file tạm, cache và dữ liệu của bạn trong lúc chạy, và trên một ổ đĩa đầy, những lần ghi đó thất bại. Trên máy của mình lúc còn 121 MB, một lệnh Claude chạy không khởi động được vì không tạo được file để ghi kết quả.
Khi cả RAM lẫn ổ đĩa đều đầy, macOS mở cửa sổ Force Quit Applications với thông báo “Your system has run out of application memory” và đề nghị bạn buộc thoát bớt app. Apple không có trang hỗ trợ nào cho thông báo này. Một thành viên cấp cao (level 9) trên diễn đàn Apple Community giải thích rằng một nguyên nhân là ổ khởi động còn quá ít chỗ nên macOS không tạo được file swap, và Switching To Mac viết rằng cửa sổ Force Quit hiện thông báo này khi bộ nhớ của máy gần chạm mức tối đa. Theo Apple, thoát app theo cách bình thường cho app kịp làm những việc cần làm trước khi đóng, như lưu thay đổi. Vì vậy khi thấy thông báo này, hãy lưu công việc và thoát bình thường các app còn phản hồi trước khi dùng Force Quit, hoặc khởi động lại.
Trong Activity Monitor, đồ thị Memory Pressure ở tab Memory cho biết bộ nhớ đang chịu tải tới đâu: theo Apple, màu vàng nghĩa là máy có thể sẽ cần thêm RAM, còn màu đỏ nghĩa là máy cần thêm RAM.
System Data trong cài đặt Storage
Mở System Settings > General > Storage (hướng dẫn của Apple), bạn thấy dung lượng đã dùng được chia theo loại: Applications, Documents, Photos… và System Data. Theo một trang hướng dẫn khác của Apple, System Data gồm file nhật ký (log), cache, “VM files” (tức swap), file tạm và các dữ liệu khác hệ thống dùng khi chạy. Người dùng không quản lý được nội dung mục này, và dung lượng của nó thay đổi theo trạng thái hiện tại của máy.
Vì vậy trên một máy đầy ổ đĩa, phần lớn những gì khởi động lại dọn đi nằm trong System Data. Nhưng System Data không chỉ có swap và file tạm: lúc chụp ảnh trên, System Data trên máy này chiếm 52,25 GB, trong khi các file swap chiếm khoảng 7 GB và hai thư mục tạm chưa tới 0,3 GB. Thấy System Data rất lớn, hãy xem swap đang chiếm bao nhiêu trước khi đi tìm file để xoá.
Tự kiểm tra trên Mac của bạn
Trước khi khởi động lại một máy sắp hết ổ đĩa:
- Mở Activity Monitor, chọn tab Memory, xem dòng Swap Used và đồ thị Memory Pressure ở phía dưới cửa sổ.
- Mở System Settings > General > Storage, xem System Data lớn cỡ nào.
- Nếu quen dùng Terminal, ba lệnh sau đo ba phần trên:
df -h /System/Volumes/VM
du -sh /private/tmp "$TMPDIR"
lsof -a -nP +L1 /System/Volumes/Data
Cột Used của lệnh đầu là swap, lệnh thứ hai đo hai thư mục tạm, còn cột SIZE/OFF của lệnh thứ ba là dung lượng các file đã xoá mà app còn mở (cột COMMAND cho biết app nào).
Nếu swap lớn, lưu công việc rồi khởi động lại để lấy lại chỗ đó. Nếu phần lớn là file đã xoá còn mở, chỉ cần thoát các app đang giữ chúng.
Dọn Mac bằng cdm
Ngoài ba thứ trên, phần lớn ổ đĩa là file của các app và công cụ, phải xoá như file bình thường, và nhiều thứ trong đó là cache, xoá đi thì app tự tạo lại khi cần. Mình làm cdm (CleanDevMac) để dọn những thứ như vậy: nó tìm cache của công cụ lập trình, trình duyệt và các app, cùng dữ liệu còn sót của các app đã gỡ, cho bạn xem từng mục kèm dung lượng, rồi chỉ xoá những gì bạn đồng ý. cdm chạy bằng một lệnh trong Terminal, không cần cài:
curl -sSL https://github.com/cleandevmac/cdm/releases/latest/download/cdm | bash
Thêm -s -- -n vào cuối lệnh để xem trước mà không xoá gì. Mã nguồn ở GitHub, hướng dẫn ở cleandevmac.github.io.