Afraid of the dreaded "p" word?  You're not alone.  Partitions can get complicated, so here's an explanation of what they are, how they're used, and a simple template to use for your own Linux installation.

Image by dmyhung

What Are Partitions?

Partitions are divisions in the formatting of the hard disk.  It's a logical -- as opposed to a physical -- division, so you can edit and manipulate them for various purposes.  Think breaking a disk into two configuration parts.  Partitions are really handy because they act as a sandbox.  If you have a 1 TB hard drive partitioned into a 250 GB partition and a 750 GB partition, what you have on the latter will not affect the other, and vice versa.  You can share one of those partitions on the network and never worry about people accessing information on the other.  One could have Windows installed, riddled with viruses and trojans.  The other could be running a very obsolete, security-hole addled Linux installation.  Never shall the two interfere, unless either you make them or the hard drive itself physically dies.

The other useful thing is that you can have multiple partitions, each formatted with a different "file system."  A file system is a formatting of the disk into a table that the operating system can read, interpret, and write to.  Only have one hard drive?  That's okay, because you can still install multiple operating systems on it without actually having another physical disk.

While there are tons of file system types, there are only three kinds of partitions: primary, extended, and logical.  Any given hard disk can only have a maximum of four primary partitions.  This limitation is due to something called the Master Boot Record which tells the computer which partitions it can boot from, and so primary partitions are usually reserved for operating systems.  But what if we want more than four?  That's where the extended partition comes into play.  It serves as a hollow container for any number of smaller, logical partitions.  You can make as many as you like there, as well as make it home to your non-OS sections.

If extended partitions are so great, why not just use them?  That's because you can't directly boot from anywhere inside an extended partition.  There are ways to get around this, but the best thing to do is to plan properly beforehand with primary partitions.  In addition, the way partitions are numbered by the system depends on these types.  First, the machine will number based on all primary partitions, and then by logical ones.  This can cause changing drive letters if you switch between OSs or add or delete partitions later.

Mount Points in Linux

partition scheme (methoddan)

Image by MethodDan

On Windows, things are pretty clearly cut: it lives on your disk, usually on one partition, and that's that.  If you have other drives, and they have a compatible file system, then it'll read them as well.  If not, it'll usually ignore them, or offer you the ability to reformat.  Linux -- and anything resembling Unix, really - doesn't quite work that way.

The way Linux works is that it puts everything onto a tree.  If you have another partition or disk, it gets "mounted" as a branch in a specific folder, usually /media or /mnt.  The directory that a partition gets mounted to is called a "mount point."  This method works better with Linux's tree structure, and you can mount partitions as folders nearly anywhere.  In Windows, this is not so easily done; new partitions generally show up as separate drives.  In addition, Linux can work with many more types of file systems natively than Windows.

Remember how there could only be four primary partitions?  If you want to boot 145 OSs like someone on the JustLinux forums did, you can set up a primary partition for /boot, which houses a boot-loader, like GRUB or LiLo, which handles initial functions and then continues booting into the extended partitions.

What Scheme Should I Use?

The standard partitions scheme for most home Linux installs is as follows:

  • A 12-20 GB partition for the OS, which gets mounted as / (called "root")
  • A smaller partition used to augment your RAM, mounted and referred to as swap
  • A larger partition for personal use, mounted as /home

The exact size requirements change based on your needs, but in general you start with swap.  If you do a lot of multimedia editing, and/or have a smaller amount of RAM, you should use a larger amount of swap.  If you have plenty of memory, you can skimp on it, although some distributions of Linux have a problem going into standby or hibernating without much swap.  The rule of thumb is that you choose between 1.5 to 2 times the amount of RAM as the swap space, and you put this partition in a place that is quick to reach, like at the beginning or end of the disk.

Even if you install a ton software, a maximum of 20 GB for your root partition should be enough.  Most distributions of Linux use either ext3 or ext4 as their file system nowadays, which has a built-in "self-cleaning" mechanism so you don't have to defrag.  In order for this to work best, though, there should be free space for between 25-35% of the partition.

Finally, whatever else you have should go to your /home partition.  This is where your personal stuff is stored. It is functionally the equivalent of the "Users" directory in Windows, housing your application settings, music, downloads, documents, etc, and those of any other users you have on your system.  It's useful to have /home in a separate partition because when you upgrade or reinstall your OS, you don't have to backup anything in this folder!  Isn't that convenient?  To top it off, most of your program- and UI-related settings are saved as well!

Screenshot-Install

If you're running a server with a lot of users and/or a lot of media, you could optimize performance by using two hard drives.  A small solid state drive would be perfect for the OS to live on, maybe 32 GB at most, and you could throw the swap partition on the beginning of a 1 or 2 TB "green" drive that's mounted on /home.

If you're into more tinkering, you can even set up different partitions for things like the temporary directory (/tmp), for your web server's content (/var/www), for programs (/usr), or for log files (/var/log).

Specifying Mount Points During Installation

In our example, we'll be using showing the partition setup during an Ubuntu Maverick Meerkat installation.  When you get to where it says "Allocate drive space," choose "Specify partitions manually (advanced)."

installation manual

 

 

Don't panic just because you see "advanced"; it's really not that difficult and you'll be getting some real rewards from the process.  Click forward and you'll see the partition table.

new partition

Click on the free space row in the table and then click on "Add..."  If you don't have free space, click on your Windows partition, hit "Change..." and shrink it to a more palatable size.  This will give you some free space to work with.

Create partition

Here, you can see that I've created a Primary partition of about 11.5-odd GB at the beginning of the disk and I've specified it to use root as the mount point.  You will have to use a Linux-compatible file system, so I used the default ext4, although you can use ext2, ext3, ReiserFS, or whatever else.  Do some research online and you'll be able to choose the best, but if you're in doubt, stick to the default.  You can adjust yours to more space if you have it, but again, you probably won't ever need more than 20 GB unless you're installing/compiling a lot of software.  Click "OK" and you're set to create another partition.

swap

This time, as you can see, I've chosen a logical partition (the partitioning program automatically creates an extended partition for this).  Since this machine has a 512 MB of RAM, I've approximated 1.5 times that, and designated it as "swap area."  Also note that I've stuck this at the end of the disk, which will help keep disk seeking times at a minimum.  Click "OK," and let's create another partition.

home

I've selected all of the rest of the space in the middle to be my /home partition.  The compatible file system I've chosen is again ext4.  Now here is the gray area: should it be primary or logical?  I went with primary because I know that I won't be installing another OS on here, otherwise I would have gone with logical.  If you don't plan on installing more than three OSs, you can just make it primary for simplicity's sake.

When you're all finished, you can resume installation.  Here's my resulting partition table:

finished!

If you get cold feet, you can quit the installation at this point without fearing any data loss.  Nothing is actually done to your disk until you hit "Install Now," so you can go back and edit things as you wish.


Now that you know what partitions are and how to optimally set up your Linux installation, feel free to continue your search online.  There's a lot more to learn!  Have any advice or tricks to the process?  Maybe some useful experiences to share?  Be sure to leave a comment!

Linux Commands

Files

tar · pv · cat · tac · chmod · grep ·  diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr

Processes

alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap

Networking

netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts