這個實驗來自於紅皮書,通過這個實驗可以很好的瞭解redefinevg和synclvodm的區別。
redefinevg和synclvodm命令
最常見的ODM問題是:ODM和LVM控制資訊不同步。這種情況下,一般是ODM中的資訊不準確(但不一定所有的問題都是如此),而磁碟上的VGDA和VGSA是準確的。
修復ODM資訊不準確的問題最常用的兩個命令:redefinevg、synclvodm。redefinevg將重建ODM中的VG和PV資訊,給出足夠的資訊去啟用卷組,它也會恢復一些LV的資訊;synclvodm將從VGDA和LVCB中恢復剩下的LV資訊,以提供對LV的訪問。
通過下面的例子,我們能很好的理解redefinevg和synclvodm這兩個命令的區別。在下面的例子中,我們將建立名為targetvg的卷組,並在targetvg上建立targetlv檔案系統,log lv為targetlog,mount點為/targetfs。
# lsvg -l targetvg
targetvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
targetlog jfslog 1 1 1 closed/syncd N/A
targetlv jfs 32 32 1 closed/syncd /targetfs
# mount /targetfs
# echo "data" > /targetfs/data
我們假設這個VG裡面的需要的所有ODM資訊都損壞了,我們用odmdelete來達到破壞ODM資訊的效果,在刪除之前首先是備份資訊(odmget備份)。
# odmdelete -o CuAt -q "name LIKE target*"
0518-307 odmdelete: 9 objects deleted.
# odmdelete -o CuDvDr -q "value3 LIKE target*"
0518-307 odmdelete: 3 objects deleted.
# odmdelete -o CuDvDr -q "value1=targetvg"
0518-307 odmdelete: 1 objects deleted.
# odmdelete -o CuDv -q "name LIKE target*"
0518-307 odmdelete: 3 objects deleted.
# odmdelete -o CuDep -q "name=targetvg"
0518-307 odmdelete: 2 objects deleted.
現在讓我們來看看下面的結果。
# lsvg
rootvg
# lsvg -o
0516-304 : Unable to find device id 005f3e8e00004c000000013ac3744be1 in the Device
Configuration Database.
vgid=005f3e8e00004c000000013ac3744be1
rootvg
# lspv -M hdisk1
0516-320 : Physical volume hdisk1 is not assigned to
a volume group.
# lslv -m targetlv
0516-306 lslv: Unable to find targetlv in the Device
Configuration Database.
在ODM資訊被破壞之後,我們查詢不到關於VG的資訊,依賴於vg的lv資訊也查詢不到。
即使ODM中資訊是混亂的,資料依然可用,我們仍可以進行mount和umount
一些人可能會用exportvg或varyonvg來修復這個問題,我們可以儘管一試
# exportvg targetvg
0516-306 getlvodm: Unable to find volume group targetvg in the Device
Configuration Database.
0516-772 exportvg: Unable to export volume group targetvg
# varyonvg targetvg
0516-008 varyonvg: LVM system call returned an unknown
error code (3).
為什麼exportvg沒有成功呢?因為exportvg的前提是vg的定義還在,但是我們已經刪除了在odm中的vg定義,
vg的定義不在,所以執行失敗。
推薦的修復操作:synclvodm targetvg,也將會失敗,同樣是因為在odm中vg的定義已不在。
# synclvodm targetvg
0516-306 : Unable to find volume group targetvg in the Device
Configuration Database.
0516-502 synclvodm: Unable to access volume group targetvg.
為了恢復基礎的ODM資訊,我們必須使用redefinevg,這裡我們用redefinevg -d hdisk1 targetvg來恢復
在恢復之前,我們可以先用lqueryvg -Atp hdisk1來確認vgid資訊。
# lqueryvg -Atp hdisk1
0516-320 lqueryvg: Physical volume hdisk1 is not assigned to
a volume group.
Max LVs: 256
PP Size: 28
Free PPs: 1059
LV count: 2
PV count: 2
Total VGDAs: 3
Conc Allowed: 0
MAX PPs per PV 1016
MAX PVs: 32
Quorum (disk): 1
Quorum (dd): 1
Auto Varyon ?: 1
Conc Autovaryo 0
Varied on Conc 0
Logical: 005f3e8e00004c000000013ac3744be1.1 targetlog 1
005f3e8e00004c000000013ac3744be1.2 targetlv 1
Physical: 00cb6010395938b0 2 0
0007c06c50569818 1 0
Total PPs: 1092
LTG size: 128
HOT SPARE: 0
AUTO SYNC: 0
VG PERMISSION: 0
SNAPSHOT VG: 0
IS_PRIMARY VG: 0
PSNFSTPP: 4352
VARYON MODE: ???????
VG Type: 0
Max PPs: 32512
我們可以看到,005f3e8e00004c000000013ac3744be1正好是我們用lsvg -o查出的丟失的vgid
我們執行redefinevg命令
# redefinevg -d hdisk1 targetvg
#
執行成功之後,檢查資訊
# lsvg
rootvg
targetvg
# lsvg -o
targetvg
rootvg
# lsvg -l targetvg
targetvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
targetlog ??? 1 1 1 open/syncd N/A
targetlv ??? 32 32 1 open/syncd /targetfs
#
到此為止,我們還沒有完全修復好ODM中的targetvg資訊,還需要檢查下當前ODM庫中的資訊。
# odmget CuAt |grep -ip targetvg
CuAt:
name = "targetvg"
attribute = "vgserial_id"
value = "005f3e8e00004c000000013ac3744be1"
type = "R"
generic = "D"
rep = "n"
nls_index = 637
CuAt:
name = "targetvg"
attribute = "pv"
value = "00cb6010395938b00000000000000000"
type = "R"
generic = ""
rep = "sl"
nls_index = 0
CuAt:
name = "targetvg"
attribute = "pv"
value = "0007c06c505698180000000000000000"
type = "R"
generic = ""
rep = "sl"
nls_index = 0
# odmget CuDv |grep -ip targetvg
CuDv:
name = "targetvg"
status = 1
chgstatus = 1
ddins = ""
location = ""
parent = ""
connwhere = ""
PdDvLn = "logical_volume/vgsubclass/vgtype"
# odmget CuDvDr |grep -ip targetvg
CuDvDr:
resource = "ddins"
value1 = "targetvg"
value2 = "42"
value3 = ""
CuDvDr:
resource = "devno"
value1 = "42"
value2 = "0"
value3 = "targetvg"
# odmget CuDep |grep -ip targetvg
由上面的資訊可以看出(也可以跟我們之前備份的資訊對比),我們已經重建了odm庫中targetvg的vgid,pv資訊,但是我們還沒有從lvcb中
恢復lv資訊,這就是為什麼我們在lsvg -l targetvg結果的type列中,顯示為“?”的原因。在這個階段,像extendlv等命令將執行失敗,因為在
odm中沒有關於targetvg的lv資訊。
# extendlv targetlv 1
0516-306 getlvodm: Unable to find targetlv in the Device
Configuration Database.
0516-788 extendlv: Unable to extend logical volume.
#
要修復這個問題,執行synclvodm命令,這樣,lvcb控制資訊將會恢復到ODM中,做完這一步後,所有的ODM資訊都被恢復了。
# synclvodm targetvg
# lsvg -l targetvg
targetvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
targetlog jfslog 1 1 1 open/syncd N/A
targetlv jfs 32 32 1 open/syncd /targetfs
# savebase
總結:借用農哥的原話。
synclvodm是從VGDA同步ODM,前提是VG的定義還在,ODM裡錯誤的被修正,缺失的會從VGDA匯入,但ODM裡多的還會存在。
redefinevg也是從VGDA同步ODM,前提是VG定義沒了才用,要指定從哪個PV匯入,ODM裡多的還會在
synclvodm同步vgda和lvcb中的資訊到odm
redefinevg總是能執行成功的,因為pv資訊如果在odm中被刪除了,還可以通過cfgmgr來認出來
exportvg是把VGDA資訊從ODM庫中匯出去,前提也是VG的定義還在。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-1223795/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 有人瞭解 paas 和元件化嗎,想知道這 2 個的區別元件化
- 使用TensorFlow 來實現一個簡單的驗證碼識別過程
- 有了這個Python庫,免費實現驗證碼識別!Python
- 你必須瞭解的反射——反射來實現實體驗證反射
- c#中Debug和Release的區別實驗C#
- 一個關於JAVA GC的小實驗JavaGC
- 一個關於SDWAN單臂部署方案驗證的實驗
- 學了這麼久的開發,你正真瞭解形參和實參的區別嗎
- 20個實驗之實驗10
- 20個實驗之實驗11
- 30個實驗之實驗23
- 30個實驗之實驗25
- 20個實驗之實驗16
- 理解PG的xmin和xmax的幾個小實驗
- 看過這個,你可能更瞭解指標3指標
- 分享一個關於Cookie做的實驗結果Cookie
- OData API 和 Restful API 這兩個概念的區別和聯絡APIREST
- 安全技術|一個實驗瞭解多層內網滲透內網
- 解密《一個作業系統的實現》這本書解密作業系統
- 凹凸實驗室的過去與未來
- macos big sur新體驗:這17 個功能亮點非常實用Mac
- 【程式碼實驗室】.->和.有什麼區別?
- 在位元組,A/B 實驗是這麼做的!
- 龍蜥實驗室來了!收下這份指南,秒級體驗 Anolis OS
- 通過selenium突破極驗驗證實現登入
- PPT中這個不起眼的功能你瞭解多少?
- rgba()和opacity這兩個的透明效果有什麼區別呢?
- Linux實驗的幾個基礎命令Linux
- PLM與ERP整合,這個頭疼的問題,可以這樣解決!
- SAP CDS redirect view支援寫操作嗎,一個實驗來驗證View
- 圖解JVM實驗-觸發FullGC的幾個條件圖解JVMGC
- 看過這個,你可能更瞭解指標一點(2)指標
- 這個專案可以讓你在幾分鐘快速瞭解某個程式語言
- 關於 block 會不會被自動 copy 的實驗和猜想BloC
- 關於技術書籍,我是這麼來選書和看書的
- 想做長期的 AB 實驗?快來看看這些坑你踩了沒
- 詳解SSL證書系列(8)瞭解HTTPS及和HTTP的區別HTTP
- 通過一個簡單的數學遊戲,清晰瞭解各大程式語言之間的一些區別遊戲