среда, 30 сентября 2009 г.

"У меня все ходы записаны!"

Функциональность ZFS history трудно переоценить.

Все административные действия, касающиеся ZFS-пулов, записываются в неотключаемый и неочищаемый журнал, располагающийся в метаданных.

История ведется начиная с создания пула и сохраняется в метаданных этого пула. Давайте посмотрим, как это выглядит:

root @ pegasus / # zpool history data
History for 'data':
2009-09-26.17:06:50 zpool create data mirror c2t0d0 c2t1d0
2009-09-26.17:07:13 zpool scrub data
2009-09-27.00:13:21 zfs create data/OraHome1
2009-09-27.00:13:23 zfs create data/OraHome2
2009-09-27.00:13:28 zfs create data/oradata
2009-09-27.00:13:42 zfs set recordsize=32k data/OraHome1
2009-09-27.00:13:43 zfs set recordsize=32k data/OraHome2
2009-09-27.00:16:23 zfs set atime=off data
2009-09-27.00:16:28 zfs set atime=off data/OraHome1
2009-09-27.00:16:29 zfs set atime=off data/OraHome2
2009-09-27.00:16:33 zfs set atime=off data/oradata
2009-09-27.00:18:09 zfs set compression=gzip-9 data/oradata
2009-09-27.14:58:15 zfs create data/oradata/flash_recovery_area
2009-09-27.14:58:20 zfs create data/oradata/plsql_libs
2009-09-27.14:58:44 zfs set recordsize=16k data/oradata/plsql_libs
2009-09-27.22:58:20 zpool import -f data
2009-09-27.22:59:01 zpool export data
2009-09-27.17:01:27 zpool import data
2009-09-27.17:01:35 zpool scrub data
2009-09-27.17:02:24 zpool clear data
2009-09-27.17:03:23 zfs destroy -r data/oradata
2009-09-27.17:06:09 zfs destroy -r data/oradata
2009-09-27.17:06:56 zfs create data/db
2009-09-27.17:07:13 zfs create data/db/oradata
2009-09-27.17:07:21 zfs create data/db/flash_recovery_area
2009-09-27.17:07:26 zfs create data/db/plsql_libs
2009-09-27.17:07:47 zfs set recordsize=16k data/db/plsql_libs
2009-09-27.17:08:48 zfs set mountpoint=/data/oradata data/db/oradata
2009-09-27.17:09:18 zfs set mountpoint=/data/oradata/flash_recovery_area data/db/flash_recovery_area
2009-09-27.17:09:32 zfs set mountpoint=/data/oradata/plsql_libs data/db/plsql_libs
2009-09-27.17:09:52 zfs set mountpoint=none data/db
2009-09-27.17:10:25 zpool clear data
2009-09-27.17:11:41 zpool scrub data
2009-09-27.17:23:00 zpool scrub -s data
2009-09-27.17:24:22 zpool detach data c2t0d0
2009-09-27.17:35:10 zpool attach data c2t1d0 c2t0d0
2009-09-27.17:52:15 zpool detach data c2t0d0
2009-09-27.18:49:20 zpool attach data c2t1d0 c2t0d0
2009-09-27.19:33:11 zfs create data/apex
2009-09-27.19:33:21 zfs set recordsize=16k data/apex
2009-09-27.19:37:52 zpool detach data c2t0d0
2009-09-27.21:30:43 zpool attach data c2t1d0 c2t0d0
2009-09-28.22:53:36 zpool scrub data
2009-09-28.23:25:05 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-28.23:26:21 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-28.23:45:06 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-28.23:46:05 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-28.23:47:45 zfs receive -dFv data/db/plsql_libs
2009-09-28.23:47:50 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-28.23:48:27 zfs destroy -r data/db/plsql_libs
2009-09-28.23:49:50 zfs receive -dFv data
2009-09-28.23:49:50 zfs destroy -r data@snapshot
2009-09-30.00:35:48 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.00:36:58 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:01:50 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:02:44 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:03:53 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:04:47 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:07:56 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:08:50 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:35:00 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:35:51 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:35:51 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:36:44 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:43:01 zfs snapshot -r data/db/plsql_libs@snapshot
2009-09-30.01:43:55 zfs destroy -r data/db/plsql_libs@snapshot
2009-09-30.01:44:11 zfs destroy data/db/plsql_libs
2009-09-30.01:45:49 zfs receive -dF data
2009-09-30.01:45:49 zfs destroy -r data@snapshot

Причем функциональность history позволяет практически выполнять аудит действий в пределах пула:

root @ pegasus / # zpool history -l data |more
History for 'data':
2009-09-26.17:06:50 zpool create data mirror c2t0d0 c2t1d0 [user root on pegasus
:global]
2009-09-26.17:07:13 zpool scrub data [user root on pegasus:global]
2009-09-27.00:13:21 zfs create data/OraHome1 [user root on pegasus:global]
2009-09-27.00:13:23 zfs create data/OraHome2 [user root on pegasus:global]
2009-09-27.00:13:28 zfs create data/oradata [user root on pegasus:global]
2009-09-27.00:13:42 zfs set recordsize=32k data/OraHome1 [user root on pegasus:g
lobal]
2009-09-27.00:13:43 zfs set recordsize=32k data/OraHome2 [user root on pegasus:g
lobal]
2009-09-27.00:16:23 zfs set atime=off data [user root on pegasus:global]
.....

В истории мы видим пользователей и зону, что, например, при делегированном администрировании в зонах либо использовании RBAC достаточно актуально.

Так что, у нас действительно все ходы записаны. :)