Language Selection

English French German Italian Portuguese Spanish

How-to Edit Grub

Filed under

So you've just installed your second, or third, or ninth Linux distribution and it either didn't recognize all your installs or you chose to skip that phase of the install. Of course you'd like to be able to boot all of these installs. Editing the grub.conf (or menu.lst) is an easy peasy procedure once you have an elementary understanding of the basic components.

If you are editing your Grub menu then we'll assume you already have it installed. This howto is to merely add an additional system to the existing file. This howto was inspired by this poor chap who resorted to reinstalling a whole system in order to update his Grub menu. No one should have to do that. Hopefully this will help.

Now I'm far from an expert, but having had to recently learn how to do this myself, I think I'll share what I do. The main advantage of using Grub is that editing the menu file is all that's necessary - as opposed to Lilo which requires one to rerun the Lilo program to reinstall it into the mbr.

The first thing I do is copy and paste an existing entry. No sense in retyping all of that and chances are you will probably want to use the same kernel parameters for the new install that you've used for previous. So:

  1. Copy and paste your favorite existing entry either where you think you'd like it or at the end of the list.

  2. Start the edit. The first thing one might need to consider is the title. This is easy, just change it to a meaningful name for your new install. In "Tryst's" case, he needed a new entry for PCLinuxOS 2007. So, he could have used PCLOS2007. Unlike Lilo, with Grub you can use names with spaces, so he could have used PCLOS 2007 if he chose.

  3. Now the bit more tricky part, the root. This is the component that specifies where the boot kernel is. Is it in a shared /boot partition or is it in the /boot directory of the new install?

    • First case scenario: Let's say you told the installer about your seperate /boot partition and it installed the boot kernel into it. The root component must then point to your shared /boot partition.

      The format might look scary at first, but it isn't. In the true Unix fashion, it begins its numbering with 0 (zero). The first number indicates the harddrive number. So, hda is 0, hdb is 1, hdc is 2, and so on. So, more than likely your boot partition is located on hda and in which case 0 is the number you want there. Just remember it's N - 1.

      The second number is the partition number. Again, hda1 is 0, hda2 is 1, and so on. So, say your /boot partition is located at sda5 you'd want to put a 4 there. So, your root entry might look like so:

      root (hd0,4)

    • Second scenario: You told the installer to install Grub onto the / (root) partition of the new install or you chose to skip installing Grub altogether. In this case the root component needs to point to the install partition. So, for example, say your new system is installed on hdb8, your root parameter should read:

      root (hd1,7)

  4. The next component is the kernel. This entry can contain lots of boot parameters but the most important is the correct name of the boot kernel. So, ls the /boot partition or directory to get that name.

    • If it's in a shared /boot partition you will need to just specify the name of the kernel as if in the working directory, like so:


    • If it's on the install partition, then it will need to list the directory on that partition in which the boot kernel is found, like so:


      • Another necessary component of the kernel line is the root partition. This is in the more tradition partitioning scheme and points to the install partition. So, in our example, it should point to hdb8 like so:

        root=/dev/hdb8 (or root=/dev/sdb8)

      • Next is the resume. If you wish to use some advanced powersaving features such as suspend to disk, then you'll want a resume parameter listed. This is your swap partition where the disk image is stored. Again, the format is the more commonly used /dev/hdxX pattern. In my case, my swap is /dev/sda6, so it should look like:


      • You may also have other kernel parameters set here, such as splash=silent, vga=788, or noapic, whatever. These are system specific and usually already in place if you just copied an original working entry as in step 1.

  5. The final necessary component is the initrd. Not all boot kernels use or require an initrd, but most larger modern systems like openSUSE, Mandriva, and PCLOS do. This usually contains filesystem modules you might need to mount the system partition or the purdy boot splashes we like so much. You can tell if you need one by issuing ls -t in /boot directory of the new system or in the shared /boot partition. -t tells it to list by time, so you can see your newest files first. If one doesn't exist in the /boot directory, or you can't find one that matches the boot kernel, then you can assume you don't need one.

    If there is one listed, then you'll need to tell Grub about it. In "Tryst's" case, he does. So:

    • First case scenario: initrd /initrd-

    • Second case: initrd /boot/initrd-

That's it, that should get you in. If you need to, you can temporarily edit any grub entry at boot time, usually by hitting the "e" key. You will probably have to hit "e" again when the edit the entry screen appears to edit the particular component. Then you can hit "b" to boot it. You'll need to edit the grub.conf (or menu.lst) to make it permanent.

As stated this is how I do it and there is a lot more to Grub than discussed here. But hopefully this will help one edit their grub.conf or menu.lst file to boot their new Linux partitions.

PS. Windows and Unix (bsd) use entries like so:

title windows
root (hd0,0)
chainloader +1


I use chain loader

It's good to see the subject nailed down in plain English. I found out about the chain loader method you mention from the PCLinuxOS documents for the previous version.

