426

I installed Windows 7, which ate Ubuntu's boot file. When starting up the computer, it now goes straight to Windows, without giving me the option of booting Ubuntu.

How can I get Ubuntu back?

Salahuddin
  • 4,811
  • 2
    Related (when GRUB was installed to the wrong drive's MBR): Grub rescue problem after installing ubuntu – Eliah Kagan Jan 21 '13 at 04:20
  • I know this is an old thread but I fixed the problem by changing the boot mode in the bios from UEFI to Legacy. –  Aug 13 '13 at 11:32
  • I think it is a common task, I also have two HDDs, and Ubuntu+Windows. I hope you can repair it with the right way. Try to follow this tutorial. Any questions, ask me! – antivirtel Dec 17 '11 at 07:24
  • Yes you can, you would just have to do a normal boot and install with windows and then it should show up in the Grub boot menu at the start-up of the computer. –  Jul 30 '13 at 18:51
  • 1
    NOTE: the accepted answer is a general instruction on how to repair grub. It is also applicable to the wide variety of circumstances when GRUB is written incorrectly by the installer (ubiquity). – Danatela May 14 '14 at 05:14

14 Answers14

462

When you install Windows, Windows assumes it is the only operating system (OS) on the machine, or at least it does not account for Linux. So it replaces GRUB with its own boot loader. What you have to do is replace the Windows boot loader with GRUB. I've seen various instructions for replacing GRUB by mucking around with GRUB commands or some such, but to me the easiest way is to simply chroot into your install and run update-grub. chroot is great because it allows you to work on your actual install, instead of trying to redirect things here and there. It is really clean.

Here's how:

  1. Boot from the live CD or live USB, in "Try Ubuntu" mode.

  2. Determine the partition number of your main partition. sudo fdisk -l, sudo blkid or GParted (which should already be installed, by default, on the live session) can help you here. I'm going to assume in this answer that it's /dev/sda2, but make sure you use the correct partition number for your system!

    If your main partition is in an LVM, the device will instead be located in /dev/mapper/, most likely, /dev/mapper/{volume}--{os}-root where {volume} is the LVM volume name and {os} is the operating system. Execute ls /dev/mapper for the exact name.

  3. Mount your partition:

     sudo mount /dev/sda2 /mnt  #Replace sda2 with the partition from step 2
    

    If you have a separate /boot, /var or /usr partitions, repeat steps 2 and 3 to mount these partitions to /mnt/boot, /mnt/var and /mnt/usr respectively. For example,

     sudo mount /dev/sdXW /mnt/boot
     sudo mount /dev/sdXY /mnt/var
     sudo mount /dev/sdXZ /mnt/usr
    

    replacing sdXW, sdXY, and sdXZ with the respective partition numbers.

  4. Bind mount some other necessary stuff:

     for i in /sys /proc /run /dev; do sudo mount --rbind "$i" "/mnt$i"; done
    
  5. If Ubuntu is installed in EFI mode (see this answer if you're unsure), use sudo fdisk -l | grep -i efi or GParted to find your EFI partition. It will have a label of EFI. Mount this partition, replacing sdXY with the actual partition number for your system:

     sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot into your Ubuntu install:

     sudo chroot /mnt
    
  7. At this point, you're in your install, not the live session, and running as root. Update grub:

     update-grub
    

    If you get errors or if going up to step 7 didn't fix your problem, go to step 8. (Otherwise, it is optional.)

  8. Depending on your situation, you might have to reinstall grub:

     grub-install /dev/sda
     update-grub # In order to find and add windows to grub menu.
    
  9. If Ubuntu is installed in EFI mode, and EFI partition UUID has changed, you may need to update it in /etc/fstab. Compare it:

     blkid | grep -i efi
     grep -i efi /etc/fstab
    

    If current EFI partition UUID (from blkid) differs from the one in /etc/fstab, update /etc/fstab with current UUID.

  10. If everything worked without errors, then you're all set:

    exit
    sudo reboot
    
  11. At this point, you should be able to boot normally.

If you cannot boot normally, and didn't do step 8 because there were no error messages, try again with step 8.

  • Sometimes giving GRUB2 the correct configuration for your partitions is not enough, and you must actually install it (or reinstall it) to the Master Boot Record, which step 8 does. Experience helping users in chat has shown that step 8 is sometimes necessary even when no error messages are shown.
  • 2
    Comments are not for extended discussion; this conversation has been moved to chat. – Thomas Ward Apr 07 '17 at 00:43
  • I still want Windows to be my primary boot OS. Is this still the right fix? How do I choose which OS to boot to? F11? – Jeff Jul 28 '17 at 16:34
  • This has no effect on which OS is primary. That's controlled in GRUB's settings, which is beyond the scope of this answer. This answer is concerned solely with restoring a borked GRUB. – Scott Severance Jul 28 '17 at 19:35
  • @ScottSeverance Unfortunately for me, there are other questions where that answer WOULD be in scope but are closed because they are a flagged as duplicate of this question. Over-ambitious moderation, I guess. – Jeff Jul 28 '17 at 21:27
  • @Jeff: I haven't dual booted for a number of years now, so I don't know too many details, but there is most definitely a way to configure which OS GRUB boots by default. Google for GRUB configuration for details, which I've long forgotten. I believe that you can also configure the Windows bootloader to chain load GRUB. You'll have to Google that as well as I've never attempted anything like that. – Scott Severance Jul 28 '17 at 21:33
  • @ScottSeverance Thanks. I'm already doing that now. I just wanted to vent about the overly ambitious moderation. – Jeff Jul 28 '17 at 21:36
  • 3
    @ScottSeverance I saw from your profile that you live in DFW. Have you considered giving classes or live tutorials to get people deep into Linux? – M J Sep 26 '17 at 01:06
  • I would enjoy doing so, but I don't know any Linux people in DFW, and don't really have the time to try to start a group from scratch. I've never researched what may already be available in this area. – Scott Severance Sep 26 '17 at 03:04
  • 3
    These problems don't get old :D – Not that when dealing with EFI, you might need to install grub-efi-amd64 and if you are using secure boot you'd want to use grub-install --uefi-secure-boot. This is also detailed in https://superuser.com/a/376471/197980 – Raffael Dec 01 '17 at 01:12
  • Hi, are you still there? I've tried this three times and lost about an hour and a half to this process and still can't get my Ubuntu back; it just defaults to Windows and when I hold F12 the only options are my USB stick and the Windows Bootloader. What else can I do? It's driving me mad. – jdc Mar 26 '18 at 05:22
  • @jdc, I suggest that you ask a new question, referencing this one, and giving specific details about your setup and what you've tried. Maybe someone here knows modern UEFI systems well enough to be able to help. – Scott Severance Mar 26 '18 at 13:10
  • I figured that would get closed as an exact duplicate, but I suppose it's the next step. Thank you for your response. – jdc Mar 26 '18 at 16:26
  • @jdc: These instructions have worked for lots of people, so assuming you've followed them correctly, you must be having a different underlying problem. – Scott Severance Mar 26 '18 at 16:33
  • @ScottSeverance: That's what I'm afraid of, that somehow my real problem doesn't have a solution. I saw the huge upvote count and thought I was saved, but I've gone through your process three times now with no luck. – jdc Mar 26 '18 at 16:54
  • This solution gave me : error file /boot/grub/../normal.mod not found, entering rescue mode, so I've tried the repair tool below instead . – user10089632 Mar 30 '18 at 11:50
  • 3
    This solution is applicable also for Windows 10 on computer with BIOS (i.e. not UEFI). The question about which one you have can be answered with this tip - https://www.thewindowsclub.com/check-if-uefi-or-bios. – okolnost Jun 27 '18 at 04:20
  • at least for me, the chroot to /mnt failed because /bin/bash wasn't available. The underlying problem, to which I don't see a solution, is that the system rooted at /mnt has to include /bin/bash, /lib, and /lib64. But the binds to these filesystems fail because there's no space available on the device. – Paul A. Sep 30 '19 at 10:55
  • 1
    @PaulA.: If you're missing /bin, /lib, or /lib64, just bind mount them, as well: mount --bind /bin /mnt/bin, etc. or better yet, figure out where they live on your system and mount the proper ones. – Scott Severance Oct 03 '19 at 02:07
  • 1
    I just want to say that as of may 2021 this still works. old dell laptop wit dual boot w10 ubuntu 20.04. windows update killed grub. this help me to restore the grub menu. steps 8 onwards were necessary – Nicolas Molano May 18 '21 at 16:11
  • Its 2021 and this answer is still helping me :) Which is both good and bad, bad that the problem persists ... – minisaurus Sep 25 '21 at 11:43
  • If you have deleted EFI partition, you should just create it again: https://askubuntu.com/a/743098/933016 Then you can install grub and load. – James Bond Dec 07 '21 at 17:40
  • I get "/mnt/sys: mount point does not exist". (also for proc, run ,dev). Does this indicate something has gone wrong? – Kvothe Jan 31 '22 at 11:38
  • @Kvothe: It sounds like something is wrong, but without more context it's hard to say what. – Scott Severance Jan 31 '22 at 11:51
  • @ScottSeverance, /dev/sda2 contains the folders boot-sav, lost+found, upper work. Is that what it should contain? – Kvothe Jan 31 '22 at 11:57
  • Sounds like sda2 isn't the partition you need. You'll need to figure out which one you need. See step 2. – Scott Severance Jan 31 '22 at 12:03
  • 2
    This almost worked for me after cloning my disk to a new replacement device. I was under dual boot as well, using EFI. During grub-install a warning was issued: grub-install: warning: EFI variables are not supported on this system... Based on this answer https://unix.stackexchange.com/a/693111 I had to use the --rbind flag instead of --bind in step no. 4, so it was for i in /sys /proc /run /dev; do sudo mount --rbind "$i" "/mnt$i"; done. – kprist Aug 31 '22 at 13:08
  • Excellent tutorial, needed step 8. and @kprist comment was useful too! Managed to restore LUKS encrypted LM boot. Scott Severance can you please add kprist reply ? I also got "EFI variables are not supported", also for LUKS we need to decrypt partition first (obvious but still) so that we can display encrypted volumes. – Aubergine Mar 26 '23 at 23:48
  • 1
    Just want to say thanks to both @ScottSeverance and @kprist . This saved my day. I also had to use --rbind in my case and running step 8 was mandatory. – SergioLeone Apr 14 '23 at 16:27
148

The Windows installer doesn't care about other OS in the system. So it writes own code over the master boot record. Fortunately the solution is easy too.

You need to repair the MBR. Do the following

Boot using a live usb/cd of ubuntu. Use boot-repair to fix the problem.

After booting with live usb/cd, run following command in terminal:

sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

Use Recomended Repair.

enter image description here

More info - https://help.ubuntu.com/community/Boot-Repair

Mikel
  • 6,558
Web-E
  • 21,418
  • 2
    you mean to say its intentional by the Microsoft people?? Also dual booting did work with windows 7 so doesn't it contradict your first line that "The windows installer doesn't care about other OS in the system." – Shagun Sodhani Sep 01 '12 at 07:04
  • 4
    Windows breaks grub all the time its a really common issue and one ive had to deal with myself. The answer is still good and should fix the problem. – damien Sep 01 '12 at 07:18
  • 11
    you have installed windows 7 first then linux. So linux recognize windows not windows recognized linux. Ttry reinstalling windows7, you will see what I meant. – Web-E Sep 01 '12 at 07:26
  • Don't do this when you have encrypted partitions (luks), it messed it up. It also reinstalls GRUB with apt-get - no idea why it's doing that. – Meng Tian Jan 05 '14 at 16:14
  • it does not act on luks partitions at all, so it cannot mess them up. And it uses apt-get only when GRUB purge is needed. – LovinBuntu Jan 08 '14 at 02:53
  • for this. Both solutions worked form but this is pretty useful for any newbie with no knowledge who could possibly get the issue fixed. I didn't loose any DATA's performing but, Pre-Tip: Make sure you back-up all your DATA's before performing. It is always a good practice to do so.
  • – AzkerM Jan 31 '14 at 13:13
  • It's worth noting the Boot-Repair only works with systems booted in EFI/UEFI mode, which is set in your machine's BIOS. If you are set up to boot your Ubuntu/Linux in Legacy mode, Boot-Repair won't work. – Fuzzy Analysis Dec 30 '14 at 12:09
  • 2
    boot repair supports legacy mode very well, perhaps you need to boot the live cd/usb in legacy mode as well @fuzzyanalysis :) – Web-E Jan 01 '15 at 14:08
  • @Shagun I agree. I removed it, since it's completely irrelevant to the otherwise correct answer. – Mikel Oct 05 '15 at 16:34
  • Just tried this in 14.10. apt-get update shows a bunch of 404 Not Found errors and the installation fails with Unable to locate package boot-repair. – Dan Dascalescu Feb 02 '16 at 16:51
  • No available for 14.10 See https://launchpad.net/~yannubuntu/+archive/ubuntu/boot-repair – Web-E Feb 04 '16 at 10:29
  • "Recommended repair" worked just fine when using an Ubuntu 16.04 bootable USB for saving an Ubuntu 14.04 installation from an eternity of fire and despair. – Krøllebølle Jun 29 '16 at 16:28
  • to be precise "Windows installer doesn't care about other non-Microsoft OSes in the system", because it will detect and list any DOS and Windows OSes available – phuclv Dec 31 '16 at 05:45