老式磁盘分区

2020-07-21 23:33:48

Unix始于1970年。它所做的许多事情,它不得不在飞行中发明。磁盘处理就是其中之一。我们今天完全认为理所当然的事情,曾经是一个积极创新的领域。这篇博客将探索Unix的早期:那时我们将静态分区编译到驱动程序中。

那个时代的典型驱动器:很大,而且很难管理(从外观上看,RL01或RL02可以容纳5MB或10MB的存储空间)。

从最早的时候起,UNIX至少有两种类型的数据存储在磁盘上。第一种类型是文件系统,它提供分层的名称空间。第二种类型是互换。从最早的时候起,UNIX就是一个交换系统,用于将作业多路传输到内存和从内存中传出。内核将跟踪哪些块被分配给哪个进程。

因为磁盘扮演了两个不同的角色,具有不同的分配策略和持久存储。为简单起见,在第一版中,磁盘以静态方式分区。文件系统使用其磁盘部分,交换使用其余部分。

DEC从未制定分区标准(尽管后来它在与Unix相关的产品上使用了Unix)。这意味着Unix的研究人员没有什么可借鉴的,因此在Unix离开研究小组之前未能制定出一个标准。

在1-3版内核中几乎没有类似于分区的东西。UNIX从磁鼓设备启动,使用前64个数据块来存储自身。该磁盘的其余部分保留用于将进程换入/换出核心内存。消息来源将其称为磁鼓,磁鼓中有1024个256字节块。

磁盘以设备节点的形式呈现,设备节点是整个磁盘。这是第3版手册页面中的内容:

RK?将整个RK03磁盘称为单个顺序寻址的文件。它的256字块编号为0到4871。与射频磁盘和磁带文件一样,其寻址也是面向块的。

其描述了具有其整个块存储可用的单个文件。第3版记录了其中一个驱动器的谜/CRP文件系统(我想知道它是什么的缩写):

这还表明每个磁盘有一个文件系统。这些驱动器的大小为1.2MB,略大于一张软盘,因此每个驱动器只有一个文件系统不是很大的限制。还要注意,扇区大小是256个字,或512字节。

由于我们在这段时间内的来源有限,所以很难说是肯定的。然而,大部分幸存的数据表明,最多最后64个数据块是为Unix保留的……。

在第4版中,我们开始看到引用磁盘不同区段的多个文件。这样做是因为新的RP03驱动器支持81200个数据块,这超过了每个设备65536个数据块的时间限制。它还允许将驱动器拆分成更易于管理的块。在此版本中,名为rp0到rp7的/dev目录中有8个不同的文件。对于连接的第二个驱动器,rp8..rp15将引用该驱动器。手册中有此表,它反映了幸存的代码:

这基本上允许驱动器的两种配置:一分为二,或者分成一个小的根分区和另外两个。但是交换的分区在哪里呢?

没有一个..。第4版中的交换空间在param.h#定义中配置。您在该设备上定义了要使用的设备、起始和长度。然后,系统会在早期引导期间对其进行配置。然而,#定义的缺点是人们不能轻易地做一个二进制补丁。已将交换放入其他磁盘的已用部分之间。这很难做到正确,因为您必须规划出系统。

您可能认为所有的驱动器都是这样的,但事实并非如此。RF(4)驱动程序使用不同的次驱动器指定驱动器本身的大小。RK(4)驱动程序允许用户使用具有不同次要编号的不同交错因子进行实验。实际上,如何解释次要编号是由驱动器本身决定的。这并不少见……。各种磁带驱动器使用次要编号来指定密度以及关闭时是否倒带。

第五版延续了这一演变。它改变了上面的表格,有一些重叠的区域需要特别小心才能使用。这也意味着,如果您使用的是xp3或xp4,则升级时必须重新安装系统,或者破解驱动程序中的表。在第4版和第5版之间只有大约7个月的时间,所以我怀疑这个问题并不太常见。当第四版问世时,有20个网站在运行它,到第五版时已经到了50个,所以数量并不多。因为内核可以用ADB或前面板开关打补丁,所以这个问题可能会得到足够的缓解以进行重建。按照定义,运行第四版的人是开拓者,所以可以预期他们会应对他们对第五版所做的任何升级。到第六版出版时,已经有数百或数千个了,这可能解释了为什么它在第5版和第6版之间保持不变。RP(4)';的预定义表格变成了这样:

交换仍然是通过使用分区之间的空间或在文件系统结束之后进行的。通过将定义移动到可以使用ADB(1)更容易修补的变量,改进了第4版配置交换的方法。所以到了第6版,交换仍然不需要自己的分区。

有趣的是,第5版引入了用于文件系统的原始字符设备和块设备。

第6版使用与第5版相同的表格。它还使用类似的方案引入了具有类似硬编码分区的其他磁盘接口。

第七版再次更改了布局。这并不是刻薄,而是因为DEC引入了更新的、更大的驱动器。第7版还允许更大的分区,因为磁盘地址现在是3个字节,而不是2个字节。一些驱动程序现在支持多个驱动器,因此分区是固定的,但设置为支持设备的不同布局以及不同型号。例如,HP(4)驱动程序既支持rp04/rp05驱动器,也支持rp06驱动器(这两个驱动器的大小是rp04/rp05驱动器的两倍),因此具有许多与此大小差异一致的不同布局,从而可以在尽可能多的不同驱动器上使用它们。还添加了hs(4)驱动程序,但它更像是一个交换/鼓设备。

PDP-11领域的问题是,新的控制器不断出现,其中一些来自第三方,您可以连接到PDP-11的磁盘数量已经开始激增。这个问题只会变得更糟。

跳过一点,第7版开始了2BSD,这开始了PDP-11的一系列版本(有趣地开始于最后的PDP-11版本:2.8BSD!)。到2.11BSD时,我们的系统大约有50种不同类型的磁盘和分区方案,越来越难以管理。每一个都是一片特殊的小雪花,这取决于连接的是哪种驱动器。XP驱动程序中的表运行75行,作者知道这是错误的,因为他们在该表前添加了前缀:

4BSD也有类似的问题。他们创建了一个名为diskpart的程序,该程序显示特定驱动器类型的默认磁盘分区,或允许用户创建分区表以剪切并粘贴到驱动程序和/或配置文件中,从而使其更容易接受。这很有帮助,但仍然编译到内核中,而不是在磁盘包中。4.1BSD在1981年引入了一种新的皱纹:

*坏扇区信息和替换扇区*传统上只能通过磁盘的文件系统分区访问。如果*分区用于文件系统,则用户*负责确保它不会与*坏扇区信息或任何替换扇区重叠。

取得了进展,但进展缓慢。在至少4.3BSD中,情况是这样的:每个驱动程序都有自己的表,该表针对驱动程序支持的驱动器进行了手动调整。就目前而言,这是可以的,但随着行业从控制器+磁盘组合转向驱动器和主机之间的标准接口以及驱动器中的大多数功能,这成为一种站不住脚的情况,因为在控制器+磁盘组合中,驱动器和主机之间的标准接口只有几个选择。

在我的第二部分中,我们将探讨它是如何变得更糟的,然后才会变得更好。在4.3BSD Tahoe和AT&;System Vr3.0几乎同时出现的解决方案之前,我们将看到不同的供应商是如何在这一领域进行创新的。