Windows-to-Linux roadmap

Part 6. Working with partitions and file systems

Using disks and devices in Linux

Content series:

This content is part # of # in the series: Windows-to-Linux roadmap

Stay tuned for additional content in this series.

This content is part of the series:Windows-to-Linux roadmap

Stay tuned for additional content in this series.

Working with files and storage devices in Linux is different from Windows. There are files and a hierarchical directory structure, but beyond that you will need to develop a different way of thinking.

Listing 1. Directory structure
|-- bin
|-- boot
|-- dev
|-- etc
|-- mnt
|-- opt
|   |-- IBM
|   |   |-- WebSphereStudio
|   |   `-- db2
|   |-- IBMHttpServer
|-- root
|-- sbin
|-- tmp
|-- usr
|   |-- X11R6
|   |   |-- bin
|   |   |-- include
|   |   |-- lib
|   |   |-- man
|   |   `-- share
|   |-- bin
|   |-- dict
|   |-- doc
|   |-- etc
|   |-- include
|   |-- lib
|   |-- libexec
|   |-- local
|   |   |-- OpenOffice
|   |   |   |-- sbin

No drive letters!

There are no drive letters in Linux. This is actually quite useful. If you've worked on a Windows system in a complex networking environment on a robust machine with several devices, you may have found the alphabet lacking. In Linux, there is just one file structure. It starts with root (/) and all local file systems, all local devices, and all remote file systems are represented as subdirectories in this structure.

When Linux first boots, it builds this file structure based on information in the /etc/fstab file. Where Windows assigns drive letters to hard drive partitions and other storage devices, Linux assigns them directories in the root file structure. The structure of the hierarchy is completely configurable and can be changed on the fly.

Mount up!

The term for adding a device to the file system is mounting. Linux will automatically mount a / (root) file system. There may also be a separate /boot file system, containing the core kernel boot files. Linux will also mount some special file systems. The swap space is not shown as a part of the file system, but is handled by the kernel. However, other special file systems such as proc, are seen as a normal part of the file system, and its contents can be handled just like normal files.

Other file systems, such as removable media or remote file systems, will need to be manually mounted. When mounting a file system, you will need to know the correct way to reference it from Linux, and have an empty directory to use as a mount point. For removable media, Linux will probably create mount points for you during installation. In Red Hat Linux, the cdrom device is set up to mount to the directory /mnt/cdrom. That means that when you put a CD into the CDROM device, you enter the command:

mount /mnt/cdrom

The CD is added to the file system and the CDROM device is locked so that it cannot be accidentally ejected. To access the contents of the CD, simply use the directory /mnt/cdrom. When you are finished using the CD, you can remove it from the file system with the command:

umount /mnt/cdrom

The /mnt/cdrom directory will empty and the CDROM device will be unlocked. You can now safely eject the CD. The same behavior would be used with other removable media, such as a floppy drive (/mnt/floppy).

Running mount with no arguments will show you the currently mounted file systems.

The /etc/fstab file

The association between a device and its mount point is configured in the /etc/fstab file. It can be human-edited, or maintained with an administrative tool. Here is a sample of /etc/fstab/:

Understanding /etc/fstab
/dev/hda5 ext3defaults1 1
/dev/hda2/bootext3exec,dev,duid,rw1 2
/dev/hda6swapswapdefaults0 0
/dev/scd0/mnt/cdromautoro,noauto,exec0 0
none/dev/ptsdevptsid=5,mode=6200 0
none/procprocdefaults0 0
none/dev/shmtmpfsdefaults0 0

Each line represents a file system to be mounted. The first column identifies the device to be mounted. The second column contains the mount point, the location for that device in the file system. The third column identifies the file system type. The fourth column has options for how that file system should be handled. The last column contains flags about that file system. The first number is either 1 or 0 and indicates whether the system should be copied with a dump (an option for system backups). The second number is 0, 1, or 2 and indicates the order in which the file system should be checked upon boot. 0 is not checked at all. 1 is checked first and should be used for the root (/) file system. Other file systems should be 2.

In the fstab file listed above, the root file system is on the first IDE hard drive in the fifth partition, the first logical drive in an extended partition. The /boot file system, where the kernel startup files are located, is on the first IDE hard drive in the second primary partition. Swap space is located in the first IDE hard drive in the sixth partition, the second logical drive in an extended partition. Other file systems listed show their device as "none." We'll cover these shortly. For now let's concentrate on physical disks.

The options in the fourth column will vary depending on the file system type. In the example above, / and /boot are mounted with the "default" options. That, is they are mounted automatically as read-write with asynchronous I/O. Only root can mount or unmount the device but users can execute binaries and use the "sticky bit" (covered later). The file system will be handled as a block character device. For the /mnt/cdrom, however, the options are different. It is not automatically mounted and will mount as a read-only file system. Users will be able to execute scripts and programs in that file system.

Adding file systems

You can add file systems into /etc/fstab by adding new lines to the file. As a practical example, I have a RAID device that contains file resources for use by the department. This device will only contain data files and will be kept separate from the operating system, so it will be easy to move the device to another system in case of a hardware failure. The RAID has already been configured, and is recognized by Linux as /dev/sdc, the third SCSI device. A journaled ext3 file system has been created on the first partition, so we can access it as /dev/sdc1. I want to have this RAID automatically mount into the file system when the computer boots.

