AIX jfs2 スナップショット 検証



##### はじめに

AIX の jfs2 スナップショットの検証を行ったので、参考までにログを記載します。

JFS2 スナップショットとは、AIX のJF2タイプのファイルシステム単位でスナップショットを取得する機能のことです。

[参考]
　・JFS2 スナップショット
　　https://www.ibm.com/docs/ja/aix/7.2?topic=jfs2-snapshots
　・JFS オンライン・バックアップおよび JFS2 スナップショット
　　https://www.ibm.com/docs/ja/aix/7.2?topic=jfs2-jfs-online-backups-snapshots
　・JFS2 Snapshot Quick Reference
　　https://www.ibm.com/support/pages/node/670101
　　(抜粋)
　　Usually a snapshot filesystem will only need to be 2-6% of the size of the original filesystem, due to this copy-on-write feature.
　=> ファイルシステムの 2-6% がスナップショットのサイズになるそうです。


---
##### 環境
AIX 7.1 TL3 SP5

ボリューム・グループ testvg 、論理ボリューム testlv が存在し、ファイルシステム testsnapshot が存在しています

```
# lspv
hdisk0          00f62xxxxxxxxa41                    rootvg          active
hdisk1          00xxxxxxxxxb61c9                    testvg          active

# lsvg -l testvg
testvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
testlv              jfs2       384     384     1    open/syncd    /testsnapshot

# lsfs | grep test
/dev/testlv     --         /testsnapshot          jfs2  25165824 rw         no   no
#
```


---




##### 検証１：snapshot 取得


「/testsnapshot」ファイルシステム にファイルが100個程度ある状態で snapshot を取得します
サイズ 2GB を指定した、外部スナップショットを作成しています。

```
# pwd
/testsnapshot/test
# ls
testfile1   testfile19  testfile28  testfile37  testfile46  testfile55  testfile64  testfile73  testfile82  testfile91
testfile10  testfile2   testfile29  testfile38  testfile47  testfile56  testfile65  testfile74  testfile83  testfile92
testfile11  testfile20  testfile3   testfile39  testfile48  testfile57  testfile66  testfile75  testfile84  testfile93
testfile12  testfile21  testfile30  testfile4   testfile49  testfile58  testfile67  testfile76  testfile85  testfile94
testfile13  testfile22  testfile31  testfile40  testfile5   testfile59  testfile68  testfile77  testfile86  testfile95
testfile14  testfile23  testfile32  testfile41  testfile50  testfile6   testfile69  testfile78  testfile87  testfile96
testfile15  testfile24  testfile33  testfile42  testfile51  testfile60  testfile7   testfile79  testfile88  testfile97
testfile16  testfile25  testfile34  testfile43  testfile52  testfile61  testfile70  testfile8   testfile89  testfile98
testfile17  testfile26  testfile35  testfile44  testfile53  testfile62  testfile71  testfile80  testfile9   testfile99
testfile18  testfile27  testfile36  testfile45  testfile54  testfile63  testfile72  testfile81  testfile90

# df -g /testsnapshot
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/testlv       12.00      2.28   81%      104     1% /testsnapshot
```

-> ファイルシステムの Used 81 %程度

最初にsnapshot が存在していないことを確認

```
# snapshot -q /testsnapshot
/testsnapshot has no snapshots.
```

実行

```
# time snapshot -o snapfrom=/testsnapshot -o size=2G
Snapshot for file system /testsnapshot created on /dev/fslv00

real    0m0.79s
user    0m0.16s
sys     0m0.07s#
```

-> 1秒程度で取得できている

確認

```
# snapshot -q /testsnapshot
Snapshots for /testsnapshot
Current  Location          512-blocks        Free Time
*        /dev/fslv00          4194304     4193536 Fri Jul 16 10:43:26 2021
#
```


[参考]
　・snapshotコマンド
　　https://www.ibm.com/docs/ja/aix/7.2?topic=s-snapshot-command

----



##### 検証２： snapshotのロールバック

続いて、snapshot が戻るかどうかを確認します。

/testsnapshot に存在するファイルを確認し、10個程度ファイルを削除してロールバックを行います。

