grub2 confusion

Michael Schwendt mschwendt at gmail.com
Thu Oct 6 23:33:47 UTC 2011


On Thu, 06 Oct 2011 17:05:06 -0600, EB (Eric) wrote:

> > cp -f ${grub_cfg}.new ${grub_cfg} ; rm -f ${grub_cfg}.new
> >
> > Better?
> 
> No.  cp is not atomic.  rename(2) (via mv(1), if both files are on the 
> same device) is.  Any solution that does not use rename(2) is flawed, 
> because an ill-timed power-outage will leave the file in an inconsistent 
> state.  What you want is that ${grub_cfg} _always_ exists, and is either 
> the unchanged original, or atomically the contents of the new 
> replacement.  Anything else is a recipe for disaster, for something as 
> important as the files that control how you boot your machine.
> 
> > I assume you are not concerned about the removal of the temporary
> > local file in the second step,
> 
> Not as much as I am that ${grub_cfg} always exist, and always have valid 
> contents.

Whether the latter is ensured [yet], I dunno, because the
/usr/bin/grub2-script-check isn't mentioned anywhere other than in the
ChangeLog file. No idea how mighty it is without visiting the source.
It's written in C. There's a lot more in grub2 menu entries which can
be damaged.

Brute-force work-around so /etc/grub2.cfg becomes usable:

--- /sbin/grub2-mkconfig	2011-09-14 22:21:35.000000000 +0200
+++ /home/misc16b/grub2-mkconfig	2011-10-07 01:18:53.922155628 +0200
@@ -257,6 +257,9 @@
   GRUB_BADRAM
 
 if test "x${grub_cfg}" != "x"; then
+  if [ -L "${grub_cfg}" ] ; then
+    grub_cfg=$(readlink ${grub_cfg})
+  fi
   rm -f ${grub_cfg}.new
   exec > ${grub_cfg}.new
 


More information about the test mailing list