วิธีเรียกคืนพื้นที่ว่างทั้งหมด / ส่วนใหญ่จาก sparsebundle บน OS X


30

มีความเป็นไปได้ที่จะ "จัดระเบียบ" ภาพที่กระจัดกระจายและเรียกคืนพื้นที่ว่าง (ส่วนใหญ่) หรือไม่?

นี่คือพื้นหลัง: ฉันกำลังใช้ชุดข้อมูลกระจัดกระจายและตอนนี้จากนั้นฉันต้องการเรียกคืนพื้นที่จากพวกเขาดังนั้นฉันจึงเรียกใช้:

hdiutil compact image.sparsebundle

อย่างไรก็ตามดังที่อธิบายไว้ในหน้า man มันจะเรียกคืนไฟล์ที่ไม่ได้ใช้ทั้งหมดเท่านั้นดังนั้นในกรณีของฉันมันบอกว่า:

Reclaimed 0 bytes out of 90.4 GB possible.

แน่นอนว่ามีความเป็นไปได้ที่จะคัดลอกเนื้อหาของภาพนี้ไปยังชุดกระจัดกระจายใหม่ที่ใช้แทน แต่ที่ยุ่งยากและต้องใช้พื้นที่ว่างเพียงพอสำหรับการดำเนินการนี้

ในขณะเดียวกันฉันพบว่าผลลัพธ์ของคำสั่งกะทัดรัดค่อนข้างทำให้เข้าใจผิด (ขณะนี้ฉันใช้ OS X 10.5.7) เนื่องจากบางครั้งมันมีขนาดเท่าที่เป็นไปได้ซึ่งใหญ่กว่าขนาดที่กลุ่มรูปภาพใช้งานอยู่ในขณะนี้ ขับรถ ฉันไม่ได้ดูอย่างใกล้ชิด แต่เอาต์พุตดูเหมือนว่าจะเป็นขนาดสูงสุดหรือ "ขนาดสูงสุด" - "ขนาดที่ใช้"


1
ฉันมีปัญหากับสิ่งนี้ แต่แล้วฉันก็รู้ว่าเป็นเพราะ sparsebundle fs ของฉันคือ EXFAT หลังจากอ่านmanpageฉันรู้ว่ากริยาขนาดกะทัดรัดใช้งานได้กับ "ดิสก์อิมเมจที่มีระบบไฟล์ HFS" เท่านั้น
jsejcksn

@ jsejcksn นั่นเป็นจุดที่ดีที่ควรทราบ หน้าคนตอนนี้บอกว่ารองรับ APFS และ HFS +
GDP2

คำถามที่เกี่ยวข้องกับ AskDifferent: apple.stackexchange.com/questions/54607/…
GDP2

คำตอบ:


20

! ที่น่าสนใจ

จากสิ่งที่ฉันได้ยินมาชุดข้อมูลกระจัดกระจายจะแบ่งข้อมูลออกเป็นวง 8Mb การเปลี่ยนขนาดของวงดนตรีอาจช่วยได้ถ้าคุณโชคดี ฉันหมายความว่าคุณจะไม่ได้รับพื้นที่เรียกคืน 100% แต่อาจดีกว่าที่คุณได้รับในขณะนี้ (ขึ้นอยู่กับข้อมูลในภาพ ฯลฯ )

ฉันทำการทดสอบอย่างง่าย ๆ สกปรกด้วยชุดกระจัดกระจาย 500Mb สองชุดหนึ่งชุดที่มีขนาดวงดนตรี 8Mb (ค่าเริ่มต้น) และอีกชุดหนึ่งที่มีขนาด 1Mb (ขนาดที่เล็กที่สุดที่อนุญาตจากสิ่งที่ฉันสามารถบอกได้) ฉันคัดลอกไฟล์ mp3 มากกว่า 400mb แล้วลบไฟล์อื่นทุกไฟล์ออก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 = 1Mb เพียงแค่ระวังหากคุณกำลังจัดการกับภาพ TimeMachine หรือภาพโฟลเดอร์บ้านของผู้ใช้ ฯลฯ คุณเบี่ยงเบนจากเส้นทาง Apple :) สำรองข้อมูลล้มเหลวอย่างปลอดภัย!

สำหรับการจัดเรียงข้อมูล: ฉันมีความรู้สึกตลก ๆ มันเร็วเหมือน (หรือเร็วกว่า!) เพียงแค่ใช้ hdiutil เพื่อแปลง sparsefile เป็นไฟล์ sparse ใหม่ที่มีรูปแบบเดียวกัน ฉันคิดว่ามันพยายามที่จะฉลาดเกี่ยวกับมัน แต่ฉันไม่รู้