```
# pwd
/testsnapshot/test
# ls
testfile1   testfile19  testfile28  testfile37  testfile46  testfile55  testfile64  testfile73  testfile82  testfile91
testfile10  testfile2   testfile29  testfile38  testfile47  testfile56  testfile65  testfile74  testfile83  testfile92
testfile11  testfile20  testfile3   testfile39  testfile48  testfile57  testfile66  testfile75  testfile84  testfile93
testfile12  testfile21  testfile30  testfile4   testfile49  testfile58  testfile67  testfile76  testfile85  testfile94
testfile13  testfile22  testfile31  testfile40  testfile5   testfile59  testfile68  testfile77  testfile86  testfile95
testfile14  testfile23  testfile32  testfile41  testfile50  testfile6   testfile69  testfile78  testfile87  testfile96
testfile15  testfile24  testfile33  testfile42  testfile51  testfile60  testfile7   testfile79  testfile88  testfile97
testfile16  testfile25  testfile34  testfile43  testfile52  testfile61  testfile70  testfile8   testfile89  testfile98
testfile17  testfile26  testfile35  testfile44  testfile53  testfile62  testfile71  testfile80  testfile9   testfile99
testfile18  testfile27  testfile36  testfile45  testfile54  testfile63  testfile72  testfile81  testfile90
```

・テストのためtestfile9* を削除

```
# rm testfile9*
# ls
testfile1   testfile18  testfile26  testfile34  testfile42  testfile50  testfile59  testfile67  testfile75  testfile83
testfile10  testfile19  testfile27  testfile35  testfile43  testfile51  testfile6   testfile68  testfile76  testfile84
testfile11  testfile2   testfile28  testfile36  testfile44  testfile52  testfile60  testfile69  testfile77  testfile85
testfile12  testfile20  testfile29  testfile37  testfile45  testfile53  testfile61  testfile7   testfile78  testfile86
testfile13  testfile21  testfile3   testfile38  testfile46  testfile54  testfile62  testfile70  testfile79  testfile87
testfile14  testfile22  testfile30  testfile39  testfile47  testfile55  testfile63  testfile71  testfile8   testfile88
testfile15  testfile23  testfile31  testfile4   testfile48  testfile56  testfile64  testfile72  testfile80  testfile89
testfile16  testfile24  testfile32  testfile40  testfile49  testfile57  testfile65  testfile73  testfile81
testfile17  testfile25  testfile33  testfile41  testfile5   testfile58  testfile66  testfile74  testfile82
```

ファイルシステムからアンマウントします。

```
# cd 
# mount | grep test
         /dev/testlv      /testsnapshot    jfs2   Jul 16 11:33 rw,log=INLINE
# umount /testsnapshot
# mount | grep test
#
```

・ロールバックを実行します

```
#  time rollback -v /testsnapshot /dev/fslv00
Restoring block 1
Restoring block 1000
Restoring block 2000
Restoring block 3000
Restoring block 4000
Restoring block 5000
Restoring block 6000
Restoring block 7000


〜　長いので省略　〜

Restoring block 278000
Restoring block 279000
Restoring block 280000
Restoring block 281000
Total blocks restored = 281648
rmlv: Logical volume fslv00 is removed.

Rollback complete

real    3m13.99s
user    0m0.51s
sys     0m4.33s
#
```
-> ロールバックに3分14秒程度かかりました。


```
# snapshot -q /testsnapshot
/testsnapshot has no snapshots.
```

-> ロールバックが完了したら、対象のスナップショットは削除されます。


・結果を確認します。

```
# mount /testsnapshot

# cd /testsnapshot
# cd test
# ls
testfile1   testfile19  testfile28  testfile37  testfile46  testfile55  testfile64  testfile73  testfile82  testfile91
testfile10  testfile2   testfile29  testfile38  testfile47  testfile56  testfile65  testfile74  testfile83  testfile92
testfile11  testfile20  testfile3   testfile39  testfile48  testfile57  testfile66  testfile75  testfile84  testfile93
testfile12  testfile21  testfile30  testfile4   testfile49  testfile58  testfile67  testfile76  testfile85  testfile94
testfile13  testfile22  testfile31  testfile40  testfile5   testfile59  testfile68  testfile77  testfile86  testfile95
testfile14  testfile23  testfile32  testfile41  testfile50  testfile6   testfile69  testfile78  testfile87  testfile96
testfile15  testfile24  testfile33  testfile42  testfile51  testfile60  testfile7   testfile79  testfile88  testfile97
testfile16  testfile25  testfile34  testfile43  testfile52  testfile61  testfile70  testfile8   testfile89  testfile98
testfile17  testfile26  testfile35  testfile44  testfile53  testfile62  testfile71  testfile80  testfile9   testfile99
testfile18  testfile27  testfile36  testfile45  testfile54  testfile63  testfile72  testfile81  testfile90
#
```

-> ロールバック前に削除した testfile9* のファイルもリストアされました！


[参考]
　・rollback コマンド
　　https://www.ibm.com/docs/ja/aix/7.2?topic=r-rollback-command




検証は以上です。