Imaginez le problème suivant: effectuer une migration en zone Solaris 10 un serveur Sybase qui utilise des raw devices VxVM, et ce sans que les DBA n’aient à se casser la tête à recréer leur base de donnés.
Où est la difficulté ? En fait dans la zone on n’a pas la visibilité du /dev/ de la zone globale et donc on n’a pas non plus accès à /dev/vx/rdsk/.

La solution à ce petit problème est simple, mais pas immédiate. On doit cette astuce à M. Lucien Hercaud. En fait il suffit de remonter le répertoire /dev/vx/rdsk/<dgname> en LOFS dans /export/zones/<zonename>/dev/vx/rdsk/<dgname>.
En faisant cela la zone voit l’ensemble des fichiers spéciaux liés aux devices VxVM dans le chemin habituel /dev/vx/rdsk/<dgname>. Ainsi la base de donnée Sybase dont on a pris soin de monter la distribution en lofs dans la zone également peut démarrer sans aucune intervention particulière.

En voici un exemple de mise en œuvre:

Nous avons depuis longtemps (à l’époque en solaris 8) une base de donnée sybase stokée sur le SAN sur le DG sybasevg. La machine a été réinstallée en Solaris 8 U2 et le dataserver redémarré directement sans avoir aucun besoin d’adaptation.

Comme on voit dans le vxprint ci dessous il y a des volumes sybdata et syblog qui en fait sont utilisé en raw devices par le dataserver. Mais maintenant nous avons upgradé l’OS en Solaris 10 U6 et on veut mettre le dataserver en Zones. C’est bien plus pratique pour gérer le DRP. Et ZFS n’est pas encore suffisamment fiable tout du moins en raw devices pour mettre un dataserver dessus.

[root@sauron /dev/vx/rdsk/sybasevg][PRD]$ sudo vxprint -htg sybasevg
DG NAME         NCONFIG      NLOG     MINORS   GROUP-ID
ST NAME         STATE        DM_CNT   SPARE_CNT         APPVOL_CNT
DM NAME         DEVICE       TYPE     PRIVLEN  PUBLEN   STATE
RV NAME         RLINK_CNT    KSTATE   STATE    PRIMARY  DATAVOLS  SRL
RL NAME         RVG          KSTATE   STATE    REM_HOST REM_DG    REM_RLNK
CO NAME         CACHEVOL     KSTATE   STATE
VT NAME         NVOLUME      KSTATE   STATE
V  NAME         RVG/VSET/CO  KSTATE   STATE    LENGTH   READPOL   PREFPLEX UTYPE
PL NAME         VOLUME       KSTATE   STATE    LENGTH   LAYOUT    NCOL/WID MODE
SD NAME         PLEX         DISK     DISKOFFS LENGTH   [COL/]OFF DEVICE   MODE
SV NAME         PLEX         VOLNAME  NVOLLAYR LENGTH   [COL/]OFF AM/NM    MODE
SC NAME         PLEX         CACHE    DISKOFFS LENGTH   [COL/]OFF DEVICE   MODE
DC NAME         PARENTVOL    LOGVOL
SP NAME         SNAPVOL      DCO

dg sybasevg   default      default  117000   1215790402.361.frodon

dm sybasevg-1 c2t5006048C52A89D2Cd256s2 auto 2048 71302656 -
dm sybasevg-2 c2t5006048C52A89D2Cd257s2 auto 3583 71299200 -
dm sybasevg-3 c2t5006048C52A89D2Cd258s2 auto 3583 71299200 -

v  root         -            ENABLED  ACTIVE   4194304  SELECT    root-02  fsgen
pl root-02      root         ENABLED  ACTIVE   4194816  STRIPE    3/256    RW
sd sybasevg-1-01 root-02   sybasevg-1 0    1398272  0/0       c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-01 root-02   sybasevg-2 0    1398272  1/0       c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-01 root-02   sybasevg-3 0    1398272  2/0       c2t5006048C52A89D2Cd258 ENA

v  sybase       -            ENABLED  ACTIVE   52412416 SELECT    sybase-02 fsgen
pl sybase-02    sybase       ENABLED  ACTIVE   52412928 STRIPE    3/256    RW
sd sybasevg-1-02 sybase-02 sybasevg-1 1398272 17470976 0/0    c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-02 sybase-02 sybasevg-2 1398272 17470976 1/0    c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-02 sybase-02 sybasevg-3 1398272 17470976 2/0    c2t5006048C52A89D2Cd258 ENA

