Hyperspace: แอป Mac ที่ช่วยประหยัดพื้นที่ดิสก์โดยไม่ต้องลบไฟล์
(hypercritical.co)- โดยปกติการจัดการไฟล์ซ้ำบน Mac มักตั้งอยู่บนแนวคิดของการลบไฟล์ แต่ Hyperspace ใช้ APFS clone เพื่อให้ไฟล์ที่มีเนื้อหาเดียวกันใช้ข้อมูลร่วมกัน จึงกู้คืนพื้นที่ได้โดยยังคงเก็บไฟล์ไว้
- copy-on-write clone ของ APFS ทำงานคล้ายคำสั่ง “Duplicate” ใน Finder คือไม่เขียนข้อมูลจริงซ้ำอีกครั้ง แต่แชร์ข้อมูลกับไฟล์ต้นฉบับ ทำให้การคัดลอกไฟล์ขนาดใหญ่เสร็จแทบจะทันที
- เมื่อนักพัฒนาพบว่าดิสก์ใกล้เต็ม จึงสร้างสคริปต์ Perl เพื่อค้นหาไฟล์ที่มีเนื้อหาเดียวกันแต่ไม่ได้เป็น clone และพบว่าสามารถประหยัดพื้นที่ได้ หลายสิบ GB ก่อนจะพัฒนาต่อเป็นแอป
- แอปสามารถดาวน์โหลดมาสแกนและตรวจสอบพื้นที่ที่ประหยัดได้ฟรี แต่การกู้คืนพื้นที่จริงต้องมี การชำระเงิน
- เนื่องจากแอปไปแก้ไขไฟล์ที่ผู้ใช้ไม่ได้สร้างหรือเป็นเจ้าของเอง จึงมีความเสี่ยงสูง แต่ก็อาจช่วยผู้ใช้ Mac จำนวนมากได้อย่างเป็นรูปธรรม
กู้คืนพื้นที่โดยยังคงเก็บไฟล์ไว้ด้วย APFS clone
- Hyperspace จะตรวจหาไฟล์ที่มีเนื้อหาเดียวกันแต่ ไม่ได้อยู่ในความสัมพันธ์แบบ clone แล้วแปลงให้เป็น APFS clone เพื่อให้ใช้สำเนาข้อมูลบนดิสก์ร่วมกันเพียงชุดเดียว
- แอปจัดการไฟล์ซ้ำบน Mac แบบเดิม ๆ มักค้นหาไฟล์ซ้ำแล้ว ลบ เพื่อประหยัดพื้นที่ แต่ Hyperspace กู้คืนพื้นที่โดยไม่ต้องลบไฟล์
- ความสามารถหลักของ APFS มีทั้ง snapshot แบบตามช่วงเวลา และ copy-on-write clone
- snapshot ถูกใช้เพื่อทำให้การสำรองข้อมูลด้วย Time Machine มีความเสถียรและมีประสิทธิภาพมากขึ้น
- copy-on-write clone อาศัยโครงสร้างที่ยืดหยุ่นระหว่าง directory entry กับเนื้อหาไฟล์
- เมื่อคัดลอกไฟล์ใน Finder ด้วยคำสั่ง “Duplicate” เนื้อหาไฟล์จริงจะไม่ถูกคัดลอกซ้ำ แต่จะสร้าง clone file ที่แชร์ข้อมูลกับต้นฉบับ
- ด้วยโครงสร้างนี้ การคัดลอกใน Finder จึงเสร็จแทบจะทันที ไม่ว่าไฟล์จะมีขนาดเท่าใดก็ตาม
รูปแบบการเปิดตัวและบันทึกด้านการพัฒนา
- ช่วงปลายปี 2024 เมื่อนักพัฒนาพบว่าดิสก์บน Mac ของตนใกล้เต็ม จึงเขียนสคริปต์ Perl เพื่อค้นหาไฟล์ที่มีเนื้อหาเดียวกันแต่ไม่ใช่ clone แล้วเปลี่ยนให้เป็น clone
- สคริปต์นี้เรียกใช้เครื่องมือบรรทัดคำสั่งที่เขียนด้วย C และเครื่องมือบรรทัดคำสั่งที่เขียนด้วย Swift
- เมื่อรันแล้วพบว่าสามารถประหยัดพื้นที่ได้ หลายสิบ GB และต่อมาจึงพัฒนาเป็นแอป Mac
- Hyperspace ให้บริการบน Mac App Store
- ดาวน์โหลดและสแกนได้ฟรี
- การกู้คืนพื้นที่จริงต้องมี การซื้อภายในแอป
- ดูคำอธิบายเพิ่มเติมได้ที่ Hyperspace documentation
- ในแง่การพัฒนา Hyperspace เป็นแอป Mac ที่สร้างด้วย SwiftUI ตัวที่สองของนักพัฒนา และเป็นแอปแรกที่ใช้ SwiftUI life cycle
- นอกจากนี้ยังเป็นแอปที่สองที่ใช้ Swift 6
- การใช้ Swift 6 ตั้งแต่ช่วงเริ่มต้นพัฒนาง่ายกว่าการแปลงแอปที่เปิดตัวไปแล้วให้เป็น Swift 6 มาก
- Swift 6 ยังมีจุดที่ไม่เรียบร้อยอยู่มาก และคาดหวังว่าจะได้รับการปรับปรุงต่อไปในอนาคต
- Hyperspace แก้ไขไฟล์ที่แอปไม่ได้สร้างขึ้นเองและไม่ได้เป็นเจ้าของ เช่นเดียวกับกระบวนการแปลงจาก HFS+ ไปเป็น APFS
- นักพัฒนาเรียกมันว่าเป็น แอปที่เสี่ยงที่สุด ที่ตนเคยสร้าง
- แต่ในขณะเดียวกันก็อาจเป็นแอปที่มีประโยชน์ต่อผู้คนจำนวนมากที่สุดด้วย
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ก่อนหน้านี้เคยทำยูทิลิตีบรรทัดคำสั่ง
dedupที่ทำงานแบบเดียวกันไว้มีโหมด dry run, เลือกต้นฉบับสำหรับ clone ที่เหมาะที่สุดแบบ “ฉลาด”, เข้าใจ hard link และ clone อื่น ๆ, เก็บรักษา metadata และจัดการไฟล์บีบอัด HFS ได้อย่างถูกต้องด้วย
ข้อมูลของผมยังไม่เคยพัง แต่ก็เหมือนเครื่องมือระบบไฟล์ทั่วไป ใช้งานโดยรับความเสี่ยงเอง
0 - https://github.com/ttkb-oss/dedup
โดยค่าเริ่มต้น Hyperspace ไม่ได้สแกนทุกไฟล์ แต่ดูเฉพาะไฟล์ที่อยู่ใน allowlist และดูเหมือนมีโครงสร้างที่ต้องเข้าใจเนื้อหาไฟล์ จากมุมผู้ใช้ปลายทาง ผมไม่รู้ว่าแยกความแตกต่างระหว่างไฟล์ Text กับไฟล์ Source Code อย่างไร และการสแกนค่าเริ่มต้นพบเพียง 360MB ที่เป็นเป้าหมายสำหรับการ deduplicate แต่เมื่ออนุญาตทุกไฟล์ก็เพิ่มเป็น 842MB
โดยค่าเริ่มต้น ไฟล์ที่เล็กกว่า 100KB ก็ไม่ถูกสแกนเช่นกัน และเมื่อปิดข้อจำกัดขนาดพร้อมอนุญาตทุกไฟล์ ก็เพิ่มเป็น 1.1GB ภายใต้เงื่อนไขทุกไฟล์และไม่มีข้อจำกัดขนาด Hyperspace สแกน 67,309 ไฟล์จากทั้งหมด 68,874 ไฟล์ ส่วน
dedupสแกน 67,426 ไฟล์Hyperspace บอกว่ามีไฟล์ 29,522 ไฟล์ที่สามารถ deduplicate ได้ ส่วน
dedupพบ 29,447 ไฟล์ มีความต่างอยู่หนึ่งไฟล์เพราะมีไฟล์ที่ deduplicate ไปแล้ว 76 ไฟล์ แต่ไม่รู้สาเหตุที่แน่ชัดเวลาสแกน Hyperspace ใช้ประมาณ 50 วินาที ส่วน
dedupใช้ 14 วินาที ดูเหมือน Hyperspace จะสแกนระบบไฟล์ก่อน แล้วคำนวณรายการซ้ำ จากนั้นจึง deduplicate แต่ไม่รู้ว่าทำไมสองขั้นตอนแรกถึงไม่ทำไปพร้อมกัน ผมให้ใส่ metadata ของระบบไฟล์ลงคิวระหว่างสแกนแล้วเริ่มคำนวณรายการซ้ำแบบขนาน และส่วนใหญ่สามารถกรองสิ่งที่ไม่ตรงกันออกได้ด้วยข้อมูลขนาดที่ได้มา “ฟรี ๆ” ตอนเดินไดเรกทอรีด้วยfts_readHyperspace บอกว่าประหยัดได้ 1.1GB ส่วน
dedupพบ 1.04GB และอีก 882MB ที่ประหยัดไปแล้ว ผมไม่มีแผนจะซื้อ Hyperspace จึงไม่รู้เวลาการ deduplicate จริง หรือการเก็บรักษา metadata และการจัดการไฟล์แปลก ๆ แต่dedupใช้เวลารวมสแกนและ deduplicate 31 วินาทีแม้หลังจาก deduplicate ด้วย
dedupแล้ว Hyperscan ยังมองว่ายังมีไฟล์ 2 ไฟล์ที่ deduplicate ได้ Hyperspace ก็ดูเหมือนจะจัดการไฟล์ที่มี hard link หลายอัน, ไฟล์ว่าง และข้อยกเว้นหลายอย่างที่dedupตรวจสอบด้วย ส่วนการเก็บรักษา ACL หรือ attribute อื่น ๆ ทดสอบไม่ได้ถ้าไม่จ่ายเงิน แต่ดูจากstringsแล้วน่าจะจัดการอยู่ และ HFS compression เป็น edge case ที่ยุ่งยาก จึงยังยืนยันไม่ได้ว่าการสแกนของ Hyperspace จัดการอย่างไรโปรเจกต์ไม่มีไลเซนส์ ดังนั้นถ้าเป็นไปได้อยากให้ใส่ไลเซนส์ที่ต้องการไว้ด้วย ผมทำ pull request เพื่อปรับปรุงขั้นตอนติดตั้งเล็กน้อยไว้ด้วย: https://github.com/ttkb-oss/dedup/pull/6
แค่ดูบาง subdirectory ก็ไม่ใช่เรื่องแปลกที่จะเปลี่ยนสำเนาไฟล์ JS 50 ชุดให้เหลือชุดเดียว แต่เพราะยังเป็น “pre-release” และดาวบน GitHub ก็ยังค่อนข้างน้อย เครื่องมือแบบนี้ถ้ามีบั๊กจะน่ากลัวพอสมควร เลยสงสัยเรื่องความเสถียร
makeเสร็จแทบจะทันที ก็น่าประทับใจด้วยเมื่อก่อนเคยใช้ https://github.com/sahib/rmlint และก็ไม่ได้มีอะไรให้บ่นเป็นพิเศษ
เมื่ออ่านส่วนที่ว่า “Hyperspace ไม่มีวิธีประสานกับแอปอื่น ๆ ทั้งหมดหรือกับ macOS เอง เพื่อกำหนดจังหวะที่ปลอดภัยสำหรับการแทนที่ไฟล์ และไม่มีวิธีบังคับควบคุมไฟล์นั้นแบบเอกสิทธิ์” ก็ทำให้นึกสงสัยว่าทำไมตัวระบบไฟล์เองถึงไม่รัน กระบวนการกำจัดข้อมูลซ้ำ ลักษณะคล้ายกันในแบ็กกราวด์
ถ้าเป็นชั้น abstraction ระดับนั้นก็น่าจะจัดการปัญหาความปลอดภัยแบบนี้ได้ เลยสงสัยว่าถ้าให้เกิดขึ้นอัตโนมัติภายใน APFS จะมีข้อเสียอะไรบ้าง
ถ้าทำในระดับไฟล์ก็อาจใช้ทรัพยากรน้อยลงได้ แต่ไม่แน่ใจว่าการ implement จะง่ายขึ้นหรือซับซ้อนขึ้น อีกอย่าง ถ้าแก้แค่ 1 ไบต์ในไฟล์ขนาดใหญ่ ระบบไฟล์ก็ต้องทำสำเนาไฟล์นั้นใหม่อีกครั้ง ทำให้เกิดกิจกรรมบนดิสก์มาก ซึ่งอาจไม่ใช่เรื่องที่เข้าใจได้โดยสัญชาตญาณ
การกำจัดข้อมูลซ้ำที่ชั้นนี้ดีตรงที่ทำได้ข้ามหลายระบบไฟล์ ตัวอย่างเช่น ถ้ามีระบบหนึ่งพันเครื่องที่มีไฟล์ระบบปฏิบัติการเดียวกัน ก็ประหยัดพื้นที่จัดเก็บได้มหาศาล และความแตกต่างมักมีแค่การตั้งค่าเฉพาะเครื่องอย่าง host key หรือ hostname ระบบไฟล์เดี่ยว ๆ จะมองไม่เห็นความเหมือนร่วมกันแบบนี้
แต่จะมีปัญหาถ้าการกำจัดข้อมูลซ้ำทำให้จำนวนสำเนาของไฟล์ที่มีการใช้งานหนักลดลง ในตัวอย่างข้างต้น ถ้าบูตหนึ่งพันเครื่องพร้อมกัน อิมเมจเคอร์เนลอาจเจอโหลด I/O มหาศาล
เมื่อขอให้ระบบปฏิบัติการช่วยกำจัดข้อมูลซ้ำให้กับชุดช่วงที่กำหนดอย่างสุภาพ OS จะล็อกช่วงเหล่านั้น ตรวจสอบว่าข้อมูลเหมือนกันจริง แล้วจึงทำการกำจัดข้อมูลซ้ำให้ และยังส่งกลับเป็นฟิลด์ด้วยว่าในแต่ละช่วงกำจัดซ้ำไปได้กี่ไบต์ ดังนั้นโปรแกรมใน user space จึงไม่มีทางทำไฟล์พังได้
เคยใช้ค่อนข้างมากบน ReFS ที่รัน Hyper-V VM และผลลัพธ์ยอดเยี่ยมมาก ตอนนั้น VM ส่วนใหญ่เป็น Windows Server 2016/2019 ปนกัน ทำให้ลดการใช้พื้นที่จัดเก็บได้ประมาณ 45%
ชอบโมเดลที่ให้สแกนฟรีเพื่อดูว่าคุ้มไหม แล้วจ่ายเงินเฉพาะกับผลลัพธ์จริง
ผมเองก็เป็นพวกชอบสะสมไฟล์ เลยลองรันดูแล้วขึ้นว่า กู้คืนพื้นที่ได้ 7GB แต่สำหรับผมเท่านี้ยังไม่ถึงขั้นยอมจ่ายเงิน ถึงอย่างนั้นก็ดีที่มีเครื่องมือแบบนี้
ยังไงในหนึ่งเดือนเราจะเผลอสร้างไฟล์ซ้ำที่เหมือนกันเป๊ะ ๆ ได้มากแค่ไหนกัน?
จริง ๆ ก็มีตัวเลือกสมัครสมาชิกหรือซื้อถาวรสำหรับคนที่จะใช้บ่อย แต่สำหรับหลายคน การซื้อในแอปแบบครั้งเดียว ที่ใช้ได้ในช่วงเวลาจำกัดนั้นค่อนข้างสมเหตุสมผล และยังสามารถรันฟรีซ้ำเมื่อไรก็ได้ เพื่อตรวจดูว่าสะสมพอให้จ่ายเงินอีกครั้งหรือยัง
ผมไม่ได้สร้างปริมาณมหาศาล แต่บางครั้งก็มีไฟล์ซ้ำขนาดใหญ่เกิดขึ้นเมื่อรวมบางส่วนหรือทั้งหมดเข้าด้วยกัน มักเกิดในสถานการณ์ประหลาด ๆ เช่น ต้องจับคู่ผลลัพธ์จากการกู้คืนฮาร์ดไดรฟ์กับไฟล์ในอีกตำแหน่งหนึ่ง หรือต้องจัดระเบียบโฟลเดอร์ Downloads ที่รกให้เข้ากับปลายทางที่เป็นระเบียบ
เช่น เคยมีกรณีที่แบ็กอัป Time Machine ดันเวอร์ชันเก่าของไฟล์ที่ผมไม่รู้ด้วยซ้ำว่ามีบันทึกอยู่ และคิดว่าหายไปนานแล้วออกมา แต่ทำชื่อไดเรกทอรีพัง และทำให้เนื้อหาพรางอ่านยากไปบางส่วน มีไดเรกทอรีชื่อเป็นตัวเลขอยู่หลายพันอัน ข้างในอาจมีไฟล์ที่อยากเก็บ แต่ก็ไม่รู้เลยว่ามีอยู่แล้วหรืออยู่ที่ไหน เพราะไม่มีโครงสร้างให้ดูเข้าใจได้ ในทางกลับกัน หลายครั้งก็มีแค่ไฟล์ข้อความของระบบ build เดียวกันอยู่ไฟล์เดียว แบบนั้นก็ทิ้งได้แน่นอน
หรือผู้คนคุ้นชินกับกับดัก subscription มากเกินไป จนรู้สึกว่านี่เป็นโมเดลใหม่
ถ้าซอฟต์แวร์อื่นทำแบบนี้ได้ง่ายก็คงดี แต่ส่วนใหญ่ learning curve จะขวางไว้จนกว่าจะเห็นคุณค่า
แนะนำว่าถ้าเป็น trial แบบนั้น ให้ใช้บัตรเสมือนที่ล็อกได้ พอเผลอลืมยกเลิก การตัดเงินก็จะถูกบล็อกไว้ แต่ก็สงสัยว่ามีใครหาเจอไหมว่าราคาไลเซนส์จริงบนเว็บไซต์คือเท่าไร
สงสัยว่าแอปใช้อัลกอริทึมแบบไหนในการดูว่าไฟล์สองไฟล์เหมือนกันหรือไม่
มีวิธีที่น่าสนใจหลายแบบ เช่น hash, การเปรียบเทียบระดับบิต ฯลฯ แต่แต่ละแบบก็มีข้อเสียของตัวเอง ถ้ามีไฟล์จำนวนมาก วิธีไหนดีที่สุด
สำหรับไฟล์ผู้สมัครแต่ละไฟล์ ต้องมี “คีย์” เพื่อเช็กว่าเหมือนกับไฟล์ผู้สมัครอื่นหรือไม่ ไฟล์อาจมีเป็นล้าน ๆ ไฟล์ ดังนั้นคีย์ต้องเล็กและสร้างได้เร็ว แต่ในขณะเดียวกันก็ต้องไม่มี false positive
คำตอบที่ obvious ในยุคนี้คือ SHA256 hash ของเนื้อหาไฟล์ มันเร็วมาก ขนาดก็แค่ 32 ไบต์ซึ่งไม่ใหญ่มาก และโอกาสเกิด false positive หรือ collision ก็ต่ำจนโลกคงแตกก่อนที่จะได้เจอจริง ๆ SHA256 เป็นมาตรฐานโดยพฤตินัยสำหรับงานแบบนี้ ถ้าใช้วิธีอื่นก็คงน่าประหลาดใจทีเดียว
มันเป็น ระบบไฟล์แบบระบุที่อยู่ด้วยเนื้อหา ที่ใช้ hash สำหรับกำจัดข้อมูลซ้ำ และเพราะคำนวณ hash ตอนเขียน ต้นทุนด้านประสิทธิภาพจึงถูกกระจายออกไป
แบบนั้นก็ไม่ต้อง hash ไฟล์ใหญ่ทั้งไฟล์ และดูเพิ่มเฉพาะไฟล์ที่มี hash เดียวกันเท่านั้น
Apple มี คำสั่ง
cpที่ปรับแก้แล้วมาพร้อมระบบ ซึ่งรองรับแฟล็ก-cเพื่อให้ใช้ฟีเจอร์ clone ของ APFS ได้cpที่ใช้อยู่ไม่รองรับสิ่งนั้น ก็เรียกผ่าน Python ได้เช่นกันเช่น
import Foundation; Foundation.NSFileManager.defaultManager().copyItemAtPath_toPath_error_(...)ประมาณนี้ไฟล์ A อยู่สองตำแหน่ง และหลังจากรันสิ่งนี้แล้ว ถ้าแก้ไข
A_0ก็สงสัยว่าA_1จะเปลี่ยนตามไปด้วยหรือไม่ หรือมีแค่สถานะใหม่ของA_0ที่ถูกทำให้เป็นไฟล์จริง ส่วนA_1ยังอยู่เหมือนเดิมถ้าแก้ไข
A_0ระบบจะสร้างสำเนาของไฟล์นั้น ณ ตอนที่มีการเขียน และจะไม่แตะA_1https://en.wikipedia.org/wiki/Copy-on-write#In_computer_stor...
ดังนั้น
A_1จะถูกปล่อยไว้เหมือนเดิม และจะสร้างสำเนาใหม่สำหรับส่วนที่แก้ไขของA_0ดูรายละเอียดได้ที่ https://developer.apple.com/documentation/foundation/file_sy...จุดที่สะดุดตาคือ ก่อนที่ Apple จะประกาศ APFS ที่ WWDC 2017 นั้น มีการแอบทดลองแปลง iPhone ทุกเครื่องเป็น APFS ในส่วนหนึ่งของอัปเดต iOS 10.x แล้วแปลงกลับเป็น HFS+
สงสัยว่าถ้าเกิดการเปลี่ยนระบบไฟล์ผิดพลาดจะย้อนกลับได้อย่างไร โค้ดอาจตรวจสอบได้ละเอียดพอ แต่ถ้ามีปัญหาอะไรขึ้นมา ดูเหมือนจะถอนกลับไม่ได้
ในการทดสอบ migration ของ Apple จะทำการย้ายทั้งหมด รวมถึงการสร้าง superblock ของ APFS แต่หยุดไว้ก่อนถึง commit ที่จะแทนที่ superblock ของ HFS+ ด้วย superblock ของ APFS อย่างถาวร ตอนย้อนกลับก็แค่ “เก็บกวาด” superblock และ metadata block ของ APFS ที่สร้างไว้เท่านั้น
ในฐานะคนที่เคยทำหลายอย่างพังในสภาพแวดล้อมจริงมาแล้ว ถ้ามีคนบอกให้รัน migration ใหญ่ขนาดนี้ ก็ไม่แน่ใจว่าจะกล้ากดปุ่มไหม
[0] https://www.youtube.com/watch?v=IcyaadNy9Jk&t=1670s
ในโลกโอเพนซอร์สก็มีเครื่องมือแปลงระบบไฟล์ ext เป็น btrfs อยู่ และ (1) ย้อนกลับได้ รวมถึง (2) ระหว่างใช้ระบบไฟล์ btrfs ก็ยัง mount ระบบไฟล์ ext เดิมได้ด้วย
เริ่มจากเล่าเรื่อง แล้วค่อยบีบให้แคบลงเป็นปัญหา จากนั้นแสดงให้เห็นว่าโซลูชันแก้ปัญหานั้นได้ราวกับเวทมนตร์
เป็นตัวอย่างที่ดีมากของ การตลาดที่ยอดเยี่ยม
ลองรันกับโฟลเดอร์โปรเจกต์ NodeJS ขนาดใหญ่แล้ว แต่บอกว่าประหยัดได้แค่ 1GB จากโฟลเดอร์ 8.1GB
ลองรันอีกครั้งโดยรวมโฟลเดอร์ home ของผู้ใช้ด้วย ผลคือจากไฟล์ 731K ไฟล์, โฟลเดอร์ 127K โฟลเดอร์ และไฟล์เป้าหมาย 2,755 ไฟล์ ประหยัดได้รวมเพียง 1.3GB เพิ่มจากตอนรันเฉพาะโฟลเดอร์ NodeJS แค่ราว 300MB
พยายามสแกน System กับ Library ด้วย แต่ถูกปฏิเสธเพราะปัญหาสิทธิ์ ดูเหมือนเพราะใช้ pnpm เป็น package manager อยู่แล้ว การใช้ดิสก์จึงแทบจะเหมาะสมที่สุดอยู่แล้ว
ไอเดียน่าสนใจ แต่ด้วยราคาปัจจุบันยังหาเหตุผลมารองรับได้ยาก และคงจะดีถ้าเป็น background process ที่รันเดือนละครั้งประมาณนั้น
https://support.apple.com/guide/security/signed-system-volum...
น่าจะใส่มาเพื่อลด comparison buffer แต่ก็เป็นไปได้ว่าไฟล์ใน node_modules มีขนาดต่ำกว่านี้เลยไม่ถูกนำมาพิจารณา
เคยทำสคริปต์ที่คล้ายกันแต่เรียบง่ายกว่า ซึ่งเปลี่ยนไฟล์ที่มีเนื้อหาเหมือนกันให้เป็น hard link
แรงจูงใจหลักคือแพ็กเกจใน Python virtual environment มักมีการติดตั้งแพ็กเกจคล้าย ๆ กันไว้ และแม้เวอร์ชันต่างกัน ไฟล์จำนวนมากก็ยังตรงกันอยู่ แพ็กเกจบางตัวอย่าง Numpy, PyTorch, TensorFlow ค่อนข้างใหญ่ จึงประหยัดพื้นที่ดิสก์ได้พอสมควร
https://github.com/albertz/system-tools/blob/master/bin/merg...
[1] https://en.wikipedia.org/wiki/Apple_File_System#Clones
เครื่องมืออื่นอย่าง poetry, hatch, pdm ก็น่าจะทำเหมือนกัน แต่ไม่ค่อยแน่ใจรายละเอียดการทำงานเพราะใช้น้อยกว่า