我经常需要对AIX系统进行更改,这将需要备份某些文件或文件系统。 进行文件副本或备份被认为是一种好习惯。 例如,如果需要编辑一系列配置文件,则在进行任何更改之前,我将备份这些文件。 通常,我会使用一种熟悉的备份方法,例如mksysb,savevg,tar,backup甚至是cp命令。 对于较大的备份,我可以使用许可产品,例如IBM Tivoli Storage Manager。 这些几乎在所有情况下都可以正常工作。 这些方法的潜在缺点是,执行这些方法可能需要花费很长时间,甚至还需要更长的时间才能恢复,尤其是从磁带介质中恢复时。
幸运的是,一个名为JFS2快照的功能能够帮助您进行快速而轻松的备份。 它并不排除对磁带(或异地介质)执行常规备份的需要,但是在某些情况下是合适的。 使用快照时,还原也更快,更容易。 我发现使用这种新的快照技术使我可以更高效地执行某些任务。 例如,使用快照,当我需要修改许多配置文件或执行应用程序升级时,可以加快备份速度,并可以加快恢复时间。
在以下示例中,我将演示在升级活动期间如何使用JFS2快照备份和恢复文件系统。
JFS2快照概述
提供了快照功能,以便管理员可以创建联机(或脱机)JFS2文件系统的一致的集成快照。 创建了源文件系统的时间点副本。 快照操作执行Swift,所需磁盘空间很小。 可以拍摄多个快照,如果您需要在每个阶段对具有相应备份的系统执行多个更改,这将非常方便。
快照保留与原始文件系统相同的权限。 创建映像后,可以使用它将文件或整个文件系统还原到已知时间点。 或者,您可以挂接快照文件系统并将其备份到磁带上(例如通过Tivoli Storage Manager)。 这可以帮助减少备份时间要求。
当原始文件系统仍在修改时,快照保持稳定。 您可以在实时文件系统上执行快照操作,因为在拍摄图像时它将自动冻结I / O操作。 您可能需要短暂地使应用程序停止快照过程的时间(非常短)。 冻结I / O以在映像中提供更高级别的文件系统一致性。 这与在DS8000上使用类似的复制服务工具(例如IBM的Flashcopy)没有什么不同。
快照将其内容映射到源文件系统的内容。 如果未修改源,则快照不会在其自己的物理磁盘空间中存储任何文件,并且其内容与原始文件系统相同。 根据IBM文档,快照通常需要文件系统空间的2-6%。 高度活动的文件系统可能需要大约15%的空间。 如果原始文件系统中的块发生更改,则使用此空间。 然后将更改的数据复制到快照。
在原始文件系统中发生写或删除操作时,受影响的块将复制到快照中。 如果修改了源,则将块的原始内容复制到快照文件系统的磁盘空间区域。 修改快照后,它要么从原始文件系统中检索数据(如果未修改),要么从其自己的磁盘存储中检索数据(如果原始文件被更改)。
读取快照将需要查找以确定应该从快照还是从原始文件系统读取所需的块。 例如,仅当自创建快照以来源块已更改时,才会从快照进行读取。 如果未更改,则将从原始文件系统进行读取。
JFS2快照有两种类型。 第一个是外部快照 ,它为快照映像使用单独的逻辑卷。 第二种类型分配原始文件系统之外的空间,这称为内部快照 。
可以将外部快照单独安装在其自己的安装点上。 文件系统一次只能使用一种快照方法。 也就是说,当外部文件存在时,您不能对文件系统进行外部快照,然后对同一文件系统进行内部快照(反之亦然)。
同样重要的是要注意,除非在文件系统创建时启用了文件系统以支持内部快照,否则您将无法使用内部快照。 因此,如果要在现有文件系统上使用快照,而没有为内部快照启用快照,则需要使用快照选项重新创建文件系统或使用外部快照。
使用JFS2快照的主要优点之一是我们不需要创建所有数据的完整副本。 我们也不需要恢复数据的全部内容。 从而减少开销并节省时间。
使用JFS2快照。
在以下示例中,我将演示外部和内部 JFS2快照的用法。
我需要在一个AIX系统上执行lpar2rrd软件的升级。 显然,在应用更新之前,我想备份相关文件系统,以防万一出问题。 我还想要一种方法来测试该软件的新版本,然后在遇到任何问题时轻松地还原到以前的版本。
因此,在开始之前,我拍摄了lpar2rrd文件系统(/ lpar2rrd)的快照。 当然,我将需要使用外部快照,因为我没有使用isapshot = yes选项创建此文件系统。 为了避免升级期间可能出现的数据一致性问题,我关闭了httpd守护程序并停止了lpar2rrd脚本的运行。
此示例中的文件系统非常小,只有256MB。 它是常规卷组中的常规JFS2文件系统。 还支持TB级文件系统的快照!
# df -m /lpar2rrd
Filesystem MB blocks Free %Used Iused %Iused Mounted on
/dev/lpar2rrdlv 256.00 255.52 1% 10 1% /lpar2rrd
# mount | grep lpar2
/dev/lpar2rrdlv /lpar2rrd jfs2 Feb 10 17:44 rw,log=/dev/log01
# grep -p lpar2rrd /etc/filesystems
/lpar2rrd:
dev = /dev/lpar2rrdl
vfs = jfs2
log = /dev/log01
mount = true
account = false
/ lpar2rrd文件系统包含lpar2rrd代码以及与每个受管系统相关的RRD数据文件。 它还包含我将要安装的新发行版的tar压缩文件:
# pwd
/lpar2rrd/data
# ls -ltr
total 184
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-3
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-2
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A98_p595-1
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN1001C99_p570-1
-rwxr-xr-x 1 lpar2rrd www 90151 Feb 10 17:56 lpar2rrd-dist-2.51.tar.z
创建一个外部快照
我执行了快照命令以创建文件系统的外部快照。 我为快照逻辑卷(LV)指定了128MB的大小。 这是原始(源)逻辑卷的一半大小。 创建了一个包含外部快照的新LV(fslv08)。
# snapshot -o snapfrom=/lpar2rrd -o size=128M
Snapshot for file system /lpar2rrd created on /dev/fslv08
# lsvg -l datavg | tail -2
lpar2rrdlv jfs2 2 2 1 open/syncd /lpar2rrd
fslv08 jfs2 1 1 1 open/syncd N/A
为了验证新创建的快照的状态,我运行了带有–q标志的快照命令。 这为我提供了诸如图像的日期/时间,图像的位置(LV名称),LV的大小以及图像中的可用空间之类的信息。 *
标识当前快照。
# snapshot -q /lpar2rrd
Snapshots for /lpar2rrd
Current Location 512-blocks Free Time
* /dev/fslv08 262144 261376 Wed Feb 10 18:03:15 CST
2010
如果要管理多个大快照,那么最好监视快照的使用情况,以确定它们是否正在增长以及它们是否需要更多磁盘空间。 如果快照空间不足,则所有快照都将失效并且变得不可用。
检查外部快照中可用空间量的另一种方法是挂载映像并使用df命令。 如果外部快照需要更多空间,则可以通过使用带有snap命令的size选项来动态增加快照逻辑卷的大小 。 您无法动态减小快照LV的大小。
# snapshot -o size=+1 /dev/fslv08
Snapshot /dev/fslv08 size is now 524288 512-blocks.
# snapshot -o size=-1 /dev/fslv08
snapshot: 0507-562 Cannot reduce the size of a snapshot.
为了确认快照映像是完整的,并且包含整个文件系统的副本,我安装了外部快照以验证映像。 我为快照文件系统( /mnt/snapfs
)创建了一个单独的挂载点,然后将其作为快照挂载(带有-o快照标志)。
# mkdir /mnt/snapfs
# mount -v jfs2 -o snapshot /dev/fslv08 /mnt/snapfs
快照文件系统已安装为只读快照。
# mount | grep fslv08
/dev/fslv08 /mnt/snapfs jfs2 Feb 10 18:09 ro,snapshot
df命令确认已安装快照文件系统。 使用ls命令,我能够验证它确实包含整个源文件系统的副本。
# df -m /mnt/snapfs
Filesystem MB blocks Free %Used Iused %Iused Mounted on
/dev/fslv08 128.00 127.62 1% - - /mnt/snapfs
# ls –ltr /mnt/snapsfs/data
total 184
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-3
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-2
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A98_p595-1
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN1001C99_p570-1
-rwxr-xr-x 1 lpar2rrd www 90151 Feb 10 17:56 lpar2rrd-dist-2.51.tar.z
由于文件系统以只读方式安装,因此我无法创建新文件或修改现有文件。
# cd /mnt/snapfs/data
# touch 1
touch: 0652-046 Cannot create 1.
# rm lpar2rrd-dist-2.51.tar.z
rm: Remove lpar2rrd-dist-2.51.tar.z? y
rm: 0653-609 Cannot remove lpar2rrd-dist-2.51.tar.z.
The file system has read permission only.
但是,我可以将数据复制到文件系统之外。 这是从快照恢复单个文件的简单方法,而不是还原整个文件系统映像。 如果希望将单个文件还原到其原始状态,则可以安装快照,然后手动将文件复制回来。
# pwd
/mnt/snapfs/data
# cp -p lpar2rrd-dist-2.51.tar.z /tmp
# ls -ltr /tmp/lpar2rrd-dist-2.51.tar.z
-rwxr-xr-x 1 lpar2rrd www 90151 Feb 10 17:56 /tmp/lpar2rrd-dist-2.51.tar.z
在这一点上,我可以执行lpar2rrd升级,知道如果遇到问题,可以从快照中恢复。
如果不再需要快照,则可以稍后使用以下快照命令将其删除:
# cd /
# umount /mnt/snapfs
# snapshot -d /dev/fslv08
如果要从快照恢复整个文件系统,则可以执行rollback命令。 这会将JFS2文件系统还原为时间点快照。 执行回滚之前,必须先卸载原始文件系统。 操作完成后,快照将被删除(包括关联的逻辑卷)。
在此示例中,您可以看到,作为lpar2rrd升级的一部分,每个原始数据目录上的时间戳都已更改。 此外,tar压缩文件已被删除。
# ls –ltr /lpar2rrd/data
total 0
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 19:02 SN8379A99_p595-3
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 19:02 SN8379A99_p595-2
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 19:02 SN8379A98_p595-1
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 19:02 SN1001C99_p570-1
要恢复到以前的快照,并最终恢复到旧版本的lpar2rrd,我将使用rollback命令。 除了源文件系统(/ lpar2rrd)之外,我还必须确保已卸载外部快照文件系统(/ mnt / snapfs)。 要将/ lpar2rrd文件系统回滚到逻辑卷/ dev / fslv08上的外部快照,并显示详细输出(-v),请输入:
# umount /lpar2rrd
/dev/lpar2rrdlv has mounted snapshots which must be unmounted first:
/mnt/snapfs
umount: 0506-347 Cannot find anything to unmount.
# umount /mnt/snapfs
# umount /lpar2rrd
# rollback -v /lpar2rrd /dev/fslv08
Restoring block 1
Total blocks restored = 32
rmlv: Logical volume fslv08 is removed.
Rollback complete
现在,我可以再次挂载/ lpar2rrd文件系统。 数据文件已还原到其原始状态(日期/时间戳与拍摄图像时相同)。 此外,所有权,组和权限已保留。
# mount /lpar2rrd
# ls –ltr /lpar2rrd/data
total 184
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-3
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A99_p595-2
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN8379A98_p595-1
drwxr-xr-x 2 lpar2rrd www 256 Feb 10 17:46 SN1001C99_p570-1
-rwxr-xr-x 1 lpar2rrd www 90151 Feb 10 17:56 lpar2rrd-dist-2.51.tar.z
此时,我可以使用先前的版本重新启动lpar2rrd。
创建内部快照
为了演示内部JFS2快照的用法,我将使用isapshot = yes选项创建一个新文件系统。
# mklv -t jfs2 -y cglv datavg 1
# crfs -vjfs2 -d cglv -m /cg -A yes -a isnapshot=yes
File system created successfully.
130864 kilobytes total disk space.
New File System size is 262144
# mount /cg
# lsfs -q /cg
Name Nodename Mount Pt VFS Size Options Auto Accounting
/dev/cglv -- /cg jfs2 262144 -- yes no
(lv size: 262144, fs size: 262144, block size: 4096, sparse files: yes, inline log: no,
inline log size: 0, EAformat: v2, Quota: no, DMAPI: no, VIX: yes, EFS: no, ISNAPSHOT:
yes)
我还将为此测试创建一个100MB的虚拟数据文件。
# cd /cg
# lmktemp datafile1 100M
datafile1
# ls -ltr
total 204808
drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found
-rw-r--r-- 1 root system 104857600 Feb 10 19:53 datafile1
# df -m .
Filesystem MB blocks Free %Used Iused %Iused Mounted on
/dev/cglv 128.00 27.64 79% 6 1% /cg
接下来,我将创建/ cg文件系统的内部快照。 该快照名为cgsnap1:
# snapshot -o snapfrom=/cg -n cgsnap1
Snapshot for file system /cg created on cgsnap1
要查询/ cg文件系统的创建日期和时间以及快照名称,我执行以下命令:
# snapshot -q /cg
Snapshots for /cg
Current Name Time
* cgsnap1Wed Feb 10 19:55:18 CST 2010
在原始文件系统中创建一个特殊目录(称为.snapshot)。 即使快照目录是只读的,它也包含指向快照映像位置的链接 (如下所示):
# cd /cg/.snapshot/cgsnap1
# touch 1
touch: 0652-046 Cannot create 1.
# rm datafile1
rm: Remove datafile1? y
rm: 0653-609 Cannot remove datafile1.
The file system has read permission only.
隐藏.snapshot目录是为了避免意外或意外损坏/删除数据。 但是,我可以根据需要查看快照目录中的数据。 在此目录中,我找到另一个名为cgsnap1的目录,即快照名称。
# cd /cg/.snapshot
# pwd
/cg/.snapshot
# ls -ltr
total 0
drwxr-xr-x 3 root system 256 Feb 10 19:55 cgsnap1
我可以cd到该目录并查看快照映像中的文件。
# cd cgsnap1
# ls -ltr
total 204800
drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found
-rw-r--r-- 1 root system 104857600 Feb 10 19:53 datafile1
如果要从内部快照恢复单个文件,我要做的就是将目录更改为适当的快照位置,然后使用cp命令手动复制文件。
# cd /cg/.snapshot/cgsnap1
# ls -ltr
total 204800
drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found
-rw-r--r-- 1 root system 104857600 Feb 10 19:53 datafile1
# cp -p datafile1 /tmp
# ls -ltr /tmp/datafile1
-rw-r--r-- 1 root system 104857600 Feb 10 19:53 /tmp/datafile1
与外部快照不同,我不需要挂载快照文件系统即可访问映像中的文件。 当然,与任何文件复制操作一样,我总是要小心检查文件的所有权,组和权限是否保留(在适当的情况下),因此为什么在cp命令中使用–p标志。 使用此方法恢复文件之前,请务必检查这些内容。
如果要从内部快照恢复整个文件系统怎么办? 例如,如果您收到用户打来的电话,例如“呜呼,我只是将数据文件清零”,该怎么办? 现在我该怎么做?”。
# >datafile1
# ls -ltr
total 0
drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found
-rw-r--r-- 1 root system 0 Feb 10 21:22
datafile1
好吧,幸运的是,您创建了文件系统的内部快照。 要将文件系统还原到所需的时间点,可以再次使用rollback命令。 要使用名为cgsnap1的内部快照回滚/ cg文件系统,请执行以下命令(注意:必须先卸载原始文件系统):
# umount /cg
# rollback –v -n cgsnap1 /cg
File system /cg being rolled back to snapshot cgsnap1
Snapshots remaining to rollback: 1
Rebuilding block map state using fsck.
The current volume is: /dev/cglv
Primary superblock is valid.
*** Phase 1 - Initial inode scan
*** Phase 2 - Process remaining directories
*** Phase 3 - Process remaining files
*** Phase 4 - Check and repair inode allocation map
*** Phase 5 - Check and repair block allocation map
Block allocation map is corrupt (FIXED)
Superblock marked dirty because repairs are about to be written.
File system is clean.
Superblock is marked dirty (FIXED)
All observed inconsistencies have been repaired.
Rollback complete
现在,数据文件已还原到以前的状态!
# mount /cg
# cd /cg
# ls -ltr
total 204800
drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found
-rw-r--r-- 1 root system 104857600 Feb 10 19:53 datafile1
快照已从/ cg文件系统中删除。
# snapshot -q /cg
/cg has no snapshots.
当然,如果不再需要内部快照,则可以将其删除。
# snapshot -d -n cgsnap1 /cg
使用内部快照时的一些注意事项
- 使用内部快照时,创建映像的操作实际上会占用现有/原始文件系统中的磁盘空间。 要监视内部快照占用了多少空间,您需要使用df之类的命令来监视原始文件系统的大小。 如果原始文件系统空间不足,则可能需要删除所有不必要的快照或文件。 您可能想要保留一个文件系统的多个快照,但是请记住,这将占用原始文件系统的空间,并且需要对其进行管理。
- 当logredo命令针对具有内部快照的JFS2文件系统运行时,将保留内部快照。
- 如果fsck命令必须修改JFS2文件系统以对其进行修复,则将删除内部快照。
- 如果内部快照空间不足,或者对内部快照的写入失败,则该源文件系统的所有内部快照都标记为无效。 对内部快照的进一步访问将失败。 这些失败将条目写入AIX错误日志。
# snapshot -q /cg Snapshots for /cg Current Name Time INVALID cgsnap2 Sun Feb 14 18:48:27 CST 2010 INVALID cgsnap1 Sun Feb 14 18:50:26 CST 2010 INVALID cgsnap3 Sun Feb 14 18:51:10 CST 2010 # errpt IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION 96977244 0214185110 P O SYSJ2 Unable to allocate in JFS2 snapshot F7FA22C9 0214185110 I O SYSJ2 UNABLE TO ALLOCATE SPACE IN FILE SYSTEM # errpt -aNSYSJ2 --------------------------------------------------------------------------- LABEL: J2_SNAP_FULL IDENTIFIER: 96977244 Date/Time: Sun Feb 14 18:51:18 CST 2010 Sequence Number: 124 Machine Id: 00CED82E7C00 Node Id: gibaix Class: O Type: PERM WPAR: Global Resource Name: SYSJ2 Description Unable to allocate in JFS2 snapshot Probable Causes INSUFFICIENT STORAGE User Causes INSUFFICIENT STORAGE MEDIA SPACE Recommended Actions The snapshots for the JFS2 file system are now invalid. Increase size of snapshot storage object and create new snapshot. Detail Data Snapshot Major/Minor device number 000A 0016 Snapshot generation number 0000 0004 FILE SYSTEM DEVICE AND MOUNT POINT /dev/cglv, /cg
- 内部快照不可单独安装。
- 内部快照与AIX 6.1之前的AIX版本不兼容。 为支持内部快照而创建的JFS2文件系统无法在早期版本的AIX上进行修改。
- 带有内部快照的JFS2文件系统无法进行碎片整理。
- 以下示例将使您了解内部快照如何占用文件系统空间。
首先,我将创建一个100M文件。
# lmktemp datafile1 100M datafile1
datafile1
使用100M的文件系统空间。 源文件系统(/cg
)的大小为128MB,因此文件系统中现在大约有27MB的可用空间。# df -m . Filesystem MB blocks Free %Used Iused %Iused Mounted on /dev/cglv 128.00 27.61 79% 6 1% /cg
现在,我将创建文件系统的内部快照。
# snapshot -o snapfrom=/cg -n cgsnap1 Snapshot for file system /cg created on cgsnap1
请注意,几乎没有磁盘空间用于创建快照(即,“
Free
”下的值仅略有减少)。# df -m . Filesystem MB blocks Free %Used Iused %Iused Mounted on /dev/cglv 128.00 27.48 79% 7 1% /cg
现在,我将数据文件(datafile1)归零。 通常,这将释放文件系统中的空间,但是由于内部快照的原因,文件系统中的可用空间量几乎没有变化。 这是因为源中所有已修改的块都已复制到内部快照中的磁盘上。 现在,不再有到原始数据的映射,而是有一些带有数据的新块,从而占用了文件系统中的磁盘空间。
# >datafile1 # ls -ltr total 0 drwxr-xr-x 2 root system 256 Feb 10 19:50 lost+found -rw-r--r-- 1 root system 0 Feb 11 18:37 datafile1 # df -m . Filesystem MB blocks Free %Used Iused %Iused Mounted on /dev/cglv 128.00 27.36 79% 7 1% /cg
如果删除内部快照,文件系统中现在将有可用空间。
# snapshot -d -n cgsnap1 /cg # df -m . Filesystem MB blocks Free %Used Iused %Iused Mounted on /dev/cglv 128.00 127.61 1% 6 1% /cg
摘要
JFS2快照是可以与企业中其他备份工具一起部署的另一个实用程序。
不用说,快照不能代替常规的备份/还原实用程序,例如mksysb , savevg , Tivoli Storage Manager等。它也不能为您保护免受硬件或磁盘驱动器丢失数据的情况故障,数据损坏或其他潜在的物理灾难。 您仍然需要针对此类事件制定可靠的备份,还原和灾难恢复计划。
我的例子很简单明了。 环境也不复杂。 如果您打算在环境中使用“企业级”应用程序使用这些过程,则建议您在生产环境中实施这些过程之前,先对其进行彻底的测试。 例如,如果您需要在大型SAP和Oracle系统上使用快照,则需要进行广泛的测试,并可能需要与应用程序供应商进行协商,以验证并确认对此方法的支持。
我在这里展示的只是使用JFS2快照技术的一个基本示例。 还有许多其他潜在用途,例如backsnsap实用程序。 这将创建一个外部快照,然后将该快照备份到备份设备(例如磁带)。 与Tivoli Storage Manager也有一些集成。 您可以在“参考资料”部分提供的链接中找到有关这些以及其他JFS2快照用途的更多信息。
翻译自: https://www.ibm.com/developerworks/aix/library/au-jfs2_snapshot.html