分区-大容量存储-定义-命名-HOWTO

Jean-Daniel Dodin

修订历史
修订 V0.12009-05-09修订者: jdd

目录
1.
2. 版权和许可
3. 此处涉及的大容量存储
4. 定义
4.1. 警告
4.2. 字节
4.3. 扇区
4.4. 磁头
4.5. 磁道
4.6. 柱面
4.7. 磁盘
4.8. 分区
4.9. 分区表
4.10. 文件系统
4.11. 文件和节点
5. Linux 中的驱动器命名
5.1. 命名约定
6. Linux 中的分区命名
6.1. 数字
6.2. 数字的含义
7. 设备主设备号和次设备号
8. 分区类型
8.1. Linux 分区类型
8.2. 外部分区类型
8.3. 交换分区
8.4. 完整列表
9. 多少分区

1.

分区-大容量存储-定义-命名-HOWTO, 版权所有 (c) 2009 Jean-Daniel Dodin


2. 版权和许可

本文档的版权归作者 Jean-Daniel Dodin 所有,根据以下许可协议。

            Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
      Version 1.2 or any later version published by the Free Software
      Foundation; with no Invariant Sections, no Front-Cover Texts and
      no Back-Cover Texts.  A copy of the license is included in the
      section entitled "GNU Free Documentation License".

GNU 自由文档许可证


3. 此处涉及的大容量存储

本 HOWTO 中涉及的大容量存储是可重写的随机访问存储。它们大多数是磁旋转磁盘(软盘、硬盘驱动器)或闪存(USB 密钥或任何类型的存储卡)。

例如,cdrom 和 dvd 在本 HOWTO 的讨论范围内(请参阅维基百科)。磁带也不在讨论范围内。

内核使用了大容量存储,因此基本文档可以在 内核网站上找到

参考站点应该是 国际磁盘驱动器设备和材料协会应该是,因为这个网站不是很友好。


4. 定义

4.1. 警告

关于驱动器的许多定义只是虚拟的。也就是说,它们被使用,但硬件通常与预期的描述完全不同。通常这不会产生奇怪的结果,任何大容量存储都必须被视为一个黑匣子


4.2. 字节

计算机使用二进制计数,1 和 0,1111100001110... 为了更好地读取它,人类使用半字节(4 位),通常显示为从 0 到 f 的十六进制数字 (0123456789abcdef)。半字节通常两个一组,这就构成了一个字节。最常用的存储单位是字节及其倍数,KiB(千字节)、MiB(兆字节)、GiB(千兆字节)。“i”表示二进制使用(一个 Ki 是 1024,而不是 1000),大写“B”表示字节,而不是位。


4.3. 扇区

有时,这个词被用来代替扇区

大容量存储设备(至少是我们在此处处理的设备)以 512 字节的“扇区”存储字节。这是不均衡的,因为任何扇区计数都必须除以 2 才能得到 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 打开。


4.4. 磁头

旋转大容量存储设备使用磁头。真正的磁头是物理机电设备,用于写入和读取磁道。驱动器由旋转盘片制成,盘片有两面,因此磁盘每个盘片可以有两个磁头。如果有两个盘片(常见),您就有四个磁头。

磁头通过非常复杂的系统进行写入,请在此处查看详细信息:http://www.spmtips.com/library/data_storage


4.5. 磁道

盘片正在旋转。当磁头静止时,盘片旋转和磁头的宽度定义了一个磁道。

磁头从盘片的外侧部分到内侧部分逐步移动。每一步定义一个新的磁道。


4.6. 柱面

磁头一起移动,全部同时移动。它们可能会旋转 - 在它们自己的中心上,当然不是盘片中心。它们也可能进行线性移动。您可以在任何 cdreader 中看到线性移动磁头的示例,观察激光头的移动。大多数磁盘都如此维基百科图片所示 http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Hard_disk_platters_and_head.jpg/200px-Hard_disk_platters_and_head.jpg

