为什么切片 C 或切片 2 覆盖整个磁盘

为什么切片 C 或切片 2 覆盖整个磁盘

我和几个朋友讨论过这个问题,但我们无法弄清楚。在 FreeBSD 和 OpenSolaris/Solaris 中,当您对驱动器进行分区时,会创建一个覆盖整个磁盘的分区:

da0s1c
c0d0s2

例如,我的 OpenSolaris 服务器中主硬盘的输出:

[email protected]:/dev/rdsk# prtvtoc /dev/rdsk/c4d0s2
* /dev/rdsk/c4d0s2 partition map
*
* Dimensions:
*     512 bytes/sector
*      63 sectors/track
*     255 tracks/cylinder
*   16065 sectors/cylinder
*    7296 cylinders
*    7294 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
* Unallocated space:
*       First     Sector    Last
*       Sector     Count    Sector 
*           0     16065     16064
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      2    00      16065 117145980 117162044
       2      5    01          0 117178110 117178109
       8      1    01          0     16065     16064

使用分区 2 的原因是什么?为什么不使用分区 0?这是在 UNIX 历史上的哪个时期决定的?当时它服务于哪些遗留功能?随着 GPT 分区的出现,这个问题将完全消失(据我所知)。

只是一些有趣的事情......

自从帕罗西汀提到了 GPT 样式分区以及 Solaris 如何在 vtoc 布局方面表示这一点,这是我的一个 1 TB 磁盘的输出,该磁盘位于 ZFS 阵列中,并且已自动设置 GPT:

[email protected]:~# prtvtoc /dev/rdsk/c5d0
* /dev/rdsk/c5d0 partition map
*
* Dimensions:
*     512 bytes/sector
* 1953520128 sectors
* 1953520061 accessible sectors
*
* Flags:
*   1: unmountable
*  10: read-only
*
* Unallocated space:
*       First     Sector    Last
*       Sector     Count    Sector 
*          34       222       255
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      4    00        256 1953503455 1953503710
       8     11    00  1953503711     16384 1953520094

答案1

以前,我们会使用“dd”命令对整个磁盘进行备份。因此,我们创建了“c”分区,这样我们就可以用一个命令完成所有操作。

这就是“c”切片存在的原因。

DD 并不完美。如果磁盘只占 10%,您将花费 90% 的时间来复制“垃圾”块或(例如)用于“交换”(无用备份)的块。除非您的磁盘几乎已满,或者出于某种原因,您需要逐块精确复制,否则“dd”就是在浪费时间。

这一切都发生在 RAID-0 磁盘镜像和卷管理器为您完成所有此类分区复制之前。

(有人提到在“c”片上使用“dump”。但这行不通。“dump”是逐个文件复制 [实际上是逐个 inode 复制],因此这行不通。)

有人问“为什么是 c,而不是第一个分区或最后一个分区”。答案是“传统”。我只能猜测 Ken 或 Dennis(或者可能是 Bill Joy 或 Kirk McKusick)当时有一个很好的理由。我假设他们使用前两个分区标签作为实际分区。然后有一天,有人想到重叠分区用于备份,“c”是下一个可用的分区。由于当时只有 2-3 台 Unix 机器,因此执行两次可以“设置标准”,并在其余时间使用。

本文描述了另一个历史事故如何成为永恒标准的例子:了解 bin、sbin、usr/bin、usr/sbin 的划分

答案2

这是因为切片传统上是按照以下方式布局的:

s0:根
s1:交换
s2:备份

他们将最重要的东西分配给第一个切片,然后继续按重要性递减顺序排列:)(如果没有根分区,谁需要交换?此外,如果没有数据,谁需要备份任何东西。)

我不知道这个具体是什么时候决定的(可能很早以前;当 Solaris 开发人员决定使用 Solaris 风格的磁盘标识符和切片时)。

由于 MBR 样式分区方案不适用,因此 GPT 可以解决此问题。(尽管我个人不熟悉 Solaris 如何表示 GPT 分区...)

希望这有帮助XD


=================
编辑:
现在你引起了我的兴趣。我会在上班前发布一些我发现的链接。

Solaris 2.4 Sysadmin 解答手册:习惯切片
Solaris 2.4 用户指南:外围设备管理

这两份文档都是 1994 年左右的,它们在那时就将 s2 的创建定义为集成到“格式”中。必须继续挖掘 XD!

答案3

关于此问题的更多信息:

根据http://en.wikipedia.org/wiki/BSD_disklabel在 FreeBSD 上,磁盘上的 c 分区如果被其他操作系统使用,则会扩展到整个 FreeBSD 切片,而 d 分区则是整个硬盘!

c 分区在专用模式下寻址整个磁盘,或在切片模式下寻址整个 FreeBSD 切片。其他分区供一般使用。

FreeBSD 手动添加磁盘参见18.3.1第3条。

答案4

为什么 scsi id 3 是老式 Sun OS 的默认启动盘?

所有这些瞬间都将随着时间而消逝,如同雨中的泪水。

相关内容