ओएस एक्स पर एक स्पार्सबंडल से सभी / सबसे मुक्त स्थान को कैसे पुनः प्राप्त करें


30

क्या एक विरल बंडल छवि को "डीफ़्रैग्मेन्टाइज़" करने और मुक्त स्थान को पुनः प्राप्त (अधिकांश) करने की संभावना है?

यहाँ पृष्ठभूमि है: मैं विरल बंडलों का उपयोग कर रहा हूं और हर अब और फिर मैं उनसे अंतरिक्ष को पुनः प्राप्त करना चाहता हूं इसलिए मैं चलाता हूं:

hdiutil compact image.sparsebundle

हालांकि, जैसा कि मैन पेज में बताया गया है, यह केवल पूरी तरह से अप्रयुक्त बैंड फ़ाइलों को पुनः प्राप्त करता है, इसलिए मेरे मामले में यह कहता है:

Reclaimed 0 bytes out of 90.4 GB possible.

बेशक इस छवि की सामग्री को एक नए विरल बंडल में कॉपी करने की संभावना है जो तब झूठ में उपयोग किया जाता है, लेकिन यह दोनों बोझिल है और इस ऑपरेशन के लिए पर्याप्त खाली स्थान की आवश्यकता होती है।

इस बीच, मुझे पता चला कि कॉम्पैक्ट कमांड का आउटपुट कुछ भ्रामक है (मैं वर्तमान में OS X 10.5.7 चला रहा हूं) क्योंकि यह कभी-कभी एक आकार को सूचीबद्ध करता है जो उस आकार से बड़ा है जो वर्तमान में हार्ड पर छवि बंडल द्वारा लिया गया है। चलाना। मैंने करीब से नहीं देखा, लेकिन आउटपुट अधिकतम आकार या "अधिकतम आकार" - "उपयोग किया गया आकार" प्रतीत होता है।


1
मैं इस के साथ एक मुद्दा था, लेकिन तब यह एहसास हुआ क्योंकि मेरे sparsebundle fs EXFAT था। मैनपेज पढ़ने के बाद , मैंने महसूस किया कि कॉम्पैक्ट क्रिया केवल "डिस्क छवियों पर एक एचएफएस फाइलसिस्टम युक्त" पर काम करती है।
jsejcksn

@jsejcksn यह ध्यान में रखने के लिए एक अच्छा बिंदु है। मैन पेज अब कहता है कि APFS और HFS + समर्थित हैं।
जीडीपी 2

AskDifferent पर प्रासंगिक प्रश्न: apple.stackexchange.com/questions/54607/…
GDP2

जवाबों:


20

दिलचस्प!

मैंने जो सुना है, उससे विरल बंडल 8Mb बैंड में डेटा को विभाजित करता है। यदि आप भाग्यशाली हैं तो बैंड का आकार बदलने में मदद मिल सकती है। मेरा मतलब है, आपको 100% पुनः प्राप्त स्थान कभी नहीं मिलेगा, लेकिन शायद अब आपको जो मिलेगा उससे बेहतर होगा। (छवि पर डेटा आदि के आधार पर)

मैंने दो 500Mb विरल बंडलों के साथ एक गंदा सरल परीक्षण किया, एक 8Mb (डिफ़ॉल्ट) बैंड आकार के साथ, और 1Mb (जो मैं बता सकता हूं उससे सबसे छोटा अनुमत आकार) के साथ। मैंने 400mb से अधिक एमपी 3 फ़ाइलों की प्रतिलिपि बनाई और फिर हर दूसरी फ़ाइल को हटा दिया और फिर hdiutil compactउनके गधे पर चला ।

Size after compact
8Mb bands: 271Mb
1Mb bands: 215Mb

आपके विरल बंडल को परिवर्तित करने का कमांड है

hdiutil convert src.sparsebundle -format UDSB -tgtimagekey sparse-band-size=2048 -o dst.sparsebundle

