当前位置: 首页 > 工具软件 > OpenZFS > 使用案例 >

存储的概念及ZFS的设计原理-OpenZFS学习(二)

吴城
2023-12-01

ZFS 存储池 和128位文件系统
我们知道,计算机科学是人造的科学,所以计算机中的很多技术都遵循很多人类生活中的现象和情况。比如我们每天使用计算机时都必然要与其打交道的文件系统。
我经常使用以下的比喻来向“无知”的用户介绍磁盘存储的概念:
一块硬盘就相当于一个标准尺寸的文件柜(这个世界因为各种利益共同体的默契而出现了种种产品标准),而硬盘物理分区(所谓的物理分区或盘片)就相当于文件柜上的大抽屉,硬盘出厂时都设置了一个标准格式的磁盘分区表,它的限制是每个硬盘最多有4个物理分区。
为了突破这个限制,技术人员开发出了所谓的扩展分区,在扩展分区上我们可以创建所谓的逻辑驱动器(对Solaris 系统而言即为盘片),每个逻辑驱动器都可以像物理分区一样进行操作(格式化、创建目录和文件)。一个所谓的逻辑驱动器就像是我们在一个大抽屉中用纸板人为分隔出来的一块块储物空间。

如果说每个物理分区或逻辑驱动器(虚拟分区)是一本书,那么我们知道是书都应该有目录,这个目录就是FAT(文件分配表);
不辛的是“出版商”的诡异协议里每本书的目录页数是有限制的,也就是说在纸张的尺寸固定的情况下,目录中记录的章节条目是有限的,而目录中的“章”就对应分区上的目录(文件夹),目录中的“节”则对应一个文件(名称和磁盘分区上的开始位置)。总之物理条件限制了书的章节数目,而书的总页数则受到了抽屉尺寸的限制。

常规的磁盘文件系统就是这个样子,一个硬盘相当于一个柜子,分几个抽屉(物理分区),每个抽屉里是一本书或多本书(使用了扩展分区技术后),书本的每一页是一个文件或一个文件的一部分,有些页被用作目录,记录了文件或其他目录的开始页号,书的最初几页被用作主了主目录!如果数目的空间已经写满了,即使抽屉还有剩余的空间容纳更多的纸,也只能白白浪费掉了。于是作者的一本书必须分成多卷来出版,一本书变成了一套书,要容纳这一套书,就需要使用多个抽屉,但是一个文件柜的最大抽屉书又是受到”协议“限制的,所以会需要有用到多个标准文件柜。

为了方便统一管理多个分布在不同文件柜上的抽屉或多个文件柜,技术人员又发明了卷管理技术。但是这个卷管理技术的最大分卷数目任然无法突破”出版商“的那个诡异协议的基本条款,最大为26个分卷(Windows )或28(solaris 每个硬盘四个分区,每个分区9个盘片其中3个系统保留为特殊用途)。具体的说,虽然我们可以不为新的分卷指定盘符,设定其挂在在某个分卷上现有文件系统的子目录下来对文件的最大页数进行扩容,但任然无法突破文件目录协议所限制的最大章节数。

综上所述,对于现有的磁盘文件系统和磁盘管理技术,我们遇到两个问题:
1。文件目录协议所限制的文件章节数和单卷书的最大字符数(即最大的主目录数、子目录数、文件数目和磁盘卷组容量)。
2。磁盘管理上的不便,当24个盘符(Windows)或卷标(windws、Unix、linux)用满后,新的磁盘卷只能挂载在现有文件系统的某子目录下,且无法通过单一的操作对多个子目录的磁盘卷组容量进行扩容,即将一个新的磁盘卷组分配给多个子目录使用。

为了解决第一个问题,zfs将现有的32位文件系统一次性提升到128位,根据摩尔定律,要填满一个128位的文件系统,存储介质的质量足以填满地球的所有海洋。所以,ZFS 128位文件系统的这一创新设计实现,从根本上解决了目前困扰我们的单个文件系统最大的主目录数、子目录数、文件数目和磁盘卷组容量的限制。

为了解决第二个问题,zfs 引入在在磁带备份软件和数据库等其他软件设计中已经广泛采用的池概念,形象得说,ZFS 文件系统这种柜子由原来的固定标准尺寸的模式改成了向宜家家私产品那样的可以由用户自定义组合的模式。
ZFS = 池(ZFS存储池简写为zpool)+池上的文件系统(ZFS文件系统 ,我们用小写的zfs 予以区分)。

我们可以使用整个磁盘或盘片作为池的成员设备来创建一个ZFS存储池,添加新的成员设备后,每个zfs文件系统(目录/文件夹)的最大可用容量都可获得扩容。

举一个简单的例子:
传统文件系统:
原有文件系统下有两个子目录(文件夹)A和B,目前每个子目录的最大容量是500G。
现在我们添加1块1TB的磁盘,创建一个逻辑卷,不分配盘符而设定挂在到子目录A或B上;
这样A和B只有一个容量可以得到提升。
假设挂到A上,那么扩容后A的最大容量是1.5T,B的容量还是500G。
如果使用zfs:
A和B在一个ZFS存储池上,则A和B的最大容量 A=2500G-B 所占用的容量,B=2500G-A所占用的容量。
增加1个1T的硬盘后,如果B目前实际占用容量为400G,则A的最大可用容量为1.6TB。一段时间以后,A已经占用了1T的容量,那么B的最大容量可以突破传统方法的500G,也能达到1TB。

ZFS从v13版开始已经支持GPT boot ,(Windows 系统使用GPT目前还有很大门槛)总容量是现有64bit文件系统的1.84x1019倍,其支持的单个存储卷容量达到16EB(264byte,即 16x1024x1024TB);一个zpool存储池可以拥有264个卷,总容量最大256ZiB(278byte);整个系统又可以拥有264个存储池。
实际上GPT支持最大卷为 18 EB (exacerbates) 但每磁盘的最大分区数限制为 128 个分区,也就说如果使用Windows、Linux等操作系统的话,每个磁盘最多只能划分为128个卷,每个卷都要格式化并设定挂载目录,这个工作量可不小,相对得使用ZFS就简单多了。

现在,请大家记住这个概念:ZFS=zpool+ zfs (128bit FS)

 类似资料: