はじめに
いろんなサーバから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すると差分はなくなる。
コメント