macreclaim
เครื่องมือเคลียร์พื้นที่บน macOS — สำรวจว่าอะไรกินดิสก์จริง ๆ ลบเฉพาะที่เราอนุมัติ แล้วปลดล็อกพื้นที่ที่ APFS snapshot จองไว้ให้คืนมา
Bash script 4 ตัวสำหรับหาและเคลียร์พื้นที่บน macOS ไม่มี dependency ไม่ต้องติดตั้งอะไรเพิ่ม ไม่ต้องพึ่ง Homebrew — รันบน bash ที่ติดมากับ เครื่องได้เลย
Source อยู่บน GitHub ครับ MIT
ทำไมถึงมีสิ่งนี้
ผมเคลียร์ไฟล์ออกจาก Mac mini ไป 44 GB แล้ว df บอกว่าพื้นที่ว่าง
ไม่เพิ่มเลยสักเมกฯ แถมที่ว่างยังลดลงไป 1 GB ด้วยซ้ำ
ความจริงคือมันลบสำเร็จหมดแล้ว — iused ลดจาก 2.5M เหลือ 1.7M
คือไฟล์หายไปราว 800,000 ไฟล์ แต่บน APFS block ที่ยังถูก Time Machine
local snapshot reference อยู่ จะกลายเป็นสถานะ purgeable ไม่ใช่ free
แล้ว snapshot มันก็โตขึ้นเพื่อเก็บของที่เราเพิ่งลบไปนั่นแหละ
เครื่องมือเคลียร์ดิสก์ที่ผมลองดูมา ลบเสร็จก็จบ ไม่มีตัวไหนพูดถึงเรื่องนี้เลย แปลว่าเราจะนั่งงงกับตัวเลขที่ไม่ขยับ แล้วสรุปเองว่าที่ทำไปมันพัง พอลบ snapshot ทิ้ง พื้นที่ 44 GB ก็คืนมาทันที
ขั้นตอนสุดท้ายนั้น — macreclaim release — คือเหตุผลที่ tool ตัวนี้เกิดขึ้น
มันทำอะไรได้บ้าง
scan— สำรวจทั้งดิสก์แบบอ่านอย่างเดียว ไล่ตั้งแต่ home,/Applications,~/Libraryรวมถึง Group Containers ที่บทความ ส่วนใหญ่ข้ามไป และของผมกินไป 9.6 GB พร้อมชี้ไฟล์ใหญ่,node_modules, โฟลเดอร์Partitionsของ Electron และ git repo พร้อมวันที่ commit ล่าสุดdrill— เจาะดูตัวที่ scan บอกว่าใหญ่ผิดปกติ ตัวเลขชั้นบนบอกว่า อยู่ตรงไหน ส่วนตัวนี้บอกว่า เพราะอะไรclean— ลบแบบแบ่ง tier และเป็น dry run เสมอถ้าไม่ใส่--goTier A คือ cache ที่สร้างใหม่เองได้, B คือของที่ต้องโหลดใหม่, C คือnode_modulesของโปรเจกต์ที่ไม่ได้แตะนาน, D คือ app, E คือ cache ที่ลบแล้วต้อง login ใหม่release— ลบ local snapshot และบอกว่ามีไฟล์ไหนยังถูก process ที่รันอยู่จับค้างไว้ ขั้นตอนที่ทำให้dfขยับสักที
ปลอดภัยไว้ก่อนเป็นค่าเริ่มต้น
ทุก path ต้องผ่าน guard ที่ปฏิเสธ /, $HOME, /Applications,
/Library, /System, /usr, อะไรก็ตามที่มี .. หรือ glob ที่ยังไม่ถูก
expand และทุกอย่างที่อยู่นอก $HOME กับ /Applications ใช้ path
ตรง ๆ เท่านั้น ไม่มี wildcard เข้า rm ไม่มี find -delete
Tier D กับ E ว่างเปล่ามาตั้งแต่แรก มันจะไม่ทำอะไรเลยจนกว่าเรา จะเขียน config ของตัวเอง ซึ่งถูก gitignore ไว้ด้วย — script ลบไฟล์ที่แถม "รายการที่จะลบ" ของคนอื่นมาให้เนี่ยมันคือระเบิดเวลา เพราะงั้นของผม มันติดไปหาคุณไม่ได้เลย
ส่วนเมล, Messages, Photos library, iOS backup และ group container ของ พวกแอปแชต ไม่แตะเด็ดขาด พวกนั้นคือ data ไม่ใช่ cache
สิ่งที่มันจะไม่เดาแทนเรา
วันที่ "เปิดล่าสุด" ของ Spotlight เชื่อไม่ได้ครับ — ตอนที่สำรวจ มันบอกว่า Chrome ไม่เคยถูกเปิดเลย ทั้งที่ Chrome มี profile data อยู่ 966 MB ตัว scan เลยแสดงวันที่พวกนั้นเป็นแค่ ตัวช่วยกรอง และเขียนกำกับไว้ตรง ๆ ส่วนอะไรที่ลบแล้วเจ็บจริง ยังคงเป็นการตัดสินใจของเรา ไม่ใช่ของ script