Grub2 detecting two Windows 7 (loader) entries

A quick solution if sda is a external drive

I don't know whether your /dev/sda hard drive is an internal or an external drive. If it is an external drive, Unplug the external drive before running update-grub2 command. This should help quickly.

Solution:

Mount the /dev/sda1 drive. (I assume you can do that very easily). Then in that drive look for a folder named Boot and a file named bootmgr. Remove both the folder and file. Then run update-grub2 command again.

You might want to install grub2 again. As I see your Ubuntu installation is at /dev/sdb, the commands will be

sudo grub-install /dev/sdb
sudo update-grub 

What was the cause of the problem:

Grub2 looks for the Windows boot files for detecting Windows entries. Though you removed Windows 7, the Windows 7 boot files aren't removed (which are "Boot" folder and "bootmgr" file). And as Windows 7 boot files are there, grub2 simply assumes that, there are Windows 7 installation also. Hence the dual entry.


You should find what you're looking for inside of /boot/grub/grub.cfg. This file is dynamically generated by update-grub2. I am dual booting Ubuntu 32bit and 64bit. If I wanted to remove one, I would simply delete it's section from this file. Here is what one of my entries looks like-

menuentry 'Ubuntu, with Linux 3.2.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root 94916094-afe9-4b74-9413-a3c54b39eb91
    linux   /boot/vmlinuz-3.2.0-23-generic root=UUID=94916094-afe9-4b74-9413-a3c54b39eb91 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-23-generic
}

Changes should take effect immediately, so make a backup and be careful. Also, anything you change in this file will be completely over written if you run update-grub2 again.