AIX下采用dd方式進行資料遷移的過程,供參考
nohup dd if=/dev/rlvdata1 of=/dev/rlvdata2 bs=4096k skip=10000 seek=10000 count=10000 &
nohup dd if=/dev/rlvdata1 of=/dev/rlvdata2 bs=4096k skip=20000 seek=20000 count=10000 &
nohup dd if=/dev/rlvdata1 of=/dev/rlvdata2 bs=4096k skip=30000 seek=30000 count=10000 &
nohup dd if=/dev/rlvdata1 of=/dev/rlvdata2 bs=4096k skip=40000 seek=40000 & 4.通過topas可以檢視相關磁碟的IO,以及總的傳輸速度 通過ps可以檢視dd程序的數目,(其實是10個,因為smt(併發多執行緒)的原因) 當然了,每次開幾個dd程序可以通過測試確定,開多了也不一定好,總的速度反而有可能下降,這跟儲存的配置和效能有關係)。 5.傳輸結束後, fsck /dev/lvdata2 6.mount /data1 mount /data2 df -k 對比/data1,/data2總的大小,使用率是否一模一樣。 這裡有兩個問題, 1)就是lvcb的覆蓋問題,後面會討論 2)就是即使/data2原先分配的是300GB,這裡顯示的還是200GB,大家可以考慮一下是為什麼。 這裡先不進行檔案系統擴容了,等後面再擴。 7.umount /data1 umount /data2 varyoffvg vgdata2 exportvg vgdata2 產生的現象就是/etc/filesystem裡面已經不存在/data2 的entry。 同時/dev下面關於vgdata2和lvdata2的定義也都不存在了。 lspv檢視的也不存在vgdata2的資訊了 然後rmdev -dl hdisk** (hdisk**是指hds儲存盤,原先屬於vgdata2的盤) 8.將HDS儲存從主機A上撤出,分配給主機B。 cfgmgr -v lspv (通過pvid號識別新增加的磁碟) importvg -v vgdata2 hdisk** 檢視/etc/filesystems裡面存在了/data1的entry。 9.修改/etc/filesystems內容,log = /dev/loglv**,要更改,因為這裡的loglv**並不是lvdata2對應的loglv,而是原先的lvdata1對應的loglv。 10.通過lsvg -l vgdata2檢視相應的lv資訊 11.fsck /dev/lvdata2 mount /dev/lvdata2 /data1 df -k 看看fs的大小和使用率和原先的記錄是否符合。 smit chjfs2擴檔案系統(如果原先/data2是300GB的話,這裡擴100GB) df -k 12.資料庫有關配置更改之後,就可以啟動資料庫,測試應用了。 這裡還可以討論另外一個問題,就是lvdata2的lvcb被覆蓋掉了,變成了lvdata1的lvcb,這可以通過 getlvcb -AT lvdata1 getlvcb -AT lvdata2 來檢視,那麼importvg卻是正確識別到了vgdata2包含的lv的資訊,這就像chinadns所說的importvg讀取的實際上是vgda的資訊(importvg將vgda資訊import到odm中).但是mount點和loglv的資訊是讀取的lvcb的。所以 這就涉及到另外一個問題:就是如何同步vgda和lvcb的資訊。 大家可以看一下這篇文章: 就是可以使用putlvcb命令更新lv頭的lvcb,同時它將自動更新vgda中的vgda資訊, The putlvcb command writes the control block information into block 0 of the
logical volume lvname. Only the fields specified are written. putlvcb can be
used to write a new control block or update an existing one. 就是人為更改lvcb的lvid,mount point,loglv。 當然資料遷移也可以使用其他辦法,比如cplv,或者mirror,不只侷限於dd之類的,這裡就不累述了。 對於CPLV中的LVCB問題,網上也有不少文章的論述: 總的結論是: cplv
# getlvcb -AT lvtest1
AIX LVCB
intrapolicy = m
copies = 1
interpolicy = m
lvid = 00cd9fd100004c000000011f6da92d6d.1
lvname = lvtest1
label = /test1
machine id = D9FD14C00
number lps = 8
relocatable = y
strict = y
stripe width = 0
stripe size in exponent = 0
type = jfs2
upperbound = 32
fs = vfs=jfs2:log=/dev/loglv08:mount=true:options=rw:account=false
time created = Fri Feb 13 11:26:14 2009
time modified = Fri Feb 13 11:27:14 2009
# getlvcb -AT lvtest2
AIX LVCB
intrapolicy = m
copies = 1
interpolicy = m
lvid = 00cd9fd100004c000000011f6daad4cf.1
lvname = lvtest2
label = /test1
machine id = D9FD14C00
number lps = 8
relocatable = y
strict = y
stripe width = 0
stripe size in exponent = 0
type = jfs2
upperbound = 32
fs = vfs=jfs2:log=/dev/loglv09:mount=true:options=rw:account=false
time created = Fri Feb 13 11:26:42 2009
time modified = Fri Feb 13 12:04:40 2009
從上面的結果可以看出,只有label被改變了,其他都沒有改變。
關於lvcb,下面再補充幾個命令,供參考用。
邏輯卷控制塊(LVCB)儲存著邏輯卷的重要資訊,它位於在邏輯捲開始,佔用了512個位元組。邏輯卷控制塊包括的資訊有:邏輯卷建立日期、邏輯卷的映象拷貝數和安裝點(如果在邏輯捲上建立了一個JFS檔案系統,才有安裝點)。使用命令/usr/sbin/getlvcb能夠獲得邏輯卷的LVCB。
如果想看lvcb按位元組存放的東西,可以用od
# od -c /dev/hd1|more
0000000 A I X L V C B \0 \0 j f s 2 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0 0 0 8 3 6
0000060 1 5 0 0 0 0 d 6 0 0 0 0 0 0 0 1
0000100 1 d \0 h d 1 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000120 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000200 \0 \0 \0 F r i O c t 2 4 0 7
0000220 : 2 5 : 4 9 2 0 0 8 \n \0 \0 \0 \0
0000240 \0 S a t N o v 8 2 2 : 2
0000260 9 : 4 2 2 0 0 8 \n \0 \0 \0 \0 \0 8
0000300 3 6 1 5 D 6 0 0 \0 y m c \0 y \0
0000320 \0 \b \0 002 / h o m e \0 \0 \0 \0 \0 \0 \0
0000340 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000520 \0 \0 \0 \0 v f s = j f s 2 : l o g
0000540 = / d e v / h d 8 : m o u n t =
0000560 t r u e : c h e c k = t r u e :
0000600 v o l = / h o m e : f r e e = f
0000620 a l s e : q u o t a = u s e r q
................