Managing Disks and Swap Space

Block Devices

Block devices under Linux are referenced by special files found in the /dev directory:

  • hd[a-d]
    • IDE disks and ATAPI devices
  • sd[a-z]
    • SCSI/SATA disks
  • scd[0-7]
    • SCSI CDRoms
  • xd[a-d]
    • The original IBM XT disks
  • fd[0-7]
    • Floppy drives
  • st[0-7]
    • SCSI streamers that can rewind
  • nst[0-7]
    • SCSI streamers that cannot rewind
  • rmt8, rmt16, tape-d, tape-reset
    • QIC-80 devices
  • ram[0-15]
    • Virtual memory disks
  • loop[0-15]
    • loop devices used to access a filesystem in a file ( such as an ISO file )
  • md[x]
    • Software RAID device
  • vg[x]
    • Volume Group
  • lv[x]
    • Logical Volume

Partitions

Master Boot Record

This partition type, also know as MBR, MS-DOS Partitions or BIOS partitions, is the most common one on disks under 2 tebibytes in size. That limitation comes from the fact that it uses 32 bit pointers to refer to disk sectors. Most disk manufacturers use a sector size of 512 bytes. Taking these two points into account indicates that the maximum disk size permitted is 232 * 512 bytes = 2.2 * 1012 bytes = 2TiB.

<note important> Some disk manufacturers are now moving to 4096-byte sectors which effectively increases the maximum size permitted to 16 TiB. </note>

Generally, a PC is equiped with two disk controllers each being able to manage two disks refered to respectively as the Master and Slave. Each disk is refered to differently :

  • Controller 0
    • Master
      • hda - IDE disk
      • sda - SATA/SCSI disk
    • Slave
      • hdb - IDE disk
      • sdb - SATA/SCSI disk
  • Controller 1
    • Master
      • hdc - IDE disk
      • sdc - SATA/SCSI disk
    • Slave
      • hdd - IDE disk
      • sdd - SATA/SCSI disk

Each disk can have three types of partitions:

  • Primary Partitions,
    • Maximum of 4. The FAT ( File Allocation Table ) is 64 bytes in length and 16 bytes are needed to code each partition,
  • Extended Partitions,
    • Normally only one extended partition per disk. An Extended Partition contains Logical Drives.
  • Logical Drives.

The 4 primary partions are numbered 1 through 4:

  • hda1, hda2, hda3 and hda4 for the IDE Master on Controller 0,
  • sda1, sda2, sda3 and sda4 for the SCSI/SATA Master on Controller 0.

;#;;#;

An Extended Partition contains Logical Drives that start at hda5 or sda5 and takes the place of a Primary Partition, rendering it unusable:

;#;;#;

<note important> Linux does not suffer from the same problem as Windows™ when using MBR. Linux does not have to be booted from a primary partition whereas Windows™ does. </note>

The total number of partitions on a disk is limited as follows:

  • IDE,
    • Upto 63,
  • SCSI,
    • Upto 15,
  • Disks using the libata API,
    • Upto 15.

<note important> These limits can be exceeded by using the LVM technology. </note>

Apple Partition Map

Also know as APM, this partition table type was used by Apple on its PowerPC based Macintoshes. Apple switched to GPT when it started to use Intel CPUs.

<note important> APM shares the same limitations as MBR concerning the maximum size of the disk. </note>

GUID Partition Table

Also known as GPT, this partition table type is defined in the UEFI (Unified Extensible Firmware Interface) definition.

Under GPT, there is no difference between primary, extended or logical partitions, instead GPT supports a fixed number of partitions which is 128 by default

GPT uses 64-bit sector pointers and can therefore handle disks upto a size of 9.4 * 1021 bytes = 8ZiB (zebibytes)

Partitioning

Partitioning can be performed by several programs, some of which are partition-type dependant:

  • The libparted Tools,
    • contain the parted text-mode program,
    • are at the heart of the GParted graphical program,
    • are compatible with MBR, APM and GPT partiton table types,
  • The fdisk Family,
    • the fdisk program for MBR partition table types included in the util-linux or util-linux-ng packages,
    • the cfdisk program for MBR partition table types included in the util-linux or util-linux-ng packages,
  • GPT fdisk,
    • a package that supplies the gdisk and sgdisk programs which are fdisk-like and cfdisk-like programs for GPT partiton types.