(โปรดทราบว่าการจัดเรียงข้อมูลแบบกระจัดกระจายเป็นเพียงการจัดเรียงข้อมูลบนดิสก์ไม่ใช่การจัดกลุ่มแบบกระจัดกระจายเว้นแต่ว่าเป็นแบบการจัดเรียงข้อมูลแบบhdiutil convertไม่ทราบข้อมูลแบบกระจัดกระจาย


อาร์กิวเมนต์บรรทัดคำสั่งของคุณอยู่ในลำดับที่ไม่ถูกต้อง: -oควรมาก่อนdst.sparsebundleไม่ใช่src.sparsebundle( -oแสดงว่า 'เอาต์พุต')
Nick Forge

นอกจากนี้โปรดทราบว่าวิธีนี้จะไม่เก็บการเข้ารหัสไว้ อาจมีการตั้งค่าสถานะเพื่อเปิดใช้งาน แต่ ณ จุดนี้ฉันพบว่าง่ายขึ้นเพียงทำให้ตัวเอง sparsebundle ใหม่ใน Disk Utility และคัดลอกไฟล์ของฉันลงไป
Justin Searls

2
สำหรับการเข้ารหัสเพียงเพิ่ม-encryptionสวิตช์ไปที่คำสั่ง
fideli

ขอบคุณมาก. การลดขนาดของ sparse-band-size มีประโยชน์อย่างมากสำหรับ Dropbox ที่โฮสต์การรวม sparse
Max Ried

ตกลงสิ่งนี้ไม่สมเหตุสมผล ... เมื่อฉันแปลงเป็นจัดเรียงข้อมูลภาพชุดกระจัดกระจายที่ได้จะมีขนาดใหญ่กว่าต้นฉบับ16%
Michael

7

ฉันคิดว่า 90.4 GB ที่เป็นไปได้นั้นผิดปกติ เมื่อฉันวิ่ง:

hdiutil compact *.sparsebundle

... มันเพิ่มเนื้อที่ว่าง 16 GB ซึ่งเป็นสิ่งที่ฉันคาดไว้ สนุกมากพอที่จะพูดว่า "เป็นไปได้ 800 GB" ซึ่งเป็นมากกว่าความจุของ HD ของฉัน ดังนั้นฉันคิดว่าตัวเลขที่สองเป็นเพียงบางส่วน (ข้อบกพร่อง) ในทางทฤษฎี


2

@Oscar ชี้ให้เราในทิศทางที่ถูกต้อง แต่คุณไม่จำเป็นต้องแปลงเป็น 1 MB และกะทัดรัดหวังที่จะได้พื้นที่คืน

แต่เพียงคัดลอก sparsebundle ของคุณไปยัง sparsebundle ใหม่แทน ในทางกลับกัน defrags ภาพสำหรับคุณ และในเวลาเดียวกันคุณสามารถเปลี่ยนระบบไฟล์ขนาดและแม้กระทั่งวงดนตรี

นี่คือตัวอย่างที่ฉันทำเมื่อเร็ว ๆ นี้โดยแปลงภาพ "รหัส" 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

หมายเหตุ: ฉันใช้HSFXHFS + แบบตัวพิมพ์เล็กและตัวใหญ่เพราะฉันซิงค์อิมเมจของฉันกับ Linux ด้วยและติดตั้ง คุณมักจะต้องการใช้HFS+แทนเนื่องจาก macOS จะไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก

ตอนนี้สิ่งที่ฉันต้องทำก็คือคัดลอกทุกอย่างไปที่ sparsebundle ใหม่ของฉัน:

$ 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/

เย้. sparsebundle 15GB ของฉันตอนนี้ 3GB, defragged และแบนด์เปลี่ยนไป!


วิธีการนี้ได้รับการยอมรับในคำถามเดิม ... ฉันจะไม่ลงคะแนนเพราะคำตอบนั้นเขียนได้ดีและมี "ข้อมูล" แต่ .. c'mon ..
adfaklsdjf

0

ฉันไม่รู้วิธีที่จะทำ แต่ฉันเชื่อว่า Prosoft Drive Genius จะทำสิ่งที่คุณต้องการที่นี่:

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

คุณเมานเดอร์ spundbundle จัดระเบียบโดยใช้ Drive Genius จากนั้น

hdiutil compact

คำสั่งควรทำงาน


0

เรียกคืน 0 ไบต์จาก 90.4 GB ที่เป็นไปได้

ฉันพนันว่าไดรฟ์ที่เก็บมัดกระจัดกระจายมีพื้นที่ว่างประมาณ 90 GB หรือไม่ เนื่องจากชุดข้อมูลกระจัดกระจายมักจะสามารถเติบโตได้จนกว่าดิสก์จะเต็มพื้นที่นี้จะรายงานเพียงว่ามีพื้นที่ว่าง ... คุณจะเห็นตัวเลขเดียวกันใน Disk Utility ทำให้เข้าใจผิดมากอย่างแน่นอน

ต่อไปนี้อาจทำให้คุณเข้าใจ:

hdiutil imageinfo image.sparsebundle

0

ฉันมีปัญหากระจัดกระจายที่อ้างว่ามี 950 GiB จาก 1024 GiB (SSD ของฉันมีขนาดเพียง 320 GiB ดังนั้นจึงไม่เกิดขึ้น) hdi compactไม่ได้ช่วย

ฉันใช้ "การปฐมพยาบาล" จาก Disk Utility ทั้งบนบันเดิลและพาร์ติชันและนั่นช่วย - พื้นที่ว่างเมตรเริ่มแสดงจริง 20 GiB ตามที่ควรจะมีแล้วhdi compactวิ่งโดยไม่มีปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.