Linux Partitions - Online Article

Inroduction

Most computer users are aware of the existence of their hard drive, even if they're not familiar with how it works. It's hard not to be, since the first things people tend to ask when you get a new computer are how much hard drive space you have, how fast the machine is, and how much memory is included. From there, if you're used to using Windows, then you've probably dealt with the installer letting you break your hard drive into "multiple drives," probably referred to as C:, E:, F:, and so on.

You may not realize it, but if you've done this, you've already created partitions. A partition is a virtual drive inside a drive, created through storing information about the drive's virtual layout in special locations on the drive itself. The system's BIOS and operating system(s) then utilize this information to determine where to look on the drive for boot instructions and data.

A hard drive may look like a short, rectangular box, but the data is stored on a round section that looks somewhat like a stack of records. The way data gets written to and read from this drive involves drive heads, which are housed on the carriage. Each of these electromagnetic heads alters data on a hard drive by manipulating the magnetic media at such a miniscule level that the head turns on and off individual bits and bytes.

When a PC boots, once the BIOS finishes loading hardware information, it looks to the very first spot on the hard drive, which is referred to as the Master Boot Record (MBR). How do we find this spot? The data on a hard drive is stored in a series of rings called tracks, and the tracks are subsequently broken up into equally sized pieces called sectors. Tracks are numbered from 0 on up, and the counting starts at the outermost ring. Sectors are numbered from 1 on up.

The MBR is on track 0, sector 1: the very first location on the drive. In this tiny spot on your hard drive, two key pieces of information live. The first is the data on how many partitions you've created on the drive, and their vital statistics. The second is vital to whether your machine will boot properly or not without a floppy disk: the MBR contains a pointer to the specific partition or hard drive that has the boot information.

If you're familiar with Linux installation, then you'll know that the boot loaders LILO and GRUB place information in the MBR.

Partition Basics

When you partition a hard drive, you're creating a virtual drive within a drive. Rather than dealing with tracks and sectors, though, you're dealing with cylinders. A hard drive these days is actually a stack of platters with drive heads that work with the top and bottom of each platter. Every one of those platters has identical tracks and sectors, and a cylinder is comprised of the data contained within a particular ring of tracks.

There are BIOS limits on the number of partitions you can have on a single drive in a PC. Perhaps one day this issue will change, when drives get so large that you might want more than sixteen partitions, but until then I wouldn't expect it to change soon. How you lay out these partitions is important, since of those sixteen partitions, only four of those can be primary, the rest have to be logical. So if you want one through four partitions then make them all primary. If you want five through sixteen partitions, then you make three of the partitions primary, the fourth a special type of container partition an extended, and then you make as many as you need (up to a total of sixteen) as logical partitions inside the extended one.

You might notice that you don't really get sixteen partitions out of the deal. You get fifteen, since the extended partition is just a container for other partitions, you won't have any data in it.

How Linux Sees Drives and Partitions

In the Windows world, partitions and hard drives are labeled exactly the same way, starting with C:, then D:, and so on. In the Linux world, each drive also has a letter associated with it, and from there it gets more complicated (but in the end it makes a lot more sense once you understand it).

The primary drive in your machine is drive a, the secondary is b, and so on. Then you have to distinguish between an IDE drive, and a SCSI drive; most people these days use IDE drives in their home computers. Linux sees all IDE drives as hd, and all SCSI drives as sd.

Therefore, if the first drive on your machine is an IDE, then Linux sees that drive as hda. The second IDE drive is hdb, and so on. If your first drive is a SCSI, then it's seen as sda, the second as sdb, and so on. On a machine where for some odd reason you've mixed and matched hardware between SCSI and IDE, Linux will letter the drives in the order that the computer sees them.

Now on to the partitions, each partition gets a number. No matter what drive we're talking about, the partitions are simply numbered in order: 1, 2, 3, 4, and so on. The number is then tacked onto the end of the drive reference, so the first partition on the first IDE hard drive is hda1, the second on that drive is hda2, etc. If your second drive is a SCSI, then you'd end up with sdb1, sdb2, sdb3, and so on.

It is necessary to understand the fact that everything to Linux is a file. Your hard drive is a file, your partitions are files, your printers are files, your directories are files, your monitor's a file, and so on.

All devices on your system (pieces of hardware that Linux needs to interact with) have a corresponding file in the /dev directory. This fact includes both your hard drives and your partitions. This is why, you see references to /dev/hda1, /dev/hda2, and so on. That's how the Linux kernel looks at your drives and partitions. The nice thing is that, each type of hard drive needs a different driver to interface with the kernel.

Aside from the drive designators (/dev/hda1, etc.), your partitions are named after where you want the kernel to place them within the filesystem. Unlike Windows where you treat every partition as a different drive, Linux leaves the physical locations out of it and just lets you navigate through directories and files. So your root directory (/) might be on /dev/hda1, your home directories (all stored in /home) might all be on /dev/hda2, and then maybe Someone's home directory (/home/ Someone) is even on another machine across the network but you're using NFS to attach it to this machine as well.

Setting Up Your Partitions

You create Linux partitions during the installation process. How many you make depends on quite a number of factors. Let's start with the general ones that all Linux machines must have and work from there.

All Linux boxes need a root partition (/), and a swap partition. Typically speaking, you want the boot partition as close to the start of the drive as possible, so on the lowest cylinder number, which means that if you only used these two partitions you would put root on the drive first-making root /dev/hda1 and swap /dev/hda2. The swap partition, in general, should be either the same size as your machine's memory (RAM), or up to twice that size. Root's size depends on how much room your particular Linux distribution requires.

You can make more than two partitions, and in most cases you should. At the very least, I tend to advise making a boot partition (/boot) as well, and placing that on the drive first. That way, if something in your root partition gets damaged, at the very least you'll be able to boot the machine to try to fix it. Another popular addition is a home partition (/home), so that if you want to completely reinstall the machine you can wipe everything but leave home untouched-though keep in mind that if you do this, you need to create user accounts in the same order as you had the last time or your permissions will be quite messed up in /home.

When you're dealing with servers, there are even more partitions you might want to create. A temporary partition (/tmp) will make sure that temp files can't fill up your filesystem, and also protects the root and boot portions from potential damage since temporary files are changed so often. For the same reason, on a server machine you might want to create a separate /var partition, since that's where your log files, mail, and other such items are kept and constantly changed.

If you're using a network and want to keep certain items on a central machine, then you might create a separate /usr partition on the server and then mount it using NFS onto all of your Linux boxes. You might do the same with /home, so everyone has access to their full home directories no matter what machine they log into.

If you are using Samba Server to access files from Windows, Macintosh, and other machines on your network, then they too will ultimately show up as partitions plugged into your filesystem.

Linux deals with drives and partitions quite differently from other non-Unix operating systems. It takes a bit of getting used to, but once you understand the basic concepts life gets a lot easier. The nice thing is that you don't have to remember what drive you have particular types of data on.

About the Author:

No further information.




Comments

No comment yet. Be the first to post a comment.