v  sybdata01    -            ENABLED  ACTIVE   67108864 SELECT    sybdata01-02 fsgen
pl sybdata01-02 sybdata01    ENABLED  ACTIVE   67109376 STRIPE    3/256    RW
sd sybasevg-1-03 sybdata01-02 sybasevg-1 18869248 22369792 0/0 c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-03 sybdata01-02 sybasevg-2 18869248 22369792 1/0 c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-03 sybdata01-02 sybasevg-3 18869248 22369792 2/0 c2t5006048C52A89D2Cd258 ENA

v  sybdata02    -            ENABLED  ACTIVE   67108864 SELECT    sybdata02-02 fsgen
pl sybdata02-02 sybdata02    ENABLED  ACTIVE   67109376 STRIPE    3/256    RW
sd sybasevg-1-04 sybdata02-02 sybasevg-1 41239040 22369792 0/0 c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-04 sybdata02-02 sybasevg-2 41239040 22369792 1/0 c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-04 sybdata02-02 sybasevg-3 41239040 22369792 2/0 c2t5006048C52A89D2Cd258 ENA

v  syblog01     -            ENABLED  ACTIVE   4194304  SELECT    syblog01-02 fsgen
pl syblog01-02  syblog01     ENABLED  ACTIVE   4194816  STRIPE    3/256    RW
sd sybasevg-1-05 syblog01-02 sybasevg-1 63608832 1398272 0/0  c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-05 syblog01-02 sybasevg-2 63608832 1398272 1/0  c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-05 syblog01-02 sybasevg-3 63608832 1398272 2/0  c2t5006048C52A89D2Cd258 ENA

v  syblog02     -            ENABLED  ACTIVE   4194304  SELECT    syblog02-02 fsgen
pl syblog02-02  syblog02     ENABLED  ACTIVE   4194816  STRIPE    3/256    RW
sd sybasevg-1-06 syblog02-02 sybasevg-1 65007104 1398272 0/0  c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-06 syblog02-02 sybasevg-2 65007104 1398272 1/0  c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-06 syblog02-02 sybasevg-3 65007104 1398272 2/0  c2t5006048C52A89D2Cd258 ENA

v  syblog03     -            ENABLED  ACTIVE   4194304  SELECT    syblog03-02 fsgen
pl syblog03-02  syblog03     ENABLED  ACTIVE   4194816  STRIPE    3/256    RW
sd sybasevg-1-07 syblog03-02 sybasevg-1 66405376 1398272 0/0  c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-07 syblog03-02 sybasevg-2 66405376 1398272 1/0  c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-07 syblog03-02 sybasevg-3 66405376 1398272 2/0  c2t5006048C52A89D2Cd258 ENA

v  sybtemp      -            ENABLED  ACTIVE   10485760 SELECT    sybtemp-02 fsgen
pl sybtemp-02   sybtemp      ENABLED  ACTIVE   10486272 STRIPE    3/256    RW
sd sybasevg-1-08 sybtemp-02 sybasevg-1 67803648 3495424 0/0   c2t5006048C52A89D2Cd256 ENA
sd sybasevg-2-08 sybtemp-02 sybasevg-2 67803648 3495424 1/0   c2t5006048C52A89D2Cd257 ENA
sd sybasevg-3-08 sybtemp-02 sybasevg-3 67803648 3495424 2/0   c2t5006048C52A89D2Cd258 ENA

Voici ci dessous les devices qu’on trouve dans /dev/vx/rdsk/sybasevg.

[root@sauron /dev/vx/rdsk/sybasevg][PRD]$ ls
root       sybase     sybdata01  sybdata02  syblog01   syblog02   syblog03   sybtemp

Ce sont ces fichiers spéciaux qui sont enregistrés dans la configuration du dataserver, il faut donc absolument que dans la zone on retrouve /dev/vx/rdsk/sybasevg. Or une zone n’est pas vraiment une machine vituelle, elle partage le kernel avec la globale et les autres zones. De fait les appels systèmes fait dans la zone sont fait sur le même kernel space que la globale. On peut donc en déduire que l’espace de nommage des major/minor est le même. Il suffirait donc de recréer les fichiers spéciaux correspondant aux devices dans la zone. Mais en fait il y a même plus simple. On peut carrément remonter le repertoire des raw devices en lofs dans la zone. Comme suit:

[root@sauron ~][PRD]$ mount -t lofs /./dev/vx/rdsk/sybasevg /export/zones/sybasezone/dev/vx/rdsk/sybasevg
[root@sauron ~][PRD]$ mount -v
[...]
/./dev/vx/rdsk/sybasevg on /export/zones/sybasezone/dev/vx/rdsk/sybasevg type lofs read-only/setuid/devices/dev=4ec0000 on Sat Feb 21 15:53:39 2009
[...]

Et l’intuition se vérifie, ça marche et le DBA n’a pas besoin de se casser la tête à reconfigurer sa base, et donc évite le risque de la casser dans la migration.