当您考虑所有磁头同时定义的所有磁道时,您就得到了一个柱面。因此,在旋转驱动器上,同一柱面的所有磁道都是同时读取或写入的。实际数据分布在所有盘片上。数据的实际写入方式取决于驱动器制造商,而不是用户。


4.7. 磁盘

小型磁盘直接用作一整批扇区。基本程序可以直接访问扇区上的数据。许多程序都这样做(例如 dd 或任何分区程序)。

但是我们生活在一个容量极高的大容量存储世界中。现在 (2009 年) TB 级容量很正常,而一个完整的 Linux 系统可以在软盘 (1440 字节) 上运行。因此,需要从一个大容量存储设备中划分出几个部分,即通过分区。


4.8. 分区

分区是将单个驱动器划分为多个逻辑驱动器的一种手段。分区是一组连续的扇区。为了减少磁头移动,分区可以“对齐”到柱面大小,即使用整数个柱面。这并非总是完成,但应该这样做,因为它对恢复有很多其他优势。


4.9. 分区表

由于您可以拥有多个分区,因此您需要有一个分区表。此分区表存储在驱动器的最开始处。您不太可能需要直接使用十六进制编辑器写入字节来更改此表,因此我们将不再赘述表的位置。

周围有很多操作系统,它们都共享类似的硬件和许多分区系统。我们将仅关注在 PC 中可以找到的内容,即使现在很难定义 PC。假设,对我们来说,PC 是任何能够运行 Linux 的计算机(我知道,这并不总是真的)。

这些分区类型中的每一种都在表中用一个称为“类型”(fdisk 中的“t”)的特殊标志标记。最著名的是 Linux 分区的类型 83 和 Linux 交换分区的类型 82(十六进制数)。

请注意,大多数操作系统可以共享分区表。至少,如果磁盘与多个系统硬件兼容,这些系统应该能够看到其他系统所做的事情,而不是意外擦除驱动器。我不能肯定这在现实生活中是真的。


4.10. 文件系统

分区可以直接作为扇区访问,就像磁盘的任何部分一样,但通常填充有文件系统。文件系统和分区仅因为文件系统位于分区中而相关,但仅此而已。您可以拥有没有分区但有文件系统的磁盘,也可以拥有没有文件系统的分区(交换分区是最著名的)。有关文件系统的详细信息,请参阅维基百科

总而言之,文件系统允许以人类可读的名称存储文件,并以友好的方式对文件进行排序,例如作为目录、子目录、文本、图像...


4.11. 文件和节点

几乎所有您可以在大容量存储分区上找到的东西,除了扇区之外,从用户的角度来看,都是文件。但是计算机是好奇的极客,如果您愿意,您可以像处理磁盘一样处理文件。使用“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 发行版中,节点在启动时动态创建,因此任何人都不应该这样做。但是,有时自动系统会失败。


5. Linux 中的驱动器命名

Linux 使用一种特殊的命名法来引用大容量存储,必须理解。


5.1. 命名约定

Linux 过去处理两种类型的驱动器,具体取决于电子接口(控制器),IDE 和 SCSI。老手们还记得 CD 刻录机通过“SCSI 仿真”访问的日子。实际上,IDE 和 SCSI 主要使用相同的底层命令,并且从 2007 年开始,随着新的“SATA”接口的出现,命名被统一了,并且在新发行版中,所有驱动器都具有相同的命名。对于这一部分,CD 或 DVD 读取器/刻录机被视为硬盘驱动器。


5.1.1. 旧的 IDE 名称

按照惯例,IDE 驱动器被赋予设备名称/dev/hda/dev/hddHard Drive A(/dev/hda) 是第一个驱动器,Hard Drive C(/dev/hdc) 是第三个驱动器。

