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

X-I*_*nce 14 freebsd solaris partition

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

da0s1c
c0d0s2
Run Code Online (Sandbox Code Playgroud)

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

xistence@Keyhole.network.lan:/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
Run Code Online (Sandbox Code Playgroud)

使用分区 2 的原因是什么?为什么不分区0?这是在 unix 历史上的哪个地方决定的?它在那个时间点提供了什么遗留功能?随着 GPT 分区完全消失(根据我的发现)。

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

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

xistence@Keyhole.network.lan:~# 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
Run Code Online (Sandbox Code Playgroud)

Tom*_*ime 7

过去,我们会使用整个磁盘的“dd”进行备份。因此,我们有“c”切片,以便我们可以用一个命令完成所有操作。

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

DD并不完美。如果磁盘只有 10% 已满,则您将花费​​ 90% 的时间复制“垃圾”块或(例如)用于“交换”(备份无用)的块。“dd”是浪费时间,除非您的磁盘快满了,或者由于某种原因,您需要一个精确的、逐块的副本。

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

(有人在“c”切片上提到了“转储”。那是行不通的。“转储”是一个文件一个文件的副本[实际上,一个inode一个inode]所以这行不通。)

还有人问“为什么是c,而不是第一个分区,或者最后一个”。答案是“传统”。我只能猜测 Ken 或 Dennis(或者可能是 Bill Joy 或 Kirk McKusick)当时有充分的理由。我假设他们已经将前两个分区标签用于实际分区。然后有一天有人想到了重叠分区用于备份的想法,“c”是下一个可用的分区。由于当时只有 2-3 台 Unix 机器,所以这样做两次可以“设定标准”,以便在其余时间使用。

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


Par*_*roX 4

这是切片传统上按如下方式布局的结果:

s0:根
s1:交换
s2:bkup

他们将最重要的事情分配给第一个切片,并继续降低重要性:)(如果没有根分区,谁需要交换?此外,如果没有数据,谁需要备份任何内容。)

我不知道到底是什么时候决定的(可能是相当早的时候;每当 Solaris 开发人员决定使用 Solaris 风格的磁盘标识符和切片时。)

使用 GPT 就可以解决这个问题,因为 MBR 样式的分区方案不适用。(虽然我个人不熟悉Solaris如何表示GPT分区......)

希望这对 XD


================有所帮助
编辑:
现在你让我感兴趣了。我将在上班前发布一些我发现的链接。

Solaris 2.4 Sysadmin 答案书:习惯片
Solaris 2.4 用户指南:外设管理

这两个文档都是 1994 年左右的,他们将 s2 的创建定义为集成到“格式”中。一定要继续挖XD!