Gentoo Logo

[ << ] [ < ] [ Home ] [ > ] [ >> ]


4. Preparing the Disks

Content:

4.a. Introduction to Block Devices

Block Devices

We'll take a good look at disk-oriented aspects of Gentoo Linux and Linux in general, including Linux filesystems, partitions and block devices. Then, once you're familiar with the ins and outs of disks and filesystems, you'll be guided through the process of setting up partitions and filesystems for your Gentoo Linux installation.

To begin, we'll introduce block devices. The most famous block device is probably the one that represents the first drive in a Linux system, namely /dev/sda. SCSI and Serial ATA drives are both labeled /dev/sd*; even IDE drives are labeled /dev/sd* with the new libata framework in the kernel. If you're using the old device framework, then your first IDE drive is /dev/hda.

The block devices above represent an abstract interface to the disk. User programs can use these block devices to interact with your disk without worrying about whether your drives are IDE, SCSI or something else. The program can simply address the storage on the disk as a bunch of contiguous, randomly-accessible 512-byte blocks.

Partitions

Although it is theoretically possible to use a full disk to house your Linux system, this is almost never done in practice. Instead, full disk block devices are split up in smaller, more manageable block devices. On AMD64 systems, these are called partitions. There are currently two standard partitioning technologies in use: MBR and GPT.

The MBR (Master Boot Record) setup uses 32-bit identifiers for the start sector and length of the partitions, and supports three partition types: primary, extended and logical. Primary partitions have their information stored in the master boot record itself - a very small (usually 512 bytes) location at the very beginning of a disk. Due to this small space, only four primary partitions are supported (for instance, /dev/sda1 to /dev/sda4).

To support more partitions, one of the primary partitions can be marked as an extended partition. This partition can then contain logical partitions (partitions within a partition).

Each partition is limited to 2 TB in size (due to the 32-bit identifiers). Also, the MBR setup does not provide any backup-MBR, so if an application or user overwrites the MBR, all partition information is lost.

The GPT (GUID Partition table) setup uses 64-bit identifiers for the partitions. The location in which it stores the partition information is also much bigger than the 512 bytes of an MBR, and there is no limit on the amount of partitions. Also the size of a partition is bounded by a much greater limit (almost 8 ZB - yes, zettabytes).

When a system's software interface between the operating system and firmware is UEFI (instead of BIOS), GPT is almost mandatory as compatibility issues will arise with MBR here.

GPT also has the advantage that it has a backup GPT at the end of the disk, which can be used to recover damage of the primary GPT at the beginning. GPT also carries CRC32 checksums to detect errors in the header and partition tables.

So, GPT or MBR?

From the description above, one might think that using GPT should always be the recommended approach. But there are a few caveats with this.

Using GPT on a BIOS-based computer works, but you cannot dual-boot then with a Microsoft Windows operating system. The reason is that Microsoft Windows will boot in EFI mode if it detects a GPT partition label.

Some buggy BIOSes or EFIs configured to boot in BIOS/CSM/legacy mode might also have problems with booting from GPT labeled disks. If that is the case, you might be able to work around the problem by adding the boot/active flag on the protective MBR partition which has to be done through fdisk (parted understands the GPT tables and would not show the protective MBR partition):

Code Listing 1.1: Enabling boot flag on protective MBR

# fdisk /dev/sda
WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk
doesn't support GPT. Use GNU Parted.

Command (m for help): a
Partition number (1-4): 1

Command (m for help): w

Advanced Storage

The AMD64 Installation CDs provide support for LVM2. LVM2 increases the flexibility offered by your partitioning setup. During the installation instructions, we will focus on "regular" partitions, but it is still good to know LVM2 is supported as well.

4.b. Designing a Partitioning Scheme

Default Partitioning Scheme

If you are not interested in drawing up a partitioning scheme for your system, you can use the partitioning scheme we use throughout this book.

Partition Filesystem Size Description
/dev/sda1 (bootloader) 2M BIOS boot partition
/dev/sda2 ext2 128M Boot partition
/dev/sda3 (swap) 512M or higher Swap partition
/dev/sda4 ext4 Rest of the disk Root partition

If you are interested in knowing how big a partition should be, or even how many partitions you need, read on. Otherwise continue now with partitioning your disk by reading Default: Using parted to Partition your Disk (or Alternative: Using fdisk to Partition your Disk). Both are partitioning tools, fdisk is well known and stable, parted is a bit more recent but supports partitions larger than 2TB).

How Many and How Big?

