Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

26.4. libStorageMgmt の使用

libStorageMgmt を対話形式で使用するには、lsmcli コマンドを使用します。
lsmcli ツールを実行するには、以下の 2 つが必要になります。
  • アレイと、アレイで必要な設定可能なオプションに接続するためのプラグインを特定するために使用される URI (Uniform Resource Identifier)。
  • アレイで有効なユーザー名およびパスワード。
URI は以下の形式になります。
plugin+optional-transport://username@host:port/?query-string-parameters
必要な要件は、各プラグインで異なります。

例26.1 プラグインによって要件が異なる例

ユーザー名またはパスワードを必要としないシミュレーターのプラグイン

sim://

ユーザー名の root を使用する SSL 経由の NetApp プラグイン

ontap+ssl://root@filer.company.com/

EMC アレイ用の SSL 経由の SMI-S プラグイン

smis+ssl://admin@provider.com:5989/?namespace=root/emc

URI を使用する方法としては、以下の 3 つがあります。
  1. コマンドの一部として URI を渡します。
    $ lsmcli -u sim://...
  2. URI を環境変数に保存します。
    $ export LSMCLI_URI=sim:// && lsmcli ...
  3. ~/.lsmcli ファイルに URI を指定します。ここでは、名前と値のペアを「=」で区切ります。現在サポートされる設定は uri のみです。
使用する URI を指定するのは、この順番で行う必要があります。3 つの方法がすべて使われる場合は、コマンドラインで一番最初に実行されたものが適用されます。
コマンドラインに -P を追加するか、または環境変数の LSMCLI_PASSWORD に設定して、パスワードを指定します。

例26.2 lsmcli の例

以下の例は、コマンドラインを使用して新規ボリュームを作成し、これをイニシエーターに表示する方法を示します。
この接続によって処理されるアレイをリストします。
$ lsmcli list --type SYSTEMS
ID     | Name                          | Status
-------+-------------------------------+--------
sim-01 | LSM simulated storage plug-in | OK
ストレージプールをリストします。
$ lsmcli list --type POOLS -H
ID   | Name          | Total space          | Free space           | System ID
-----+---------------+----------------------+----------------------+-----------
POO2 | Pool 2        | 18446744073709551616 | 18446744073709551616 | sim-01
POO3 | Pool 3        | 18446744073709551616 | 18446744073709551616 | sim-01
POO1 | Pool 1        | 18446744073709551616 | 18446744073709551616 | sim-01
POO4 | lsm_test_aggr | 18446744073709551616 | 18446744073709551616 | sim-01
ボリュームを作成します。
$ lsmcli volume-create --name volume_name --size 20G --pool POO1 -H
ID   | Name        | vpd83                            | bs  | #blocks  | status | ...
-----+-------------+----------------------------------+-----+----------+--------+----
Vol1 | volume_name | F7DDF7CA945C66238F593BC38137BD2F | 512 | 41943040 | OK     | ...
iSCSI イニシエーターを含むアクセスグループを作成します。
$ lsmcli --create-access-group example_ag --id iqn.1994-05.com.domain:01.89bd01 --type ISCSI --system sim-01
ID                               | Name       | Initiator ID                     |SystemID
---------------------------------+------------+----------------------------------+--------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 |sim-01
iSCSI イニシエーターを含むアクセスグループを作成します。
$ lsmcli access-group-create --name example_ag --init iqn.1994-05.com.domain:01.89bd01 --init-type ISCSI --sys sim-01
ID                               | Name       | Initiator IDs                    | System ID
---------------------------------+------------+----------------------------------+-----------
782d00c8ac63819d6cca7069282e03a0 | example_ag | iqn.1994-05.com.domain:01.89bd01 | sim-01
新たに作成されたボリュームに対して、アクセスグループの表示を許可します。
$ lsmcli access-group-grant --ag 782d00c8ac63819d6cca7069282e03a0 --vol Vol1 --access RW
ライブラリーの設計上、inter-process communication (IPC) によりクライアントとプラグインの間のプロセスが分離します。これにより、プラグインのバグが原因で、クライアントアプリケーションがクラッシュすることがなくなります。さらに、プラグインの作成者が、独自に選択したライセンスを使ってプラグインを作成する手段も提供します。クライアントが URI を渡すライブラリーを開くと、クライアントライブラリーが URI を参照し、どちらのプラグインを使用する必要があるのかを決定します。
プラグインは、実際はスタンドアロンのアプリケーションですが、コマンドライン上で渡されるファイルディスクリプターを持つように設計されています。クライアントライブラリーは、デーモンにプラグインをフォークし、実行させる適切な Unix ドメインソケットを開きます。これにより、クライアントライブラリーには、プラグインによるポイントツーポイントの通信チャンネルが提供されます。デーモンは、既存クライアントに影響を与えることなく再起動できます。クライアントがそのプラグインに対してライブラリーをオープンにしている間に、プラグインプロセスが実行します。1 つまたは複数のコマンドが送信されると、プラグインは閉じられ、プラグインプロセスはクリーンアップしてから終了します。
lsmcli のデフォルトの動作は、操作が完了するまで待機します。したがって、要求される操作によっては、数時間待機する可能性があります。コマンドラインで -b オプションを使用すれば、通常の使用に戻ることができます。終了コードが 0 の場合は、コマンドが完了しています。終了コードが 7 の場合はコマンドが進行中で、標準出力にはジョブ ID が書き込まれます。その後、必要に応じてそのジョブ ID を使用し、ユーザー自身またはスクリプトで lsmcli --jobstatus JobID を実行すれば、コマンドのステータスを照会できます。ジョブが完了すると、終了値は 0 となり、結果が標準出力に出力されます。コマンドが依然として進行中の場合は、戻り値が 7 となり、完成度 (パーセント) が標準出力に出力されます。