LAB #1 - Using fdisk

Partioning under Linux can be accomplished using the fdisk utility:

[root@centos ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): 

Hit the m key and ↵ Enter to see a menu of the commands available:

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): 

<note important> To create a new partition you need to use the n command. </note>

Create the following partitions on your disk:

Partition Type Size
/dev/sda4 Extended From the first available cylinder to the last available cylinder.
/dev/sda5 Logical 500 MB
/dev/sda6 Logical 200 MB
/dev/sda7 Logical 300 MB
/dev/sda8 Logical 500 MB
/dev/sda9 Logical 400 MB
/dev/sda10 Logical 500 MB
/dev/sda11 Logical 500 MB
/dev/sda12 Logical 200 MB

When you have finished, use the p command to see the resulting partition table:

Command (m for help): p

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00098187

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      102400   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              13         651     5120000   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3             651         912     2096128   82  Linux swap / Solaris
Partition 3 does not end on cylinder boundary.
/dev/sda4             912        2610    13645273    5  Extended
/dev/sda5             912         976      520136+  83  Linux
/dev/sda6             977        1002      208813+  83  Linux
/dev/sda7            1003        1041      313236   83  Linux
/dev/sda8            1042        1106      522081   83  Linux
/dev/sda9            1107        1158      417658+  83  Linux
/dev/sda10           1159        1223      522081   83  Linux
/dev/sda11           1224        1288      522081   83  Linux
/dev/sda12           1289        1314      208813+  83  Linux

Command (m for help): 

<note important> Each block contains 1,024 bytes. Each sector contains 512 bytes. When a partition contains an uneven number of sectors it is marked with a +. </note>

<note important> Note that the first three partitions show an error - Partition X does not end on cylinder boundary. </note>

This error seems to imply that the partitions overlap. In order to check if they really do, change the units used in the output from cylinders to sectors by using the u command :

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00098187

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2          206848    10446847     5120000   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3        10446848    14639103     2096128   82  Linux swap / Solaris
Partition 3 does not end on cylinder boundary.
/dev/sda4        14639104    41929649    13645273    5  Extended
/dev/sda5        14639167    15679439      520136+  83  Linux
/dev/sda6        15679503    16097129      208813+  83  Linux
/dev/sda7        16097193    16723664      313236   83  Linux
/dev/sda8        16723728    17767889      522081   83  Linux
/dev/sda9        17767953    18603269      417658+  83  Linux
/dev/sda10       18603333    19647494      522081   83  Linux
/dev/sda11       19647558    20691719      522081   83  Linux
/dev/sda12       20691783    21109409      208813+  83  Linux

Command (m for help): 

<note important> Note that the first three partitions still show an error - Partition X does not end on cylinder boundary. However if you study the Start and End sectors of each partition you can see that they do not overlap. </note>

Write the partition table to disk using the w command and restart your virtual machine:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@centos ~]# reboot

Login and launch fdisk to check if your changes have been taken into account:

