本文试图从硬件结构、逻辑结构两方面来介绍Linux中本地磁盘的基本知识。
1. 硬件结构
一块磁盘由多个盘面组成,每个盘面有一个对应的磁头(heads),我们可以在该盘面上存储我们需要的信息。
每一个盘面,被分成多个圆环,我们称之为柱面(cylinders)。每一个柱面又被分割为多个扇形区域,简称扇区(sectors),参见下图:
(图片来源)
两个红色环形之间是一个柱面;图中黄色标记部分是一个扇区。
2. fdisk -l 查看磁盘情况
#fdisk -l
Disk /dev/sda: 73.2 GB, 73274490880 bytes
255 heads, 63 sectors/track, 8908 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 16 128488+ 83 Linux
/dev/sda2 17 1928 15358140 83 Linux
/dev/sda3 1929 2189 2096482+ 82 Linux swap / Solaris
/dev/sda4 2190 8908 53970367+ 5 Extended
/dev/sda5 2190 2450 2096451 82 Linux swap / Solaris
/dev/sda6 2451 2711 2096451 82 Linux swap / Solaris
/dev/sda7 2712 2972 2096451 82 Linux swap / Solaris
/dev/sda8 2973 8908 47680888+ 83 Linux
可以看到,上面的磁盘/dev/sda有255个磁头,8908个柱面,每个柱面轨道上有63个扇区。因为每个扇区大小为512bytes,所以总大小约为:8908 * 63 * 512 * 255 = 73270794240(和上面的73274490880 相差3696640,不知道是什么地方多出来的)。
3. 磁盘分区、文件系统、挂载点
我们继续看上面的例子,磁盘/dev/sda共分为8个分区:/dev/sda1,/dev/sda2,......,/dev/sda8,Start和End分别为各个分区的起始和结束柱面。例如分区/dev/sda2从柱面17开始到柱面1928结束,则大小约为(1928-17)* 63 * 512 * 255 = 14.6G。
可以通过df -h来查看分区/dev/sda2的挂载目录:
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 15G 13G 1.1G 92% /
/dev/sda1 122M 20M 96M 17% /boot
tmpfs 2.0G 669M 1.4G 33% /dev/shm
/dev/sda8 45G 26G 17G 62% /u01
可以看到,分区/dev/sda2挂载根目录 / 上。然后,通过文件/etc/fstab来查看该分区的文件系统:
#more /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot1 /boot ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=/u01 /u01 ext3 defaults 1 2
LABEL=SWAP-sda5 swap swap defaults 0 0
LABEL=SWAP-sda6 swap swap defaults 0 0
LABEL=SWAP-sda7 swap swap defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0
看到根目录 / 使用了Linux ext3文件系统。
至此,我们看到磁盘/dev/sda共分为八个分区。其中第二个分区/dev/sda2从柱面17到柱面1928结束,大小约为15G,该分区挂载在根目录 / 上,使用了ext3的文件系统。
4. 其他磁盘分区
在上面的fdisk -l 列表中我们一共可以看到八个磁盘分区。上面已经分析了/dev/sda2,我们再看来看看其他的分区。
- 在Linux中第一个分区/dev/sda1,为引导扇区,挂载在/boot上
- 第二个分区挂载在根目录 / 上,大小15G,为ext3文件系统
- 第三个分区为交换分区,从柱面1929到2189,大小约:(2189 - 1929)* 63 * 512 * 255 = 2G。
- 第四个分区为扩展分区,后面四个分区均是该分区的一部分。该分区从柱面2190到8908结束。
- 分区五、六、七为扩展分区的子分区,均为交换分区,单个大小均为2G。所以全部的交换分区大小共2G + 2G*3 = 8G。
- 第八个分区为扩展分区的最后一个子分区,挂载在/u01上,大小约为 (8908 - 2973)* 63 * 512 * 255 = 45G。
以上为示例主机上的全部磁盘分区,以及挂载情况。
5. 小结
有了以上信息,我们就基本清楚了硬件结构以及对应的逻辑结构,需要使用的命令其实也很少:
#fdisk -l
#df -h
#more /etc/fstab
6. 补充
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/1 / ext3 defaults 1 1
LABEL=/boot1 /boot ext3 defaults 1 2
......
关于/etc/fstab的简单补充:
- 第一列是:一般是设备(分区),如也有是LABEL=×××的,这是ext2 ext3特有的卷标,可以通过e2label来查看各个设备的卷标。
- 第二列是:挂载点
- 第三列是:文件系统
- 第四列是:文件系统挂载时候的参数(例如NFS有时候需要用户名密码等)
- 第五列是:标志是否需要备份1为需要,0为不需要
- 第六列是:启动时,是否需要fsck检查磁盘1为先检查,2为后检查,0为不检查
在fstab文件还有部分第一列是none的,这些都是不需要物理磁盘的文件系统。典型的如/proc文件系统:
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults