This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:SPARC/Installation/Disks
Introduction to block devices
Block devices
Let's take a good look at disk-oriented aspects of Gentoo Linux and Linux in general, including Linux filesystems, partitions, and block devices. Once the ins and outs of disks and filesystems are understood, partitions and filesystems can be established for the Gentoo Linux installation.
To begin, let's look at 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 libata framework in the kernel. When using the old device framework, then the 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 the disk without worrying about whether the 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 the entire disk to house a Linux system, this is almost never done in practice. Instead, full disk block devices are split up in smaller, more manageable block devices. These are known as partitions or slices.
The first partition on the first SCSI disk is /dev/sda1, the second /dev/sda2 and so on.
The third partition on Sun systems is set aside as a special "whole disk" slice. This partition must not contain a file system.
Users who are used to the DOS partitioning scheme should note that Sun disklabels do not have "primary" and "extended" partitions. Instead, up to eight partitions are available per drive, with the third of these being reserved.
Designing a partition scheme
How many partitions and how big?
The number of partitions is highly dependent on the environment. For instance, if there are lots of users, then it is advised to have /home/ separate as it increases security and makes backups easier. If Gentoo is being installed to perform as a mail server, then /var/ should be separate as all mails are stored inside /var/. A good choice of filesystem will then maximize the performance. Game servers will have a separate /opt/ as most gaming servers are installed there. The reason is similar for the /home/ directory: security and backups. In most situations, /usr/ is to be kept big: not only will it contain the majority of applications, it typically also hosts the Gentoo ebuild repository (by default located at /usr/portage) which already takes around 650 MiB. This disk space estimate excludes the packages/ and distfiles/ directories that are generally stored within this ebuild repository.
It very much depends on what the administrator wants to achieve. Separate partitions or volumes have the following advantages:
- Choose the best performing filesystem for each partition or volume.
- The 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, the system might have lots of free space on one partition and none on another. Another nuisance is that separate partitions - especially for important mount points 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 results may vary.
There is also a 15-partition limit for SCSI and SATA unless the disk uses 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).
When the system is not going to run memory intensive applications or the system has lots of memory available, then it probably does not need much swap space. However, swap space is also used to store the entire memory in case of hibernation. If the system is going to need hibernation, then a bigger swap space is necessary, often at least the amount of memory installed in the system.
Default partition scheme
The table below suggests a suitable starting point for most systems. Note that this is only an example, so feel free to use different partitioning schemes.
A separate /boot partition is generally not recommended on SPARC, as it complicates the bootloader configuration.
Partition | Filesystem | Size | Mount Point | Description |
---|---|---|---|---|
/dev/sda1 | ext4 | <2 GB | / | Root partition. For SPARC64 systems with OBP versions 3 or less, this must be less than 2 GB in size, and the first partition on the disk. More recent OBP versions can deal with larger root partitions and, as such, can support having /usr, /var and other locations on the same partition. |
/dev/sda2 | swap | 512 MB | none | Swap partition. For bootstrap and certain larger compiles, at least 512 MB of RAM (including swap) is required. |
/dev/sda3 | none | Whole disk | none | Whole disk partition. This is required on SPARC systems. |
/dev/sda4 | ext4 | at least 2 GB | /usr | /usr partition. Applications are installed here. By default this partition is also used for Portage data (which takes around 500 MB excluding source code). |
/dev/sda5 | ext4 | at least 1 GB | /var | /var partition. Used for program-generated data. By default Portage uses this partition for temporary space whilst compiling. Certain larger applications such as Mozilla and LibreOffice.org can require over 1 GB of temporary space here when building. |
/dev/sda6 | ext4 | remaining space | /home | /home partition. Used for users' home directories. |
Using fdisk to partition the disk
The following parts explain how to create the example partition layout described previously, namely:
Partition | Description |
---|---|
/dev/sda1 | / |
/dev/sda2 | swap |
/dev/sda3 | whole disk slice |
/dev/sda4 | /usr |
/dev/sda5 | /var |
/dev/sda6 | /home |
Change the partition layout as required. Remember to keep the root partition entirely within the first 2 GB of the disk for older systems. There is also a 15-partition limit for SCSI and SATA.
Firing up fdisk
Start fdisk with the disk as argument:
root #
fdisk /dev/sda
Command (m for help):
To view the available partitions, type in p:
Command (m for help):
p
Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders Units = cylinders of 2048 * 512 bytes Device Flag Start End Blocks Id System /dev/sda1 0 488 499712 83 Linux native /dev/sda2 488 976 499712 82 Linux swap /dev/sda3 0 8635 8842240 5 Whole disk /dev/sda4 976 1953 1000448 83 Linux native /dev/sda5 1953 2144 195584 83 Linux native /dev/sda6 2144 8635 6646784 83 Linux native
Note the Sun disk label in the output. If this is missing, the disk is using the DOS-partitioning, not the Sun partitioning. In this case, use s to ensure that the disk has a Sun partition table:
Command (m for help):
s
Building a new sun disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Drive type ? auto configure 0 custom (with hardware detected defaults) a Quantum ProDrive 80S b Quantum ProDrive 105S c CDC Wren IV 94171-344 d IBM DPES-31080 e IBM DORS-32160 f IBM DNES-318350 g SEAGATE ST34371 h SUN0104 i SUN0207 j SUN0327 k SUN0340 l SUN0424 m SUN0535 n SUN0669 o SUN1.0G p SUN1.05 q SUN1.3G r SUN2.1G s IOMEGA Jaz Select type (? for auto, 0 for custom): 0 Heads (1-1024, default 64): Using default value 64 Sectors/track (1-1024, default 32): Using default value 32 Cylinders (1-65535, default 8635): Using default value 8635 Alternate cylinders (0-65535, default 2): Using default value 2 Physical cylinders (0-65535, default 8637): Using default value 8637 Rotation speed (rpm) (1-100000, default 5400): 10000 Interleave factor (1-32, default 1): Using default value 1 Extra sectors per cylinder (0-32, default 0): Using default value 0
The right values can be found in the documentation of the hard disk itself. The 'auto configure' option does not usually work.
Deleting existing partitions
It's time to delete any existing partitions. To do this, type d and hit Enter. Give the partition number to delete. To delete a pre-existing /dev/sda1, type:
Command (m for help):
d
Partition number (1-4): 1
Do not delete partition 3 (whole disk). This is required. If this partition does not exist, follow the "Creating a Sun Disklabel" instructions above.
After deleting all partitions except the Whole disk slice,a partition layout similar to the following should show up:
Command (m for help):
p
Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders Units = cylinders of 2048 * 512 bytes Device Flag Start End Blocks Id System /dev/sda3 0 8635 8842240 5 Whole disk
Creating the root partition
Next create the root partition. To do this, type n to create a new partition, then type 1 to create the partition. When prompted for the first cylinder, hit Enter. When prompted for the last cylinder, type +512M to create a partition 512 MB in size. Make sure that the entire root partition fits within the first 2 GB of the disk. The output of these steps is as follows:
Command (m for help):
n
Partition number (1-8): 1 First cylinder (0-8635): (press Enter) Last cylinder or +size or +sizeM or +sizeK (0-8635, default 8635): +512M
When listing the partitions (through p), the following partition printout is shown:
Command (m for help):
p
Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders Units = cylinders of 2048 * 512 bytes Device Flag Start End Blocks Id System /dev/sda1 0 488 499712 83 Linux native /dev/sda3 0 8635 8842240 5 Whole disk
Creating a swap partition
Next, let's create the swap partition. To do this, type n to create a new partition, then 2 to create the second partition, /dev/sda2 in our case. When prompted for the first cylinder, hit Enter. When prompted for the last cylinder, type +512M to create a partition 512 MB in size. After this, type t to set the partition type, 2 to select the partition just created and then type in 82 to set the partition type to "Linux Swap". After completing these steps, typing p should display a partition table that looks similar to this:
root #
Command (m for help):
root #
p
Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders Units = cylinders of 2048 * 512 bytes Device Flag Start End Blocks Id System /dev/sda1 0 488 499712 83 Linux native /dev/sda2 488 976 499712 82 Linux swap /dev/sda3 0 8635 8842240 5 Whole disk
Creating the usr, var and home partitions
Finally, let's create the /usr, /var and /home partitions. As before, type n to create a new partition, then type 4 to create the third partition (we do not count the whole disk as being a partition), /dev/sda4 in our case. When prompted for the first cylinder, hit Enter. When prompted for the last cylinder, enter +2048M to create a partition 2 GB in size. Repeat this process for /dev/sda5 and sda6, using the desired sizes. When finished, the partition table will look similar to the following:
Command (m for help):
p
Disk /dev/sda (Sun disk label): 64 heads, 32 sectors, 8635 cylinders Units = cylinders of 2048 * 512 bytes Device Flag Start End Blocks Id System /dev/sda1 0 488 499712 83 Linux native /dev/sda2 488 976 499712 82 Linux swap /dev/sda3 0 8635 8842240 5 Whole disk /dev/sda4 976 1953 1000448 83 Linux native /dev/sda5 1953 2144 195584 83 Linux native /dev/sda6 2144 8635 6646784 83 Linux native
Save and exit
Save the partition layout and exit fdisk by typing w:
Command (m for help):
w
Creating file systems
Introduction
Now that the partitions are created, it is time to place a filesystem on them. In the next section the various file systems that Linux supports are described. Readers that already know which filesystem to use can continue with Applying a filesystem to a partition. The others should read on to learn about the available filesystems...
Filesystems
Several filesystems are available. Some of them are found stable on the sparc architecture - it is advised to read up on the filesystems and their support state before selecting a more experimental one for important partitions.
- btrfs
- A next generation filesystem that provides many advanced features such as snapshotting, self-healing through checksums, transparent compression, subvolumes and integrated RAID. A few distributions have begun to ship it as an out-of-the-box option, but it is not production ready. Reports of filesystem corruption are common. Its developers urge people to run the latest kernel version for safety because the older ones have known problems. This has been the case for years and it is too early to tell if things have changed. Fixes for corruption issues are rarely backported to older kernels. Proceed with caution when using this filesystem!
- ext2
- This 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 the system is booted and the filesystem happens to be in an inconsistent state.
- ext3
- 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
- Initially created as a fork of ext3, ext4 brings 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 16TB. 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 optimize the layout of data on the disk. Ext4 is the recommended all-purpose all-platform filesystem.
- f2fs
- The Flash-Friendly File System was originally created by Samsung for the use with NAND flash memory. As of Q2, 2016, this filesystem is still considered immature, but it is a decent choice when installing Gentoo to microSD cards, USB drives, or other flash-based storage devices.
- JFS
- IBM's high-performance journaling filesystem. JFS is a light, fast and reliable B+tree-based filesystem with good performance in various conditions.
- ReiserFS
- 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
- 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.
- vfat
- Also known as FAT32, is supported by Linux but does not support any permission settings. It is mostly used for interoperability with other operating systems (mainly Microsoft Windows) but is also a necessity for some system firmware (like UEFI).
- NTFS
- This "New Technology" filesystem is the flagship filesystem of Microsoft Windows. Similar to vfat above it does not store permission settings or extended attributes necessary for BSD or Linux to function properly, therefore it cannot be used as a root filesystem. It should only be used for interoperability with Microsoft Windows systems (note the emphasis on only).
When using ext2, ext3, or ext4 on a small partition (less than 8GB), then the file system must be created with the proper options to reserve enough inodes. The mke2fs (mkfs.ext2) application uses the "bytes-per-inode" setting to calculate how many inodes a file system should have. On smaller partitions, it is advised to increase the calculated number of inodes.
On ext2, ext3 and ext4, this can be done using one of the following commands, respectively:
root #
mkfs.ext2 -T small /dev/<device>
root #
mkfs.ext3 -T small /dev/<device>
root #
mkfs.ext4 -T small /dev/<device>
This will generally quadruple the number of inodes for a given file system as its "bytes-per-inode" reduces from one every 16kB to one every 4kB. This can be tuned even further by providing the ratio:
root #
mkfs.ext2 -i <ratio> /dev/<device>
Applying a filesystem to a partition
To create a filesystem on a partition or volume, there are user space utilities available for each possible filesystem. Click the filesystem's name in the table below for additional information on each filesystem:
Filesystem | Creation command | On minimal CD? | Package |
---|---|---|---|
btrfs | mkfs.btrfs | Yes | sys-fs/btrfs-progs |
ext2 | mkfs.ext2 | Yes | sys-fs/e2fsprogs |
ext3 | mkfs.ext3 | Yes | sys-fs/e2fsprogs |
ext4 | mkfs.ext4 | Yes | sys-fs/e2fsprogs |
f2fs | mkfs.f2fs | Yes | sys-fs/f2fs-tools |
jfs | mkfs.jfs | Yes | sys-fs/jfsutils |
reiserfs | mkfs.reiserfs | Yes | sys-fs/reiserfsprogs |
xfs | mkfs.xfs | Yes | sys-fs/xfsprogs |
vfat | mkfs.vfat | Yes | sys-fs/dosfstools |
NTFS | mkfs.ntfs | Yes | sys-fs/ntfs3g |
For instance, to have the root partition (/dev/sda1) in ext4 as used in the example partition structure, the following commands would be used:
root #
mkfs.ext4 /dev/sda1
Now create the filesystems on the newly created partitions (or logical volumes).
Activating the swap partition
mkswap is the command that is used to initialize swap partitions:
root #
mkswap /dev/sda2
To activate the swap partition, use swapon:
root #
swapon /dev/sda2
Create and activate the swap with the commands mentioned above.
Mounting the root partition
Now that the partitions are initialized and are housing a filesystem, it is time to mount those partitions. Use the mount command, but don't forget to create the necessary mount directories for every partition created. As an example we mount the root partition:
root #
mount /dev/sda1 /mnt/gentoo
If /tmp/ needs to reside on a separate partition, be sure to change its permissions after mounting:
root #
chmod 1777 /mnt/gentoo/tmp
Later in the instructions the proc filesystem (a virtual interface with the kernel) as well as other kernel pseudo-filesystems will be mounted. But first we install the Gentoo installation files.