बैंड का आकार इकाई 512byte में है। इसलिए उपरोक्त उदाहरण बैंड का आकार 512 * 2048 = 1 एमबी निर्धारित करता है। अगर आप TimeMachine छवियों या उपयोगकर्ता के घर फ़ोल्डर छवियों आदि के साथ काम कर रहे हैं तो सावधान रहें। आप Apple पथ से भटक रहे हैं :) एक सुरक्षित सुरक्षित बैकअप रखें!

डीफ़्रैग्मेन्टेशन के लिए: मुझे एक मज़ेदार अहसास है कि यह हर्डुटिल को एक ही प्रारूप के साथ एक नई विरल फ़ाइल में बदलने के लिए हडियुटिल का उपयोग करने के लिए बस (या तेज़) है। मुझे लगता है कि यह इसके बारे में स्मार्ट होने की कोशिश करता है। लेकिन मुझे नहीं पता।

(ध्यान दें कि विरल बंडल को डीफ़्रैग्मेन्ट करना केवल डिस्क डेटा को डीफ़्रैग्मेन्ट करता है, स्पार्स बंडल बैंड को नहीं, जब तक कि यह स्पार्स बंडल जागरूक डीफ़्रैग्मेंट hdiutil convertनहीं होता । बैंड को 'डीफ़्रेग्मेंटेशन' मानता है।)


आपकी कमांड लाइन तर्क गलत क्रम में हैं: -oपहले सीधे होना चाहिए dst.sparsebundle, न कि src.sparsebundle( -o'आउटपुट' को दर्शाता है)।
निक फोर्ज

यह भी ध्यान दें कि यह विधि एन्क्रिप्शन को संरक्षित नहीं करती है। शायद इसे सक्षम करने के लिए एक झंडा है, लेकिन इस बिंदु पर मैंने खुद को डिस्क उपयोगिता में एक नया स्पार्सबंडल बनाना आसान बना दिया और अपनी फ़ाइलों को इसमें कॉपी किया।
जस्टिन सियरल्स

2
एन्क्रिप्शन के लिए, बस -encryptionकमांड में स्विच जोड़ें ।
fideli

बहुत बहुत धन्यवाद। ड्रॉपबॉक्स होस्टेड स्पार्स-बंडलों के लिए स्पार्स-बैंड-साइज़ कम करना बहुत उपयोगी है
मैक्स राइड्स

ठीक है, इससे कोई मतलब नहीं है ... जब मैं छवि को डीफ़्रैग्मेन्ट करने के लिए परिवर्तित करता हूं, तो परिणामी विरल बंडल मूल से 16% बड़ा होता है।
माइकल

7

मुझे लगता है कि 90.4 जीबी संभव सादे गलत है। जब मैं भागा:

hdiutil compact *.sparsebundle

... इसने 16 जीबी स्थान खाली कर दिया, जो कि लगभग मुझे उम्मीद थी। पर्याप्त रूप से यह पर्याप्त रूप से "800 जीबी संभव" कहा जाता है जो कि मेरे एचडी की क्षमता से अधिक है। इसलिए मुझे लगता है कि दूसरा आंकड़ा सिर्फ कुछ (त्रुटिपूर्ण) सैद्धांतिक संख्या है।


2

@ ऑस्कर ने हमें सही दिशा में इशारा किया। लेकिन आपको 1 एमबी और कॉम्पैक्ट में बदलने की आवश्यकता नहीं है, जिससे अंतरिक्ष फिर से मिल जाएगा।

इसके बजाय, बस अपने स्पार्सबंडल को दूसरे नए स्पार्सबंडल में कॉपी करें। यह बदले में, आपके लिए छवि को बदनाम करता है। और एक ही समय में आप फाइलसिस्टम, आकार और यहां तक ​​कि बैंड भी बदल सकते हैं।

यहाँ एक उदाहरण मैंने हाल ही में किया है, जो मेरे 20GB "कोड" छवि को परिवर्तित करता है, जो कि मैं पूरे उपकरणों में सिंक करता हूं।

