grub2 confusion

Michal Jaegermann michal at harddata.com
Fri Oct 7 02:11:51 UTC 2011


On Thu, Oct 06, 2011 at 05:05:06PM -0600, Eric Blake wrote:
> On 10/06/2011 05:01 PM, Michael Schwendt wrote:
> >>> you would not notice any troubles.
> >>
> >> Umm, yes you would.  That's not atomic, and risks leaving things in an
> >> inconsistent state.
> >>
> >> http://www.flamingspork.com/talks/2007/06/eat_my_data.odp
> >> http://www.pixelbeat.org/docs/unix_file_replacement.html
> >
> > cp -f ${grub_cfg}.new ${grub_cfg} ; rm -f ${grub_cfg}.new
> >
> > Better?
> 
> No.  cp is not atomic.

I think that in this particular case you are overdoing that concern.
These are small files and real writes are in blocks and not
characters.

> rename(2) (via mv(1), if both files are on the 
> same device) is.  Any solution that does not use rename(2) is flawed, 

Only with this caveat that the current use of mv in grub2-mkconfig
is not only flawed but also clearly completely broken.  If you want
to keep 'mv' then you first have to use 'readlink' on a target and
replace that target if readlink returns a non-empty string.  Why
not after all?  Something like that

    while target="$(readlink ${grub_cfg})" ; do
	grub_cfg="${target}"
    done

in case you would have multilevel symlinks.

     Michal


More information about the test mailing list