** Description changed: + === Begin SRU Template === + [Impact] + In some cases, cloud-init writes entries to /etc/fstab, and on azure it will + even format a disk for mounting and then write the entry for that 'ephemeral' + disk there. + + A supported operation on Azure is to "resize" the system. When you do this + the system is shut down, resized (given larger/faster disks and more CPU) and + then brought back up. In that process, the "ephemeral" disk re-initialized + to its original NTFS format. The designed goal is for cloud-init to recognize + this situation and re-format the disk to ext4. + + The problem is that the mount of that disk happens before cloud-init can + reformat. Thats because the entry in fstab has 'auto' and is automatically + mounted. The end result is that after resize operation the user will be left + with the ephemeral disk mounted at /mnt and having a ntfs filesystem rather + than ext4. + + [Test Case] + The text in comment 3 describes how to recreate by the original reporter. + Another way to do this is to just re-format the ephemeral disk as + ntfs and then reboot. The result *should* be that after reboot it + comes back up and has an ext4 filesystem on it. + + 1.) boot system on azure + (for this, i use https://gist.github.com/smoser/5806147, but you can + use web ui or any other way). + + 2.) unmount the ephemeral disk + $ umount /mnt + + 3.) repartition it so that mkfs.ntfs does less and is faster + This is not strictly necessary, but mkfs.ntfs can take upwards of + 20 minutes. shrinking /dev/sdb2 to be 200M means it will finish + in < 1 minute. + + $ disk=/dev/disk/cloud/azure_resource + $ part=/dev/disk/cloud/azure_resource-part1 + $ echo "2048,$((2*1024*100)),7" | sudo sfdisk "$disk" + $ time mkfs.ntfs --quick "$part" + + 4.) reboot + 5.) expect that /proc/mounts has /dev/disk/cloud/azure_resource-part1 as ext4 + and that fstab has x-systemd.requires in it. + + $ awk '$2 == "/mnt" { print $0 }' /proc/mounts + /dev/sdb1 /mnt ext4 rw,relatime,data=ordered 0 0 + + $ awk '$2 == "/mnt" { print $0 }' /etc/fstab + /dev/sdb1 /mnt auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2 + + [Regression Potential] + Regression is unlikely. Likely failure case is just that the problem is not + correctly fixed, and the user ends up with either an NTFS formated disk that + is mounted at /mnt or there is nothing mounted at /mnt. + + === End SRU Template === + After resizing a 16.04 VM on Azure, the VM is presented with a new ephemeral drive (of a different size), which initially is NTFS formatted. Cloud-init tries to format the appropriate partition ext4, but fails because it is mounted. Cloud-init has unmount logic for exactly this case in the get_data call on the Azure data source, but this is never called because fresh cache is found. Jun 27 19:07:47 azubuntu1604arm [CLOUDINIT] handlers.py[DEBUG]: start: init-network/check-cache: attempting to read from cache [trust] Jun 27 19:07:47 azubuntu1604arm [CLOUDINIT] util.py[DEBUG]: Reading from /var/lib/cloud/instance/obj.pkl (quiet=False) Jun 27 19:07:47 azubuntu1604arm [CLOUDINIT] util.py[DEBUG]: Read 5950 bytes from /var/lib/cloud/instance/obj.pkl Jun 27 19:07:47 azubuntu1604arm [CLOUDINIT] stages.py[DEBUG]: restored from cache: DataSourceAzureNet [seed=/dev/sr0] Jun 27 19:07:47 azubuntu1604arm [CLOUDINIT] handlers.py[DEBUG]: finish: init-network/check-cache: SUCCESS: restored from cache: DataSourceAzureNet [seed=/dev/sr0] ... Jun 27 19:07:48 azubuntu1604arm [CLOUDINIT] cc_disk_setup.py[DEBUG]: Creating file system None on /dev/sdb1 Jun 27 19:07:48 azubuntu1604arm [CLOUDINIT] cc_disk_setup.py[DEBUG]: Using cmd: /sbin/mkfs.ext4 /dev/sdb1 Jun 27 19:07:48 azubuntu1604arm [CLOUDINIT] util.py[DEBUG]: Running command ['/sbin/mkfs.ext4', '/dev/sdb1'] with allowed return codes [0] (shell=False, capture=True) Jun 27 19:07:48 azubuntu1604arm [CLOUDINIT] util.py[DEBUG]: Creating fs for /dev/disk/cloud/azure_resource took 0.052 seconds Jun 27 19:07:48 azubuntu1604arm [CLOUDINIT] util.py[WARNING]: Failed during filesystem operation#012Failed to exec of '['/sbin/mkfs.ext4', '/dev/sdb1']':#012Unexpected error while running command.#012Command: ['/sbin/mkfs.ext4', '/dev/sdb1']#012Exit code: 1#012Reason: -#012Stdout: ''#012Stderr: 'mke2fs 1.42.13 (17-May-2015)\n/dev/sdb1 is mounted; will not make a filesystem here!\n' $ lsb_release -rd Description: Ubuntu 16.04.1 LTS Release: 16.04 $ cat /etc/cloud/build.info build_name: server serial: 20160721 ~$ dpkg -l cloud-init Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================================-=====================-=====================-===================================================================== ii cloud-init 0.7.7~bzr1256-0ubuntu all Init scripts for cloud instances We're seeing ~100% repro of this bug on resize, where the only success cases are caused by another bug that messes up fstab and prevents mounting of the drive.
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1611074 Title: Reformatting of ephemeral drive fails on resize of Azure VM To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1611074/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs