计算机使用二进制计数,1 & 0, 1111100001110... 为了更好地阅读,人类使用半字节(4 位),通常显示为十六进制数字 0 到 f (0123456789abcdef)。半字节通常两个一组,这构成一个字节。最常用的内存单位是字节及其倍数,KiB(千字节)、MiB(兆字节)、GiB(吉字节)。“i”表示二进制用法(1 Ki 是 1024,而不是 1000),大写“B”表示字节,而不是位。
有时,块这个词被用来代替扇区。
大容量存储设备(至少是我们在这里处理的那些)以 512 字节的“扇区”存储字节。这是不均匀的,因为任何扇区计数都必须除以二才能得到 KiB 数,因此大多数分区软件接受字母 k (KiB)、m (MiB)、g... 作为选项。明智的做法是不区分大小写。
扇区大小是可用的字节计数。真正的扇区更大,因为它必须包含管理数据。您不必担心这个。
请注意,截至 2006 年 3 月 22 日,IDEMA 宣布了一种新的扇区大小为 4kiB(4096 字节):http://www.idema.org/_smartsite/modules/local/data_file/show_file.php?cmd=download&data_file_id=1446 - doc 文件,可以使用 OpenOffice.org 打开。
旋转大容量存储设备使用磁头。真正的磁头是物理机电设备,用于写入和读取磁道。驱动器由旋转盘片制成,盘片有两面,因此每个盘片可以有两个磁头。如果有两个盘片(常见),您就有四个磁头。
磁头通过非常复杂的系统进行写入,请在此处查看详细信息:http://www.spmtips.com/library/data_storage。
磁头一起移动,全部同时移动。它们可能会旋转 - 围绕自身的中心旋转,当然不是盘片的中心。它们也可能进行线性移动。您可以在任何 CD 读取器中看到线性移动磁头的示例,查看激光头的移动。大多数磁盘都如此维基百科图片所示 http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Hard_disk_platters_and_head.jpg/200px-Hard_disk_platters_and_head.jpg。
当您想到每个磁头同时定义的所有磁道时,您就得到了一个柱面。因此,在旋转驱动器上,同一柱面的所有磁道都同时读取或写入。实际数据分布在所有盘片上。数据的实际写入方式取决于驱动器制造商,而不是用户。
小型磁盘直接用作一整组扇区。基本程序可以直接访问扇区上的数据。许多程序都这样做(例如 dd 或任何分区程序)。
但是我们生活在一个大容量存储容量极高的世界中。太字节在今天(2009 年)很常见,而完整的 Linux 系统可以在软盘(1440 字节)上运行。因此,需要从大容量存储设备中创建多个部分,即分区。
分区是将单个驱动器划分为多个逻辑驱动器的一种方法。分区是连续的扇区集合。为了减少磁头的移动,分区可以“对齐”到柱面大小,即使用整数个柱面。这并非总是这样做,但应该这样做,因为它对于恢复有许多其他优点。
由于您可以拥有许多分区,因此您需要有一个分区表。此分区表存储在驱动器的最开始处。您不太可能需要通过使用十六进制编辑器直接写入字节来更改此表,因此我们不会过多说明表的位置。
周围有许多操作系统都共享类似的硬件和许多分区系统。我们将只关注在 PC 中可以找到的内容,即使现在很难定义它。例如,对我们来说,PC 是任何能够运行 Linux 的计算机(我知道,这并不总是真的)。
这些分区类型中的每一种都在表中用一个特殊的标志“type”(在 fdisk 中为“t”)表示。最著名的是 Linux 分区的类型 83 和 Linux 交换分区的类型 82(十六进制数)。
请注意,大多数操作系统可以共享分区表。至少,如果磁盘与多个系统硬件兼容,则这些系统应该能够看到其他系统所做的事情,而不是意外擦除驱动器。我不能肯定这在现实生活中是真实的。
分区可以直接作为扇区访问,就像磁盘的任何部分一样,但通常都填充了 文件系统。文件系统和分区之间的关联仅仅是因为文件系统位于分区中,但仅此而已。您可以拥有没有分区但有文件系统的磁盘,或者拥有没有文件系统的分区(交换分区是最著名的)。有关文件系统的详细信息,请参阅维基百科。
总之,文件系统允许将数据存储在具有人类可读名称的文件中,并以友好的方式对文件进行排序,例如目录、子目录、文本、图像...
从用户的角度来看,除了扇区之外,您在大容量存储分区上几乎可以找到的所有东西都是文件。但是计算机是好奇的极客,如果您愿意,可以将文件视为磁盘。使用“loop”系统(大多数 Linux 内核中的默认系统),可以对文件内部进行分区,在其上创建文件系统并挂载它。这对于实验特别方便。
其中一些文件是设备或节点。分区不是文件,而是通过我们稍后将看到的特殊节点访问。这些节点不是通过 touch 创建的,而是通过 mknode 创建的。谨慎使用。节点需要类型(c 表示“字符”或 b 表示“块”)以及主编号和次编号。对于我们需要的,主编号是磁盘编号,次编号是分区编号。该列表在 /proc/partitions 中可见
cat /proc/partitions major minor #blocks name 8 0 488386584 sda 8 1 52436128 sda1 8 2 1 sda2 8 5 2104483 sda5 8 6 20972826 sda6 8 7 52436128 sda7 8 8 360434308 sda8 |
#mknod b 8 9 /dev/sda9 |
创建一个无用的 /dev/sda9 节点,假设这不会创建分区,只创建节点。在通常的 Linux 发行版中,节点是在启动时动态创建的,因此任何人都不应该这样做。但是,有时自动系统会失败。