I think there are 2 things that could be causing this from cloud-init:
a.) cloudinit/CloudConfig/cc_resize.py [1]
This uses blkid, but almost certainly only passes blkid a device node that represents '/'. It basically does a stat on /, gets major and minor, creates a device node that has the same major, minor and calls blkid on that like:
blkid -c /dev/null -sTYPE -ovalue /tmp/THATDEV
It does this to find the filesystem type of /.
b.) cloudinit/DataSourceOVF.py [2]
This would run early in the boot, and possibly race with fsck. It is trying to determine if each device in /dev matching '^(sr[0-9]+|hd[a-z]|xvd.*)' is a cdrom. Notable in that list is 'xvd.*'. If that a device matching that is not mounted, then we do a read(512) in an attempt to determine if there is media in the CD-ROM drive, and if *that* succeeds, it will try to mount read-only and look for some files, then unmount.
It seems to me that 'b' is a potential source of the issue, as either the 'read()' or the mount, check, umount could cause the resource busy option.
2 things that could address that:
a.) restrict devices being checked to 'xvd[a-z]' (eliminating the possible mount of /dev/xvda[0-9] entirely. This could still cause issue on other devices like /dev/xvdb.
b.) mount with 'ro,noload' (per 'man mount')
I'm *guessing* that fsck is trying to open the device in read-only and the mount in 'b' is not truely read-only.
Any thoughts on how I can essentially poll these devices looking for "ovf data" and avoid this race?
Woudl a badly timed 'read()' interfere with fsck ? (ie, if it was an open RO, not RW?)
One thing that would filter out this device would be to filter out non-CD ROM devices, but I actually like the fact that the device does not have to be a CDROM.
I think there are 2 things that could be causing this from cloud-init: CloudConfig/ cc_resize. py [1]
a.) cloudinit/
This uses blkid, but almost certainly only passes blkid a device node that represents '/'. It basically does a stat on /, gets major and minor, creates a device node that has the same major, minor and calls blkid on that like:
blkid -c /dev/null -sTYPE -ovalue /tmp/THATDEV
It does this to find the filesystem type of /.
b.) cloudinit/ DataSourceOVF. py [2] 9]+|hd[ a-z]|xvd. *)' is a cdrom. Notable in that list is 'xvd.*'. If that a device matching that is not mounted, then we do a read(512) in an attempt to determine if there is media in the CD-ROM drive, and if *that* succeeds, it will try to mount read-only and look for some files, then unmount.
This would run early in the boot, and possibly race with fsck. It is trying to determine if each device in /dev matching '^(sr[0-
It seems to me that 'b' is a potential source of the issue, as either the 'read()' or the mount, check, umount could cause the resource busy option.
2 things that could address that:
a.) restrict devices being checked to 'xvd[a-z]' (eliminating the possible mount of /dev/xvda[0-9] entirely. This could still cause issue on other devices like /dev/xvdb.
b.) mount with 'ro,noload' (per 'man mount')
I'm *guessing* that fsck is trying to open the device in read-only and the mount in 'b' is not truely read-only.
Any thoughts on how I can essentially poll these devices looking for "ovf data" and avoid this race?
Woudl a badly timed 'read()' interfere with fsck ? (ie, if it was an open RO, not RW?)
One thing that would filter out this device would be to filter out non-CD ROM devices, but I actually like the fact that the device does not have to be a CDROM.
-- bazaar. launchpad. net/~ubuntu- branches/ ubuntu/ precise/ cloud-init/ precise/ view/head: /cloudinit/ CloudConfig/ cc_resizefs. py bazaar. launchpad. net/~ubuntu- branches/ ubuntu/ precise/ cloud-init/ precise/ view/head: /cloudinit/ DataSourceOVF. py
[1] http://
[2] http://