Docker Community Forums

Share and learn in the Docker community.

Mount reports wrong volumes when using devicemapper


(Nscheer) #1

Hi,

just installed an evaluation version of 17.06.2-ee-6 on a freshly installed OL 7.3 host:

[ns@dummy ~]$ uname -a
Linux dummy 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 07:15:04 PDT 2017 x86_64 x86_64 x86_64 GNU/Linux

[ns@dummy ~]$ cat /etc/oracle-release
Oracle Linux Server release 7.3

[ns@dummy ~]$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.06.2-ee-6
Storage Driver: devicemapper
 Pool Name: vg01-lv_docker_thinpool
 Pool Blocksize: 524.3kB
 Base Device Size: 10.74GB
 Backing Filesystem: xfs
 Data file:
 Metadata file:
 Data Space Used: 19.92MB
 Data Space Total: 42.95GB
 Data Space Available: 42.93GB
 Metadata Space Used: 389.1kB
 Metadata Space Total: 5.369GB
 Metadata Space Available: 5.368GB
 Thin Pool Minimum Free Space: 4.295GB
 Udev Sync Supported: true
 Deferred Removal Enabled: true
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Library Version: 1.02.135-RHEL7 (2016-11-16)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170
runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-514.26.2.el7.x86_64
Operating System: Oracle Linux Server 7.3
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 15.37GiB
Name: dummy
ID: VGIU:U5GG:GEMH:MGJR:4X6Q:X4HV:DL4F:BV6M:JI3B:2IWQ:RZQI:KDBK
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

The system has two volume groups:

[root@dummy /]# vgdisplay
  --- Volume group ---
  VG Name               vg00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  10
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                9
  Open LV               9
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               135.62 GiB
  PE Size               4.00 MiB
  Total PE              34719
  Alloc PE / Size       13824 / 54.00 GiB
  Free  PE / Size       20895 / 81.62 GiB
  VG UUID               vuaDZe-puSm-OI15-Nez4-lPT5-ycZp-tPHWex

  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  35
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               5
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               557.73 GiB
  PE Size               4.00 MiB
  Total PE              142780
  Alloc PE / Size       122112 / 477.00 GiB
  Free  PE / Size       20668 / 80.73 GiB
  VG UUID               TkLgEy-UACf-q2bG-hTEQ-Dep1-vXIl-I3LLC8

Here’s what I did to create the docker thinpool:

  • lvcreate --wipesignatures y -n lv_docker_thinpool vg01 -L 40G
  • lvcreate --wipesignatures y -n lv_docker_thinpoolmeta vg01 -L 5G
  • lvconvert -y --zero n -c 512K --thinpool vg01/lv_docker_thinpool --poolmetadata vg01/lv_docker_thinpoolmeta
  • lvchange --metadataprofile docker-thinpool vg01/lv_docker-thinpool
  • lvs -o+seg_monitor

Here the daemon.json:

{
        "storage-driver": "devicemapper",
        "storage-opts":
        [
                "dm.thinpooldev=/dev/mapper/vg01-lv_docker_thinpool",
                "dm.use_deferred_removal=true"
        ]
}

Docker-Engine is able to start without any problems.

As per the documentation (c.f. https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#how-the-devicemapper-storage-driver-works) I should be able to see the mounted thinpool when docker engine is running, e.g.:

$ mount |grep devicemapper
/dev/xvda1 on /var/lib/docker/devicemapper type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

But here’s what happens on my system:

[root@dummy/]# mount | grep docker
/dev/mapper/vg00-lv_var on /var/lib/docker/plugins type ext4 (rw,relatime,data=ordered)
/dev/mapper/vg00-lv_var on /var/lib/docker/devicemapper type ext4 (rw,relatime,data=ordered)

That is the wrong volume group and the wrong logical volume as well…
Furthermore, docker info reports that the backing filesystem is xfs, not ext4.
Since everything is running “fine”, I expect this to be just a display problem - but where should I start debugging?

Here is an excerpt of the other lvs that exist on the machine:

[root@dummy /]# lsblk
NAME                              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                                 8:0    0 136.1G  0 disk
├─sda1                              8:1    0   512M  0 part /boot
└─sda2                              8:2    0 135.6G  0 part
  ├─vg00-lv_root                  253:0    0     2G  0 lvm  /
  ├─vg00-lv_swap                  253:1    0    16G  0 lvm  [SWAP]
  ├─vg00-lv_usr                   253:2    0     6G  0 lvm  /usr
  ├─vg00-lv_home                  253:5    0     2G  0 lvm  /home
  ├─vg00-lv_var                   253:6    0    16G  0 lvm  /var
  ├─vg00-lv_tmp                   253:7    0     3G  0 lvm  /tmp
  └─vg00-lv_opt                   253:8    0     4G  0 lvm  /opt
sdb                                 8:16   0 278.9G  0 disk
└─sdb1                              8:17   0 278.9G  0 part
  └─vg01-lv_app                   253:9    0   300G  0 lvm  /app
sdc                                 8:32   0 278.9G  0 disk
└─sdc1                              8:33   0 278.9G  0 part
  ├─vg01-lv_app                   253:9    0   300G  0 lvm  /app
  ├─vg01-lv_docker_thinpool_tmeta 253:15   0     5G  0 lvm
  │ └─vg01-lv_docker_thinpool     253:17   0    40G  0 lvm
  └─vg01-lv_docker_thinpool_tdata 253:16   0    40G  0 lvm
    └─vg01-lv_docker_thinpool     253:17   0    40G  0 lvm
sr0                                11:0    1  1024M  0 rom

So the mount suggests that /var/lib/docker/plugins and /var/lib/docker/devicemapper are a mount of the same (wrong) logical volume.
That is, of course, not true:

[root@dummy/]# ls -l /var/lib/docker/plugins
total 12
drwx------ 4 root root 4096 Dec  7 18:26 b7ee60877053565a5d5807ec497a49bd4f2195860d4c4f25d7049bd54fe4b647
drwx------ 3 root root 4096 Dec  7 16:21 storage
drwx------ 2 root root 4096 Dec  7 16:38 tmp
[root@dummy/]# ls -l /var/lib/docker/devicemapper
total 8
drwx------ 2 root root 4096 Dec  7 18:26 metadata
drwxr-xr-x 2 root root 4096 Dec  7 17:17 mnt

Any insight is very appreciated…

Greetings

Nico