SDB:Basics of partitions, filesystems, mount points

Jump to: navigation, search

Susemini.png 本文处于需要翻译的文章的状态,欢迎您积极参与翻译与修订。 翻译人员:无,修订人员:无。

状况

When it comes to installation of openSUSE or the adding/removing of disks to an existing system people start talking about (un)mounting, filesystems and partitions. Often one has no real idea what all these words mean in a Unix/Linux environment. This again means that discussing problems in this area is full of painfull misunderstandings.

A lot of people do have some knowledge based on other Operating Systems they used. That increases the possibility of confusion.

处理过程

The real procedure to cope with this situation is to spend some time in reading some documentation. This SDB hopes to be a primer and a starting point for further reading.

All examples shown below were made by the superuser (root).

磁盘

At least in this document we will use the word disk as a generic term for all things that are seen as disks by the system. No need to talk about HDD (Hard Disk Drives) because that is only interesting when Floppy Disk Drives would be very different, seen from the point of view of the system. They are not. Nowadays they are hardly used. And the normal (hard) disk is much older. Also newer types of mass storage devices present themselves to the system as disks and fall in this category. The systems can not see if a disk is inside the system enclosure, beside it on a table or on another shelf, so there is no difference between what some people call internal and external disks.

Disks are normally preformatted by the manufacurer. That means that damaged tracks are marked and replacements used, sector numbers are written. This is done to interface with the controler hard-/firmware. This type of formatting is also know as low-level formatting.

(磁盘) 分区.

Unix systems always have had the possibility to split disks into several partitions. Each disk has at least one partition, but often there are more. We will limit ourselves here to the partitioning as done on disks in a PC environment.

In the beginning there was the idea that four partitions would be enough for all possible usage (which it was not). The data about the partioning is written in the partition table. It is on a special place on the disk and the BIOS knows all about it. As usual a downward compatible solution was found: by making one of the four a special partition, which can hold more partitions. Newer BIOSes (nowadays all BIOSes) know about it. Thus we have 3 types of partitions:

  • primary partitions, these are the partitions of old, there can be four of them (numbered 1, 2, 3, 4);
  • extended partition (in fact also a primary partition), there can only be one, it has normally the number after the highest created primary partition (3 or 4) and should contain all of the remaining space of the disk (else space is spoiled);
  • secondary partitions, they are created inside the extended partition, their numers are always 5 and higher

(the maximum is debatable, but enough for most people).

Some people are bewildered by the extended partition, it seems to be of no use and takes a lot of disk space and that space seems also to belong to other useful partitions. Reading the above might reassure them.

An example of a disk with partitions of all three types goes here:

beneden:~ # fdisk -l
Disk /dev/sda: 200.0 GB, 200049647616 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1c841c84

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         574     4604008+   c  W95 FAT32 (LBA)
Partition 1 does not end on cylinder boundary.
/dev/sda2   *         575        8967    67416772+   7  HPFS/NTFS
/dev/sda3            8968       24321   123331005    f  W95 Ext'd (LBA)
/dev/sda5            8968        9229     2104483+  82  Linux swap / Solaris
/dev/sda6            9230       11840    20972826   83  Linux
/dev/sda7           11841       24321   100253601   83  Linux