[trainee@centos ~]$ su -
Password: 
[root@centos ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00098187

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      102400   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              13         651     5120000   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3             651         912     2096128   82  Linux swap / Solaris
Partition 3 does not end on cylinder boundary.
/dev/sda4             912        2610    13645273    5  Extended
/dev/sda5             912         976      520136+  83  Linux
/dev/sda6             977        1002      208813+  83  Linux
/dev/sda7            1003        1041      313236   83  Linux
/dev/sda8            1042        1106      522081   83  Linux
/dev/sda9            1107        1158      417658+  83  Linux
/dev/sda10           1159        1223      522081   83  Linux
/dev/sda11           1224        1288      522081   83  Linux
/dev/sda12           1289        1314      208813+  83  Linux

Command (m for help): 

Exit fdisk using the q command.

Journaled Filesystems

Presentation

A journal is part of a journaled or journaling filesystem. It's role is to keep track of any write operations in order to guarantee data integrity in the case of a system crash.

Red Hat Linux can use one of the following two filesystems:

  • Ext3
  • Ext4
  • ReiserFS
  • XFS
  • JFS

<note important> Red Hat only supports EXT2/3/4 filesystems. You cannot create a journaling filesystem on a floppy disk. </note>

<note> You can compare filesystems by consulting this page </note>

Ext3

Ext3 is a journaling filesystem 100% compatible with the traditional Ext2 filesystem. The principal difference between the two is the addition of the journal.

The commands used to manage an Ext3 filesystem are :

Command Description
mke2fs -j Create a filesystem
mke2fs -t ext3 Create a filesystem
mkfs.ext3 Create a filesystem
fsck Check/Repair a filesystem
e2fsck Check/Repair a filesystem
tune2fs Tune a filesystem
debugfs Debug a filesystem
dump2fs Obtain information about the filesystem

<note important> The fsck program is normally called automatically at boot every 6 months or 20 reboots whichever comes first. </note>

For more information concerning Ext3, please see this page

Ext4

The Ext4 filesystem was first introduced with the 2.6.19 kernel. It became stable in the 2.6.28 kernel.

Ext4, although not an evolution of the Ext3 filesystem, is backward compatible with the latter.

The major characteristics of an Ext4 filesystem are:

  • volume sizes of upto 1 024 pebioctets (1 pebioctet (Pio) = 250 octets = 1024 Tio = 1125899906842624 octets),
  • space allocation by using extents. An extent is a contiguous area of storage reserved for a file.

Extents were introduced with the 2.6.23 kernel.

The backward compatibility with Ext3 means that:

  • you can mount an Ext3 filesystem as an Ext4 filesystem,
  • you can mount an Ext4 filesystem as an Ext3 filesystem except when extents have been turned on.

The commands used to manage an Ext4 filesystem are :

Command Description
mke2fs -t ext4 Create a filesystem
mkfs.ext4 Create a filesystem
fsck.ext4 Check/Repair a filesystem
e2fsck Check/Repair a filesystem
tune4fs Tune a filesystem
debugfs Debug a filesystem
dump2fs Obtain information about the filesystem

For more information concerning Ext4, please see this page.

<note important> When an ext2/ext3/ext4 filesystem is formated by default 5% is reserved for root. Reserved space is supposed to reduce fragementation and allow root to login in case the filesystem becomes 100% used. You can use tune2fs to reduce the amount of reserved space as follows tune2fs -m n /dev/sdXY where n is the new percentage to reserve. </note>

ReiserFS

The principal adavantage of ReiserFS is that is is much more efficient than Ext3 at storing files of a size of a couple of KB. This can lead to a 10% disk space gain when compared to Ext3.

The commands used to manage an ReiserFS filesystem are :

Command Description
mkreiserfs Create a filesystem
mkfs.reiserfs Create a filesystem
reiserfsck Check/Repair a filesystem
reiserfstune Tune a filesystem
debugreiserfs Debug a filesystem
debugreiserfs Obtain information about the filesystem

For more information concerning ReiserFS , please see this page.

XFS

XFS is a 64-bit journaling filesystem created by SGI for its IRIX operating system. XFS was introduced into Linux in the 2.6.xx kernels.

The commands used to manage an XFS filesystem are :

Command Description
mkfs.xfs Create a filesystem
xfs_check / xfs_repair Check/Repair a filesystem
xfs_admin Tune a filesystem
xfs_db Debug a filesystem
xfs_info Obtain information about the filesystem. Requires the filesystem to be mounted.

For more information concerning XFS, please see this page.

Swap Space

Swap Size

The following table gives the recommended swap size as a function of the quantity of RAM in the system:

RAM Swap Size
4 GB or less 2 GB
4 GB to 16 GB 4 GB
16 GB to 64 GB 8 GB
64 GB to 256 GB 16 GB

Swap Partitions

A swap partition can be created on:

  • a Disk Partition,
  • a Software RAID device,
  • a Logical Volume.

The swapon Command

To see a list of the current swap devices, use the swapon command with the -s switch.

[root@centos ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda3                               partition	2096120	0	-1

<note important> Note that in the above example the swap is not being used. There is also a notion of swap priority which we will detail later. </note>

Command Line Switches

The switches associated with this command are:

[root@centos ~]# swapon --help

Usage:
 swapon -a [-e] [-v] [-f]             enable all swaps from /etc/fstab
 swapon [-p priority] [-v] [-f] <special>  enable given swap
 swapon -s                            display swap usage summary
 swapon -h                            display help
 swapon -V                            display version

The <special> parameter:
 {-L label | LABEL=label}             LABEL of device to be used
 {-U uuid  | UUID=uuid}               UUID of device to be used
 <device>                             name of device to be used
 <file>                               name of file to be used

<note important> Note that the -p switch is used to set the swap priority. </note>

La Commande swapoff

In our case the swap partition is /dev/sda3. To turn off the swap, use the following command:

[root@centos ~]# swapoff /dev/sda3
[root@centos ~]# swapon -s
Filename				Type		Size	Used	Priority

To turn the swap back on, use the swapon command:

[root@centos ~]# swapon /dev/sda3
[root@centos ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda3                               partition	2096120	0	-1

Command Line Switches

The switches associated with the swapoff command are:

[root@centos ~]# swapoff --help

Usage:
 swapoff -a [-v]                      disable all swaps
 swapoff [-v] <special>               disable given swap
 swapoff -h                           display help
 swapoff -V                           display version

The <special> parameter:
 {-L label | LABEL=label}             LABEL of device to be used
 {-U uuid  | UUID=uuid}               UUID of device to be used
 <device>                             name of device to be used
 <file>                               name of file to be used

The /etc/fstab file

For each swap partition, there must be an entry in the /etc/fstab file:

[root@centos ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Oct 25 09:32:46 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c7b1d3e8-6471-4cba-947b-430db974e774 /                       ext4    defaults        1 1
UUID=d8988475-7dc7-4a61-8081-6153b7c9551b /boot                   ext4    defaults        1 2
UUID=a1d6a043-6f10-4f60-bb9c-aaaac9632c57 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Each line in this file has 6 fields :

Field 1 Field 2 Field 3 Field 4 Field 5 Field 6
Special file or UUID or Virtual File System Mount Point Filesystem Type Comma separated list of options Used by the dump command ( 1 = dump, 0 or empty = do not dump ) The order in which the fsck command checks the disks/partitions at boot time

The UUID ( Universally Unique Identifier ) is a randomly generated 128 bit string that is automatically generated by the system when a filesystem is created on the partition.

<note> Please see the manual for the mount command to document yourself on the different options available in field 4. </note>

Swap Files

You can also use a file as swap space. Create a swap file of 256 MB using the dd command:

[root@centos ~]# dd if=/dev/zero of=/swap bs=1024k count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 5.62261 s, 47.7 MB/s

To set up this file as swap space you need to use the following command:

[root@centos ~]# mkswap /swap
mkswap: /swap: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=77dc521a-e239-4be2-8764-ab5b31fde1ed

Now activate the swap file with a priority of 3:

[root@centos ~]# swapon -p3 /swap

Pour visualiser les éspaces swap, saisissez la commande suivante :

[root@centos ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda3                               partition	2096120	0	-1
/swap                                   file		262136	0	3

<note important> The swap file has a priority of 3. This means it will be used in preference to the swap partition that has a lower priority. </note>

In order to activate the swap file at boot time, you need to edit the /etc/fstab file:

fstab
#
# /etc/fstab
# Created by anaconda on Fri Oct 25 09:32:46 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c7b1d3e8-6471-4cba-947b-430db974e774 /                       ext4    defaults        1 1
UUID=d8988475-7dc7-4a61-8081-6153b7c9551b /boot                   ext4    defaults        1 2
UUID=a1d6a043-6f10-4f60-bb9c-aaaac9632c57 swap                    swap    defaults        0 0
/swap			                  swap                    swap	  defaults	  0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

<note important> Do not modify your /etc/fstab file since you are going to delete the swap file. </note>

Now turn off the swap file:

[root@centos ~]# swapoff /swap
[root@centos ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda3                               partition	2096120	0	-1

Now delete the swap file:

[root@centos ~]# rm /swap
rm: remove regular file `/swap'? y

~~DISCUSSION:off~~


<html> <center> Copyright © 2011-2014 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/”><img alt=“Creative Commons License” style=“border-width:0” src=“https://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png” /></a><br />This work is licensed under a <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/”>Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License</a> </center> </html>

Menu