The number of partitions is highly dependent on your environment. For instance, if you have lots of users, you will most likely want to have your /home separate as it increases security and makes backups easier. If you are installing Gentoo to perform as a mailserver, your /var should be separate as all mails are stored inside /var. A good choice of filesystem will then maximise your performance. Gameservers will have a separate /opt as most gaming servers are installed there. The reason is similar for /home: security and backups. You will definitely want to keep /usr big: not only will it contain the majority of applications, the Portage tree alone takes around 500 Mbyte excluding the various sources that are stored in it.

As you can see, it very much depends on what you want to achieve. Separate partitions or volumes have the following advantages:

  • You can choose the best performing filesystem for each partition or volume
  • Your entire system cannot run out of free space if one defunct tool is continuously writing files to a partition or volume
  • If necessary, file system checks are reduced in time, as multiple checks can be done in parallel (although this advantage is more with multiple disks than it is with multiple partitions)
  • Security can be enhanced by mounting some partitions or volumes read-only, nosuid (setuid bits are ignored), noexec (executable bits are ignored) etc.

However, multiple partitions have disadvantages as well. If not configured properly, you will have a system with lots of free space on one partition and none on another. Another nuisance is that separate partitions - especially for important mountpoints like /usr or /var - often require the administrator to boot with an initramfs to mount the partition before other boot scripts start. This isn't always the case though, so your results may vary.

There is also a 15-partition limit for SCSI and SATA unless you use GPT labels.

What about swap space?

There is no perfect value for the swap partition. The purpose of swap space is to provide disk storage to the kernel when internal memory (RAM) is under pressure. A swap space allows for the kernel to move memory pages that are not likely to be accessed soon to disk (swap or page-out), freeing memory. Of course, if that memory is suddenly needed, these pages need to be put back in memory (page-in) which will take a while (as disks are very slow compared to internal memory).

If you are not going to run memory intensive applications or you have lots of memory available, then you probably do not need much swap space. However, swap space is also used to store the entire memory in case of hibernation. If you plan on using hibernation, you will need a bigger swap space, often at least the amount of memory you have in your system.

What is the BIOS boot partition?

A BIOS boot partition is a very small (1 to 2 MB) partition in which bootloaders like GRUB2 can put additional data that doesn't fit in the allocated storage (a few hundred bytes in case of MBR) and cannot place elsewhere.

Such partitions are not always necessary, but considering the low space consumption and the difficulties we would have with documenting the plethora of partitioning differences otherwise, it is recommended to create it in either case.

For completeness, we can say that the BIOS boot partition is needed when GPT partition layout is used with GRUB2, or when the MBR partition layout is used with GRUB2 when the first partition starts earlier than the 1 MB location on the disk.

4.c. Default: Using parted to Partition your Disk

In this chapter, we guide you through the creation of the example partition layout mentioned earlier in the instructions, but repeat here again for your convenience:

Partition Description
/dev/sda1 BIOS boot partition
/dev/sda2 Boot partition
/dev/sda3 Swap partition
/dev/sda4 Root partition

Change your partition layout according to your own preference.

Viewing the Current Partition Layout

The parted application offers a simple interface for partitioning your disks and supports very large partitions (more than 2 TB). Fire up parted on your disk (in our example, we use /dev/sda). We will ask parted to use optimum alignment:

Code Listing 3.1: Starting parted

# parted -a optimal /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

Alignment means that partitions are started on well-known boundaries within the disk, ensuring that operations on the disk from the operating system level (retrieve pages from the disk) use the least amount of internal disk operations. Misaligned partitions might require the disk to fetch two pages instead of one even if the operating system asked for a single page.

To find out about all options supported by parted, type help and press return.

Setting the GPT Label

Most disks on x86/amd64 are prepared using an msdos label. Using parted, we can put a GPT label on the disk using mklabel gpt:

Warning: Changing the partition type will remove all partitions from your disk. All data on the disk will be lost.

Code Listing 3.2: Setting the GPT label

(parted) mklabel gpt

If you want the disk to have MBR layout, use mklabel msdos.

Removing all Partitions

If this isn't done yet (for instance through the mklabel operation earlier, or because the disk is a freshly formatted one), we will first remove all existing partitions from the disk. Type print to view the current partitions, and rm <number> where <number> is the partition you want to remove.

Code Listing 3.3: Removing a partition from the disk

(parted) rm 2

Do the same for all other partitions that you don't need. However, make sure you do not make any mistakes here - parted executes the changes immediately (unlike fdisk which stages them, allowing a user to "undo" his changes before saving or exiting fdisk).