$ hdiutil create -size 20g -type SPARSEBUNDLE \
-imagekey sparse-band-size=2048 -fs HFSX \
-volname code -attach ~/sync/images/code.sparsebundle

के साथ सभी विकल्प देखें hdiutil create -help

यह आदेश आउटपुट:

/dev/disk3              GUID_partition_scheme
/dev/disk3s1            EFI
/dev/disk3s2            Apple_HFS                       /Volumes/code
created: /Users/eric/sync/images/code.sparsebundle

आप -attachइसके नीचे माउंट किए गए विकल्प को देख सकते हैं /Volumes/code

नोट: मैं HSFXकेस-संवेदी एचएफएस + के लिए उपयोग करता हूं क्योंकि मैं अपनी छवियों को लिनक्स पर भी सिंक करता हूं और उन्हें माउंट करता हूं। आप संभवतः HFS+इसके बजाय उपयोग करना चाहते हैं , क्योंकि macOS सामान्य रूप से केस-असंवेदनशील है।

अब मुझे बस इतना करना है कि मेरे नए स्पार्सबंडल की हर चीज की नकल करें:

$ cp -r /Volumes/IMG_CODE/ /Volumes/code/

और अब तुलना करने के लिए:

# old sparsebundle
$ du -h ~/sync/images/IMG_CODE.sparsebundle/
15.0G   /Users/eric/sync/images/IMG_CODE.sparsebundle/bands
15.0G   /Users/eric/sync/images/IMG_CODE.sparsebundle/

# new sparsebundle
$ du -h ~/sync/images/code.sparsebundle/
3.0G    /Users/eric/sync/images/code.sparsebundle/bands
3.0G    /Users/eric/sync/images/code.sparsebundle/

वाह। मेरा 15GB स्पार्सबंडल अब 3GB है, डीफ़्रेग्ड है, और बैंड बदल गए हैं!


इस पद्धति को मूल प्रश्न में स्वीकार किया गया था ... मैं उत्तर को अस्वीकार नहीं करूंगा क्योंकि यह अच्छी तरह से लिखा गया है और "जानकारीपूर्ण" है, लेकिन ..
c'mon

0

मैं इसे करने के लिए एक स्वतंत्र तरीके के बारे में नहीं जानता, लेकिन मेरा मानना ​​है कि प्रोसॉफ्ट ड्राइव जीनियस वही करेगा जो आपको यहां चाहिए:

http://www.prosofteng.com/products/drive_genius.php

आप Sparsebundle को माउंट करते हैं, ड्राइव Genius का उपयोग करके इसे डीफ़्रैग करते हैं, और फिर अगले

hdiutil compact

कमांड काम करना चाहिए।


0

पुनः प्राप्त 0 बाइट 90.4 जीबी से संभव है।

मैं शर्त लगाता हूं कि स्पार्स बंडल रखने वाले के पास लगभग 90 जीबी मुक्त स्थान है? चूंकि स्पर्स बंडलों अक्सर डिस्क के पूर्ण होने तक बढ़ सकते हैं, इसलिए यह स्थान केवल खाली स्थान उपलब्ध होने के रूप में रिपोर्ट किया जाता है ... आपको डिस्क उपयोगिता में समान आंकड़े दिखाई देंगे। वास्तव में बहुत भ्रामक।

निम्नलिखित आपको कुछ जानकारी दे सकते हैं:

hdiutil imageinfo image.sparsebundle

0

मेरे पास एक समस्याग्रस्त विरल बंडल था जो कि 1024 GiB में से 950 GiB के कब्जे का दावा करता था (मेरा SSD आकार में सिर्फ 320 GiB है, इसलिए ऐसा नहीं हो सका)। hdi compactमदद नहीं की।

मैंने बंडल और विभाजन दोनों पर डिस्क उपयोगिता से "प्राथमिक चिकित्सा" चलाई है, और इससे मदद मिली - मुक्त अंतरिक्ष मीटर ने वास्तविक 20 GiB दिखाना शुरू कर दिया जैसा कि यह होना चाहिए, और फिर hdi compactसमस्या के बिना भाग गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.