一、前言
在學習AIX LVM基礎結構的過程中,有一些心得,在此和大家一起交流
學習的方式是基於od命令,直接查看相關裝置檔案的二進位代碼,從而分析LVM基礎結構,以及LVM進階命令的效果
二、LVM配置資訊儲存位置
LVM中的配置資訊,比如VG、LV、FS儲存在兩個部分
1)磁碟本身上的資料區塊中
這部分可以通過低級LVM命令或者od命令直接查看
2)ODM資料庫中
ODM資料庫中的資訊直接源於磁碟資料區塊,可以通過進階LVM命令或者ODM命令查看
LVM命令會修改 1)和2)中的相關配置資訊
ODM和磁碟資料區塊中資訊不一致時,可以通過相應的同步命令,根據磁碟資料區塊中的資訊來更新ODM
三、PV
每個PV頭部有一個保留區,主要保留PVID資訊
PV保留區如下:
0000200 00c9 bbed 1c16 5948 0000 0000 0000 0000
0000220 0000 0000 0000 0000 0000 0000 0000 0000
*
0000300
注意:其中的 00c9 bbed 1c16 5948就是PVID
當把磁碟設定為pv=yes時,會在保留區產生這樣的PVID
反之pv=clear時,則清除保留區中的PVID
磁碟只有設定為pv=yes,有了PVID後,才能夠繼續下面後繼LVM操作
四、VG
VG是由一個或者多個PV組成
VG的資訊儲存在VGSA和VGDA中,當磁碟設定為pv=yes時,除了在PV保留區中寫入PVID外。另
外保留部分空間給VGSA和VGDA
需要注意的是,建立VG時的參數,如是否支援大VG,會影響分配給VGSA和VGDA的空間大小
當建立VG的時候,向VGSA和VGDA空間裡寫入相應的參數
根據VG中的PV數量,VGDA在PV上有一份或者兩份,具體如下:
PV數 1#PV 2#PV 3#PV
1 VGDA數 2
2 VGDA數 2 1
3 VGDA數 1 1 1
VGSA內容舉例如下:
十六進位格式
0010000 4667 a0e6 2462 3f5d 0000 0000 0000 0000
0010010 0000 0000 0000 0000 0000 0000 0000 0000
*
0010fe0 0000 0000 0000 0000 0000 0000 0001 0000
0010ff0 0000 0000 0000 0000 4667 a0e6 2462 3f5d
VGDA內容舉例如下:
十六進位格式
0011000 4667 a33b 2aba 553c 00c2 2f2f 0000 4c00
0011010 0000 0113 04cc 9a47 0009 0100 001c 0002
0011020 0003 0832 0000 0001 0001 0000 0000 0000
0011030 0000 0832 0000 0000 0000 0000 0000 0000
0011040 0000 0000 0000 0000 0000 0000 0000 0000
*
ASCII字元格式設定
0113200 h d 5 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0113210 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0113240 h d 6 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0113250 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0113280 h d 8 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0113290 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
01132c0 h d 4 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
01132d0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0113300 h d 2 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0113310 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
對比 lsvg的輸出結果,可以看出來,VG所有資訊都包括在了VGSA和VGDA中
比如:
0011000 4667 a33b 2aba 553c 00c2 2f2f 0000 4c00
0011010 0000 0113 04cc 9a47 0009 0100 001c 0002
中的00c2 2f2f 0000 4c00 0000 0113 04cc 9a47即為VGID
VG中的LV名也包括在內
所以ODM中的內容是源自於VGSA和VGDA
對於exportvg來說,只是從ODM中刪除了VG相關資訊,但是用od查看hdiskX時,上述VGDA資訊仍
然存在,因此importvg時,就根據VGDA資訊把VG資訊重新寫入到ODM中
五、LV
VG下劃分LV,用於FS或者做raw裝置
LV基本分配單位是邏輯塊
在每個LV的頭部0號邏輯塊作為LVCB,用於儲存LV配置資訊
LVCB內容舉例:
ASCII代碼
0000000 A I X L V C B /0 /0 j f s /0 /0 /0
0000010 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0000020 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 0 0 c 2 2 f
0000030 2 f 0 0 0 0 4 c 0 0 0 0 0 0 0 1
0000040 1 3 /0 h d 1 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
0000050 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0000080 /0 /0 /0 T h u J u n 7 0 6
0000090 : 0 8 : 4 4 2 0 0 7 /n /0 /0 /0 /0
00000a0 /0 T h u J u n 7 0 6 : 0
00000b0 8 : 4 4 2 0 0 7 /n /0 /0 /0 /0 /0 2
00000c0 2 F 2 F 4 C 0 0 /0 y m c /0 y /0
00000d0 /0 001 /0 001 / h o m e /0 /0 /0 /0 /0 /0 /0
00000e0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
從中可以看出,LVCB中有mount點等相關資訊
LVCB被破壞後,可以用低級命令putlvcb來修複,或者直接通過編輯二進位檔案來修複
六、FS
FS的配置資訊儲存在超級塊中,每個FS有兩個超級塊
主超級塊在1號邏輯塊,次超級塊在31號邏輯塊
超級塊內容舉例:
ASCII格式
0001000 e 207 ! C /0 /0 /0 /0 /0 /0 @ /0 /0 /0 /0 003
0001010 /0 /b /0 /0 020 /0 /0 /0 / h o m e /0 / h
0001020 o m e /0 /0 /n /0 003 001 /0 /0 /0 F g ? ?
0001030 /0 /0 /0 001 /0 /0 002 /0 /0 /0 /b /0 /0 /0 /0 /0
0001040 /0 /0 /0 /0 /0 /f /0 /0 /0 /0 /0 F g ?025
0001050 /0 /0 /0 /0 F g ? ? /0 /0 /0 /0 /0 /0 /0 /0
0001060 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0001c10 /0 /0 /0 /0 /0 /0 /0 /0
0001c18
十六進位格式
0001000 6587 2143 0000 0000 0000 4000 0000 0003
0001010 0008 0000 1000 0000 2f68 6f6d 6500 2f68
0001020 6f6d 6500 000a 0003 0100 0000 4667 a0f2
0001030 0000 0001 0000 0200 0000 0800 0000 0000
0001040 0000 0000 000c 2000 0000 0000 4667 a215
0001050 0000 0000 4667 a1ae 0000 0000 0000 0000
0001060 0000 0000 0000 0000 0000 0000 0000 0000
*
0002000
對比lsfs結果,同樣可以大體看出超級塊各個byte的定義
注意:6587 2143是幻數,如果crfs是採用了預設參數,則幻數為 4321 8765
如果主超級塊被破壞,可以通過dd拷貝次超級塊來修複,或者直接編輯二進位檔案來修複
FS被誤刪除後的恢複
用rmfs誤刪除FS,實際上只是刪除了LVCB中的資訊,超級塊中的資訊不變,FS中的資料也不會變
這樣只要沒有向這些空間寫入新的資料,都可以做修複的
方法是:按照原來的參數mklv,恢複LVCB中的資訊,編輯/etc/filesystem後,就可以mount FS,資料不會丟失
七、總結
上面是我學習LVM的一點體會,主要用的命令如下:
# od -x/c -N 64 /dev/hdisk1 +0200|more PV保留區
# od -x/c /dev/hdisk1 +0x10000|more VGSA
# od -x/c /dev/hdisk1 +0x11000|more 1# VGDA
# od -x/c /dev/hdisk1 +0x118400|more 2 # VGDA
# od –c/x /dev/myfs00 +0x1000 主超級塊
# od –cx /dev/myfs00 +0x1f000 次超級塊
建議大家在做LVM操作的時候,可以多用od查看裝置檔案二進位代碼,這樣可以更好地瞭解LVM命
令執行的效果,對於LVM基礎結構有更多的瞭解