Hyperspace: फ़ाइलें हटाए बिना डिस्क स्पेस बचाने वाला Mac ऐप
(hypercritical.co)- Mac पर duplicate files की सफाई आमतौर पर हटाने पर आधारित होती है, लेकिन Hyperspace APFS clones के ज़रिए समान content वाली files को share करवाता है और files को बनाए रखते हुए space वापस हासिल करता है
- APFS के copy-on-write clones Finder के “Duplicate” की तरह वास्तविक data को दोबारा लिखे बिना original के साथ share करते हैं, जिससे बड़े आकार की copy भी लगभग तुरंत पूरी हो जाती है
- डेवलपर की disk भरने लगी तो उन्होंने समान content वाली लेकिन clone न बनी files खोजने के लिए Perl script बनाई, और बचाया जा सकने वाला space दर्जनों GB निकला, जिसके बाद यह ऐप में विकसित हुआ
- ऐप मुफ्त में download करके scan किया जा सकता है और बचाया जा सकने वाला space देखा जा सकता है, लेकिन वास्तविक space recovery के लिए paid purchase जरूरी है
- यह उन files को modify करता है जिन्हें ऐप ने बनाया या own नहीं किया है, इसलिए जोखिम बड़ा है, लेकिन इसी वजह से यह कई Mac users के लिए वास्तविक मददगार हो सकता है
APFS clones से files को बनाए रखते हुए space recovery
- जब समान content वाली files आपस में clone relationship में नहीं होतीं, तो Hyperspace उन्हें APFS clones में बदल देता है ताकि disk पर data की सिर्फ एक copy share हो
- मौजूदा Mac duplicate-file apps आम तौर पर duplicate files खोजकर उन्हें delete करके space बचाते हैं, लेकिन Hyperspace files हटाए बिना space recover करता है
- APFS की core features में point-in-time snapshots और copy-on-write clones शामिल हैं
- snapshots का इस्तेमाल Time Machine backups को ज्यादा reliable और efficient बनाने में होता है
- copy-on-write clones directory entries और file contents के बीच flexible structure पर आधारित होते हैं
- Finder में “Duplicate” command से file copy करने पर वास्तविक file contents copy नहीं होते; original के साथ data share करने वाली clone file बनती है
- इस structure की वजह से file size चाहे जो हो, Finder में duplication लगभग तुरंत पूरा हो जाता है
रिलीज़ का तरीका और development notes
- 2024 के अंत में अपने Mac की disk भरने पर डेवलपर ने समान content वाली non-clone files खोजकर उन्हें clones में बदलने वाली Perl script लिखी
- यह script C में लिखे command-line tool और Swift में लिखे command-line tool को call करती है
- run करने पर बचाया जा सकने वाला space दर्जनों GB दिखा, और बाद में यह Mac app के रूप में विकसित हुआ
- Hyperspace Mac App Store पर उपलब्ध है
- download और scan मुफ्त हैं
- वास्तविक space recovery के लिए in-app purchase जरूरी है
- विस्तृत जानकारी Hyperspace documentation में देखी जा सकती है
- development के लिहाज से Hyperspace डेवलपर का दूसरा SwiftUI Mac app है, और SwiftUI life cycle इस्तेमाल करने वाला पहला app है
- यह Swift 6 इस्तेमाल करने वाला उनका दूसरा app भी है
- development की शुरुआत से Swift 6 इस्तेमाल करना, पहले से रिलीज़ app को Swift 6 में migrate करने की तुलना में काफी आसान था
- Swift 6 में अभी भी कई rough edges हैं, इसलिए आगे सुधार की उम्मीद है
- Hyperspace HFS+ से APFS में conversion की प्रक्रिया की तरह उन files को modify करता है जिन्हें ऐप ने न बनाया है और न own किया है
- डेवलपर इसे अपने बनाए apps में सबसे जोखिम भरा app कहते हैं
- साथ ही वे मानते हैं कि यह सबसे ज्यादा लोगों के लिए उपयोगी app भी हो सकता है
1 टिप्पणियां
Hacker News की राय
मैंने पहले यही काम करने वाली command-line utility
dedupबनाई थीइसमें dry-run mode है, यह “समझदारी से” सबसे अच्छा clone source चुनता है, hard links और दूसरे clones को समझता है, metadata को preserve करता है, और HFS compressed files को भी ठीक से handle करता है
मेरे data को इसने अभी तक कभी खराब नहीं किया, लेकिन file system tools के साथ हमेशा की तरह, इस्तेमाल अपने जोखिम पर करें
0 - https://github.com/ttkb-oss/dedup
Hyperspace default रूप से सभी files को scan नहीं करता, सिर्फ allowlist में मौजूद files को देखता है, और इसकी संरचना ऐसी लगती है जैसे इसे file contents को समझना पड़ता हो। end user के नजरिए से मुझे नहीं पता कि यह Text files और Source Code files में फर्क कैसे करता है, और default scan ने केवल 360MB को deduplication target के रूप में पाया, लेकिन सभी files allow करने पर यह 842MB हो गया
default रूप से यह 100KB से छोटी files भी scan नहीं करता, और size limit बंद करके सभी files allow करने पर यह 1.1GB तक बढ़ गया। सभी files और कोई size limit नहीं वाली condition में Hyperspace ने 68,874 में से 67,309 files scan कीं और
dedupने 67,426 files scan कींHyperspace ने कहा कि 29,522 files deduplicate की जा सकती हैं, और
dedupने 29,447 files पाईं। पहले से deduplicated files 76 थीं, इसलिए एक का फर्क आता है, लेकिन सही वजह नहीं पताscan time Hyperspace का करीब 50 seconds था, और
dedupका 14 seconds। Hyperspace शायद file system scan करने के बाद duplicates की गणना करता है और फिर deduplication करता है, लेकिन समझ नहीं आता कि पहले दो steps साथ में क्यों नहीं करता। मैंने scan के दौरान file system metadata को queue में डालकर parallel में duplicate calculation शुरू कराई, और ज्यादातर मामलों मेंfts_readसे directories traverse करते समय “मुफ्त में” मिलने वाली size information से ही mismatches filter किए जा सकते हैंHyperspace ने कहा कि 1.1GB बचाया जा सकता है, और
dedupने 1.04GB के साथ पहले से बचाए गए 882MB पाए। मेरा Hyperspace खरीदने का इरादा नहीं है, इसलिए actual deduplication time, metadata preservation या अजीब files handling तक के बारे में नहीं जानता, लेकिनdedupमें scan और deduplication मिलाकर 31 seconds लगेdedupसे deduplicate करने के बाद भी Hyperscan ने माना कि अभी 2 files deduplicate की जा सकती हैं। Hyperspace भी multiple hard links वाली files, empty files, औरdedupजिन कई exceptions को check करता है, उन्हें handle करता दिखता है। ACL या अन्य attributes preservation को payment के बिना test नहीं किया जा सकता, लेकिनstringsदेखने पर लगता है कि यह handle करता है, और HFS compression एक tricky edge case है, इसलिए Hyperspace scan इसे कैसे handle करता है यह अभी verify नहीं कर पायाproject में license नहीं है, इसलिए अगर संभव हो तो अपनी पसंद का license जोड़ दें तो अच्छा होगा। installation steps को थोड़ा सुधारने के लिए मैंने pull request भी बनाया है: https://github.com/ttkb-oss/dedup/pull/6
सिर्फ किसी specific subdirectory को देखने पर भी किसी JS file की 50 copies को एक में बदलना असामान्य नहीं था। हालांकि यह “pre-release” है और GitHub stars भी कम हैं, इसलिए ऐसे tools में bug हो तो काफी डर लगता है, इसलिए stability को लेकर जिज्ञासा है
makeका लगभग तुरंत खत्म हो जाना भी impressive थापहले https://github.com/sahib/rmlint इस्तेमाल किया था और कोई खास शिकायत नहीं थी
“Hyperspace के पास दूसरे सभी apps या खुद macOS के साथ मिलकर यह coordinate करने का कोई तरीका नहीं है कि फ़ाइल बदलना कब सुरक्षित है, और न ही उस फ़ाइल पर ज़बरदस्ती exclusive control लेने का कोई तरीका है” — यह हिस्सा देखकर सोचने लगा कि file system खुद background में ऐसा ही deduplication process क्यों नहीं चलाता
उस स्तर की abstraction layer हो तो लगता है कि ऐसी safety समस्याओं को manage किया जा सकता है; सोचता हूँ कि APFS के अंदर यह अपने-आप हो तो क्या कमियां होंगी
File level पर implement करने से resource usage घट सकता है, लेकिन implementation ज़्यादा सरल होगी या जटिल, यह नहीं पता. और अगर किसी बड़े file में सिर्फ 1 byte बदले, तब भी file system को उस file को फिर से duplicate करना पड़ेगा, जिससे बहुत disk activity हो सकती है—यह बात सहज रूप से स्पष्ट नहीं लग सकती
इस layer पर deduplication करने का फायदा है कि कई file systems के across deduplication हो सकता है. उदाहरण के लिए, अगर एक ही operating system files वाले एक हज़ार systems हों, तो storage बहुत बच सकती है, और फर्क अक्सर host key या hostname जैसी system-specific settings भर का होता है. एक single file system ऐसी समानता पहचान नहीं सकता
हालांकि deduplication के कारण अगर बहुत ज़्यादा इस्तेमाल होने वाली file की copies की संख्या घट जाए, तो समस्या होती है. ऊपर वाले उदाहरण में अगर हज़ार machines एक साथ boot हों, तो kernel image पर भारी I/O load पड़ सकता है
आप specified ranges के set को operating system से विनम्रता से deduplicate करने का अनुरोध करते हैं; OS ranges को lock करता है और सचमुच identical होने की verification के बाद ही deduplication करता है. हर range में कितने bytes deduplicate हुए, यह भी field के रूप में वापस मिलता है, इसलिए user-space program के लिए file खराब करने का कोई तरीका नहीं रहता
Hyper-V VM वाले ReFS पर मैंने इसे काफी इस्तेमाल किया था और असर शानदार था. उस समय ज्यादातर VMs Windows Server 2016/2019 के mix थे, और storage usage करीब 45% घट गया था
मुझे यह model पसंद है कि scan free में करके देख लो कि फायदा है या नहीं, और actual results के लिए ही pay करो
मैं भी files जमा करके रखने वालों में हूँ, इसलिए चलाकर देखा तो 7GB reclaimable दिखा, लेकिन मेरे लिए उतना cost देने लायक नहीं था. फिर भी अच्छा है कि ऐसा tool मौजूद है
आखिर एक महीने में आप गलती से पूरी तरह same duplicate files कितनी बना लेंगे?
जो लोग सच में इसे अक्सर इस्तेमाल करेंगे उनके लिए subscription या perpetual purchase options भी हैं, लेकिन बहुत से लोगों के लिए limited period में इस्तेमाल हो सकने वाला one-time in-app purchase काफी reasonable है. और आप कभी भी free में फिर से चला सकते हैं कि दोबारा pay करने लायक files जमा हुई हैं या नहीं
मैं बहुत भारी मात्रा में नहीं बनाता, लेकिन कुछ या सभी को मिलाने पर बड़े duplicate files बन सकते हैं. आम तौर पर यह अजीब situations में होता है, जैसे hard drive recovery के results को किसी दूसरी जगह की files से match करना हो, या गंदे downloads folder को किसी organized target location से match करना हो
उदाहरण के लिए, एक बार Time Machine backup ने एक file का पुराना version सामने ला दिया जिसके record होने का मुझे पता भी नहीं था और जिसे मैं बहुत पहले खो चुका समझता था, लेकिन उसने directory names खराब कर दिए थे और content को भी कुछ हद तक obfuscate कर दिया था. हज़ारों numeric-name directories थीं, जिनमें ऐसी files हो सकती थीं जिन्हें मैं रखना चाहता था, लेकिन वे मेरे पास पहले से हैं या कहां हैं, यह जानने के लिए कोई structure नहीं था. उल्टा, कई बार उनमें सिर्फ same build system text file होता था, जिसे जाहिर है छोड़ सकते थे
क्या लोग subscription traps के इतने आदी हो चुके हैं कि यह उन्हें नया model लगता है
काश दूसरे software में भी ऐसा करना आसान होता, लेकिन आम तौर पर value दिखने से पहले learning curve आड़े आ जाता है
एक tip: ऐसे trials के लिए lock की जा सकने वाली virtual card इस्तेमाल करें, तो cancel भूल भी जाएं तो charge block हो जाता है. लेकिन सोच रहा हूँ कि क्या किसी ने website पर actual license price ढूंढी है
जानना चाहूँगा कि app दो files identical हैं या नहीं, यह पता करने के लिए कौन सा algorithm इस्तेमाल करता है
Hash, bit-by-bit comparison जैसी कई interesting methods हैं, लेकिन हर एक की कमियां भी हैं. जब files बहुत ज्यादा हों तो सबसे अच्छा तरीका क्या होगा
हर candidate file के लिए दूसरे candidate files से समानता जांचने के लिए एक “key” चाहिए. Files लाखों में हो सकती हैं, इसलिए key छोटी और जल्दी generate होने वाली होनी चाहिए, लेकिन साथ ही false positives नहीं होने चाहिए
आजकल obvious जवाब file contents का SHA256 hash है. यह बहुत fast है, size भी 32 bytes होकर बहुत बड़ा नहीं है, और false positives या collisions की संभावना इतनी कम है कि उससे सामना होने से पहले दुनिया खत्म हो जाए. SHA256 इस use case के लिए de facto standard है, इसलिए अगर कुछ और किया हो तो काफी हैरानी होगी
यह deduplication के लिए hash इस्तेमाल करने वाला content-addressable file system था, और hash write time पर calculate होता था, इसलिए performance cost distributed हो जाती थी
इससे बड़े files को पूरा hash करने की जरूरत नहीं पड़ती, और सिर्फ same hash वाली files को आगे देखना पड़ता
Apple APFS की clone feature इस्तेमाल करने के लिए
-cflag support करने वाला modifiedcpcommand साथ में देता हैcpइसे support नहीं करता, तो Python से भी call कर सकते हैंजैसे
import Foundation; Foundation.NSFileManager.defaultManager().copyItemAtPath_toPath_error_(...)अगर फ़ाइल A दो जगहों पर है और इसे चलाने के बाद
A_0को modify किया जाए, तो क्याA_1भी साथ में बदलता है, या सिर्फA_0की नई state materialize होती है औरA_1वैसा ही रहता है—यह जानने की उत्सुकता हैA_0को modify करने पर write के समय उस फ़ाइल की copy बनाई जाती है, औरA_1को छेड़ा नहीं जाताhttps://en.wikipedia.org/wiki/Copy-on-write#In_computer_stor...
इसलिए
A_1को वैसा ही छोड़कर,A_0के modifications के लिए एक नई copy बनाई जाती है। अधिक जानकारी के लिए https://developer.apple.com/documentation/foundation/file_sy... देखेंWWDC 2017 में Apple द्वारा APFS announce करने से पहले, iOS 10.x update के हिस्से के रूप में सभी iPhone को चुपचाप APFS में test-convert करके फिर HFS+ पर वापस कर दिया गया था—यह हिस्सा ध्यान खींचता है
सोचता हूँ कि file system बदलाव गलत हो जाए तो उसे वापस कैसे किया जा सकता है। code को पर्याप्त रूप से verify किया जा सकता है, लेकिन अगर कुछ गड़बड़ हो जाए तो rollback असंभव लगता है
Apple के test migration में APFS superblock बनाने सहित पूरा migration किया गया, लेकिन HFS+ superblock को APFS superblock से permanently replace करने वाले commit से ठीक पहले रोक दिया गया। rollback करते समय बस बनाए गए APFS superblock और metadata blocks को “साफ़” कर देना था
production environment में बहुत चीज़ें टूटते देखी हैं, इसलिए इतना बड़ा migration चलाने को कहा जाए तो पता नहीं मैं button दबा पाऊँगा या नहीं
[0] https://www.youtube.com/watch?v=IcyaadNy9Jk&t=1670s
open source दुनिया में भी ext file system को btrfs में convert करने वाला tool है, और (1) rollback किया जा सकता है तथा (2) btrfs file system इस्तेमाल करते समय original ext file system को भी mount किया जा सकता है
कहानी से शुरू करके समस्या को narrow किया, फिर दिखाया कि solution उस समस्या को जादू की तरह हल कर देता है
यह बेहतरीन marketing का बहुत अच्छा उदाहरण है
एक विशाल NodeJS project folder पर चलाकर देखा, लेकिन 8.1GB folder में केवल 1GB बचत possible बताई गई
user home folder तक include करके फिर चलाया, लेकिन 731K files, 127K folders और 2,755 target files के आधार पर कुल बचत सिर्फ 1.3GB रही। NodeJS folder alone चलाने की तुलना में लगभग 300MB ही ज्यादा
System और Library भी scan करने की कोशिश की, लेकिन permissions issue की वजह से मना हो गया। package manager के रूप में pnpm इस्तेमाल करता हूँ, इसलिए शायद disk usage पहले से ही लगभग optimal है
idea बढ़िया है, लेकिन मौजूदा price पर justify करना मुश्किल है; अगर यह महीने में एक बार background process की तरह चले तो अच्छा रहेगा
https://support.apple.com/guide/security/signed-system-volum...
लगता है इसे comparison buffer घटाने के लिए लाया गया होगा, और संभव है कि node_modules की files इस size से छोटी होने के कारण consider न की गई हों
कभी इसी तरह की, लेकिन अधिक simple script बनाई थी जो same content वाली files को hard links में बदल देती थी
मुख्य motivation Python virtual environments के packages थे। अक्सर similar packages install रहते हैं, और versions अलग हों तब भी कई files अब भी identical होती हैं। Numpy, PyTorch, TensorFlow जैसे कुछ packages काफी बड़े होते हैं, इसलिए काफी disk space बच सकता था
https://github.com/albertz/system-tools/blob/master/bin/merg...
[1] https://en.wikipedia.org/wiki/Apple_File_System#Clones
poetry, hatch, pdm जैसे दूसरे tools भी शायद ऐसा करते हों, लेकिन details ज्यादा इस्तेमाल नहीं की हैं इसलिए ठीक से नहीं जानता