docker-machine-driver-xhyve icon indicating copy to clipboard operation
docker-machine-driver-xhyve copied to clipboard

Compact disk image size

Open lcmen opened this issue 9 years ago • 7 comments
trafficstars

Hi, I'm sorry if these are stupid questions but I'm new to xhyve (and hyve in general). I decided to try this driver as I wanted to avoid VirtualBox overhead in default boot2docker installation.

How can I localise the disk image used by virtual machine created with docker-machine create --driver xhyve docker command? Can I compact the disk space so the vm will returned unused disk space to the host system?

lcmen avatar Feb 27 '16 11:02 lcmen

You can find the disk image in your machine storage path (default: ~/.docker/machine/machines)

The disk image is a OS X virtual sparsebundle disk, which sadly is not compactable today for filesystems different from HFS+ :-(

johanneswuerbach avatar Mar 07 '16 10:03 johanneswuerbach

@johanneswuerbach actually I've found a command to compact disk image - sudo hdiutil compact root-volume.sparsebundle -batteryallowed however it does not reclaim any size back.

lcmen avatar Mar 27 '16 11:03 lcmen

@zchee @johanneswuerbach any idea why sudo hdiutil compact root-volume.sparsebundle -batteryallowed didn't work? Are there any others (even hackable) ways to reclaim the space to the host OS?

lcmen avatar Apr 10 '16 11:04 lcmen

hdiutil compact only works when the filesystem used within the sparebundle is HFS+, which boot2docker doesn't support (ext4 is used).

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html

There are ideas how to solve that https://github.com/mist64/xhyve/pull/82, but nothing concrete so far.

johanneswuerbach avatar Apr 13 '16 21:04 johanneswuerbach

@johanneswuerbach thanks for more information about. Do you know if it's to use other distro (i.e. Alpine linux) instead?

I'm just looking for a way to setup my dev env with docker but having a image which can not be compacted on SSD is a deal breaker. Basically when I create a new machine it uses around 1GB for root image. After playing with docker (downloading / building images), sparsebundle size goes to ~18GB, even tough df -h shows that only 6GB is used of that space is used. How can I be sure that after a few days it won't take another 20GB from my host, even tough it won't use it?

UPDATE: I've found that there is image size parameter for docker-machine after which it won't take more size from the host. I've tested it with basic dd command on the boot2docker and it works fine. UPDATE2: Ok I think no matter which Linux distro I will choose it won't use HFS+ file system for its partition. Propably the only solution that can work in the future is https://github.com/mist64/xhyve/pull/82

lcmen avatar Apr 14 '16 14:04 lcmen

The sparse disk support patches on my github account work. Currently you cannot shrink the images but at least they are fine grained sparse disks. (Apple uses 8MB chunks, my version uses 4KB chunks).

I am currently working on supporting qcow2 because there is already tooling for that format, but it may be a while until that works with enough performance to be usable,

dunkelstern avatar Apr 27 '16 09:04 dunkelstern

My rhfs tool allows compacting sparsebundles, without necessarily using HFS+ (though it's optimized for that case):

rhfs compact --search mydisk.sparsebundle

It would probably be better to implement real support for discard in xhyve/block_if.c, though. See BOP_DELETE.

vasi avatar Dec 31 '16 04:12 vasi