例26.3 非同期の例

ボリュームを作成します。コマンドがすぐに返されるように、-b オプションを渡します。
$ lsmcli volume-create --name async_created --size 20G --pool POO1 -b JOB_3
終了値を確認します。7 は、ジョブが依然として進行中であることを示しています。
$ echo $?
7
ジョブが完了しているかどうかをチェックします。
$ lsmcli job-status --job JOB_3
33
終了値を確認します。ジョブが依然として進行中であることを示す 7 が示されていたことに注意してください。ここでは、完成度のパーセントが標準出力として表示されます (上記の画面の場合では 33%)。
$ echo $?
7
少し待って、再びチェックします。成功を示す終了値 0 が出力され、標準出力には新規のボリュームが表示されます。
$ lsmcli job-status --job JOB_3 
ID   | Name          | vpd83                            | Block Size  | ...
-----+---------------+----------------------------------+-------------+-----
Vol2 | async_created | 855C9BA51991B0CC122A3791996F6B15 | 512         | ...
スクリプトの場合は、-t SeparatorCharacters オプションを渡してください。これにより、出力の解析がより簡単になります。

例26.4 スクリプトの例

$ lsmcli list --type volumes -t#
Vol1#volume_name#049167B5D09EC0A173E92A63F6C3EA2A#512#41943040#21474836480#OK#sim-01#POO1
Vol2#async_created#3E771A2E807F68A32FA5E15C235B60CC#512#41943040#21474836480#OK#sim-01#POO1
$ lsmcli list --type volumes -t " | "
Vol1 | volume_name | 049167B5D09EC0A173E92A63F6C3EA2A | 512 | 41943040 | 21474836480 | OK | 21474836480 | sim-01 | POO1
Vol2 | async_created | 3E771A2E807F68A32FA5E15C235B60CC | 512 | 41943040 | 21474836480 | OK | sim-01 | POO1
$ lsmcli list --type volumes -s
---------------------------------------------
ID         | Vol1                            
Name       | volume_name                     
VPD83      | 049167B5D09EC0A173E92A63F6C3EA2A
Block Size | 512                             
#blocks    | 41943040                        
Size       | 21474836480                     
Status     | OK                              
System ID  | sim-01                          
Pool ID    | POO1                            
---------------------------------------------
ID         | Vol2                            
Name       | async_created                   
VPD83      | 3E771A2E807F68A32FA5E15C235B60CC
Block Size | 512                             
#blocks    | 41943040                        
Size       | 21474836480                     
Status     | OK                              
System ID  | sim-01                          
Pool ID    | POO1                            
---------------------------------------------
一般的なスクリプトには、Python ライブラリーを使用することが推奨されます。
lsmcli の詳細は、man ページまたはコマンド lsmcli --help を参照してください。