machine-drivers / docker-machine-driver-xhyve

docker-machine/minikube/minishift driver plugin for xhyve/hyperkit (native macOS hypervisor.framework)
https://godoc.org/github.com/machine-drivers/docker-machine-driver-xhyve
BSD 3-Clause "New" or "Revised" License
888 stars 74 forks source link

Compact disk image size #100

Open lcmen opened 8 years ago

lcmen commented 8 years ago

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?

johanneswuerbach commented 8 years ago

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+ :-(

lcmen commented 8 years ago

@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 commented 8 years ago

@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?

johanneswuerbach commented 8 years ago

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.

lcmen commented 8 years ago

@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

dunkelstern commented 8 years ago

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,

vasi commented 7 years ago

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.