ASMで使うディスクのパスが変わったときの影響

ASMFDやASMLib未使用の環境で、ASMが使用するディスクを以下のように構成しているとする。

SQL> select name, path from v$asm_disk order by path;

NAME            PATH
--------------- ---------------
OCR_0000        /dev/sdb
DATA_0000       /dev/sdc
DATA2_0000      /dev/sdd
DATA3_0000      /dev/sde

DATA2_0000 は OS上のデバイスとして /dev/sdd、DATA3_0000 は /dev/sde に紐づいている。

ところで、Linuxでは物理的なディスクと、OSが認識するデバイス名が毎回必ずしも一致するわけではない。あるディスクが /dev/sdd として認識されることもあれば、/dev/sde として認識されることもある。

Virtual Boxなどの仮想マシンの場合、仮想ディスクの接続先ポートを入れ替えることでこのような挙動を試すことができる。

例えば、SATA ポート3に接続されている「VBRAC19_DATA2.vdi」と、SATA ポート4に接続されている「VBRAC19_DATA3.vdi」を入れ替えてみるとする。これは、冒頭に記載したASMディスクの「DATA2_0000」と「DATA3_0000」に対応しているディスクである。

入れ替え前
入れ替え後

こんなことをすると、ASMが認識しているディスクのパスと、実際のパスに齟齬が生じて起動できなくなるのではないか?と思うかもしれないが、実際のところ問題なく起動する。

SQL> select name, path from v$asm_disk order by path;

NAME            PATH
--------------- ---------------
OCR_0000        /dev/sdb
DATA_0000       /dev/sdc
DATA3_0000      /dev/sdd
DATA2_0000      /dev/sde

見てわかる通り、DATA2_0000 は /dev/sde、DATA3_0000 は /dev/sdd と、入れ替わったことを認識してくれている。

この挙動を見る限り、ディスクグループにはOS上のデバイス名までは紐づいていないということになる。おそらく、ディスクグループマウント時に初期化パラメータの asm_diskstring に指定されたディスクのヘッダを一旦全て走査し、ディスクグループに紐づくディスクを自動的に判別してマウントしている、ということなのだろう。

SQL> show parameter asm_diskstring

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
asm_diskstring                       string                            /dev/sd*, AFD:*

ではなぜOracleはストレージパスの永続化のための仕組みとしてASMLibやASMFDといった機能を提供しているのかという疑問が出てくるのだが、正直純粋にOracleを使う上での必要性については解が出ていない。

ASMFDにはOracle以外のプロセスがディスクにデータを書き込むことを防ぐ役割もあり、どちらかというとその用途が重要になってくるのだろうと思う。

コメント