Updated: 2012-04-02 05:25 EDT
mkfs
)fsck
)man df
man du
file -s /dev/sda1
Creating a partition using fdisk
simply divides up the space on a disk. It doesn’t allow the operating system to store files there. You first have to create some infrastructure to hold content inside the partition; you have to create a File System.
A File System is a way of storing content inside a disk partition. There are many kinds of file systems, each with different characteristics. Linux supports a huge number. Proprietary operating systems generally only support their own types of file systems. (Linux can access Linux, Apple, and Microsoft file systems, and dozens of others. Apple can only access Apple and Microsoft file systems. Microsoft can only access Microsoft file systems. “Does not play well with others.”)
A file system is the way the O/S stores and retrieves data inside the partition, e.g.
The above basic functions are common to most operating systems, but they are implemented and managed differently from one O/S to another and perhaps even from one kind of file system to another.
The three steps to create a file system don’t change much from one operating system to another, but the specific details and utilities used vary greatly. The steps are:
fdisk
)mkfs
)fsck
)mount
)The trio is always “partition
”, “make file system
”, and “mount
”, in that order. Let’s look at each in more detail:
fdisk
, Disk Druid or any other partitioning tool that can manage and create Linux partitionsfdisk
: see slides on Disk PartitioningLinux organizes data inside partitions using various types of file systems. Linux supports a large number of different file system types, including most of the Windows file system types. You can use mkfs
to create a file system to optimize the way data being stored in a partition. The mkfs
command is actually a front-end for a whole set of mkfs
commands, each different one selected by the -t
option to mkfs
.
mkfs
to create a file system Index mkfs -t type [other options] device_name
ext3
, ext4
, vfat
vfat
for USB keys, floppy disks, and Microsoft compatibility/dev/
name of an existing partition, not a whole diskmkfs -t ext4 /dev/sda1
(first disk, first partition)mkfs -t vfat /dev/fd0
(first floppy disk)mke2fs [options] device_name
mkfs
specific to Linux ext2/ext3/ext4
file systemsfsck
. (Never done.)Details on using mkfs
:
ext2
type, but for modern Linux hard disk systems you should always specify the type explicitly as either ext3
or ext4
. These newer file system types are journalling file systems. Do not use the old default ext2
file system type, especially on large (over 400MB) disks.device_name
is the pathname (usually absolute) of the existing device or partition that will be used, usually of the form /dev/sdXN
, where X is the letter of the device (disk) being used and N is the partition number on that device. (Recall that partitions are created using the fdisk
command.)mkfs
commands do not check to see what is in the partition already. They will not ask “Are You Sure?” before they re-format a partition and destroy whatever was previously there. Be extremely careful to get the device name correct! A partition destroyed by mkfs
is impossible to recover.mkfs
commands do not care about the System ID (type) of a partition given in the partition table. You can create any type of file system in any type of partition. (For example, you can create an ext4
file system on a partition labelled in the partition table as NTFS or as Swap, but this is a bad idea.)fdisk
does not automatically create any type of file system in that partition.mkfs
does not automatically mount or make available that file system for use in Linux. The new file system is not accessible. More on mounting file systems in the next section.
Unlike Windows with its multiple drive letters, Linux has a single-ROOTed file system tree. “Mounting” attaches an existing file system found on a block device (usually a disk partition, e.g. /dev/hda2
) to the Linux directory structure, e.g. onto some directory /boot
. Accessing that directory, and everything under that directory, accesses the file system on that disk partition.
Any number of separate file systems (stored in disk partitions) can be attached anywhere in the same Linux directory tree, resulting in one single ROOTed tree to access every file on every disk. You can detach a file system from one place in the tree and attach it somewhere else, but then the pathnames to files inside that file system would change to reflect the new mount location.
File systems can be mounted from the Unix/Linux command line using the mount
command. File systems can be mounted automatically at system boot time by putting their names and mount points into the /etc/fstab
file. File systems on removable devices (USB keys, DVDs) can also be mounted dynamically at device insertion time using rules in system configuration files (“automounting”).
(Most distribution use an existing /mnt/
directory to attach file systems dynamically and temporarily to the directory structure, e.g. USB keys, CDROM and DVD, floppy disks, etc.)
mount
command Index mount
mount -a
/etc/fstab
file (possible for root only)mount [options] { device_name | directory_name }
/etc/fstab
that matches the given namemount [options] device_name directory_name
fstab
and mount the (file system in) the given device_name onto the given directory_name mount point, both of which must already existDetails on using mount
:
device_name
is the pathname (usually absolute) of the device containing the file system, e.g. /dev/sdb9
. The device (usually a partition name, not a disk name) must have a recognized file system created inside it already, because you are mounting the file system that is inside the partition, not the partition itself.mkdir
to create a new mount point, if neededmount
commands are smart enough to know what type of file system resides inside a partition, but rarely you may have to specify the type using the “-t” option
mkfs
first./etc/fstab
filemount -o ro /dev/fd0 /mnt/floppy
Mounting a file system onto a directory that already contains files will temporarily hide those files until the file system is unmounted again.
mount /dev/sda1 /mnt/foo
mount -t vfat /dev/fd0 /mnt/dosfloppy
umount
command and give either the device name or the mount point, but not both:
umount /dev/sda1
umount /home
cd
all your shells and processes out of the file system firstfsck
Index /etc/fstab
for example) you will need to “re-mount” that file system as read-write/dev/sda1
to read-write mode use the “remount” option:mount –o remount,rw /dev/sda1
mount
and the /etc/fstab
file Index Boot-time mount: Add the file system to the /etc/fstab
file and it will always be mounted at boot time. See also: man 5 fstab
File systems can be listed in the /etc/fstab
file to automate the mounting process. Both the mount point (the existing directory on which the file system is to be mounted) and any other options can be stored in the fstab
file.
The file systems can be identified in fstab
in the traditional way by partition name (e.g. /dev/sda1
), which is a bit risky since disk names can change depending on what is attached to your machine at boot time. Another way to identify file systems is with a Volume Label or UUID (Unique UID) identifier that is configured into the partition and that doesn’t change even if the partition name changes. You can see these Labels and UUIDs using the blkid
command. You can set Labels and UUIDs into a partition using the tune2fs
command.
If a file system is not listed in the /etc/fstab
file and you wish to mount it, then all mount information about the file system and all options need to be given on the command line. At minimum, you need the device name (partition) and the existing mount point (directory) where the file system should be mounted:
mount /dev/sda2 /home
mount -o "ro" /dev/sda2 /home_readonly
If a file system is listed in the /etc/fstab
file, then indicating either just the mount point (the directory name) or just the device name (e.g. /dev/sda1
) will indicate to the mount
command that the rest of the information needed for the mount should be copied from the matching entry in the /etc/fstab
file:
mount /dev/sda1
(gets the directory name and options from fstab
)mount /home
(gets the device name and options from fstab
)/etc/fstab
file Index Lines in /etc/fstab
starting with #
are comments and are ignored:
# Sample /etc/fstab taken from Fedora 12 - uses Linux Volume Manager (LVM)
# DEVICE MOUNT POINT TYPE OPTIONS BACKUP FSCK
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=e55742bc-c78d-4a92-8195-d262e4eebb0e /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_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
Each line in /etc/fstab
has six fields that describes a file system:
/dev/
containing a file system, e.g. /dev/sda1
/boot
is mounted by UUID instead ofdevice /dev/sda2
)auto
hereauto
is the best idea, since if you’re wrong about the type, the system won’t boot properlytmpfs
, devpts
, sysfs
, proc
, and sometimes the device name is given as simply none
noauto, user
defaults
uses some default options that depend on the file system type - RTFMfsck
program uses this to run file system checks in orderFile systems do not need to be listed in the /etc/fstab
file to be mounted - you can always mount anything from the command line. Having a file system listed in the fstab
means you only need to specify the device
name or the mount point
to the mount
command; the other information for the mount will be read from the /etc/fstab
file.
fstab
used by mount
Index auto
- will be mounted when mount
is used with the -a option (and so mounted at boot time) (default)noauto
- will be ignored by the -a option (not mounted at boot time)exec
- permit execution of binaries (default)ro
- mount the file system read-only (read, execute, no writing)rw
- mount the file system read-write (default)user
- let a non-root user mount and unmount this file systemnouser
- only root can mount and unmount this file system (default)defaults
- use default options: auto, exec, rw, nouser
Another use for disk partitions is to hold memory pages used to implement Unix/Linux Virtual Memory. These are called swap partitions or the swap area
, and they, too need some minimal structure created to be used by the system. Usually, you find only one swap partition in a system, but systems with a lot of memory may have more.
Again, there are the usual three steps: Partition, Create, and Connect
fdisk
mkswap [options] device_name
mkswap /dev/sdb9
The device_name
is the pathname (usually absolute) of the existing swap partition that will be used. These commands do not care about the System ID (type) of a partition given in the partition table. You can initialize as swap any type of partition. Most Linux systems at boot time will automatically use as swap all partitions that have a type of “Linux swap”, if they are initialized as swap. You can add more swap space to a running system using the above two commands.
To display the currently active swap partitions, omit the device_name
and use only the -s
or --summary
option to the swapon
command:
swapon -s
swapon
to activate the swap area you just created with mkswap
swapon device_name
swapon /dev/sdb9
swapon -s
(list all currently active swap areas)swapoff
to de-activate (stop using) a swap area:
swapoff device_name
swapoff /dev/sdb9
/etc/fstab
marked with type swap
will be automatically connected and used as swap areasfstab
swap partitions be connected using:
swapon -a
(connect and enable all known swap partitions)swapoff
command has an identical option to disconnect all active swap areasAuthor:
| Ian! D. Allen - idallen@idallen.ca - Ottawa, Ontario, Canada
| Home Page: http://idallen.com/ Contact Improv: http://contactimprov.ca/
| College professor (Free/Libre GNU+Linux) at: http://teaching.idallen.com/
| Defend digital freedom: http://eff.org/ and have fun: http://fools.ca/
Plain Text - plain text version of this page in Pandoc Markdown format
Author Ian! D. Allen