典型的 PC 有两个 IDE 控制器,每个控制器可以连接两个驱动器。例如,/dev/hda是第一个 IDE 控制器上的第一个驱动器(主盘),/dev/hdd是第二个控制器上的第二个驱动器(从盘)(计算机中的第四个 IDE 驱动器)。

因此,通常情况下,具有 IDE 控制器的计算机可以容纳 4 个驱动器:/dev/hda(主通道主盘)、/dev/hdb(主通道从盘)、/dev/hdc(次通道主盘)、/dev/hdd(次通道从盘)。一些(罕见的)主板具有两个以上的控制器,一些附加卡也可以具有控制器,这些控制器按照字母顺序编号,但是必须弄清楚为特定硬件给出的实际名称是什么。

您可以将驱动器放在任何您想要的地方,不必强制填补空白。您可能有兴趣了解驱动器/cdrom 连接到什么位置,但这超出了本文档的范围。


5.1.2. 新的硬盘驱动器名称

现在,所有旋转硬盘驱动器都使用与旧 SCSI 控制器相同的名称,即将“h”替换为“s”,因此为 /dev/sda,依此类推。驱动器的数量取决于主板或扩展板上的控制器数量。通常有 4 个可用。驱动器的编号取决于控制器卡及其被内核读取的方式,因此起初很难说。


5.1.3. 闪存驱动器名称

闪存驱动器通常不通过 IDE 或 SATA 接口连接,因此不使用相同的名称。使用了几个接口,每个接口都有不同的名称。内核文档给出了名称。


5.1.4. 底层设备和额外的命名

您将在某些应用程序中找到对底层 SCSI 设备和各种命名约定的引用,例如(wodim 是命令行 cd 刻录机)

          wodim --scanbus
scsibus1:
        1,0,0   100) *
        1,1,0   101) 'TSSTcorp' 'CD/DVDW TS-L632D' 'ac00' Removable CD-ROM
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

您可能必须使用某种 SCSI:1,1,0 选项来访问 CDROM。尽量避免使用它,因为它非常容易出错,应该只留给程序员使用。我只是提到它,因为您并非总是可以避免它。

如果您执行 “cat /dev/ | more”,您可以看到

          lrwxrwxrwx  1 root root             3 mars  9 07:56 scd0 -> sr0
(...)
crw-r-----  1 root disk       21,   0 mars  9 07:56 sg0
crw-rw----+ 1 root disk       21,   1 mars  9 07:56 sg1

这些 scd、sr、sg 设备是底层接口(请注意“c”表示“字符”)。尽量不要使用它们。dmesgmore /var/log/boot.msg 应该为您提供可用的 sdxx 设备,例如(简短摘要)

          <5>sd 0:0:0:0: [sda] 976773168 512-byte hardware sectors: (500GB/465GiB)
<5>sd 0:0:0:0: [sda] Write Protect is off
<7>sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00

这意味着驱动器是 /dev/sda

但是,这些文件(由 dmesgmore /var/log/boot.msg 给出)过去很容易阅读,但现在不再是了。现在内核并行启动多个驱动程序,因此消息是混合的,您可能会看到

          <6> sda:<6>USB Universal Host Contr'ller Interface driver v3.0

这并不意味着您的 sda 驱动器是 usb 驱动器,而是 usb 模块与驱动器模块同时启动并同时发送其消息。您仍然有一个 /dev/sda 驱动器。


5.1.5. 新介质名称

这是插入 USB 密钥的 dmesg 内容

          scsi7 : SCSI emulation for USB Mass Storage devices
