Device-mapper does not release free space from removed images #3182
Description
Docker claims, via docker info
to have freed space after an image is deleted, but the data file retains its former size and the sparse file allocated for the device-mapper storage backend file will continue to grow without bound as more extents are allocated.
I am using lxc-docker on Ubuntu 13.10:
Linux ergodev-zed 3.11.0-14-generic #21-Ubuntu SMP Tue Nov 12 17:04:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
This sequence of commands reveals the problem:
Doing a docker pull stackbrew/ubuntu:13.10
increased space usage reported docker info
, before:
Containers: 0
Images: 0
Driver: devicemapper
Pool Name: docker-252:0-131308-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 291.5 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 0.7 Mb
Metadata Space Total: 2048.0 Mb
WARNING: No swap limit support
And after docker pull stackbrew/ubuntu:13.10
:
Containers: 0
Images: 3
Driver: devicemapper
Pool Name: docker-252:0-131308-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 413.1 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 0.8 Mb
Metadata Space Total: 2048.0 Mb
WARNING: No swap limit support
And after docker rmi 8f71d74c8cfc
, it returns:
Containers: 0
Images: 0
Driver: devicemapper
Pool Name: docker-252:0-131308-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 291.5 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 0.7 Mb
Metadata Space Total: 2048.0 Mb
WARNING: No swap limit support
Only problem is, the data file has expanded to 414MiB (849016 512-byte sector blocks) per stat
. Some of that space is properly reused after an image has been deleted, but the data file never shrinks. And under some mysterious condition (not yet able to reproduce) I have 291.5 MiB allocated that can't even be reused.
My dmsetup ls
looks like this when there are 0 images installed:
# dmsetup ls
docker-252:0-131308-pool (252:2)
ergodev--zed--vg-root (252:0)
cryptswap (252:1)
And a du
of the data file shows this:
# du /var/lib/docker/devicemapper/devicemapper/data -h
656M /var/lib/docker/devicemapper/devicemapper/data
How can I have docker reclaim space, and why doesn't docker automatically do this when images are removed?
Activity