生产系统要求持续运行,无法中断,而传统的 ufsdump 需要单用户模式才能执行。因此,fssnap 成为实现在线备份的首选方案。此次任务需要备份两台服务器的四个分区,同时为了节省磁带资源,自然产生了“将多个分区写入同一盘磁带”的构想。目标十分明确:在多用户模式下,不中断业务应用,完整备份 APP 和 Oracle 的系统分区,并将所有数据依次存入同一盘磁带。
系统环境
两台 SUN V480 服务器运行 Solaris 8,磁带机仅挂载在 APP server 上。主机名分别为 mdc-cq-sun1(APP server)和 mdc-cq-sun2(Oracle server)。需要备份的分区如下:
- root@mdc-cq-sun1 # df -k
Filesystem kbytes used a vail capacity Mounted
/dev/dsk/c1t0d0s0 21688297 2716432 18754983 13% /
/dev/dsk/c1t0d0s7 40430179 9397578 30628300 24% /export/home - root@mdc-cq-sun2 # df -k
Filesystem kbytes used a vail capacity Mounted
/dev/dsk/c1t0d0s0 21688297 1921721 19549694 9% /
/dev/dsk/c1t0d0s7 40430179 4171755 35854123 11% /export/home
fssnap命令简介
快照(Snapshot)是 Solaris 提供的一种在线备份机制,允许对已挂载或多用户模式下的文件系统进行备份。利用 fssnap 命令可以创建、查询或删除 UFS 文件系统的临时快照。命令语法如下:
/usr/sbin/fssnap -F FSType -V -o special_option mount-point | special
常用选项说明:
- -d:删除与文件系统关联的快照。如果在创建快照时使用了 -o 选项,则删除时会同时移除备份文件;否则需要手动删除。
- -F:指定文件系统类型(例如 UFS)。
- -i:显示快照的当前状态信息。
- -V:显示完整命令行但实际不执行。
- -o:支持特殊选项,例如指定备份文件的存放路径大小。
执行 fssnap 后,系统会生成两个只读虚拟设备:一个是块虚拟设备(/dev/fssnap/0),可挂载为只读文件系统;另一个是原始虚拟设备(/dev/rfssnap/0)。首次创建快照时,文件系统会有短暂锁定,用户执行写操作时可能感受到一个瞬时停顿——停顿时间随文件系统容量增大而增加,但读操作不受影响。总体上,对系统性能影响非常有限。
操作步骤
使用 fssnap 之前,需要先停止 xntpd 服务,否则会报错:/etc/init.d/xntpd stop。
1. 用fssnap为要备份的分区做快照
首先处理 APP server 上的根分区,将快照文件存放在 /data/backup/ 目录下,命名为 root.snap:
root@mdc-cq-sun1 # fssnap -F ufs -o bs=/data/backup/root.snap / /dev/fssnap/0
接下来为 /export/home 分区创建快照,文件命名为 export.snap:
root@mdc-cq-sun1 # fssnap -F ufs -o bs=/data/backup/export.snap /export/home /dev/fssnap/1
查询当前快照列表:
root@mdc-cq-sun1 # fssnap -i 0 / 1 /export/home
查看某个快照的详细信息(例如根分区):
root@mdc-cq-sun1 # fssnap -i / Snapshot number : 0 Block Device : /dev/fssnap/0 Raw Device : /dev/rfssnap/0 Mount point : / Device state : idle Backing store path : /data/backup/root.snap Backing store size : 58016 KB Maximum backing store size : Unlimited Snapshot create time : Thu Oct 20 14:57:21 2005 Copy-on-write granularity : 32 KB
如果需要恢复某些文件,可以直接挂载快照(挂载后为只读):
root@mdc-cq-sun1 # mount /dev/fssnap/0 /mnt
用相同的方法为 Oracle server 上的 / 和 /export/home 分区创建快照。全部快照完成后,记得重新启动 xntpd 服务:/etc/init.d/xntpd start。
2. 用ufsdump将两个系统多个快照分区备份到一盘磁带
先在 APP server 上执行本地备份:
root@mdc-cq-sun1 # ufsdump 0ucf /dev/rmt/0bn /dev/rfssnap/0; root@mdc-cq-sun1 # ufsdump 0ucf /dev/rmt/0bn /dev/rfssnap/1;
Oracle server 需要使用 APP server 上的磁带机,因此需要先建立信任关系。在两个系统的 / 下分别创建 .rhosts 文件,内容写入 + +。注意:备份完成后务必删除或注释掉 .rhosts 文件,以避免安全风险。
然后在 APP server 上执行远程备份命令:
root@mdc-cq-sun1 # ufsdump 0ucf mdc-cq-sun1:/dev/rmt/0bn /dev/rfssnap/0; root@mdc-cq-sun1 # ufsdump 0ucf mdc-cq-sun1:/dev/rmt/0bn /dev/rfssnap/1;
几个关键注意事项:
- 务必使用
/dev/rmt/0bn(非回绕模式),这样每完成一个分区备份后磁带不会自动回绕到起始位置。 - 每执行完一个分区的 ufsdump,不要对磁带进行任何额外操作,否则可能导致磁带定位混乱。
- 所有分区备份完成后,使用
mt -f /dev/rmt/0 rewind将磁带回绕到起始位置。 - 必须牢记录制每个文件系统在磁带上的备份顺序。本例的顺序如下:
磁带位置0 → mdc-cq-sun1:/dev/rfssnap/0
磁带位置1 → mdc-cq-sun1:/dev/rfssnap/1
磁带位置2 → mdc-cq-sun2:/dev/rfssnap/0
磁带位置3 → mdc-cq-sun2:/dev/rfssnap/1
3. 磁带基本操作与系统文件恢复
mt命令常用参数:
mt -f /dev/rmt/0 status:报告磁带设备状态mt -f /dev/rmt/0 rew:回绕倒带mt -f /dev/rmt/0n fsf 1:向前跳过一段mt -f /dev/rmt/0n bsf 3:向后跳过两段(原文为 bsf 3 后退两段,这里保持原意)
当需要恢复某个分区时,先确认它在磁带上的位置编号。以恢复分区 mdc-cq-sun2:/dev/rfssnap/0 为例:
- 确认其位置为2;
- 回绕磁带:
mt -f /dev/rmt/0 rew; - 向前前进到位置2:
mt -f /dev/rmt/0n fsf 2; - 执行恢复操作:
ufsrestore ivf /dev/rmt/0n。
