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