Creating the Partitions

Now let's create the partitions we mentioned earlier. Creating partitions with parted isn't very difficult - all we need to do is inform parted about the following settings:

  • The partition type to use. This usually is primary. If you use the msdos partition label, keep in mind that you can have no more than 4 primary partitions. If you need more than 4 partitions, make a partition extended and create logical partitions inside it.
  • The start location of a partition (which can be expressed in MB, GB, ...)
  • The end location of the partition (which can be expressed in MB, GB, ...)

First, we tell parted that the size unit we work with is megabytes (actually mebibytes, abbreviated as MiB which is the "standard" notation, but we will use MB in the text throughout as it is much more common):

Code Listing 3.4: Using MiB units

(parted) unit mib

Now create a 2 MB partition that will be used by the GRUB2 bootloader later. We use the mkpart command for this, and inform parted to start from 1 MB and end at 3 MB (creating a partition of 2 MB in size).

Code Listing 3.5: Creating a 2 MB partition

(parted) mkpart primary 1 3
(parted) name 1 grub
(parted) set 1 bios_grub on
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/sda: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number   Start      End      Size     File system  Name   Flags
 1       1.00MiB    3.00MiB  2.00MiB               grub   bios_grub

Do the same for the boot partition (128 MB), swap partition (in the example, 512 MB) and the root partition that spans the remaining disk (for which the end location is marked as -1, meaning the end of the disk minus one MB, which is the farthest a partition can go).

Code Listing 3.6: Creating other partitions

(parted) mkpart primary 3 131
(parted) name 2 boot
(parted) mkpart primary 131 643
(parted) name 3 swap
(parted) mkpart primary 643 -1
(parted) name 4 rootfs

The end result looks like so:

Code Listing 3.7: Viewing the current partition layout

(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/sda: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number   Start      End      Size     File system  Name   Flags
 1       1.00MiB    3.00MiB  2.00MiB               grub   bios_grub
 2       3.00MiB    131MiB   128MiB                boot
 3       131MiB     643MiB   512MiB                swap
 4       643MiB     20479MiB 19836MiB              rootfs

When you are satisfied, use the quit command to exit parted.

4.d. Alternative: Using fdisk to Partition your Disk

Important: If your environment will deal with partitions larger than 2 TB, please use the Default: Using parted to Partition your Disk instructions instead. fdisk is not able to deal with larger partitions. Fdisk will also use the MBR partition layout. Alternative fdisk applications, like gdisk (which Gentoo provides through the gptfdisk package) exist that do support GPT, but might not be included on the Gentoo installation media.

The following parts explain how to create the example partition layout using fdisk. The example partition layout was mentioned earlier:

Partition Description
/dev/sda1 BIOS boot partition
/dev/sda2 Boot partition
/dev/sda3 Swap partition
/dev/sda4 Root partition

Change your partition layout according to your own preference.

Viewing the Current Partition Layout

fdisk is a popular and powerful tool to split your disk into partitions. Fire up fdisk on your disk (in our example, we use /dev/sda):

Code Listing 4.1: Starting fdisk

# fdisk /dev/sda

Once in fdisk, you'll be greeted with a prompt that looks like this:

Code Listing 4.2: fdisk prompt

Command (m for help): 

Type p to display your disk's current partition configuration:

Code Listing 4.3: An example partition configuration

Command (m for help): p

Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        14    105808+  83  Linux
/dev/sda2            15        49    264600   82  Linux swap
/dev/sda3            50        70    158760   83  Linux
/dev/sda4            71      2184  15981840    5  Extended
/dev/sda5            71       209   1050808+  83  Linux
/dev/sda6           210       348   1050808+  83  Linux
/dev/sda7           349       626   2101648+  83  Linux
/dev/sda8           627       904   2101648+  83  Linux
/dev/sda9           905      2184   9676768+  83  Linux

Command (m for help): 

This particular disk is configured to house seven Linux filesystems (each with a corresponding partition listed as "Linux") as well as a swap partition (listed as "Linux swap").

Removing all Partitions

We will first remove all existing partitions from the disk. Type d to delete a partition. For instance, to delete an existing /dev/sda1:

Code Listing 4.4: Deleting a partition

Command (m for help): d
Partition number (1-4): 1

The partition has been scheduled for deletion. It will no longer show up if you type p, but it will not be erased until your changes have been saved. If you made a mistake and want to abort without saving your changes, type q immediately and hit enter and your partition will not be deleted.

Now, assuming that you do indeed want to wipe out all the partitions on your system, repeatedly type p to print out a partition listing and then type d and the number of the partition to delete it. Eventually, you'll end up with a partition table with nothing in it:

Code Listing 4.5: An empty partition table

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

Now that the in-memory partition table is empty, we're ready to create the partitions. We will use a default partitioning scheme as discussed previously. Of course, don't follow these instructions to the letter if you don't want the same partitioning scheme!

Creating the BIOS Boot Partition

We first create a very small BIOS boot partition. Type n to create a new partition, then p to select a primary partition, followed by 1 to select the first primary partition. When prompted for the first sector, make sure it starts from 2048 (which is needed for the boot loader) and hit enter. When prompted for the last sector, type +2M to create a partition 2 Mbyte in size:

Note: The start from sector 2048 is a fail-safe in case the boot loader does not detect this partition as being available for its use.

Code Listing 4.6: Creating the BIOS boot partition

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First sector (64-10486533532, default 64): 2048
Last sector, +sectors +size{M,K,G} (4096-10486533532, default 10486533532): +2M

Mark the partition for EFI purposes:

Code Listing 4.7: Marking the partition for EFI purposes

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): ef
Changed system type of partition 1 to ef (EFI (FAT-12/16/32))

