How do I change the device on which ubuntu boots?

13,210

You should try setting one of:

GRUB_DEVICE_UUID=2586eee0-5f24-462b-b44d-5c9a25aebe6c
GRUB_DEVICE=/dev/sdb

in the file: /etc/default/grub

Then run: sudo update-grub

Share:
13,210

Related videos on Youtube

Benjamin Crouzier
Author by

Benjamin Crouzier

I am a former developer (rails/react/aws/postgres), and I now study AI and cognitive science full-time. Currently living in Paris. Github profile: https://github.com/pinouchon Blog: http://pinouchon.github.io/

Updated on September 18, 2022

Comments

  • Benjamin Crouzier
    Benjamin Crouzier over 1 year

    I have a laptop with an internal SSD (let's call it samsung-SSD), and I would like to install ununtu 12.04 on an external SSD connected via USB3 (let's call this one vertex2).

    I downloaded an ubuntu iso and created a bootable usb key from it.

    Then I booted on the usb key, and followed the ubuntu install:

      /dev/sda is the internal samsung-SSD.
      /dev/sdb is the usb key from which I am installing
      /dev/sdc is the external vertex2 on which I am installing.
    

    The install completes, I boot ubuntu this time from the vertex2. But as the usb key is not here anymore, the vertex2 is known as /dev/sdb. Ubuntu tried to boot on /dev/sdc and fails, because /dev/sdc does not exist.

    So a BusyBox terminal shows up, with the message

    Gave up waiting for root device. Common problems...

    In this terminal, I can do the following:

    # only vertex2 is plugged
    > ls /dev | grep sd
    /dev/sda # samsung SSD
    /dev/sda1
    /dev/sda2
    /dev/sdb # vertex2
    
    # removing vertex2
    > ls /dev | grep sd
    /dev/sda # samsung SSD
    /dev/sda1
    /dev/sda2
    
    # pluging usb
    > ls /dev | grep sd
    /dev/sda # samsung SSD
    /dev/sda1
    /dev/sda2
    /dev/sdb # usb stick
    
    # pluging vertex2 in addition to usb stick
    > ls /dev | grep sd
    /dev/sda # samsung SSD
    /dev/sda1
    /dev/sda2
    /dev/sdb # usb stick
    /dev/sdc # vertex2
    

    Now the vertex2 is know as /dev/sdc (as during the the install).

    > exit # this command tries to resume the boot process
    

    And this way I can boot on ubuntu.

    So my question is: how do I configure ubuntu so that it tries to boot on /dev/sdb instead of /dev/sdc?

    Can I achieve that with mount and chroot?

    Edit: my fstab:

    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sdc2 during installation
    UUID=2586eee0-5f24-462b-b44d-5c9a25aebe6c /               ext2    errors=remount-ro 0       1
    # swap was on /dev/sdc5 during installation
    UUID=56498034-3361-4d7d-ae7f-dc8e69b582ed none            swap    sw              0       0
    

    What I don't understand is that in my fstab, the vertex2 is known by it's UUID. So it shouldn't matter if it appears as sdb or sdc. And yet I am able to boot only when it appears as sdc... I tried to replace the vertex UUID by sdb in the fstab, and it didn't help. It's like some other file is used to mount drives on boot.


    Edit 2: In the boot menu, I can edit entries. If I edit the ubuntu entry (by pressing e), I see this text:

    recordfail
            gfxmode $linux_gfx_mode
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd2,msdos2'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd2,msdos2 --hint-efi=hd2,msdos2 --hint-baremetal=ahci2,msdos2  25\
    86eee0-5f24-462b-b44d-5c9a25aebe6c
            else
              search --no-floppy --fs-uuid --set=root 2586eee0-5f24-462b-b44d-5c9a25aebe6c
            fi
            linux   /boot/vmlinuz-3.5.0-17-generic root=/dev/sdc2 ro   quiet splash $vt_handoff
            initrd  /boot/initrd.img-3.5.0-17-generic
    

    If I change sdc2 to sdb2, and press f10 to resume boot, ubuntu boots sucessfully (no BusyBox prompt).

    This text is located in /boot/grub/grub.cfg. But I should not edit it directly. It has this header:

    #                                                                                                                                
    # DO NOT EDIT THIS FILE                                                                                                          
    #                                                                                                                                
    # It is automatically generated by grub-mkconfig using templates                                                                 
    # from /etc/grub.d and settings from /etc/default/grub                                                                           
    #   
    

    I see no /dev/sdc2 in the grub config :

    > sudo grep -r "sdc2" /etc/grub.d/
    > #no results
    

    Where sdc2 comes from ? How do I change it permanently to sdb2 ? (The change in the boot menu is only temporary.)

    • Admin
      Admin about 11 years
      I don't think I can really help too much, but I know in some cases (e.g. fstab), you can refer to devices by either sda1, etc. or by UUID. Obviously the latter is preferred, as it is more stable. I suspect this is similar behaviour for mount, too.