I add the following line to the /etc/fstab:

/dev/sdc1 /data ext3 defaults 0 0

This will cause the RAID to be mounted at boot just like the / and /boot systems. Now I simply create the directory I specified as my mount point:

mkdir /data

Once this empty directory is created, we can mount the file system into it:

mount /data

The RAID is now associated to /data. If the system ever reboots, then /data will automatically be mounted.


Partitions in Linux work essentially the same as they do in Windows. The fdisk console command is used to create and manipulate partitions. When you execute fdisk, you must point it toward a device. To see the available devices, use the command fdisk -l.

Listing 2. Using fdisk
[root@cmw-t30 root]# fdisk -l

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

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1         8     60448+  8e  Linux LVM
/dev/hda2             9        15     52920   83  Linux
/dev/hda3   *        16      1403  10493280    c  Win95 FAT32 (LBA)
/dev/hda4          1404      7751  47990880    f  Win95 Ext'd (LBA)
/dev/hda5          1404      5565  31464688+  83  Linux
/dev/hda6          5566      5635    529168+  82  Linux swap
/dev/hda7          5636      7751  15996928+   b  Win95 FAT32

The above list was generated from a laptop, so it shows a rather unorthodox structure for a server. It shows one IDE hard drive with several partitions. If there were other devices, they would be listed as well. For example, a second IDE hard drive might be shown as /dev/hdb.

Run fdisk again with a device, and you get a short prompt.

Listing 3. fdisk on a device
[root@cmw-t30 root]# fdisk /dev/hda

The number of cylinders for this disk is set to 7752.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

Entering "m" will give you a menu of commands. You can display the current partition table with "p." You can create, delete, and modify the type for existing partitions. "l" will show you the full list of partition types available. Write your changes to the partition table with "w", and exit the program, or quit without saving with "q." Some changes will take place immediately. Some types may require a system reboot.

Partition rules under Linux are the same as they are in Windows. You are allowed four primary partitions, any of which can be extended partitions.

File system types

Linux can handle any file system type that the kernel knows about. A generous number of them come compiled by default, and new ones can be added. Here are some interesting ones:

  • ext2: The standard Linux file system
  • ext3: The standard Linux file system with journaling added
  • vfat: Microsoft's Fat32 file system
  • jfs: IBM's journaled file system
  • reiserfs: Another popular journaled file system

Formatting partitions

Once created, partitions are formatted with the correct version of the mkfs command. File systems will have their own version of the mkfs, such as the mkfs.ext2, or the mkfs.ext3. These helper scripts let you create a file system by simply pointing to the partition. Here are some examples:

Listing 4. Using mkfs
 # Create an ext2 file system on the third
 # parition of the first IDE hard drive
mkfs.ext2 /dev/hda3

 # Create an ext3 file system on the first
 # partition of the 2nd SCSI hard drivemkfs.ext2
mkfs.ext3 /dev/sdb1

 # Create a jfs file system in an extended
 # partition on the first IDE hard drive.
mkfs.jfs /dev/hda5

There are various advanced parameters to affect how the partition is formatted, but for general purposes, the defaults are fine. Once the partition has been formatted, it can be mounted into the / file system. A file system must be unmounted to be reformatted.

Other file system tools

Let's take a look at other useful tools.

Console tools

There are several tools for looking at the condition of disks and file systems.

df stands for "disk free." It reports the amount of disk space used and available on mounted file systems. Useful switches:

Checking disk space
df -hHuman readable; uses friendly k, M, and G indicators to show file size rather than listing them in bytes
df -lLimits the listing to local file systems; by default, remote file systems are also listed

du stands for "disk usage." It reports the amount of disk space used by the specified files and for each subdirectory (of directory arguments). Useful switches:

Checking disk usage
du -aShows counts for all files, not just directories
du -hHuman readable; uses friendly k, M, and G indicators to show file size rather than listing them in bytes
du -cPrints a grand total of all arguments after all arguments have been processed; can be used to find out the total disk usage of a given set of files or directories
du -sDisplays only a total for each argument

This is the program used to check and repair file systems, equivalent to chkdsk in Windows. It will have different versions for different file system types, just like mkfs. fsck must be run on unmounted volumes, though it is rarely needed unless the file system was not cleanly unmounted. man fsck and info fsck provide details, as do several of the Related topics included at the end of this article.


Webmin has several tools to work with file systems and partitions.

Figure 1. Webmin partition tool
Figure 1. Webmin partition tool
Figure 1. Webmin partition tool

Hardware, partitions on local disks

Each disk and partition is shown with current usage information. Click on a file system to see details. Unmounted partitions can have their type edited and file systems formatted.

System, disk, and network filesystems

Mount and unmount file systems listed in /etc/fstab. Common file system types have a wizard for creating entries. Unrecognized types can be mounted and unmounted from here, but must be hand-edited in /etc/fstab. Most server file systems can be handled well from here.

The whole is the sum of its partitions

Though there are many similarities in how Windows and Linux handle partitions and file systems, moving from drive letters to a completely hierarchical tree will probably take some adjustment. As always, there are robust console tools to work with these functions and configuration files in the /etc directory. Browser-based front ends like Webmin offer some helpful tools.

Downloadable resources

Related topics

ArticleTitle=Windows-to-Linux roadmap: Part 6. Working with partitions and file systems