How to use cloud-init to mount block storage that's already formatted and ready to mount?
I’m using Ubuntu 16.04 on a droplet using Terraform. I have an existing volume that’s already been formatted that I would like to mount to /home so I can persist my user directory between applications from terraform.
Unfortunately, while /etc/cloud/cloud.cfg lists mounts in it’s cloudinitmodules no entry is ever written to /etc/fstab.
This is in my userdata:
#cloud-config mounts: - - '/dev/disk/by-id/scsi-0DO_Volume_volume-name-here-part1' - '/home' - 'ext4' - 'defaults,nofail,discard' - '0' - '2' packages: - zsh - git - ufw users: - name: demo groups: sudo shell: /bin/zsh sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh-authorized-keys: - 'ssh-rsa <snip>' runcmd: # Secure SSHD - [ sed, -i, -e, 's/^PermitRootLogin yes/PermitRootLogin no/', '/etc/ssh/sshd_config' ] - [ service, sshd, restart] - [ rm, -f, /root/.ssh/authorized_keys ] # Secure UFW - ufw default deny incoming - ufw default allow outgoing - ufw allow ssh - ufw enable
If I run this command as root,
cloud-init -d single -n mounts, the entry is written to /etc/fstab and /home is mounted. Then I need to run
mkhomedir_helper demo to recreate my home directory.
How can I get the mounts module to run automatically? The
cloud-config docs are…less than ideal and don’t really explain anything in the examples except how to structure the
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.