usb 5-3: New USB device found, idVendor=0951, idProduct=160e
usb 5-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 5-3: Product: DataTraveler 2.0
usb 5-3: Manufacturer: Kingston
usb 5-3: SerialNumber: 200706200000000059188185
usb-storage: device found at 9
usb-storage: waiting for device to settle before scanning
scsi 7:0:0:0: Direct-Access     Kingston DataTraveler 2.0 1.00 PQ: 0 ANSI: 2
sd 7:0:0:0: [sdb] 3930112 512-byte hardware sectors: (2.01GB/1.87GiB)
sd 7:0:0:0: [sdb] Write Protect is off
sd 7:0:0:0: [sdb] Mode Sense: 23 00 00 00
sd 7:0:0:0: [sdb] Assuming drive cache: write through
sd 7:0:0:0: [sdb] 3930112 512-byte hardware sectors: (2.01GB/1.87GiB)
sd 7:0:0:0: [sdb] Write Protect is off
sd 7:0:0:0: [sdb] Mode Sense: 23 00 00 00
sd 7:0:0:0: [sdb] Assuming drive cache: write through
 sdb: sdb1
sd 7:0:0:0: [sdb] Attached SCSI removable disk
sd 7:0:0:0: Attached scsi generic sg2 type 0
usb-storage: device scan complete

您在那里看到了我们现在正在谈论的所有内容!SCSI 仿真、scsi、sd 和 sg 名称,以及对我们最重要的 sdb。

以下是高速 SDHC 卡的消息

          tifm_core: MMC/SD card detected in socket 0:1
mmc1: new SDHC card at address d555
mmcblk0: mmc1:d555 SD04G 3.79GiB
 mmcblk0: p1

/dev/mmcblk0p1 on /media/H2SD type vfat (rw,nosuid,nodev,noatime,flush,uid=1000,utf8,shortname=lower)

当两张卡可能都是相同的闪存芯片时,USB 密钥使用 USB 接口和 SCSI 仿真,SDHC 卡使用笔记本电脑的 PCMCIA 插槽,并使用特殊的设备命名 (/dev/mmcblk0)。就分区而言,使用方法是相同的。


5.1.6. 磁盘 ID

在磁盘数量众多且可移动的世界中,不可能跟踪什么设备被什么磁盘使用。因此,现在有很多使用磁盘名称的方法。这使得使用基本工具极其困难。这些是“磁盘标签”和“磁盘 UUID”,以及“分区标签”。有关详细信息,请参阅 fstab 手册页。


6. Linux 中的分区命名

6.1. 数字

分区命名比驱动器命名简单得多。分区只是被赋予从 0 开始的数字(十进制)。有时在数字前面附加一个“p”

        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
 179     0    3979776 mmcblk0
 179     1    3975680 mmcblk0p1

如您所见,分区设备在 /proc/partition 中列出。这个文件... 不是一个真实的文件,而是动态创建的。不用担心,对于我们需要的,它是一个文件。

请注意 SDHC 卡的 “p1” 分区名称。

SCSI 和所有使用新 SATA 驱动器的驱动器的最大分区数为 15,IDE 驱动器的最大分区数为 63(0 是整个驱动器,0 到 15 是四位,0 到 64 是 6 位)


6.2. 数字的含义

并非所有数字都具有相同的含义。这种混乱来自 PC 历史。可以使用分区划分软盘,但那时 4 个分区似乎就足够了。但是后来出现了硬盘驱动器 :-) 。因此,分区号 1、2、3 和 4 是分区。一个驱动器只能有 4 个主分区。

为了进一步扩展,我们必须使用其中一个主分区作为大的主分区,并对这个主分区进行子分区,从而拥有逻辑分区。大的扩展分区可以是 4 个中的任何一个。

因此,请记住,主分区位于驱动器内部,逻辑分区位于主分区之一内部,称为扩展分区。

创建逻辑分区后,不再建议直接写入扩展分区。写入扩展分区会擦除逻辑分区,就像直接写入硬盘驱动器会擦除分区一样。注意,这是可能的!!

如果在创建 4 个主分区后,所有磁盘空间都未使用,则剩余空间将丢失(不可用),因此大多数情况下,创建所需的主分区,然后最后创建扩展分区,占用所有剩余空间。

不必创建 4 个主分区。您可以只使用一个扩展分区(仅限 Linux),但是使用主分区有一些优势。

