netapp rsync 差が出る理由とは

メーカー製品

はじめに

いろんなサーバからNFSマウントしているnetappの保守期限が近づき移行することとなった。
旧:fas系
新:aff系
移行するにあたって構成を見直してもっとスマートにやるべきなのだろうけど、如何せん人と時間が無く、コピーしてマウントし直すという残念な対応方法となった。移行する中で、コピーをrsyncで行ったけど、コピー元とコピー先で容量が異なる。。。その理由についての調査結果を残す。実は下記以外にも差分が出てしまったけど、調査時間が無く断念。

構成

  • マウント
fas-10.0.0.1:/vol      /nfs
aff-10.0.0.2:/vol      /nfs-new
  • rsyncコマンド
事前
rsync -av --exclude='.snapshot/' /nfs/ /nfs-new/
直前+切替時
rsync -av --delete --exclude='.snapshot/' /nfs/ /nfs-new/
  • snapshotのディレクトリ名
/nfs/.snapshot/hourly.0
/nfs/.snapshot/hourly.1

/nfs-new/.snapshot/yyyymmdd-0
/nfs-new/.snapshot/yyyymmdd-1
  • 補足

rsyncのコマンド詳細は割愛。「/」有り無しで動きが変わるので注意
.snapshotはマウントしている/nfs/や/nfs-new/の直下に隠しディレクトリとして存在する。rsyncすると読み取り専用領域でエラーが出るのでわざと除外。ちなみに、「.snapshot」はマウント直下では見えるが、それ以外の深い階層へ行くと見えないが、じつは移動できる。(コチラで紹介)

netappのsnapshot仕様疑い【NoAnswer】

  • 疑惑:fasとaffの仕様差、もしくは設定ミスにより、マウントしている領域にsnapshotの容量が含まれてしまうのではないか。
    • 差がでていないサーバもあったので、結論、この疑惑は問題無かった。

symlinkの場合、.snapshotの中がコピーされる?【NoAnswer】

  • 疑惑:/nfs-new/配下にあるsymlink配下の.snapshotを見ると、yyyyで始まるディレクトリが無く、hourlyで始まるディレクトリとなっている。もしかして、symlinkの場合snapshotの領域がコピーされてしまって、それをnfs-new側のsnapshotではないから容量計算対象となるのではないか。
    • symlinkの参照先の見落とし。以下を見れば一目瞭然。。。はい。旧を見に行ってるからそらそうだ。
【疑った理由】
■旧nfs
# ls -l /nfs/test/dir/.snapshot/
drwxr-xr-x 19 user group 4096  6月 10 19:08 hourly.0
drwxr-xr-x 19 user group 4096  6月 10 19:08 hourly.1

■新nfs
# ls -l /nfs-new/test/dir/.snapshot/
drwxr-xr-x 19 user group 4096  6月 10 19:08 hourly.0
drwxr-xr-x 19 user group 4096  6月 10 19:08 hourly.1
【解】
■旧nfs
# pwd
/nfs/test/dir/
# ls -l
lrwxrwxrwx. 1 user group   29  4月 1  2021 hoge -> /nfs/test/dir/hoge/

■新nfs
# pwd
/nfs-new/test/dir/
# ls -l
lrwxrwxrwx. 1 user group   29  4月 1  2021 hoge -> /nfs/test/dir/hoge/

アプリのセッションファイル【Answer1】

アプリの作りによって、phpのセッションファイルをnfs上に置く仕様があり、リアルタイムでどんどん新しいファイルが生成されていくため、nfs領域のrsyncを行っても、すぐに差分がでてしまうという状況になっていた。セッションファイルが生成されないようにMWを止めてrsyncすると差分は無くなった。

nfsの2重マウントによるデータの2重コピー【Answer2】

■マウント状態
# df -h
ファイルシス                 サイズ  使用  残り 使用% マウント位置
fas-10.0.0.1:/vol              100G   10G   90G   10% /nfs
fas-10.0.0.1:/vol/hoge/hoge    100G   10G   90G   10% /nfs/fuga
aff-10.0.0.2:/vol              100G   12G   88G   12% /nfs-new

本来、「/nfs/fuga」の中身は「/vol1/hoge/hoge」を参照しているだけなので、シンボリックリンクのような扱いであるが、rsyncの際は、「/nfs/fuga」の中に個別のデータが存在すると錯覚しコピーしてしまう。わかりやすく容量をまとめるとこう。

■旧nfsの容量
/nfs
├/hoge       0G
│ └/hoge   2G
├/fuga       0G  ・・・実態は「/nfs/hoge/hoge」
└/test       8G
■新nfsの容量
/nfs-new
├/hoge       0G
│ └/hoge   2G
├/fuga       2G
└/test       8G

よって、切替の際は先に「/nfs/fuga」をアンマウントしてからrsyncすると差分はなくなる。

コメント