← Blog

Mac báo 'Storage Almost Full' dù bạn chỉ dùng 200/512 GB — 'purgeable' là cái gì?

APFS snapshot, Time Machine local, iCloud cache — 'purgeable space' trên macOS là gì, tại sao không tự dọn, và cách force nó giải phóng.

Chuyện thật: bạn mở About This Mac → Storage, thấy thanh màu hiển thị “Available: 180 GB”. Bạn bắt đầu copy một file backup 50 GB vào máy. 3 phút sau macOS đập vào mặt: “The disk you are copying to is full.”

Ủa? 180 GB trống mà? 50 GB làm sao đầy?

Chào mừng đến với purgeable space — tính năng mà Apple nghĩ là thông minh, nhưng thực tế làm nhiều người phát điên.

Purgeable là gì?

Trên macOS dùng APFS (tức là mọi Mac từ High Sierra trở lên), có một loại “không gian” đặc biệt gọi là purgeable. Nó là data đang thật sự chiếm disk nhưng macOS coi là “có thể xoá khi cần”.

Ví dụ: iCloud Drive “Optimize Mac Storage” download file xuống local để bạn dùng offline. File đó chiếm disk thật — nhưng vì có bản cloud, macOS đánh dấu “purgeable”: khi disk đầy, nó sẽ xoá local copy.

Finder khi hiển thị “Available” thì cộng cả purgeable vào — nên bạn thấy 180 GB “trống”, dù thực tế chỉ có 20 GB trống hoàn toàn và 160 GB là purgeable.

Vấn đề: khi copy file lớn, macOS phải purge đủ để có chỗ — và cơ chế purge không phải lúc nào cũng kịp hoặc đủ thông minh.

Xem thực tế có bao nhiêu purgeable

Terminal cho con số thật (không như Finder):

diskutil info / | grep -E "Container Free|Volume Free|Purgeable"

Output mẫu:

Container Free Space:      18.3 GB
Volume Free Space:         180.5 GB (includes Purgeable: 162.2 GB)

Đây mới là sự thật: bạn chỉ thực sự có 18 GB trống, 162 GB kia là purgeable.

4 nguồn purgeable chính

1. Time Machine local snapshots

Thủ phạm lớn nhất trên máy dev. macOS tự tạo snapshot ngay cả khi bạn không kết Time Machine ổ ngoài.

tmutil listlocalsnapshots /

Nếu ra 20+ dòng, snapshot có thể chiếm 50+ GB. Xoá:

# Xoá snapshot cũ nhất
sudo tmutil deletelocalsnapshots 2024-01-15-130000

# Xoá tất cả
for s in $(tmutil listlocalsnapshots / | awk -F. '{print $NF}'); do
  sudo tmutil deletelocalsnapshots "$s"
done

Cảnh báo: snapshot là phao cứu sinh cho trường hợp rm -rf nhầm. Chỉ xoá nếu bạn có backup khác.

2. iCloud Drive / Photos cache

Nếu bạn bật “Optimize Mac Storage” trong iCloud settings, macOS cache file iCloud xuống local. Khi bạn mở 1 file, nó được kéo từ cloud về. Khi bạn không dùng nữa, đáng lẽ nó tự xoá bản local — nhưng thường không xoá ngay.

Tắt optimize tạm thời để force flush:

System Settings → Apple ID → iCloud → Drive → tắt “Optimize Mac Storage” — chờ 10 phút, rồi bật lại.

3. System caches

Font caches, Spotlight index, QuickLook thumbnails:

# Rebuild Spotlight index (giải phóng 2-5 GB tạm)
sudo mdutil -E /

# Xoá QuickLook
qlmanage -r cache

4. App-specific caches được đánh dấu purgeable

Photos, Mail, Music, TV.app đều có cache “redownloadable”. Không có lệnh chung để force — mỗi app có cách riêng (Photos: Rebuild Library; Music: File → Library → Update Cloud Library).

Cách “force” purge

Mẹo hay dùng: tạo 1 file giả siêu to để macOS bắt buộc purge. Lệnh này tạo file 100 GB rỗng, rồi xoá ngay — nhưng trong quá trình tạo, macOS sẽ purge để dọn chỗ:

mkfile 100g ~/big_dummy_file
rm ~/big_dummy_file

Sau lệnh này kiểm tra lại diskutil info / — bạn sẽ thấy Container Free Space tăng đáng kể.

Khi nào nên lo

  • Disk tổng đang < 10% trống (Container Free Space, không phải Volume Free Space): cần dọn thật. Purge không đủ. Đọc bài về 7 nơi GB bị ngốn để biết xử lý đâu trước.
  • Copy file lớn báo lỗi dù Finder nói còn chỗ: force purge như trên.
  • Time Machine local snapshot > 50 GB: xoá bớt nếu có backup ngoài.

Nếu Container Free Space còn > 20%, bạn không cần làm gì. macOS sẽ tự purge khi thực sự cần.

Tóm lại

Finder nói dối (một cách có thiện chí). diskutil info / mới nói thật. Khi gặp “Storage Almost Full” dù thấy còn GB trống, luôn check container free trước khi đi xoá file.


Tôi làm Molecule vì quá mệt mỏi với việc phải nhớ mấy lệnh diskutil, tmutil, mkfile. App hiển thị real Container Free, liệt kê local snapshot, và purge bằng 1 click — vẫn preview-first trước khi làm gì phá.