主分区为 4 个,第一个逻辑分区始终为 5。因此,任何编号为 5 及以上的分区都是逻辑分区。


7. 设备主设备号和次设备号

设备文件唯一重要的事情是其主设备号和次设备号,它们显示在文件大小的位置

      $ ls -l /dev/hda
brw-rw---- 1 root disk 8, 0 mars  9 07:56 /dev/sda

显示权限 (brw-rw----)、所有者 (root)、组 (disk)、主设备号 (8)、次设备号 (0)、日期 (mars 9 - 法语,无年份)、小时 (07:56) 和设备名称 (猜测 :-)。

访问设备文件时,主设备号选择要调用的设备驱动程序来执行输入/输出操作。此调用是使用次设备号作为参数完成的,驱动程序如何解释次设备号完全取决于驱动程序。驱动程序文档通常描述驱动程序如何使用次设备号。


8. 分区类型

8.1. Linux 分区类型

分区被标记为容纳某种文件系统(不要与卷标混淆)。这种文件系统可以是 Linux 标准 ext3 文件系统或 Linux 交换空间,甚至是外部文件系统,如(Microsoft)NTFS 或(Sun)UFS。每个分区类型都有一个数值代码与之关联。例如,ext2 的代码是0x83Linux 交换空间的代码是0x82(0x 表示十六进制)。


8.2. 外部分区类型

分区类型代码是任意选择的(您无法弄清楚它们应该是什么),并且它们是给定操作系统特有的。因此,理论上,如果您在同一硬盘驱动器上使用两个操作系统,则相同的代码可能用于指定两种不同的分区类型。OS/2 使用 0x07 类型标记其分区,Windows NT 的 NTFS 也是如此。MS-DOS 为其各种风格的 FAT 文件系统分配了多个类型代码:0x01、0x04 和 0x06 是已知的。DR-DOS 使用 0x81 来指示受保护的 FAT 分区,从而在当时与 Linux/Minix 发生类型冲突,但 Linux/Minix 和 DR-DOS 都不再被广泛使用。


8.3. 交换分区

计算机上运行的每个进程都分配了许多 RAM 块。这些块称为页面。处理器在不久的将来将引用的内存页面的集合称为“工作集”。Linux 尝试预测这些内存访问(假设最近使用的页面将在不久的将来再次使用),并尽可能将这些页面保留在 RAM 中。

如果机器上运行的进程太多,内核将尝试通过将页面写入磁盘来释放 RAM。这就是交换空间的作用。它可以有效地增加您可用的内存量。但是,磁盘 I/O 比从 RAM 读取和写入 RAM 慢大约一百倍。将此视为紧急内存,而不是额外内存。

如果内存变得如此稀缺,以至于内核从一个进程的工作集中分页出来以便为另一个进程分页,则称该机器正在抖动。一些读者可能无意中经历过这种情况:硬盘驱动器疯狂地研磨,但计算机速度慢到无法使用。交换空间是您需要拥有的东西,但它不能替代足够的 RAM。


8.4. 完整列表

来自 fdisk 帮助

         0  Vide            1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris
 1  FAT12           24  NEC DOS         81  Minix / old Lin c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c7  Syrinx
 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data
 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 88  Linux plein tex df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  GPT
 f  W95 Etendu (LBA 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a6  OpenBSD         f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a8  UFS Darwin      f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys ab  Amorce Darwin   fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Amorce Solaris  ff  BBT

9. 多少分区

驱动器上允许的确切分区数由内核固定。因此,您可以在内核文档中找到确切的数字,最新版本维护在此处 https://linuxkernel.org.cn/pub/linux/docs/device-list/ 如果您安装了内核源代码,您可以在计算机上的 /usr/src/linux/Documentation/devices.txt 中找到您的版本。

查看“partition limit”。找到您的。常见的 SATA 数量为 31,SCSI 为 15,有些更少。