beneden:~ # 
  • Partition 1 is a restore partition put there by the manufacturer.
  • Partition 2 contains a Windows XP system (this system calls it it's C: drive).
  • Partition 3 is the extended partition it runs until the end of the disk and holds the following three:
  • Partition 5 is the openSUSE swap partition.
  • Partition 6 is the openSUSE root partition.
  • Partition 7 is the openSUSE /home partition.

分区命名

In the partition table partitions are simply numbered as we saw above.

A special warning here about GRUB. Grub has its own naming/numbering schema and the most important thing to know is that GRUB starts all disk and partition counting at 0 and not at 1!

When the Linux system starts, it scans the hardware and when it finds disks and partitions it gives them names. These names are to be found as the names of the device special files in /dev/. Disk will have names like hda, hdb, hdc, ... or sda, sdb, sdc, ... and partitions of hda will be hda1, hda2, ... and those of sda will be sda1, sda2, ... where the number is the partition number.

What are these device special files? A special type of file that is associated with hardware. I/O to the hardware is done by reading from / writing to this file. This is the file metaphor in Unix/Linux. There are two types of these files: character device special file and block device special file. For disks we do I/O in blocks. Of course this is too long to pronounce so most people talk about device files. Normally they are created in the /dev/ directory (nowadays dynamically by udev). Here is what they look like when you list them:

boven:/dev # ls -l sda*
brw-r----- 1 root disk 8, 0 Apr 27 09:45 sda
brw-r----- 1 root disk 8, 1 Apr 27 09:45 sda1
brw-r----- 1 root disk 8, 2 Apr 27 09:45 sda2
brw-r----- 1 root disk 8, 3 Apr 27 09:45 sda3
boven:/dev #

Most things will be familiar to you. The b says it is a block device special file. Normal users are not allowed to read/write direct from/to the disk, else all security would be futile. The numbers 8 (called the major number) is the number the kernel uses internal for the driver that works with these devices (so it will not send tape commands to disks) and the 03 (the minor number) tell them apart from each other inside that driver.

Until not long ago these /dev/sdb2, etc. were used to mount the partitions and when you give the command mount (shows what is mounted) you will see them used.

boven:~ # mount
/dev/sda2 on / type ext3 (rw,acl,user_xattr)
/dev/sda3 on /home type ext3 (rw)
  ...
boven:~ #

This is based on the fact that on every boot the system finds the disks in the same sequence. When not, sda and sdb may be exchanged and the wrong partitions mounted! This can not only happen at boot, but when a disk is connected to the already running system it will get the 'next' name (e.g. sdc). What we need is a unique identifier of the disk. And there is. There are even more. Look at /dev/disk/. There are several directories there:

boven:~ # ls -l /dev/disk
total 0
drwxr-xr-x 2 root root 360 Jul  5  2008 by-id
drwxr-xr-x 2 root root 100 Jul  5  2008 by-label
drwxr-xr-x 2 root root 220 Jul  5  2008 by-path
drwxr-xr-x 2 root root  80 Jul  5  2008 by-uuid
boven:~ #

Look inside these directories. Every one of them has some or all of the partitions, identified in a different way. And all these files are not device special files, but link to the device special files we saw earlier. When you look in /etc/fstab:

 
boven:~ # cat /etc/fstab
/dev/disk/by-id/scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part2 /                    ext3       acl,user_xattr        1 1
/dev/disk/by-id/scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part3 /home                ext3       defaults              1 2
/dev/disk/by-id/scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part1 swap                 swap       defaults              0 0
  ...
boven:~ # 

You will see that openSUSE nowadays uses the /dev/disk/by-id/ names to see that the correct partitions are mounted:

boven:~ # ls -l /dev/disk/by-id
lrwxrwxrwx 1 root root  9 Jul  5  2008 scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW -> ../../sda
lrwxrwxrwx 1 root root 10 Jul  5  2008 scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul  5  2008 scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul  5  2008 scsi-SATA_Hitachi_HDT7250_VFJ201R23XUEXW-part3 -> ../../sda3
  ...
boven:~ # 

文件系统 (缩写: fs)

Now we have one or more partitions and we want to use them. Well, there are some programs who can use the raw partition as it is, but mostly we want to put data organised in directories/files on it or use it for swap. For the usage as a filesystem (or swap) an empty filsystem must be created on the partition. Many people call this formatting, but in Unix/Linux you create or make a filesystem and the tool is mkfs. We will not go into details here, but what goes into an empty filesystem (inodes, etc.) depends on the filesystem type. A ReiserFS is different from an ext2 or ext3 fs. You have to make the choice.

You do not need to call the mkfs of the fs type you want yourself. YaST wil do this for you.

What is important here is that Linux can not only access filesystem types that are designed for it, but also types that are used by MS/DOS ... Vista sytems like FAT and NTFS. But there are restrictions. FAT has restrictions on filename length. Both do not have the Unix/Linux permission bits and this means that sometimes access is restricted without proper handling (filesystem options at mount time).

Before we start to use the partitions, first some explanation about the terminology and concepts used in Unix/Linux in this area.

All of the data stored om mass storage devices in a Unix/Linux system consists of only one hierarchic tree starting from the root (/). This is contrary to the MS/DOS .... Vista concept where every disk (partition) has it own hierarchic tree (starting at A:, B:, C:, D:, etc.)

A directory is a special type of file that holds the descriptions of other files. All directories are nodes in the hierarchic tree. From other OSs and from the desktop metaphor words like map and folder are also used by end users, but the Unix/Linux word is directory.

The root of the hierarchic tree is thus also a directory. It is called the root directory or short root. (This is the same word, but not the same entity as the root user). When used on its own, the root directory is written /.

The mount point is the place in the hierarchic tree where a filesystem is mounted. This point can be anywhere in the (already mounted) tree (no need to keep oneself restricted to mount points in /mount/ or /media/). It is a directory. Every directory can be used as a mount point. But be carefull. When a directory already has files, the mounting of an fs on it will make these files unreachable! Only after unmounting they will be reachable again (they stay where they were and still occupy space on the disk).

Some system managers make use of this. When creating a mountpoint they will make a file in it with a useful name:

mkdir mountpoint
touch mountpoint/The-fs-is-not-mounted
mount /dev/... mountpoint
ls mountpoint

I will now show the contents belonging to the mounted fs. When the fs is not mounted, the same ls will show the file The-fs-is-not-mounted.

A lot of mounting is done high in the hierarchy. e.g. On the highest level there can (and must) only be one:

  • / (this is mounted readonly very early in the startup sequence, else no tools would be available, not even mount, later it is re-mounted read/write)

One level down:

  • /home (very often done)
  • /tmp
  • /bin (mounted over the network for a very small system)
  • /sbin (NO, do not try this one, /sbin/ contains those things like mount needed at system startup before the rest of the mounting is done!)

Further down:

  • /mnt/... (nice place for a system manager to mount things during maintanance)
  • /media/... (conventional place for CDs, DVDs and the like)

And according ones needs:

  • /home/movielover/Documents/movies/archive (A partition for this user only. When it is full he is on his own. Let him pay for the Gigs).

Remark that you can not mount the last one unless you have mounted /home first.

挂载工具和fstab 配置文件

The very act of (un)mounting is of course done by the kernel. The tool that the system manager uses to interact with the kernel for this is mount. Read man mount for more info. The tool needs basicaly four things:

  • which fs type to mount (with the -v option)
  • options that influence the fs, they are different for each fs type (with the -o option)
  • what to mount (for a local mount this is the block special device file of the partition)
  • where to mount (the mount point directory)

That can be a lot of typing when you are doing some tests, but /etc/fstab comes handy here. When you specify all those parameters in /etc/fstab, mount only needs either the mount point or the device special file. What is not specified is found in /etc/fstab.

But the real usage of /etc/fstab is that it is used at system startup to mount all those partitions that you always need. And do not put the line for /home/movielover/Documents/movies/archive before the line for /home in /etc/fstab.

umount 工具只需要挂载点或指定的设备文件。

工具

这很基础,我们不会太多谈论工具,但会提到一些 (比如 fdisk, mkfs, mount)。 一如既往,它们和配置文件如 /etc/fstab 在您的系统上(或互联网上)都有Man手册页,以方便您的参阅。 Yast > System > Partitioner 是个非常有用的图形界面,您也许必须回到CLI命令行,在运行级别3或单用户模式的时候(因为您可能需要在分区的时候卸载一部分文件系统)。 由于部分原因,您可能甚至需要从救援CD/DVD上运行 fdisk,只有在救援模式的CD/DVD那里,您才有一个未挂载的 /根分区)。 考虑更多的话可能就是可引导的图形界面比如 Gparted ,这些工具对文件系统的集成或改变其大小的技术很成熟,但超出了本文的讨论范围。

链接

<keyword>partition,filesystem,mountpoint</keyword>