Archive for September, 2012
root array, dracut, and block IDs
by balleman on Sep.03, 2012, under Linux
This cost me too much time yesterday and today, so I’ll share it with the world in case I happen to save someone time.
I have been migrating hard drives within my Fedora 16-based server over the past months (yes, it’s taking way too long). A project this weekend was to migrate the root file system from one drive to another. The initial and final states are mdraid mirrors, but in the interim there are two degraded mdraid mirrors – one for the old, one for the new. In attempting to boot from the new device, the boot would fail in dracut rescue mode. I could proceed with mdadm -As ; exit
but no matter what I looked at or tried, I could not get the process to proceed on its own. In desperation, I tried adding mdadm -As
into a custom dracut module or as part of the stock mdraid module – no luck. Eventually, after turning on and wading through all dracut debugging I could find, which didn’t really help other than making me read the dracut mdraid scripts, the obvious error was revealed. The format of the UUID field that dracut uses is matched against the output of mdadm --examine
, and I had copied-and-pasted the output of blkid
instead. Only after lining them up did I realize that although the identifiers are the same, the format is different:
blkid: c72b5415-c310-9955-c694-43f9004a021b mdadm: c72b5415:c3109955:c69443f9:004a021b
The particular kernel line fragment is now: root=UUID=69c0f668-d395-4d45-b3df-5835240a0986 rd.md.uuid=c72b5415:c3109955:c69443f9:004a021b
So… if you’re setting rd.md.uuid
in order for dracut to assemble your root array and it’s not working, make sure the parameter is formatted in mdadm
style, and not blkid
style!
Another tip on the subject: Always make GRUB2 changes using /etc/sysconfig/grub
and/or /etc/default/grub
and then re-build the grub.cfg
file using grub2-mkconfig
. Also, don’t use a symlink as a parameter for grub2-mkconfig -o
. This will remove the symlink and write a new file at the location of the symlink, not the target. And hence, your changes won’t have happened.