关于ZFS、GPT、4K、Geom Label的一些说明

摘要:
无需经历MBR或GPT层II、GeomLabel和GPT分区表冲突。GeomLabel是使用glabel命令创建的,GPT分区表将使用磁盘的最后一个扇区来备份GPT分区表头(备份表头直接指向备份分区表的数据区域)(GPT分区表的特定数据结构。如果使用GPT分区格式初始化磁盘,将导致GPT备份分区表出现问题,系统无法从备份分区表恢复数据。

日前重建了之前被玩坏的zfs,碰到几个概念,查了很多资料,理清一下
一、关于硬盘分区表
目前常用的有两种分区表,MBR和GPT,但是严格来说ZFS并不需要任何一种分区表,ZFS可以直接管理裸盘,换句话说,zfs对硬盘有自己的管理方式,不需要经过MBR或者GPT这一层

二、Geom Label和GPT分区表冲突的问题
Geom Label使用glabel命令创建,会被写入到磁盘的最后一个扇区,重启以后不会丢失。但是如果你使用的是GPT分区表,那么会有冲突。GPT分区表会利用磁盘的最后一个扇区来备份GPT分区表头(这个备份表头,直接指向的是备份分区表的数据区)(具体GPT分区表的数据结构,可以参考GUID Partition Table (简体中文)还有GUID Partition Table)。如果在使用GPT分区格式来初始化磁盘以后,再给磁盘设置Geom Label,就会导致GPT的备份分区表出现问题,这个不会导致系统崩溃,但是有数据丢失的危险,因为如果主分区表丢失,那么系统没有办法使用备份分区表的数据来还原。
解决办法是,如果使用GPT分区表后,不要使用geom label,而是直接使用GPT自己的label,如下:
# gpart create -s gpt ad0
# gpart add -t freebsd-zfs -l disk0 /dev/ad0
这样就给设备da0设置了一个label,叫disk0

三、FreeBsd上生成固定设备名的问题
Linux上有udev,通过编写规则,匹配一些硬件的信息,然后只要是相同的硬件信息,就能生成指定的名称。查了一些文档,fb上的devfs也有类似的功能(fb的devfs和linux的devfs不是一回事),是通过devd这个程序做到的,我们只需要编写devd的规则就可以了。但是,实际操作后,我发现,这个根本没有linux的udev好用。主要是两个问题:

1、需要先执行devd -d,然后去插拔设备,才能监控到设备的相关信息,linux下面不需要真实的去插拔设备
2、通过devd -d获得的信息少得可怜,devd 规则中,指定的很多变量(比如什么vendor,sernum)的值,都没有出现,这实际导致了根本不能编写对应的规则(我在网上搜索了很久,没有看到类似的信息,我在一开始是按照使用固定设备节点名操作设备这篇文章的介绍来操作的,文章里针对的是打印机,相同的方法我用到我的硬盘上,什么信息都没得到)
因为实在搜索不到相关资料,我只能放弃devd这条路,改为使用geom label的方式。这里为什么可以使用geom label呢,因为zfs可以直接管理裸盘,不需要GPT之类的分区表,所以geom label和GPT冲突的问题就不存在了,算是柳暗花明又一村。

四、如果使用GPT标签呢?
如果使用GPT标签,那么需要按照上文第二点中描述的进行操作,但是这样,实际就是在硬盘上先创建了gpt的分区,zfs系统之后使用的是gpt分区,而不是直接管理裸盘,性能上会有些差异(oracle的官方文档是建议能裸盘的最好裸盘),所以此路放弃

五、4K对齐的问题
目前的FreeBSD 10.2版本,执行zpool create命令创建出来的存储池,直接就是4K对齐好的,所以不需要再使用额外的方式来绕行了。
检测存储池是否4K对齐,可以使用如下命令:
# zdb | grep ashift
如果输出是9就是512字节的扇区,如果是12就是4K

免责声明:文章转载自《关于ZFS、GPT、4K、Geom Label的一些说明》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇通过hive自定义函数直接回写数据到数据库jieba gensim 相似度实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

二维码知识介绍(转)

一、二维码的分类 二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着更高的数据存储容量。 从形成方式上,二维码可以分为两类, 1、堆叠式二维码:在一维条形码的基础上,将多个条形码堆积在一起进行编码,常见的编码标准有PDF417等   ...

LoadRunner中log的使用总结

LoadRunner中log的使用总结     1、log的设置方式。   在 runtime setting中可以设置log的生成方式:   默认的log方式:   Enable logging选中,log option是Send messages only when an error occurs.   可以修改日志的方式:   Always se...

Git操作:多个commit合并,并修改提交信息

写在前边 写这篇文章主要是记录下,很久之前读《重构-改善既有代码的设计》时,看到过作者讲过Git可以实现多个细碎操作commit合并为一个有意义的提交,当时查过一些中文信息,写得不是很清晰。正巧有一个Git管理的脚本仓库需要大量修改,尝试践行下书中的内容:完成一小部分功能就作一次本地commit,直到完成修改后,合并成一个有意义的提交。 这样做是有意义的,...

跨库事务一致性问题的解决方式(例)

    我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统。相应新老两套数据库。新数据库採用分库分表的设计。考虑到项目公布之后可能存在风险,採取了新老系统的并行方案。这个系统的业务比較简单:接收来自外部的数据。然后对数据进行核对处理。为了保证新老系统可以并行。在接收数据的时候必须实现双写方案,从而导致了跨库事务的一致性问题。     以...

xml_python_查看xml中所有的标记数据

作用:传入存储xml文件的根路径,显示 xml 文件中所有的数据信息 1 import os 2 import xml.dom.minidom 3 4 def xml_label_names(xml_root_path): 5 xml_files = os.listdir(xml_root_path) 6 print(xml_...

LSPCI具体解释分析

一、PCI简单介绍     PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的全部设备可在同一时间收到全部的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。     PCI是Peripheral Compon...