Creating the Boot Partition

We now create a small boot partition. Type n to create a new partition, then p to select a primary partition, followed by 2 to select the second primary partition. When prompted for the first sector, accept the default by hitting enter. When prompted for the last sector, type +128M to create a partition 128 Mbyte in size:

Code Listing 4.8: Creating the boot partition

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 2
First sector (5198-10486533532, default 5198): (Hit enter)
Last sector, +sectors +size{M,K,G} (4096-10486533532, default 10486533532): +128M

Now, when you type p, you should see the following partition printout:

Code Listing 4.9: Created boot partition

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1         3      5198+  ef  EFI (FAT-12/16/32)
/dev/sda2             3        14    105808+  83  Linux

We need to make this partition bootable. Type a to toggle the bootable flag on a partition and select 2. If you press p again, you will notice that an * is placed in the "Boot" column.

Creating the Swap Partition

Let's now create the swap partition. To do this, type n to create a new partition, then p to tell fdisk that you want a primary partition. Then type 3 to create the third primary partition, /dev/sda3 in our case. When prompted for the first sector, hit enter. When prompted for the last sector, type +512M (or any other size you need for the swap space) to create a partition 512MB in size.

After you've done this, type t to set the partition type, 3 to select the partition you just created and then type in 82 to set the partition type to "Linux Swap".

Creating the Root Partition

Finally, let's create the root partition. To do this, type n to create a new partition, then p to tell fdisk that you want a primary partition. Then type 4 to create the fourth primary partition, /dev/sda4 in our case. When prompted for the first sector, hit enter. When prompted for the last sector, hit enter to create a partition that takes up the rest of the remaining space on your disk. After completing these steps, typing p should display a partition table that looks similar to this:

Code Listing 4.10: Partition listing after creating the root partition

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1         3      5198+  ef  EFI (FAT-12/16/32)
/dev/sda2   *         3        14    105808+  83  Linux
/dev/sda3            15        81    506520   82  Linux swap
/dev/sda4            82      3876  28690200   83  Linux

Saving the Partition Layout

To save the partition layout and exit fdisk, type w.

Code Listing 4.11: Save and exit fdisk

Command (m for help): w

Now that your partitions are created, you can continue with Creating Filesystems.

4.e. Creating Filesystems

Introduction

Now that your partitions are created, it is time to place a filesystem on them. If you don't care about what filesystem to choose and are happy with what we use as default in this handbook, continue with Applying a Filesystem to a Partition. Otherwise read on to learn about the available filesystems...

Filesystems

Several filesystems are available. Some of them are found stable on the amd64 architecture, others aren't. The following filesystems are found to be stable: ext2, ext3, ext4 and XFS. JFS and ReiserFS may work but need more testing. If you're really adventurous you can try the other filesystems.

ext2 is the tried and true Linux filesystem but doesn't have metadata journaling, which means that routine ext2 filesystem checks at startup time can be quite time-consuming. There is now quite a selection of newer-generation journaled filesystems that can be checked for consistency very quickly and are thus generally preferred over their non-journaled counterparts. Journaled filesystems prevent long delays when you boot your system and your filesystem happens to be in an inconsistent state.

ext3 is the journaled version of the ext2 filesystem, providing metadata journaling for fast recovery in addition to other enhanced journaling modes like full data and ordered data journaling. It uses an HTree index that enables high performance in almost all situations. In short, ext3 is a very good and reliable filesystem.

ext4 is a filesystem created as a fork of ext3 bringing new features, performance improvements and removal of size limits with moderate changes to the on-disk format. It can span volumes up to 1 EB and with maximum file size of 16 TB. Instead of the classic ext2/3 bitmap block allocation ext4 uses extents, which improve large file performance and reduce fragmentation. Ext4 also provides more sophisticated block allocation algorithms (delayed allocation and multiblock allocation) giving the filesystem driver more ways to optimise the layout of data on the disk. The ext4 filesystem is a compromise between production-grade code stability and the desire to introduce extensions to an almost decade old filesystem. Ext4 is the recommended all-purpose all-platform filesystem.

If you intend to install Gentoo on a small partition (less than 8GB), then you'll need to tell ext2, ext3 or ext4 (if available) to reserve enough inodes when you create the filesystem. The mke2fs application uses the "bytes-per-inode" setting to calculate how many inodes a file system should have. By running mke2fs -T small /dev/<device> (ext2) or mke2fs -j -T small /dev/<device> (ext3/ext4) the number of inodes will generally quadruple for a given file system as its "bytes-per-inode" reduces from one every 16kB to one every 4kB. You can tune this even further by using mke2fs -i <ratio> /dev/<device> (ext2) or mke2fs -j -i <ratio> /dev/<device> (ext3/ext4).

JFS is IBM's high-performance journaling filesystem. JFS is a light, fast and reliable B+tree-based filesystem with good performance in various conditions.

ReiserFS is a B+tree-based journaled filesystem that has good overall performance, especially when dealing with many tiny files at the cost of more CPU cycles. ReiserFS appears to be less maintained than other filesystems.

XFS is a filesystem with metadata journaling which comes with a robust feature-set and is optimized for scalability. XFS seems to be less forgiving to various hardware problems.

Applying a Filesystem to a Partition

To create a filesystem on a partition or volume, there are tools available for each possible filesystem:

Filesystem Creation Command
ext2 mkfs.ext2
ext3 mkfs.ext3
ext4 mkfs.ext4
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

For instance, to have the boot partition (/dev/sda2 in our example) in ext2 and the root partition (/dev/sda4 in our example) in ext4 (as in our example), you would use:

Code Listing 5.1: Applying a filesystem on a partition

# mkfs.ext2 /dev/sda2
# mkfs.ext4 /dev/sda4

Now create the filesystems on your newly created partitions (or logical volumes).

Activating the Swap Partition

mkswap is the command that is used to initialize swap partitions:

Code Listing 5.2: Creating a Swap signature

# mkswap /dev/sda3

To activate the swap partition, use swapon:

Code Listing 5.3: Activating the swap partition

# swapon /dev/sda3

Create and activate the swap with the commands mentioned above.

4.f. Mounting

Now that your partitions are initialized and are housing a filesystem, it is time to mount those partitions. Use the mount command. Don't forget to create the necessary mount directories for every partition you created. As an example we mount the root and boot partition:

Code Listing 6.1: Mounting partitions

# mount /dev/sda4 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda2 /mnt/gentoo/boot

Note: If you want your /tmp to reside on a separate partition, be sure to change its permissions after mounting: chmod 1777 /mnt/gentoo/tmp. This also holds for /var/tmp.

We will also have to mount the proc filesystem (a virtual interface with the kernel) on /proc. But first we will need to place our files on the partitions.

Continue with Installing the Gentoo Installation Files.


[ << ] [ < ] [ Home ] [ > ] [ >> ]


Print

View all

Page updated June 1, 2014

Summary: To be able to install Gentoo, you must create the necessary partitions. This chapter describes how to partition a disk for future usage.

Sven Vermeulen
Author

Grant Goodyear
Author

Roy Marples
Author

Daniel Robbins
Author

Chris Houser
Author

Jerry Alexandratos
Author

Seemant Kulleen
Gentoo x86 Developer

Tavis Ormandy
Gentoo Alpha Developer

Jason Huebel
Gentoo AMD64 Developer

Guy Martin
Gentoo HPPA developer

Pieter Van den Abeele
Gentoo PPC developer

Joe Kallar
Gentoo SPARC developer

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Erwin
Editor

Joshua Kinard
Editor

Tobias Scherbaum
Editor

Xavier Neys
Editor

Joshua Saddler
Editor

Gerald J. Normandin Jr.
Reviewer

Donnie Berkholz
Reviewer

Ken Nowack
Reviewer

Lars Weiler
Contributor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.