I’m playing with Project Atomic. I use Vagrant in my Fedora 23 desktop as helps me to increase my productivity when working with VM :D. As I prefer to use libvirt over VirtualBox as my vagrant provider I install the following packages:
sudo dnf install vagrant-libvirt virt-manager
By default the Atomic Host virtual machine has little space for new containers and images (about 2 GB) so if you don’t remove your containers often you’re not going to have much fun. In this post I’m installing the atomic-host and assign more space to the /var/lib/docker directory which is the place our images, containers and other docker files will be stored.
I create the Vagrantfile for the official atomic-host box:
vagrant init centos/atomic-host
Then I edit the Vagrantfile. I’m adding a QCOW2 file that will act as a virtual disk (I’m using 30G). I use as a reference the vagrant-libvirt documentation. I add the following lines after config.vm.box = “centos/atomic-host”
config.vm.provider :libvirt do |libvirt|
  libvirt.storage :file, :size => ’30G’
end
I start the virtual machine:
vagrant up –provider libvirt
In the vagrant up logs I can see that a new 30 GB disk has been added to the virtual machine.
==> default: — Disks: vdb(qcow2,30G)
==>default:– Disk(vdb): /var/lib/libvirt/images/atomichost_default-vdb.qcow2
Now I open a SSH session:
vagrant ssh
I create a partition for the /dev/vdb disk and change type to LVM so I can add more storage in the future easily. Here are shown only the important parts:
sudo fdisk /dev/vdb
…
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): Press Enter
First sector (2048-62914559, default 2048): Press Enter
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Press Enter
Using default value 62914559
Partition 1 of type Linux and of size 30 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition ‘Linux’ to ‘Linux LVM’
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Now I’m going to use Logical Volume Management. That way if I need more space in the future I could add a new virtual disk to the logical volume. First I create the physical volume for LVM:
sudo pvcreate /dev/vdb1
Physical volume “/dev/vdb1” successfully created
I create a volume group and add the /dev/vdb1 partition to that volume group:
sudo vgcreate atomic_vg /dev/vdb1
I create a logical volume group and add all the space available in the volume group
sudo lvcreate -l 100%FREE -n atomic_lv atomic_vg
I add a filesystem to the logical volume partition. The logical volume is where I will store all the /var/lib/docker files. I’m using XFS as my filesystem type.
sudo mkfs.xfs /dev/mapper/atomic_vg-atomic_lv
I add an entry to /etc/fstab
sudo sh -c “echo ‘/dev/mapper/atomic_vg-atomic_lv /var/lib/docker xfs defaults 0 0’ >> /etc/fstab”
I stop the docker service so no newer files are copied to the existing /var/lib/docker directory
sudo systemctl stop docker
I mount temporarily the logical volume under /media
sudo mount /dev/mapper/atomic_vg-atomic_lv /media
I copy all the existing files from /var/lib/docker to the logical volume
sudo sh -c “cp -r /var/lib/docker/* /media/”
I umount the logical volume
sudo umount /media
I try to mount the new partition:
sudo mount -a
I check that the new /var/lib/docker is ready
sudo df -kh
Filesystem Size Used Avail Use% Mounted on
…
/dev/mapper/atomic_vg-atomic_lv 30G 33M 30G 1% /var/lib/docker
…
There it is 30 GB for my new images and containers!. Finally I start againt the docker engine service:
sudo systemctl start docker
Well that was long, wasn’t it, but at least I’ve more space to play now!
Note: In case you want to add more space using a new qcow2 after you’ve already run vagrant up, according to this issue,  if you’ve already instantiated the VM with vagrant up, if you change the Vagrantfile to add a new disk (e.g libvirt.storage :file, :size => ’30G’) it won’t work after a vagrant reload, no new virtual disk will be added so alternatively you can halt the virtual machine and use virt-manager to add a new disk and follow the fdisk, pvcreate, mount steps…