ONTAPでsnaplockおよび、その派生である tamperproof snapshot (期限切れになるまで削除できないsnapshot)を使用する場合、 compliance clockを使用する
compliance clockの利用を開始する場合の手順は「ONTAP Compliance Clockを初期化する」に記載されているが、運用上の注意点が書いてないような気がする・・・
NetApp TR-4526:NetApp SnapLockを使用したコンプライアンス準拠のWORMストレージ
Compialce Clockは1回設定すると、システム全体を初期化するまで時計をずらすことが出来ない。
設定時点から1秒ずつカウントアップしていくが、例えば、停電などでシステムを停止した場合はカウントが止まるので、実際の時刻とずれが発生する。
実時間とのずれが発生しても、「システム全体を初期化するまで時計をずらすことが出来ない」という仕様のため、実時間(もしくはシステム時間)とCompliance Clockのズレは広がっていくだけとなる。
これは、システム時間を意図的にずらすことで、設定してあった期限が来た、と誤認させるということをできなくするためである。
このため、長期で運用していたりすると、システム時間とCompliance Clockとが1週間異なる、といった事態が発生する。
仮想環境の場合は、「snaplock compliance-clock ntp modify -is-sync-enabled true」を設定すると、運用中であっても時々NTPと同期を取ってくれるらしいのだが、検証した環境では2日以上ずれたままとなっている(→ONTAPのtamperproof snapshotを設定してみる)
このように、実時間/システム時間とCompliance Clockにずれが生じるため、tamperproof snapshots などで指定するSnapLockのRetention time(Set the ONTAP SnapLock retention time)は、有効期限を「1時間後」「2日後」といった相対的な値で指定することになっている模様
実時間とCompliance Clockがずれている例
実時間/システム時間とCompliance Clockがずれている例を見てみる
netapp::> date
Node Date Time zone
--------- ------------------------ -------------------------
netapp-01 Tue Mar 10 11:09:21 2026 Japan
netapp::> snaplock compliance-clock show
Node ComplianceClock Time
------------------- -----------------------------------
netapp-01 Sat Mar 07 22:16:09 JST 2026 +09:00
netapp::>
この状況で作成されたsnapshotに設定された 実時間ベースのcreate-time と Compliance Clockベースのsnaplock-expiry-time
netapp::> volume snapshot show -vserver svm0 -volume snaptest -fields snaplock-expiry-time,snaplock-snapshot-expired,create-time
vserver volume snapshot create-time snaplock-expiry-time snaplock-snapshot-expired
------- -------- ---------------------- ------------------------ ------------------------ -------------------------
svm0 snaptest weekly.2026-03-08_2021 Sun Mar 08 20:21:24 2026 3/7/2026 19:12:12 +09:00 true
svm0 snaptest hourly.2026-03-09_0005 Mon Mar 09 00:05:00 2026 3/7/2026 22:55:47 +09:00 false
svm0 snaptest daily.2026-03-09_0010 Mon Mar 09 00:10:00 2026 3/7/2026 23:00:48 +09:00 false
svm0 snaptest hourly.2026-03-09_0105 Mon Mar 09 01:05:00 2026 3/7/2026 23:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_0205 Mon Mar 09 02:05:00 2026 3/8/2026 00:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_0305 Mon Mar 09 03:05:00 2026 3/8/2026 01:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_0405 Mon Mar 09 04:05:00 2026 3/8/2026 02:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_0505 Mon Mar 09 05:05:00 2026 3/8/2026 03:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_0605 Mon Mar 09 06:05:00 2026 3/8/2026 04:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_0705 Mon Mar 09 07:05:00 2026 3/8/2026 05:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_0805 Mon Mar 09 08:05:00 2026 3/8/2026 06:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_0905 Mon Mar 09 09:05:00 2026 3/8/2026 07:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1005 Mon Mar 09 10:05:00 2026 3/8/2026 08:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_1105 Mon Mar 09 11:05:00 2026 3/8/2026 09:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_1205 Mon Mar 09 12:05:00 2026 3/8/2026 10:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1305 Mon Mar 09 13:05:00 2026 3/8/2026 11:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1405 Mon Mar 09 14:05:00 2026 3/8/2026 12:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1505 Mon Mar 09 15:05:00 2026 3/8/2026 13:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_1605 Mon Mar 09 16:05:00 2026 3/8/2026 14:55:48 +09:00 false
svm0 snaptest hourly.2026-03-09_1705 Mon Mar 09 17:05:00 2026 3/8/2026 15:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1805 Mon Mar 09 18:05:00 2026 3/8/2026 16:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_1905 Mon Mar 09 19:05:00 2026 3/8/2026 17:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_2005 Mon Mar 09 20:05:00 2026 3/8/2026 18:55:47 +09:00 false
svm0 snaptest hourly.2026-03-09_2105 Mon Mar 09 21:05:00 2026 3/8/2026 19:55:48 +09:00 false
svm0 snaptest hourly.2026-03-10_0917 Tue Mar 10 09:17:36 2026 3/8/2026 20:24:23 +09:00 false
svm0 snaptest daily.2026-03-10_0917 Tue Mar 10 09:17:36 2026 3/8/2026 20:24:23 +09:00 false
svm0 snaptest hourly.2026-03-10_1005 Tue Mar 10 10:05:00 2026 3/8/2026 21:11:47 +09:00 false
svm0 snaptest hourly.2026-03-10_1105 Tue Mar 10 11:05:00 2026 3/8/2026 22:11:47 +09:00 false
28 entries were displayed.
netapp::>
上記は、実時間 2026/03/09 21時半頃に停止して、2026/03/10 9時頃に起動している
このため、実時間 2026/03/09 21:05 時点ではCompliance clockは 25時間10分遅れだったものが、実時間 2026/03/10 09:17時点では 36時間53分遅れに拡大している。
さて、各snapshotに設定されたsnaplock-expiry-time は snapshot policyで指定した日数で設定されているので各ボリュームに設定されている値を確認する
netapp::> volume show -vserver svm0 -volume snaptest -fields snapshot-policy
vserver volume snapshot-policy
------- -------- ---------------
svm0 snaptest snaptest
netapp::> volume snapshot policy show -policy snaptest
Vserver: netapp
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
snaptest 3 true -
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
hourly 6 hourly - 1 days
daily 2 daily daily 1 days
weekly 1 weekly weekly 1 days
netapp::>
ボリュームのsnapshot policyはsnaptest で設定されいたので、その設定を確認すると、上記の様に「Retention Period」は全て「1days」となっているので、1日後に有効期限が切れる、という設定となっていることがわかる。