[Bug 1215911] [NEW] wait-for-root fails to wait for plain /dev/sdaX partitions.

Launchpad Bug Tracker 1215911 at bugs.launchpad.net
Thu Sep 5 21:40:57 UTC 2013


You have been subscribed to a public bug by Chris J Arges (arges):

SRU Justification:
[Impact] 
  * Boot failures can occur with the wait-for-root utility in P/Q/R due to a race condition.
  * Because of this issue unattended reboots and boots can randomly fail.
  * The original bug was submitted against Precise LTS.

[Test Case]
 * Reboot machine and look for "ALERT! /dev/sda1 does not exist. Dropping to a shell!". Entering exit from prompt should boot system normally.
 * We expect that continuous reboots should allow for the machine to boot normally without this alert.

[Regression Potential] 
 * This patch has already been uploaded into Saucy, and tested.

--

Moving the discussion from http://www.spinics.net/lists/hotplug/msg05769.html
to launchpad, for I think that this bug needs to be handled in initramfs-tools
package rather than in udev package.

----------

I'm experiencing random boot failures with wait-for-root utility in Ubuntu
12.04 ( ubuntu-12.04-server-amd64.iso ) on a HP ProLiant DL360p Gen8 server.

For example, wait-for-root waited for only 0.13 seconds before giving up
at

  FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})

line in scripts/local in the initramfs, and  immediately enters into

  panic "ALERT!  ${ROOT} does not exist.  Dropping to a shell!"

line.

This is a race condition and manually entering "exit" from the panic prompt
boots the system normally. This is a critical bug for this environment because
it will randomly fail to perform unattended reboot (e.g. automatic reboot after
saving kdump).

----------

I examined main() in wait-for-root using debug fprintf() and it turned out that
udev_monitor_receive_device() is sometimes immediately returning NULL (although
wait-for-root is using blocking socket).

I examined udev_monitor_receive_device() in libudev.so.0 using debug fprintf()
and it turned out that recvmsg() in udev_monitor_receive_device() (which is in
libudev-monitor.c in udev package) is returning ENOBUFS error before recvmsg()
returns information of the root partition.

The wait-for-root utility in initramfs-tools package is not expecting recvmsg()
to return ENOBUFS error. But since ENOBUFS is an inevitable error, I think that
wait-for-root (i.e. the caller of udev_monitor_receive_device()) should handle
this error.

** Affects: initramfs-tools (Ubuntu)
     Importance: Medium
     Assignee: Martin Pitt (pitti)
         Status: Fix Released

** Affects: initramfs-tools (Ubuntu Precise)
     Importance: Medium
     Assignee: Chris J Arges (arges)
         Status: In Progress

** Affects: initramfs-tools (Ubuntu Quantal)
     Importance: Medium
     Assignee: Chris J Arges (arges)
         Status: In Progress

** Affects: initramfs-tools (Ubuntu Raring)
     Importance: Medium
     Assignee: Chris J Arges (arges)
         Status: In Progress

-- 
wait-for-root fails to wait for plain /dev/sdaX partitions.
https://bugs.launchpad.net/bugs/1215911
You received this bug notification because you are a member of Ubuntu Sponsors Team, which is subscribed to the bug report.



More information about the Ubuntu-sponsors mailing list