關於ZFS、GPT、4K、Geom Label的一些說明

日前重建了以前被玩壞的zfs,碰到幾個概念,查了不少資料,理清一下
1、關於硬盤分區表
目前經常使用的有兩種分區表,MBR和GPT,可是嚴格來講ZFS並不須要任何一種分區表,ZFS能夠直接管理裸盤,換句話說,zfs對硬盤有本身的管理方式,不須要通過MBR或者GPT這一層

2、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

3、FreeBsd上生成固定設備名的問題
Linux上有udev,經過編寫規則,匹配一些硬件的信息,而後只要是相同的硬件信息,就能生成指定的名稱。查了一些文檔,fb上的devfs也有相似的功能(fb的devfs和linux的devfs不是一回事),是經過devd這個程序作到的,咱們只須要編寫devd的規則就能夠了。可是,實際操做後,我發現,這個根本沒有linux的udev好用。主要是兩個問題:php

一、須要先執行devd -d,而後去插拔設備,才能監控到設備的相關信息,linux下面不須要真實的去插拔設備
二、經過devd -d得到的信息少得可憐,devd 規則中,指定的不少變量(好比什麼vendor,sernum)的值,都沒有出現,這實際致使了根本不能編寫對應的規則(我在網上搜索了好久,沒有看到相似的信息,我在一開始是按照使用固定設備節點名操做設備這篇文章的介紹來操做的,文章裏針對的是打印機,相同的方法我用到個人硬盤上,什麼信息都沒獲得)
由於實在搜索不到相關資料,我只能放棄devd這條路,改成使用geom label的方式。這裏爲何可使用geom label呢,由於zfs能夠直接管理裸盤,不須要GPT之類的分區表,因此geom label和GPT衝突的問題就不存在了,算是柳暗花明又一村。

4、若是使用GPT標籤呢?
若是使用GPT標籤,那麼須要按照上文第二點中描述的進行操做,可是這樣,實際就是在硬盤上先建立了gpt的分區,zfs系統以後使用的是gpt分區,而不是直接管理裸盤,性能上會有些差別(oracle的官方文檔是建議能裸盤的最好裸盤),因此此路放棄

5、4K對齊的問題
目前的FreeBSD 10.2版本,執行zpool create命令建立出來的存儲池,直接就是4K對齊好的,因此不須要再使用額外的方式來繞行了。
檢測存儲池是否4K對齊,可使用以下命令:
# zdb | grep ashift
若是輸出是9就是512字節的扇區,若是是12就是4Klinux

相關文章
相關標籤/搜索