173

Grub2 - Community Ubuntu Documentation says the following:

Saving an OS can be achieved by running sudo grub-set-default if DEFAULT=saved is set in /etc/default/grub. It may also be saved if GRUB_SAVEDEFAULT=true is also set in /etc/default/grub. In this case, the default OS remains until a new OS is manually selected from the GRUB 2 menu or the grub-set-default command is executed.

I put the lines DEFAULT=saved AND GRUB_SAVEDEFAULT=true in /etc/default/grub, and ran sudo grub-set-default. Here is the output:

$ sudo grub-set-default
entry not specified.
Usage: grub-set-default [OPTION] entry
Set the default boot entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub
                          instead of the /boot/grub directory

ENTRY is a number or a menu item title.

Report bugs to <bug-grub@gnu.org>.

Am I not following the documentation correctly? What's the correct way to do this?

Lucio
  • 19,191
  • 32
  • 112
  • 191
Jay Sullivan
  • 2,079

5 Answers5

270

The documentation in this case is wrong. All variables in /etc/default/grub start with GRUB_, so the correct syntax is GRUB_DEFAULT=saved, not DEFAULT=saved. I've corrected the Ubuntu wiki to reflect that.

The official grub manual describes this correctly.
Put the following in /etc/default/grub (command line: gedit admin:///etc/default/grub):

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Then run:

sudo update-grub
zx485
  • 2,865
Jordan Uggla
  • 4,755
18

In my case it was not working for entries defined via /etc/grub.d/40_custom which were missing the savedefault line.

menuentry "Chameleon" {
    savedefault ### <<<< this must be added
    set root="(hd1)"
    chainloader +1
}
ccpizza
  • 1,564
  • 19
  • 20
5

savedefault will not work, if there is no proper header in auto generated grub.cfg

To generate proper header you need set in /etc/default/grub

GRUB_DEFAULT=saved

and make grub-mkconfig to substitute your copy of grub.cfg

grub-mkconfig -o /boot/grub.cfg

savedefault from Grub 2.02 don't require any additional arguments

You could see source of savedefault in grub.cfg

Dblmok
  • 51
4

You are forgetting the number (ie. the "ENTRY is a number or a menu item title." in your text).

sudo grub-set-default 1

for option 1 to be the default.

Always run sudo update-grub after modifying the /etc/default/grub file to apply the changes.

ish
  • 141,990
Rinzwind
  • 309,379
3

Thanks to ccpizza I figured out, that my Windows-menuentry in /etc/grub.d/40_custom was missing the savedefault Attribute:

menuentry 'Windows 10' {
    savedefault    # <<<<<<<<<<<< THIS Attribute was missing!
    insmod ntfs
    insmod ntldr
    insmod part_msdos
    insmod search_fs_uuid
    search --fs-uuid --no-floppy --set=root <WINDOWS_SSD_UUID>
    ntldr /bootmgr
}

In my case (Arch Linux, not Ubuntu ;) ) I found pacman -S grub-customizer (from this Post on StackOverflow of matt-u) which is a nice GUI Tool for customizing GRUB-Menu!

PS: I could neither upvote nor comment on ccpizza's answer because of missing credits in this forum, so I decided to give another answer :(

Pokulo
  • 31