Linux本地磁盘(硬盘)介绍

本文试图从硬件结构、逻辑结构两方面来介绍Linux中本地磁盘的基本知识。

1. 硬件结构

一块磁盘由多个盘面组成,每个盘面有一个对应的磁头(heads),我们可以在该盘面上存储我们需要的信息。

每一个盘面,被分成多个圆环,我们称之为柱面(cylinders)。每一个柱面又被分割为多个扇形区域,简称扇区(sectors),参见下图:

磁盘扇区(图片来源www.eygle.com/

两个红色环形之间是一个柱面;图中黄色标记部分是一个扇区。

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 0 0

7 responses to “Linux本地磁盘(硬盘)介绍”

  1. 找了好久的图,又在这儿找到了。。。

  2. ahaha 🙂

  3. 这几天 他们做磁盘数据的采集 这些内容刚好可以用上 Thank you!!!

  4. hwankin

    总结的很不错。
    虽然是入门的基础知识,但肯定有很多linux管理员也未必清楚。
    再接再厉哈。

  5. 错了!

    “每一个盘面,被分成多个圆环,我们称之为柱面(cylinders)。每一个柱面又被分割为多个扇形区域,简称扇区(sectors)”———错了!

  6. 楼上 纠正我… 或者给出参考文档

  7. actberw

    在读深入理解计算机系统的时候,看到现在的大容量硬盘使用的都是multi zone recording的技术也称Zone bit recording, http://en.wikipedia.org/wiki/Zone_bit_recording ,内磁道,外磁道的扇区数是不一样的,fdisk -l 的时候显示的扇区数是个平均值,但是目前网上解释硬盘相关问题的时候都是扇形的方式来解释扇区的,是为了便于理解还是什么?

Leave a Reply

Your email address will not be published. Required fields are marked *