Solaris系统多用户模式下系统备份和多分区写入磁带
生产系统不能中断,ufsdump又需要单用户模式才能运行,所以fssnap就成了在线备份的首选方案。这次需要备份两个服务器上的四个分区,同时又想节约磁带,自然有了“把多个分区塞进一盘磁带”的想法。目标很明确:在多用户模式下,不中断应用,把APP和Oracle的系统分区完整备份下来,并且全部写入同一盘
生产系统不能中断,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命令简介
快照是Solaris提供的一种在线备份方法,可以对已挂载或多用户模式的文件系统做备份。用fssnap命令可以创建、查询或删除UFS文件系统的临时快照。命令格式如下:
/usr/sbin/fssnap -F FSType -V -o special_option mount-point | special
常用选项说明:
- -d:删除与文件系统相关的快照。如果创建快照时带上了-o选项,删除时会连同备份文件一起清掉,否则只能手动删除。
- -F:指定文件系统类型。
- -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:后退两段(实际是后退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。


































