Test program


Before vdo

[root@hssl ~]# docker run -d nginx 
ee6c23a404067e4eee97e4a8546f32b6c5a0495b58ea5cb71241fde35f94741f
[root@hssl ~]# 
[root@hssl ~]# docker run -d nginx 
c471511ad707250331675786cc098cd5e22c56ff53613eb7ed6bc86e22f37274
[root@hssl ~]# 
[root@hssl ~]# docker run -d nginx 
4a19f3d3510203a9f091d83c21acab9b851ff21fd1796b9ca8263c2b7d06a25a
[root@hssl ~]# 
[root@hssl ~]# docker run -d nginx 
760f7a90b2707826c40f249879a147d3e8cd1b73c55992c1917df0302d3c79b7
[root@hssl ~]# 
[root@hssl ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
760f7a90b270   nginx     "/docker-entrypoint.…"   2 seconds ago    Up 1 second     80/tcp    vigilant_moser
4a19f3d35102   nginx     "/docker-entrypoint.…"   3 seconds ago    Up 3 seconds    80/tcp    sad_ritchie
c471511ad707   nginx     "/docker-entrypoint.…"   5 seconds ago    Up 4 seconds    80/tcp    charming_benz
ee6c23a40406   nginx     "/docker-entrypoint.…"   7 seconds ago    Up 7 seconds    80/tcp    laughing_hellman
c6c8886f7bc1   nginx     "/docker-entrypoint.…"   20 minutes ago   Up 20 minutes   80/tcp    wonderful_engelbart
 
[root@hssl ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         197.7MB   0B (0%)
Containers      5         5         5.475kB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

After VDO

[root@hssl ~]# pvcreate /dev/nvme0n2p1
  Physical volume "/dev/nvme0n2p1" successfully created.
 
[root@hssl ~]# vgcreate dockervg /dev/nvme0n2p1 
  Volume group "dockervg" successfully created
[root@hssl ~]# pvs
  PV             VG       Fmt  Attr PSize   PFree  
  /dev/nvme0n1p3 cs       lvm2 a--   18.41g      0 
  /dev/nvme0n2p1 dockervg lvm2 a--  <20.00g <20.00g
[root@hssl ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree  
  cs         1   2   0 wz--n-  18.41g      0 
  dockervg   1   0   0 wz--n- <20.00g <20.00g
[root@hssl ~]# lvcreate --type vdo -n vdodocker -L 100G --virtualsize 100G dockervg 
  Volume group "dockervg" has insufficient free space (5119 extents): 25600 required.
[root@hssl ~]# 
[root@hssl ~]# lvcreate --type vdo -n vdodocker -L 15G --virtualsize 100G dockervg 
    The VDO volume can address 12 GB in 6 data slabs, each 2 GB.
    It can grow to address at most 16 TB of physical storage in 8192 slabs.
    If a larger maximum size might be needed, use bigger slabs.
  Logical volume "vdodocker" created.
[root@hssl ~]# vdostats --human-readable
Device                     Size      Used Available Use% Space saving%
dockervg-vpool0-vpool     15.0G      3.0G     12.0G  20%            0%
[root@hssl overlay2]# mkfs.xfs -K /dev/mapper/dockervg-vdodocker
meta-data=/dev/mapper/dockervg-vdodocker isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
 
[root@hssl overlay2]# mount /dev/mapper/dockervg-vdodocker /var/lib/docker-vdo
 
[root@hssl overlay2]# mount | grep dockervg-vdodocker
/dev/mapper/dockervg-vdodocker on /var/lib/docker-vdo type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
 
[root@hssl lib]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   50G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   20G  0 disk 
└─nvme0n2p1                 259:6    0   20G  0 part 
  └─dockervg-vpool0_vdata   253:2    0   15G  0 lvm  
    └─dockervg-vpool0-vpool 253:3    0  100G  0 lvm  
      └─dockervg-vdodocker  253:4    0  100G  0 lvm  /var/lib/docker-vdo
 
[root@hssl ~]# docker pull nginx 
Using default tag: latest
latest: Pulling from library/nginx
943331d8a9a9: Pull complete 
67ef22056282: Pull complete 
844fa86a5e03: Pull complete 
4e82158dafdd: Pull complete 
e1242a59b7fa: Pull complete 
ff2745aabaf7: Pull complete 
a53cddf3d9ee: Pull complete 
Digest: sha256:c15da6c91de8d2f436196f3a768483ad32c258ed4e1beb3d367a27ed67253e66
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@hssl ~]# 
[root@hssl ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         0         197.7MB   197.7MB (100%)
Containers      0         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
[root@hssl ~]# 
[root@hssl ~]# ./create-container.sh 
f18249ec7c2be6d05efcd2da3d8e3097ebf2f73e6e0d98e1b0491b6807cccc4d
fd75e90fb45a7ec6f7cd47ee44d56cbf6d699e11b0910cdf3b8ff6c299a40369
b3e118703ee9dbb62f041159f899445a33f2344280255a0a30a7b817a6c22236
a4114ae5e2383389088863439a72d8f68900f2cc820c1a1395ddf775914ca4ff
95f48110a77d80b78102f25fa64cdf934c864ad84a5d88f86d8c724eebbfd6fe
[root@hssl ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         197.7MB   0B (0%)
Containers      5         5         5.475kB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
 
[root@hssl ~]# vdostats --human-readable
Device                     Size      Used Available Use% Space saving%
dockervg-vpool0-vpool     15.0G      3.1G     11.9G  21%           64%

ALPine image , after vdo

[root@hssl ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
adb403a5cc79   alpine    "sh -c 'dd if=/dev/z…"   2 minutes ago   Up 2 minutes             test-5
7ad8cb042907   alpine    "sh -c 'dd if=/dev/z…"   2 minutes ago   Up 2 minutes             test-4
e8f40baa3600   alpine    "sh -c 'dd if=/dev/z…"   2 minutes ago   Up 2 minutes             test-3
67b328276353   alpine    "sh -c 'dd if=/dev/z…"   2 minutes ago   Up 2 minutes             test-2
989770a7fc12   alpine    "sh -c 'dd if=/dev/z…"   2 minutes ago   Up 2 minutes             test-1
 
[root@hssl ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       latest    8d591b0b7dea   2 months ago   8.17MB
 
[root@hssl ~]# df -h /var/lib/docker-vdo
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/dockervg-vdodocker  100G  3.2G   97G   4% /var/lib/docker-vdo
 
[root@hssl ~]# sudo vdostats --human-readable
Device                     Size      Used Available Use% Space saving%
dockervg-vpool0-vpool     15.0G      3.1G     11.9G  21%           95%
 
[root@hssl ~]# docker system df 
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         8.175MB   0B (0%)
Containers      5         5         2.621GB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Without VDO

[root@hssl ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         8.175MB   0B (0%)
Containers      5         5         2.621GB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
 
[root@hssl ~]# df -h /var/lib/docker
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cs-root   17G  9.3G  7.1G  57% /

With VDO

[root@hssl docker]# docker pull alpine 
Using default tag: latest
latest: Pulling from library/alpine
6e771e15690e: Pull complete 
Digest: sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
[root@hssl docker]# 
[root@hssl docker]# 
[root@hssl docker]# cd
[root@hssl ~]# ./create-container.sh 
9f6f3a7e964fbacd59398e3b24f97cbd9b46502e53afa5cdd58ea768a2136757
81b811138ce78e560046e2882bfd3ab30823071487ee3e33daff812c00bc223d
bcec1b5c42b8fb77d9d7db22a82aaded5aa95f476b7ed71b70ba04388367abc2
d398cfc1b5d71736a0a4109716c211bb5cddef4896954b5e930bd2be575fd50c
515de3a22782392a7bc83c68152068887faf9c42e4e37394495ee4621fe05620
[root@hssl ~]# 
[root@hssl ~]# docker system df 
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         8.175MB   0B (0%)
Containers      5         5         2.621GB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
[root@hssl ~]# 
[root@hssl ~]# cat /etc/docker/daemon.json 
{
  "insecure-registries": ["localhost:5001"],
  "data-root": "/var/lib/docker-vdo"
}
[root@hssl ~]# 
[root@hssl ~]# df -h /var/lib/docker-vdo/
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/dockervg-vdodocker  100G  3.2G   97G   4% /var/lib/docker-vdo

-------------------------------------------------------------------------

[root@hssl ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1 1024M  0 rom  
nvme0n1     259:0    0   50G  0 disk 
├─nvme0n1p1 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2 259:2    0    1G  0 part /boot
└─nvme0n1p3 259:3    0 18.4G  0 part 
  ├─cs-root 253:0    0 16.4G  0 lvm  /
  └─cs-swap 253:1    0    2G  0 lvm  [SWAP]
nvme0n2     259:4    0   20G  0 disk 
├─nvme0n2p1 259:5    0   10G  0 part 
└─nvme0n2p2 259:8    0   10G  0 part 
 

WITH VDO

[root@hssl ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   50G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   20G  0 disk 
├─nvme0n2p1                 259:5    0   10G  0 part 
 └─dockervg-vpool0_vdata   253:2    0   10G  0 lvm  
   └─dockervg-vpool0-vpool 253:3    0   20G  0 lvm  
     └─dockervg-vdodocker  253:4    0   20G  0 lvm  /var/lib/docker-vdo
└─nvme0n2p2                 259:8    0   10G  0 part /var/lib/docker-normal
[root@hssl ~]# 
[root@hssl ~]# df -h 
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           2.7G     0  2.7G   0% /dev/shm
tmpfs                           1.1G  9.2M  1.1G   1% /run
efivarfs                        256K   32K  225K  13% /sys/firmware/efi/efivars
/dev/mapper/cs-root              17G  6.9G  9.5G  42% /
/dev/nvme0n1p2                  960M  485M  476M  51% /boot
/dev/nvme0n1p1                  599M  7.0M  592M   2% /boot/efi
tmpfs                           545M   36K  545M   1% /run/user/0
/dev/nvme0n2p2                   10G  104M  9.9G   2% /var/lib/docker-normal
/dev/mapper/dockervg-vdodocker   20G  175M   20G   1% /var/lib/docker-vdo
[root@hssl ~]# 
[root@hssl ~]# vim /etc/docker/daemon.json 
[root@hssl ~]# cat /etc/docker/daemon.json 
{
  "insecure-registries": ["localhost:5001"],
  "data-root": "/var/lib/docker-vdo"
}
[root@hssl ~]# systemctl restart docker 
[root@hssl ~]# vdostats --human-readable
Device                     Size      Used Available Use% Space saving%
dockervg-vpool0-vpool     10.0G      4.0G      6.0G  40%           99%
[root@hssl ~]# docker pull alpine 
Using default tag: latest
latest: Pulling from library/alpine
6e771e15690e: Pull complete 
Digest: sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
[root@hssl ~]# ./create-container.sh 
3450d556262ecbf1c086da3ce76cd4be7189e5f8c6c728fc7b49f4f6b44cc823
a94d9b6c3f8e763064050583e46d0a36945abe51073ea23113993db21f9c8545
a37c135957f32087b6d8c71512fbea4c56a39a62bd5901b599e05590b17cde51
7e9cdb8f57d10d7fb9e75338d8de0d611ae39147aa07d77fc077b6a8ea6402eb
9fd60630c0f419ab006cdf1127ac7113b92bb4752b55fd175b135e8619f5733a
[root@hssl ~]# vdostats --human-readable
Device                     Size      Used Available Use% Space saving%
dockervg-vpool0-vpool     10.0G      4.0G      6.0G  40%           99%
[root@hssl ~]# df -h /var/lib/docker-vdo/
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/dockervg-vdodocker   20G  2.7G   18G  14% /var/lib/docker-vdo
[root@hssl ~]# lsblk 
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   50G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   20G  0 disk 
├─nvme0n2p1                 259:5    0   10G  0 part 
 └─dockervg-vpool0_vdata   253:2    0   10G  0 lvm  
   └─dockervg-vpool0-vpool 253:3    0   20G  0 lvm  
     └─dockervg-vdodocker  253:4    0   20G  0 lvm  /var/lib/docker-vdo
└─nvme0n2p2                 259:8    0   10G  0 part /var/lib/docker-normal
[root@hssl ~]# df -h 
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           2.7G     0  2.7G   0% /dev/shm
tmpfs                           1.1G  9.6M  1.1G   1% /run
efivarfs                        256K   32K  225K  13% /sys/firmware/efi/efivars
/dev/mapper/cs-root              17G  6.9G  9.5G  42% /
/dev/nvme0n1p2                  960M  485M  476M  51% /boot
/dev/nvme0n1p1                  599M  7.0M  592M   2% /boot/efi
tmpfs                           545M   36K  545M   1% /run/user/0
/dev/nvme0n2p2                   10G  104M  9.9G   2% /var/lib/docker-normal
/dev/mapper/dockervg-vdodocker   20G  2.7G   18G  14% /var/lib/docker-vdo
overlay                          20G  2.7G   18G  14% /var/lib/docker-vdo/overlay2/a28d8b39d67ab0b8bf668d0a87b14f4a360b919c31afcad2d3281f0974754b28/merged
overlay                          20G  2.7G   18G  14% /var/lib/docker-vdo/overlay2/83fb0aeff158f044b8d92a5b563fc4ac532628d0740b98979f6ac60adbf3de17/merged
overlay                          20G  2.7G   18G  14% /var/lib/docker-vdo/overlay2/c9b82167e8c5a38daf01c7094f24fdde8ba7708193317ff165a9d641aa06f059/merged
overlay                          20G  2.7G   18G  14% /var/lib/docker-vdo/overlay2/ac2a39bacefc444be6dd288bc9583f78395b73c24df60c55ed4a8404cc58015c/merged
overlay                          20G  2.7G   18G  14% /var/lib/docker-vdo/overlay2/6bb3f5437544a08a75e15caaa71df6075bfe071cd2d03e93b768c4be9856416b/merged
[root@hssl ~]# 
 

WITHOUT VDO

[root@hssl ~]# docker rm -f $(docker ps -aq)
9fd60630c0f4
7e9cdb8f57d1
a37c135957f3
a94d9b6c3f8e
3450d556262e
[root@hssl ~]# docker rmi alpine 
Untagged: alpine:latest
Untagged: alpine@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Deleted: sha256:8d591b0b7dea080ea3be9e12ae563eebf9869168ffced1cb25b2470a3d9fe15e
Deleted: sha256:a16e98724c05975ee8c40d8fe389c3481373d34ab20a1cf52ea2accc43f71f4c
[root@hssl ~]# 
[root@hssl ~]# 
[root@hssl ~]# vim /etc/docker/daemon.json 
[root@hssl ~]# systemctl restart docker 
[root@hssl ~]# docker system prune -a 
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache
 
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@hssl ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   50G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   20G  0 disk 
├─nvme0n2p1                 259:5    0   10G  0 part 
 └─dockervg-vpool0_vdata   253:2    0   10G  0 lvm  
   └─dockervg-vpool0-vpool 253:3    0   20G  0 lvm  
     └─dockervg-vdodocker  253:4    0   20G  0 lvm  /var/lib/docker-vdo
└─nvme0n2p2                 259:8    0   10G  0 part /var/lib/docker-normal
[root@hssl ~]# df -h 
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           2.7G     0  2.7G   0% /dev/shm
tmpfs                           1.1G  9.2M  1.1G   1% /run
efivarfs                        256K   32K  225K  13% /sys/firmware/efi/efivars
/dev/mapper/cs-root              17G  6.9G  9.5G  42% /
/dev/nvme0n1p2                  960M  485M  476M  51% /boot
/dev/nvme0n1p1                  599M  7.0M  592M   2% /boot/efi
tmpfs                           545M   36K  545M   1% /run/user/0
/dev/nvme0n2p2                   10G  104M  9.9G   2% /var/lib/docker-normal
/dev/mapper/dockervg-vdodocker   20G  176M   20G   1% /var/lib/docker-vdo
[root@hssl ~]# 
[root@hssl ~]# docker pull alpine 
Using default tag: latest
latest: Pulling from library/alpine
6e771e15690e: Pull complete 
Digest: sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
[root@hssl ~]# ./create-container.sh 
5f4347e03c83abe4e6ca5659e4ddc5aa590d493d892908b557b5f43779b583c2
0b563e5cb79efc2469010e43b55c02dad39c2a1b417b22b6b9cfd7fa898bd576
b7162b432279aa73fc7100c2abe7ae93d3d60ea89a960f133c89f2c3c23bb6c3
70a549f55cc6252c0dfa5d4b7c6b9a399cacea0e5465742df4054bca1fd531f7
d11c5adfcbd5380c87727016144e801e8e9aa8827586c94c65c855550179547f
[root@hssl ~]# df -h /var/lib/docker-normal/
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n2p2   10G  2.6G  7.4G  26% /var/lib/docker-normal
[root@hssl ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   50G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   20G  0 disk 
├─nvme0n2p1                 259:5    0   10G  0 part 
 └─dockervg-vpool0_vdata   253:2    0   10G  0 lvm  
   └─dockervg-vpool0-vpool 253:3    0   20G  0 lvm  
     └─dockervg-vdodocker  253:4    0   20G  0 lvm  /var/lib/docker-vdo
└─nvme0n2p2                 259:8    0   10G  0 part /var/lib/docker-normal
[root@hssl ~]# df -h 
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        4.0M     0  4.0M   0% /dev
tmpfs                           2.7G     0  2.7G   0% /dev/shm
tmpfs                           1.1G  9.6M  1.1G   1% /run
efivarfs                        256K   32K  225K  13% /sys/firmware/efi/efivars
/dev/mapper/cs-root              17G  6.9G  9.5G  42% /
/dev/nvme0n1p2                  960M  485M  476M  51% /boot
/dev/nvme0n1p1                  599M  7.0M  592M   2% /boot/efi
tmpfs                           545M   36K  545M   1% /run/user/0
/dev/nvme0n2p2                   10G  2.6G  7.4G  26% /var/lib/docker-normal
/dev/mapper/dockervg-vdodocker   20G  176M   20G   1% /var/lib/docker-vdo
overlay                          10G  2.6G  7.4G  26% /var/lib/docker-normal/overlay2/03e22d7e538ce49e90564a97642fb2faaec1466913d4112ce6edb78ceac423eb/merged
overlay                          10G  2.6G  7.4G  26% /var/lib/docker-normal/overlay2/010b084fe2619f70c059ec20e9aca7d50bba8c41895898abdf505cf885337422/merged
overlay                          10G  2.6G  7.4G  26% /var/lib/docker-normal/overlay2/00c8507d02cc7f5653be90c300073ae2998b313d35ad26ffa2da0f8feae1e847/merged
overlay                          10G  2.6G  7.4G  26% /var/lib/docker-normal/overlay2/3b0fa0a6c9664cb12bff5190a63521f938b403b8e07b04b599f2c8438766d2b1/merged
overlay                          10G  2.6G  7.4G  26% /var/lib/docker-normal/overlay2/abb357777a2b0c2f3f52681b1da6351837e0cfd19a7761b4853f68aa64313353/merged
[root@hssl ~]# 
 
 

[root@hssl ~]# df -h /var/lib/docker-normal Filesystem Size Used Avail Use% Mounted on /dev/nvme0n2p2 10G 137M 9.9G 2% /var/lib/docker-normal


Final test

[root@lab ~]# lvcreate --type vdo -n docker-vdo -L 14G --virtualsize 50G dockervg/nvme0n2p2 --compression y --deduplication y
[root@lab ~]# mkfs.xfs /dev/dockervg/docker-vdo
[root@lab ~]# mkdir -p /var/lib/docker-vdo
[root@lab ~]# mount /dev/dockervg/docker-vdo /var/lib/docker-vdo
 
[root@lab docker]# cat daemon.json 
{
  "data-root": "/var/lib/docker-vdo"
}
[root@lab docker]# systemctl restart docker 
[root@lab docker]# cd /var/lib/docker-vdo/
[root@lab docker-vdo]# ls
buildkit  containers  engine-id  image  network  overlay2  plugins  runtimes  swarm  tmp  volumes

Checking with vdo

# Check Status before pull
[root@lab ~]# vdostats --human-readable
Device                        Size      Used Available Use% Space saving%
dockervg-nvme0n2p2-vpool     14.0G      4.0G     10.0G  29%           99%
[root@lab ~]# du -sh /var/lib/docker-normal /var/lib/docker-vdo
0	/var/lib/docker-normal
160K	/var/lib/docker-vdo
 
# Pull Images
[root@lab ~]# docker pull ubuntu:20.04
[root@lab ~]# docker pull ubuntu:22.04
[root@lab ~]# docker pull ubuntu:latest
[root@lab ~]# docker pull debian:buster
[root@lab ~]# docker pull debian:bullseye
 
# Check Status
[root@lab ~]# vdostats --human-readable
Device                        Size      Used Available Use% Space saving%
dockervg-nvme0n2p2-vpool     14.0G      4.3G      9.7G  31%           45%
[root@lab ~]# du -sh /var/lib/docker-normal /var/lib/docker-vdo
0	/var/lib/docker-normal
492M	/var/lib/docker-vdo
 
# Create container 
[root@lab container-script]# vim create-container-vdo.sh 
[root@lab container-script]# cat create-container-vdo.sh 
for i in {1..10}; do docker run -d ubuntu:20.04 sleep infinity; done
[root@lab container-script]# chmod +x create-container-vdo.sh 
[root@lab container-script]# ./create-container-vdo.sh 
3a4fdffc0c39c91b68a7559ff758ede92350f98ef62336ba64faf8e3dd26d311
149bb377dcf5f2d93a5901deea9679b3349ead7d74e1efda6e8afbd4f78cf3c9
47dc0c206f6b9ec5e2fd417b793627596382c8daa2a3083c2f02539bf789c829
202dffb8418c6b0d47bc8efa830b8f4f8e869f50c777f75f6043dbf43df30d6f
569a3759a690b7a7e4d013eace4687fc595a64412380af767d13dc361334447c
641b57a38f2b1315a6b7ce6e969c96d77936330888c395411e1186687b0fe263
9c540f05d9ff898926a71a8feb50487dca21e60714e3fa28219f9e3c5e472278
d4b3bd6f9c53141530ba78e882000a509de41b5fc46cbb9b12c1364ac87b6320
a05084ddba42bcb5090d721eba3f8b771829157479144b69cba1845e69579143
43f78a6a0e2dfba7a031fd2921eef09452cd52ecf70e627026658a7a0e255d74
 
[root@lab ~]# vdostats --human-readable
Device                        Size      Used Available Use% Space saving%
dockervg-nvme0n2p2-vpool     14.0G      4.3G      9.7G  31%           45%

Without VDO

 
[root@lab ~]# vim /etc/docker/daemon.json 
[root@lab ~]# cat /etc/docker/daemon.json 
{
  "data-root": "/var/lib/docker-normal"
}
[root@lab ~]# systemctl restart docker 
[root@lab ~]# docker info | grep "Docker Root Dir"
 Docker Root Dir: /var/lib/docker-normal
[root@lab ~]# 
[root@lab ~]# docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
ecd83b6c3544: Pull complete 
Digest: sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
[root@lab ~]# docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
67b06617bd6b: Pull complete 
Digest: sha256:67cadaff1dca187079fce41360d5a7eb6f7dcd3745e53c79ad5efd8563118240
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
[root@lab ~]# docker pull ubuntu:latest
latest: Pulling from library/ubuntu
2f074dc76c5d: Pull complete 
Digest: sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
[root@lab ~]# docker pull debian:buster
buster: Pulling from library/debian
6fd6935d93f4: Pull complete 
Digest: sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225
Status: Downloaded newer image for debian:buster
docker.io/library/debian:buster
[root@lab ~]# docker pull debian:bullseye
bullseye: Pulling from library/debian
9ce0153b823c: Pull complete 
Digest: sha256:2a7f95bcf104c8410bf4d3b13c52f6e0e4334bb2edf8d80c7f9881e49447effe
Status: Downloaded newer image for debian:bullseye
docker.io/library/debian:bullseye
[root@lab ~]# cd container-script/
 
 
[root@lab container-script]# cat create-container-normal.sh 
for i in {1..10}; do docker run -d ubuntu:20.04 sleep infinity; done
[root@lab container-script]# ./create-container-normal.sh 
696d74996ea7135f58b4088f64243e73932b14382741b6ab040ebd2c5d24539e
47703070d700a81e429d60dc8d7423d8ebad6e813787a05172436ace139bffb1
fbc48da9d5643cbf2c3dab6bce4dfca87462a02eb756dba0072655c920664bfe
a3069697050b0818f2c8ef8d04926bf51cff10d7d14b795bf7088a6c79601508
e91bcadc9dcba310da2493e0792780d9d8dab4526bfa9fcba0588954c052e293
961f77f49a7c1f9926dd408ad8287145fd853f8ed41f1dca248d87af2cefde39
456987c60882c39b42f1833e64db93e5887a32b4cb5e0bf49914f22e7e3ab314
d899c72c9b55c4c3cfe0162dadae3754e51e2b2d9610dff585e05d6202778dfc
4cda1a643e2acb0e8605909b7a56c5b794998e3bc3e4181020b828af94452f4d
d1cad7ef023b980ee38c50408da6ef1b0520c8d6ea80498368c6922ac84a6fea
[root@lab container-script]# 
[root@lab container-script]# docker ps 
CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES
d1cad7ef023b   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             gifted_wozniak
4cda1a643e2a   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             recursing_gould
d899c72c9b55   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             suspicious_easley
456987c60882   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             gracious_euler
961f77f49a7c   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             nifty_allen
e91bcadc9dcb   ubuntu:20.04   "sleep infinity"   3 seconds ago   Up 2 seconds             hopeful_sinoussi
a3069697050b   ubuntu:20.04   "sleep infinity"   4 seconds ago   Up 3 seconds             optimistic_turing
fbc48da9d564   ubuntu:20.04   "sleep infinity"   4 seconds ago   Up 3 seconds             naughty_einstein
47703070d700   ubuntu:20.04   "sleep infinity"   4 seconds ago   Up 3 seconds             vigorous_morse
696d74996ea7   ubuntu:20.04   "sleep infinity"   4 seconds ago   Up 3 seconds             admiring_boyd
[root@lab container-script]# 
[root@lab container-script]# df -h /var/lib/docker-normal 
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n2p1   15G  644M   15G   5% /var/lib/docker-normal
[root@lab container-script]# du -sh /var/lib/docker-normal/*
96K	/var/lib/docker-normal/buildkit
284K	/var/lib/docker-normal/containers
4.0K	/var/lib/docker-normal/engine-id
1.6M	/var/lib/docker-normal/image
76K	/var/lib/docker-normal/network
1.2G	/var/lib/docker-normal/overlay2
0	/var/lib/docker-normal/plugins
0	/var/lib/docker-normal/runtimes
0	/var/lib/docker-normal/swarm
0	/var/lib/docker-normal/tmp
24K	/var/lib/docker-normal/volumes

Comparision

[root@lab ~]# du -sh /var/lib/docker-normal /var/lib/docker-vdo
1.2G	/var/lib/docker-normal
493M	/var/lib/docker-vdo
[root@lab ~]# du -sh /var/lib/docker-normal /var/lib/docker-vdo
493M	/var/lib/docker-normal
1.2G	/var/lib/docker-vdo
[root@lab ~]# vdostats --human-readable
Device                        Size      Used Available Use% Space saving%
dockervg-nvme0n2p2-vpool     14.0G      4.3G      9.7G  31%           44%

25 May

[root@lab2 ~]#  lvcreate --type vdo -n vdodocker -L 14.9G --virtualsize 100G dockervg 
 
[root@lab2 lib]# cat /etc/docker/daemon.json 
{
  "data-root": "/var/lib/docker-vdo"
}
 
[root@lab2 lib]# lsblk 
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   25G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   15G  0 disk 
└─nvme0n2p1                 259:6    0   15G  0 part 
  └─dockervg-vpool0_vdata   253:2    0 14.9G  0 lvm  
    └─dockervg-vpool0-vpool 253:3    0  100G  0 lvm  
      └─dockervg-vdodocker  253:4    0  100G  0 lvm  
 
[root@lab2 lib]# mkfs.xfs -K /dev/dockervg/vdodocker 
meta-data=/dev/dockervg/vdodocker isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
 
[root@lab2 ~]# tail -1 /etc/fstab 
/dev/dockervg/vdodocker	/var/lib/docker-vdo	xfs	defaults	0 0
 
[root@lab2 ~]# mount -a 
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
[root@lab2 ~]# systemctl daemon-reload
 
[root@lab2 ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                          11:0    1 1024M  0 rom  
nvme0n1                     259:0    0   25G  0 disk 
├─nvme0n1p1                 259:1    0  600M  0 part /boot/efi
├─nvme0n1p2                 259:2    0    1G  0 part /boot
└─nvme0n1p3                 259:3    0 18.4G  0 part 
  ├─cs-root                 253:0    0 16.4G  0 lvm  /
  └─cs-swap                 253:1    0    2G  0 lvm  [SWAP]
nvme0n2                     259:4    0   15G  0 disk 
└─nvme0n2p1                 259:6    0   15G  0 part 
  └─dockervg-vpool0_vdata   253:2    0 14.9G  0 lvm  
    └─dockervg-vpool0-vpool 253:3    0  100G  0 lvm  
      └─dockervg-vdodocker  253:4    0  100G  0 lvm  /var/lib/docker-vdo
All systems normal

© 2025 2023 Sanjeeb KC. All rights reserved.