First, when I install a distro, I tell the installer to write the grub menu to the first sector of the root partition (i.e. the partition to which I'm installing) instead of the master boot record. The 'buntus just will not co-operate with that, so they get short shrift. I also become hypercritical of any distro which does not give me the option of using grub.

Secondly, before even beginning the installation, I add a verse like the following to menu.lst in the distro which has grub installed on the master boot record:

title KateOS_3.2
root (hd0,2)
chainloader +1

When you select that distro from the main grub menu, you then get the separate grub menu provided by the distro itself, with different options for logging in to that distro.

Advantages to using that method:
1. You can boot into the new system from the grub menu as soon as you have finished the initial installation;
2. The installer works out all the difficult technical stuff and you reduce the scope for typing errors;
3. You enable the new distro to have several options for booting, usually simple, non-fb and fail-safe.

1. There is a double choice to make and a double time lag. You can reduce the time lag on the second menu and make the distro the default choice if you wish.

This is how I eventually fixed it! (From "the poor chap")

Hey thanks for your effort, but what you wrote, for a person like me, was tooo scary. Really, I'm one of these people who find it difficult to read too much technical stuff... and so I found it difficult (and scary) to read your help. But you did inspire me to fix my GRUB immediately, and so, I did. And this is how I did it.

Firstly, taking on from your pointer, I realised that GRUB is just code. Thanks for that pointer.

Secondly, I realised that I actually needed to "cut and paste" only. Thanks for this pointer too.

However what I did, was I went to my openSUSE GRUB menu.lst and opened the file (using su) and then I copied openSUSE's boot code, which in my case was

title openSUSE 10.2
root (hd0,3)
kernel /boot/vmlinuz root=/dev/hdc4 vga=0x317 resume=/dev/hdc3 splash=silent
initrd /boot/initrd

I pasted this to the end (replacing my previous openSUSE detailed attempt). And then tested.

Viola, it worked!

Now I know that people like me are the bane of linux. Meaning, if I knew the code, I'd understand it... but instead, more and more, a generation of windows-based users are infiltrating linux and filling the space with a desire for 'easy' solutions. I try not to be one of them, but sometimes I am. However, I guess I have to go with my strengths. I don't think I will ever be friendly about understanding code (cut and paste solutions are just about all that I can do), and so I guess I want to thank you again for taking the time to address this issue... and hopefully there will be more people who will read your entry and actually UNDERSTAND what they're doing.


(ps. I'm going to paste this comment onto my blog along with a link to your post, because your solution actually looks and sounds really cool!)

It used to be worse

These days, BIOSes on modern motherboards work great with GRUB (and, presumably, LILO -- but, as you noted, GRUB has the advantage of not having to be reinstalled to the MBR each time its configuration file is changed). I had one computer in the mid 90s that flat would not boot using LILO, and another computer in the late 90s that would use LILO, but flat would not boot using GRUB.

There's nothing quite like a hang at boot time to induce panic, especially when you dual-boot. (Backup? What's a backup?) So afterwards, even through a succession of new computers and new motherboards, I first used loadlin, until MS-DOS went away, and then GRUB for Windows, which uses Windows' NTLDR. Finally, one day an install of openSUSE put GRUB on the MBR (even though I told it not to) and it worked just fine, so I gave in and started using "real" GRUB.

It's also really easy these days to pop in a Knoppix CD and make a backup of the MBR (with or without the partition table) and save it on a floppy.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

More in Tux Machines

Leftovers: Gaming

Leftovers: GNOME Software

  • GNOME Photos 3.18 App Gets Its First Hotfix Release Ahead of GNOME 3.18.1
    Earlier today, October 12, Debarshi Ray was happy to inform us all about the immediate availability of the first point release of his GNOME Photos 3.18 image viewer application for the soon-to-be-released GNOME 3.18.1 desktop environment.
  • View your GTK3 app or VM on the Web
    Ever wondered how to view gedit in a browser? It’s not a secret anymore, broadway is there for some time.
  • The new search for GNOME Files (aka Nautilus)
    As some (most? none? who knows =P) of you already know, last cycle I worked as a Google Summer of Code intern with Gtk+ and Nautilus. We saw the very positive results of it. And the picky eyes out there noticed that I wrote with these exact words: “While the project is over, I won’t stop contributing to Nautilus. Even with the interesting code, even with all the strange things surrounding it. Nautilus is like an ugly puppy: it may hurt your eyes, yet you still warmly love it.”

Linux Devices

  • Linksys WRT1900ACS Router is Ready for Open Source Tinkering
    We still regard the Linksys WRT1900AC as one of the best and fastest routers available, though if you're eyeing that model, there's a new version available with more memory and a faster processor. It's the WRT1900ACS, which is essentially an improved version of the WRT1900AC. The new model boasts a 1.6GHz dual-core processor, an upgrade over its predecessor's 1.2GHz chip; 128MB of flash memory (same as before); 512MB of DDR3 RAM, which is two times as much as the WRT1900AC; and eSATA and USB ports.
  • Linux Foundation Takes on Real-Time Computing for Embedded Apps
    What's the next step for open source in the embedded computing market? Google (GOOG), the Linux Foundation and other inaugural supporters of the Real-Time Linux Collaborative Project, which launched this month with a focus on the robotics, telecom, manufacturing, aviation, medical and similar industries, think kernel-level real-time support is the answer.
  • Your Last Chance To Crowdfund InvizBox Go, A Portable Open Source VPN Router
    A small Irish tech startup is in the last few days of crowdfunding for a small Linux-based router it’s hoping to ship out to supporters in February 2016. If its Kickstarter campaign is successful, InvizBox Go will offer users some protection when connecting to WiFi networks. Whether you’re at home, at a hotel, or working out of a coffee shop, the InvizBox Go will be able to connect your devices and route all of your traffic over Tor or a VPN connection (or even both). And since it can connect all devices simultaneously, it’s a great solution for keeping your housemates secure without requiring them to plug into anything or even download any software. Or, let’s face it, it’s also good for watching blocked content from around the world. Users will also be able to block a known list of ad providers. An optional feature will block Windows 10’s tracking domain. Additionally, the device can acts as a WiFi extender or even be used to charge a mobile phone or tablet if users plug into its USB port.
  • Irish firm’s product to mask online activity

Leftovers: OSS

  • Industry Veterans Partner to Create a School for Software Engineers
    Another interesting angle is that during their first year at school all projects except their own, if they decide otherwise, must be open sourced online on the repository of their choice (such as GitHub). "Open source is a great option for teaching students because it not only helps you in building new skills as as software engineers, but also you know how to communicate with your peers. You have to understand how the team is working among many things. So I think open source is a great way to learn software engineering," added Barbier. Because the Linux Foundation also runs many specialized courses, I asked whether the school had any plans to collaborate with the Foundation. I was told that, although they are in touch with the Linux Foundation, it's too early to comment on it.
  • Eximbank opts for Allevo’s open source application FinTP
    It originates from Allevo’s older offering, qPayintegrator. The open source project has been in the making for a few years.
  • Volkswagen’s Diesel Fraud Makes Critic of Secret Code a Prophet
    A Columbia University law professor stood in a hotel lobby one morning and noticed a sign apologizing for an elevator that was out of order. It had dropped unexpectedly three stories a few days earlier. The professor, Eben Moglen, tried to imagine what the world would be like if elevators were not built so that people could inspect them.
  • Mozilla to Bar Many Legacy Plug-ins in Firefox By End of 2016
    As we've reported several times, Google has been introducing big changes in its Chrome browser, especially when it comes to how the browser handles extensions. If you've regularly used either or both of the most popular open source Internet browsers--Google Chrome and Mozilla Firefox--then you're probably familiar with the performance and security problems that some extensions for them have caused. Mozilla, like the Chrome team, is also focused on the effect that extensions have on performance and reliability. Now, Benjamin Smedberg, a Mozilla senior engineering manager, in a post to a blog, has confirmed that Mozilla will bar almost all plug-ins built using decades-old NPAPI technology by the end of 2016.
  • What you need to know about Astara
    Astara provides OpenStack operators with a vendor-agnostic network orchestration platform that addresses the complex nature and scale of Neutron implementations. Astara features a driver-based orchestrator to manage network functions from different providers on bare metal, in virtual machines (VMs) and containers.
  • Mirantis, NetApp announce joint partnership
    Mirantis, the pure-play OpenStack company, has joined hands with NetApp and announced a joint partnership that combines the Mirantis OpenStack with mission-critical NetApp storage infrastructures.
  • Mirantis and NetApp Partner for Joint Testing, Cloud Reference Architectures
  • Introducing the Astara project, a preview of Liberty and Mitaka, and more OpenStack news
  • Taunton and Somerset trust explores wider open source adoption
    Taunton and Somerset NHS Foundation Trust has commenced "exploratory work" around expanding its use of open source technology to include an e-prescribing solution after going live with a non-proprietary electronic patient record (EPR) system earlier this month. Trust IT director Malcolm Senior said that although work around potentially adopting a new e-prescribing system was at an early stage, Taunton and Somerset was now considering dates for possible implementation. Senior said he was confident the trust would be able to meet a timeline for completing development of an e-prescribing service in line with aims for a 'paperless NHS' by 2018.
  • Nexenta Brings Open Source-driven Software-Defined Storage Solutions to the Dell Solutions Roadshow 2015 in Japan
  • Update Python GNUPG library for GNU Health crypto plugin
    Issues digitally signing and/or verifying GNUHealth documents, using GNUPG version 2.x should be solved by upgrading to the latest python-gnupg library[1], version 0.3.8 . You can check the changelog[2] for the details.
  • Another city swaps in LibreOffice to replace Microsoft Office
    Another city has decided to swap out Microsoft Office for the open source LibreOffice productivity suite. As ZDNet reported, the municipality of Bari in Italy is currently installing the open-source office software on its 1,700 PCs after a successful trial involving 100 PCs.
  • ODS Onsite Training - Onsite Training to the European Commission
    The course aims at enhancing the understanding of linked open data principles and technologies. By the end of the course, participants should have a clear understanding of what linked open data is and how linked data technologies can be applied to improve the availability, understandability and usability of EU data.