Workaround to access raw VxVM Volumes from Non-global zones

現在 Oracle 用 raw device 的不多了,大部分都是舊機器吧
在轉移到 Solaris 8 Container 的過程中,不可避免的也碰到了
需要在 local zone 中存取 raw device 的狀況

跟直接用 zonecfg 設定 raw device 給 zone 不太一樣

先確認 zone 執行中
global# zoneadm list -cv
ID    NAME                STATUS         PATH
0      global                running         /
1      myzone             running         /s8zone 

確認 raw volume 的 major and minor numbers
global# ls -l /dev/vx/rdsk/dg02
crw-------    1     root  root        370,  38001      Aug 14 18:39  vol01

在 local zone 中用 mknod 建立 volume
global# cd /s8zone/dev
global# mknod vol01 c 370 38001

因為是轉移舊系統,通常我把這兒路逕取的跟舊的一樣
global# mkdir -p /s8zone/dev/vx/rdsk/dg02
global# cd /s8zone/dev/vx/rdsk/dg02
global# mknod vol01 c 370 38001

登入 local zone 檢查一下
global# zlogin s8zone
[Connected to zone 's8zone' pts/2]
Last login: Mon Sep 29 02:07:42 on pts/2
Sun Microsystems Inc. SunOS 5.8 Generic Patch February 2004
Sourcing //.profile-EIS.....
root@s8zone # ls -l /dev/vx/rdsk/dg02
crw-------    1     root  root        370,  38001      Aug 14 18:39  vol01
OK~可以開始玩了 :)

參考文件︰
Document ID: 285063
Workaround to access raw Veritas Volume Manager volumes from Non-global zones

.

Solaris 8 Brand Zone with VCS in Share Storage

繼上次測試 Oracle in Solaris 8 Container with VCS 成功後
這次測試可否將 zone root 放在 share storage 上
文件的部份只有 solaris 10 native zone 寫說可以
不幸滴,測試 solaris 8 zone 的結果是失敗的
-------------------------------------------------------
zoneadm: zone 's8': This zone has been migrated to a new host.
zoneadm: zone 's8':
zoneadm: zone 's8': Run "/usr/lib/brand/solaris8/s8_p2v s8" before booting.
zoneadm: zone 's8':
zoneadm: zone 's8': exec /usr/lib/brand/solaris8/s8_boot s8 /zone/clarify failed
zoneadm: zone 's8': call to zoneadmd failed

--------------------------------------------------------
切換到另一個 node 後,認為轉移到了新的 host
需要跑個 migration 程序,s8_p2v
之後就可以順利將 s8 zone 由 vcs zone agent 帶起來了

可是 cluster failover 總不能這樣子啊,要可以自動帶起來才行
找找找,看有沒有法子 bypass 這個檢查步驟....

原來在 s8_boot 這程序中,會去檢查主機的 hostid
比對 zone root/.host.orig 這個檔案的 hostid
只要不一樣,就認為是轉移主機了
需要執行 s8_p2v 這個 migration 程序後,才可以 boot

那那那... Sun Cluster 怎麼處理這個問題呢?
嘿,給我找到了... Patch 126020-03 for HA_Containers
畢竟 S8/S9 Container 是後來出來的玩意兒,不過 Sun 手腳也很快
上個 Patch 就解決了這個問題
將 126020-03 解開看看裡面到底改了什麼玩意兒?
SUNWsczone/sczbt/bin/functions 裡面加了些東西
一些判斷 zone type 是 solaris8/solaris9/lx
重點來了,執行 hostid > $zonepath/root/.host.orig

嗯嗯,我如法炮製
去修改 VCS Zone agent 的 online script
測試一下,嘿嘿﹋﹋ it works!!

經詢問的結果,聽說這幾天 VCS patch 會針對此狀況做處理
到時再補個 patch 吧
.