第21章 一般的な問題の解決

本章では、Red Hat Gluster Storage のトラブルシューティングの方法をいくつか紹介します。

21.1. ロックされたファイルの特定とロックの消去

statedump コマンドを使用すると、ファイルに保持されたロックを一覧表示できます。statedump 出力は、各ロックの情報を、ロックを保持するアプリケーションの範囲、basename、および PID とともに提供します。出力を分析して、所有者/アプリケーションが実行されていない、またはそのロックに関心のあるロックを検索できます。アプリケーションがこのファイルを使用していないことを確認したら、以下の clear-locks コマンドを使用してロックをクリアできます。
# gluster volume clear-locks VOLNAME path kind {blocked | granted | all}{inode range | entry basename | posix range}
statedump の実行の詳細は、「statedump を使用した完全なボリュームの状態の表示」 を参照してください。
ロックされたファイルを特定し、ロックをクリアする
  1. ボリュームで statedump を実行し、以下のコマンドを使用してロックされたファイルを表示します。
    # gluster volume statedump VOLNAME
    たとえば、test-volume の statedump を表示するには、以下を実行します。
    # gluster volume statedump test-volume
    Volume statedump successful
    statedump ファイルは、./tmp ディレクトリー内のブリックサーバーまたは server.statedump-path ボリュームオプションを使用して設定したディレクトリーに作成されます。ダンプファイルの命名規則は、 brick-path.brick-pid.dump です。
  2. 以下のコマンドを使用して、エントリーロックを消去します。
    # gluster volume clear-locks VOLNAME path kind granted entry basename
    以下は、エントリーロック(エントリーポイント)を示す statedump ファイルの内容の例です。これらのロックが古いロックであることを確認し、リソースを所有するリソースがないことを確認してください。
    [xlator.features.locks.vol-locks.inode]
    path=/
    mandatory=0
    entrylk-count=1
    lock-dump.domain.domain=vol-replicate-0
    xlator.feature.locks.lock-dump.domain.entrylk.entrylk[0](ACTIVE)=type=ENTRYLK_WRLCK on basename=file1, pid = 714782904, owner=ffffff2a3c7f0000, transport=0x20e0670, , granted at Mon Feb 27 16:01:01 2012
    
    conn.2.bound_xl./rhgs/brick1.hashsize=14057
    conn.2.bound_xl./rhgs/brick1.name=/gfs/brick1/inode
    conn.2.bound_xl./rhgs/brick1.lru_limit=16384
    conn.2.bound_xl./rhgs/brick1.active_size=2
    conn.2.bound_xl./rhgs/brick1.lru_size=0
    conn.2.bound_xl./rhgs/brick1.purge_size=0
    たとえば、test-volume の file1 でエントリーロックを消去するには、次のコマンドを実行します。
    # gluster volume clear-locks test-volume / kind granted entry file1
    Volume clear-locks successful
    test-volume-locks: entry blocked locks=0 granted locks=1
  3. 以下のコマンドを使用して、inode ロックを消去します。
    # gluster volume clear-locks VOLNAME path kind granted inode range
    以下は、inode ロックがあることを示す statedump ファイルの内容です(inodelk)。これらのロックが古いロックであることを確認し、リソースを所有するリソースがないことを確認してください。
    [conn.2.bound_xl./rhgs/brick1.active.1]
    gfid=538a3d4a-01b0-4d03-9dc9-843cd8704d07
    nlookup=1
    ref=2
    ia_type=1
    [xlator.features.locks.vol-locks.inode]
    path=/file1
    mandatory=0
    inodelk-count=1
    lock-dump.domain.domain=vol-replicate-0
    inodelk.inodelk[0](ACTIVE)=type=WRITE, whence=0, start=0, len=0, pid = 714787072, owner=00ffff2a3c7f0000, transport=0x20e0670, , granted at Mon Feb 27 16:01:01 2012
    たとえば、test-volume の file1 で inode ロックを削除するには、次のコマンドを実行します。
    # gluster  volume clear-locks test-volume /file1 kind granted inode 0,0-0
    Volume clear-locks successful
    test-volume-locks: inode blocked locks=0 granted locks=1
  4. 以下のコマンドを使用して、付与された POSIX ロックを削除します。
    # gluster volume clear-locks VOLNAME path kind granted posix range
    以下は、POSIX ロックが付与されていることを示す statedump ファイルの内容を示しています。これらのロックが古いロックであることを確認し、リソースを所有するリソースがないことを確認してください。
    xlator.features.locks.vol1-locks.inode]
    path=/file1
    mandatory=0
    posixlk-count=15
    posixlk.posixlk[0](ACTIVE)=type=WRITE, whence=0, start=8, len=1, pid = 23848, owner=d824f04c60c3c73c, transport=0x120b370, , blocked at Mon Feb 27 16:01:01 2012
    , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[1](ACTIVE)=type=WRITE, whence=0, start=7, len=1, pid = 1, owner=30404152462d436c-69656e7431, transport=0x11eb4f0, , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[2](BLOCKED)=type=WRITE, whence=0, start=8, len=1, pid = 1, owner=30404152462d436c-69656e7431, transport=0x11eb4f0, , blocked at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[3](ACTIVE)=type=WRITE, whence=0, start=6, len=1, pid = 12776, owner=a36bb0aea0258969, transport=0x120a4e0, , granted at Mon Feb 27 16:01:01 2012
    ...
    たとえば、test-volume の file1 で付与された POSIX ロックを消去するには、次のコマンドを実行します。
    # gluster volume clear-locks test-volume /file1 kind granted posix 0,8-1
    Volume clear-locks successful
    test-volume-locks: posix blocked locks=0 granted locks=1
    test-volume-locks: posix blocked locks=0 granted locks=1
    test-volume-locks: posix blocked locks=0 granted locks=1
  5. 以下のコマンドを使用して、ブロックされた POSIX ロックを削除します。
    # gluster volume clear-locks VOLNAME path kind blocked posix range
    以下は、ブロックされた POSIX ロックがあることを示す statedump ファイルの内容の例です。これらのロックが古いロックであることを確認し、リソースを所有するリソースがないことを確認してください。
    [xlator.features.locks.vol1-locks.inode]
    path=/file1
    mandatory=0
    posixlk-count=30
    posixlk.posixlk[0](ACTIVE)=type=WRITE, whence=0, start=0, len=1, pid = 23848, owner=d824f04c60c3c73c, transport=0x120b370, , blocked at Mon Feb 27 16:01:01 2012
    , granted at Mon Feb 27 16:01:01
    
    posixlk.posixlk[1](BLOCKED)=type=WRITE, whence=0, start=0, len=1, pid = 1, owner=30404146522d436c-69656e7432, transport=0x1206980, , blocked at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[2](BLOCKED)=type=WRITE, whence=0, start=0, len=1, pid = 1, owner=30404146522d436c-69656e7432, transport=0x1206980, , blocked at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[3](BLOCKED)=type=WRITE, whence=0, start=0, len=1, pid = 1, owner=30404146522d436c-69656e7432, transport=0x1206980, , blocked at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[4](BLOCKED)=type=WRITE, whence=0, start=0, len=1, pid = 1, owner=30404146522d436c-69656e7432, transport=0x1206980, , blocked at Mon Feb 27 16:01:01 2012
    
    ...
    たとえば、test-volume の file1 でブロックされた POSIX ロックを削除するには、次のコマンドを実行します。
    # gluster volume clear-locks test-volume /file1 kind blocked posix 0,0-1
    Volume clear-locks successful
    test-volume-locks: posix blocked locks=28 granted locks=0
    test-volume-locks: posix blocked locks=1 granted locks=0
    No locks cleared.
  6. 以下のコマンドを実行して、POSIX ロックをすべて消去します。
    # gluster volume clear-locks VOLNAME path kind all posix range
    以下は、POSIX ロックがあることを示す statedump ファイルのサンプルコンテンツです。これらのロックが古いロックであることを確認し、リソースを所有するリソースがないことを確認してください。
    [xlator.features.locks.vol1-locks.inode]
    path=/file1
    mandatory=0
    posixlk-count=11
    posixlk.posixlk[0](ACTIVE)=type=WRITE, whence=0, start=8, len=1, pid = 12776, owner=a36bb0aea0258969, transport=0x120a4e0, , blocked at Mon Feb 27 16:01:01 2012
    , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[1](ACTIVE)=type=WRITE, whence=0, start=0, len=1, pid = 12776, owner=a36bb0aea0258969, transport=0x120a4e0, , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[2](ACTIVE)=type=WRITE, whence=0, start=7, len=1, pid = 23848, owner=d824f04c60c3c73c, transport=0x120b370, , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[3](ACTIVE)=type=WRITE, whence=0, start=6, len=1, pid = 1, owner=30404152462d436c-69656e7431, transport=0x11eb4f0, , granted at Mon Feb 27 16:01:01 2012
    
    posixlk.posixlk[4](BLOCKED)=type=WRITE, whence=0, start=8, len=1, pid = 23848, owner=d824f04c60c3c73c, transport=0x120b370, , blocked at Mon Feb 27 16:01:01 2012
    ...
    たとえば、test-volume の file1 にある POSIX ロックをすべて消去するには、次のコマンドを実行します。
    # gluster volume clear-locks test-volume /file1 kind all posix 0,0-1
    Volume clear-locks successful
    test-volume-locks: posix blocked locks=1 granted locks=0
    No locks cleared.
    test-volume-locks: posix blocked locks=4 granted locks=1
test-volume で statedump を再度実行して、上記のロックがすべて消去されていることを確認します。