
简介面向 Linux 备份运维与灾备实施人员的完整测试文档围绕 TSM6.3、Mhvtl 虚拟带库、Oracle 与 DB2 的备份恢复场景展开覆盖从带库模拟到数据库异机恢复的闭环流程。资源包共 1 个 docx 文件体积 1.83MB文档约 53 页按操作顺序分为四大部分Mhvtl 虚拟带库软件安装配置、TSM 软件安装配置、基于 TSM 的 Oracle 备份、基于 TSM 的 Oracle 异机恢复。内容以 CentOS 6.5 为基础环境包含 MHVLT 源码编译与带库可用性测试、iSCSI 映射、TSM 存储设备/卷/备份策略配置、Oracle 客户端安装及手工发起备份以及通过 RMAN 和 TSM 命令实现 spfile、控制文件、数据文件与归档日志的异机恢复步骤可照做目录结构便于逐项对照排错。目前已有 241 人学习下载适合需要搭建低成本虚拟带库验证 TSM 备份链路、或准备 Oracle 异机容灾演练的工程师参考作为企业备份方案验证的落地模板。1. 从虚拟带库到 Oracle 异机恢复一套 TSM6.3 Mhvtl 备份链路值不值得搭在预算有限、又要验证 TSM6.3 备份恢复能力的场景下Mhvtl 虚拟带库是最省事的替代方案它加上 Oracle、DB2 两个数据库客户端刚好能组成一套完整的备份链路。我实际跑通的这套测试环境包含三台虚拟机一台跑 Mhvtl 虚拟带库并通过 iSCSI 把磁带机和机械手映射出去一台装 TSM 6.3.5 做备份服务器另外两台分别作为 Oracle 和 DB2 的备份客户端。整个过程走下来核心收获不在命令本身而在于理解 TSM 对“磁带”的抽象方式机械手是 changer磁带机是 tape两者用独立设备节点暴露给上层。这篇文章把这套环境的搭建、配置、备份接入和异机恢复完整记录下来适合手里没有真带库、又要做备份验证或灾备演练的运维和测试人员。2. Mhvtl 虚拟带库安装与 iSCSI 映射把 L700 变成一台远程磁带机2.1 为什么用 Mhvtl 而不是直接上真带库Mhvtl 是一个基于 Linux 的开源虚拟磁带库常见做法是在内核层模拟 SCSI 磁带设备和 Medium Changer上层程序看到的就是标准 SCSI 接口。它对 TSM、主流商业备份软件的识别方式与真实带库没有区别只要你操作过真带库这套环境里的命令几乎是平移的。真带库的问题很现实采购周期长、占机房空间、测试环境根本批不下预算。Mhvtl 在虚拟机里就能跑出两台机械手加八台磁带机的组合测试场景足够用。而且它的型号仿真很成熟L700、L80 这类机械手以及 IBM LTO 驱动器都覆盖到了TSM 定义库和驱动器时不需要做任何特殊处理。2.2 编译前的依赖准备我用的操作系统是 CentOS 6.6虚拟带库服务器和备份服务器都是这个版本。装 Mhvtl 之前先确认依赖包完整这一步省略的话后面编译内核模块必翻车。# 安装编译与磁带操作的基础工具 yum install lsscsi mt-st mtx zlib-devel sg3_utils zlib kernel-devel kernel-headers gcc # 创建 vtl 用户并准备配置目录与数据目录 useradd vtl passwd vtl mkdir -p /opt/mhvtl mkdir -p /etc/mhvtl chown -Rf vtl:vtl /opt/mhvtl chown -Rf vtl:vtl /etc/mhvtl这里的逻辑很直白lsscsi 用于查看 SCSI 设备列表mt-st 是磁带操作工具mtx 控制机械手加载/卸载磁带sg3_utils 提供通用 SCSI 命令工具kernel-devel 是编译内核模块的必要头文件。/opt/mhvtl 是虚拟磁带的数据落盘目录所有写到磁带的“数据流”最终都以文件形式存放在这里/etc/mhvtl 存放 library_contents 等带库配置。2.3 编译安装与首次启动依赖就绪后安装 mhvtl-utils 工具包再解压源码并编译内核模块rpm -ivh mhvtl-utils-1.5-2.x86_64.rpm unzip mhvtl-1.5-2.zip cd markh794-mhvtl-d9f6115 cd kernel make make install # 启动服务并加入开机自启 service mhvtl start chkconfig mhvtl on首次启动没配置过 library_contents 时Mhvtl 会打印 Creating a default one 的提示并自动生成默认的带库配置文件。看到 vtllibrary process PID 输出就算启动成功。此时用 lsscsi -g 检查设备可以看到 Mhvtl 虚拟出来的磁带设备已经出现在系统里SCSI 地址类型设备节点sg 节点用途3:0:0:0mediumx/dev/sch0/dev/sg10STK L700 机械手3:0:1:0tape/dev/st0/dev/sg2IBM ULT3580-TD5 驱动器3:0:8:0mediumx/dev/sch1/dev/sg11STK L80 机械手3:0:9:0tape/dev/st4/dev/sg6STK T10000B 驱动器注意区分/dev/st0 这类节点才是磁带机/dev/sch0 和 /dev/sg10 指向机械手。后续 mtx 操作机械手用 sg 节点TSM 定义 tapes 路径用 st 节点混用必出错。2.4 磁带容量调整与读写验证Mhvtl 默认每盘磁带只有 500MB对 Oracle 备份来说小得离谱几乎一两次备份就会卷满。修改 /etc/mhvtl/mhvtl.conf 里的 CAPACITY 参数可以放大容量vim /etc/mhvtl/mhvtl.conf # 默认媒体容量单位 MB CAPACITY2046 service mhvtl restart这里 CAPACITY2046 意思是每盘磁带 2GB注意修改后必须重启 mhvtl 服务而且已经生成过的虚拟带卷不会自动扩容需要重新生成或让 TSM 重新格式化。改完容量后先手动验证带库可用性# 查看机械手状态 mtx -f /dev/sg10 status # 将 1 号槽位的磁带加载到 0 号驱动器 mtx -f /dev/sg10 load 1 0 # 写入测试 tar -cvf /dev/st0 /boot # 读取验证 tar -tvf /dev/st0mtx -f 的参数格式是“load 槽位号 驱动器号”load 1 0 表示把 1 号槽的磁带放进 0 号驱动器。tar 能写入并列出内容说明数据链路已经通了。这一步是后续所有备份动作的地基磁带机读写都走不通别的都白搭。2.5 基于 tgt 的 iSCSI 映射本机验证通过后接下来要把带库资源通过 iSCSI 共享给备份服务器。这是真实机房里的常见做法带库挂在 SAN 里备份服务器通过光纤通道或 iSCSI 访问它。测试环境没有 SAN 交换机就用 tgt 软件模拟yum install scsi-target-utils vim /etc/tgt/targets.conftargets.conf 里按需求定义一个 target并把机械手和磁带机全部作为 backing-store 加进去target iqn.2024-04.test.mhvtl:tsm backing-store /dev/sg10 backing-store /dev/sg11 backing-store /dev/st0 backing-store /dev/st1 backing-store /dev/st2 backing-store /dev/st3 /target机械手设备必须和磁带机一起映射。只映射 st 节点不映射机械手客户端能看到磁带机但没法换带TSM 定义库的时候就会直接报错。配置完成后启动 tgtd 并确认service tgtd start tgt-admin --show备份服务器TSM 主服务器上安装 iscsi-initiator-utils 之后发现并登录这个 targetiscsiadm -m discovery -t st -p 192.168.81.6 iscsiadm -m node -T iqn.2024-04.test.mhvtl:tsm -p 192.168.81.6 --login登录后备份服务器上应该能同步看到 sch0 和 st0~st3 这一组设备。到这里虚拟带库部分就算全部就绪可以进入 TSM 的配置环节。3. TSM 服务器端配置从定义库、卷到第一条文件备份策略3.1 TSM 服务端安装与初始化TSM 服务器端安装在 192.168.81.7 这台机器上操作系统同样是 CentOS 6.6。安装包是 TSM 6.3.5 的服务端 rpm安装完成后需要初始化实例。先创建数据库目录再用 dsmserv format 完成格式化mkdir -p /opt/tivoli/tsm/db mkdir -p /opt/tivoli/tsm/log # 初始化 TSM 数据库 dsmserv format /opt/tivoli/tsm/db /opt/tivoli/tsm/log # 启动 TSM 服务 dsmserv # 另开一个终端进入管理命令行 dsmadmc -idadmin -paadminpassdsmserv format 的参数顺序是数据库目录在前、日志目录在后这个不能写反。进入管理界面后所有配置操作都在 dsmadmc 里完成。TSM 管理命令并不难难的是理清“库→驱动器→路径→卷”这一串对象的关系。3.2 定义库、驱动器和路径在 TSM 里机械手对应 Library磁带机对应 Drive而 Path 是把服务器、机械手、磁带机关联起来的纽带。顺序不能乱先定义库再定义驱动器最后定义路径# 定义 SCSI 类型的带库 define library L700 libtypescsi # 定义驱动器指定机械手设备节点 define drive L700 DRV0 device/dev/sg10 # 定义服务器到库的路径 define path TSM_SERVER L700 srctserver desttlibrary device/dev/sch0 # 定义服务器到每个驱动器的路径 define path TSM_SERVER DRV0 srctserver desttdrive libraryL700 device/dev/st0这段配置里最容易踩坑的是 device 参数。定义库路径时必须指向机械手/dev/sch0定义驱动器路径时必须指向磁带机/dev/st0。如果设备节点写反了define path 可能会成功但带库一做操作就报设备忙或 open 失败。如果你用 iSCSI 映射挂进来的设备节点名可能变成 /dev/sg3、/dev/st2 之类务必以登录后 lsscsi -g 输出的实际节点为准。3.3 配置卷与检测库和驱动器定义完毕接下来要为带库添加可用卷。卷就是物理磁带在 TSM 里的逻辑名字# 定义一个卷 define volume L700 VOL01 # 把卷检入带库标为暂存卷 checkin libvolume L700 VOL01 statusscratch # 校验带库状态 audit library L700 checklabelyesscratch 状态的意思是“空白可用卷”TSM 执行备份时如果需要磁带会自动从 scratch 池里拉一盘使用不需要人工干预。audit library 的作用是核对机械手槽位里的卷条码和 TSM 记录的卷名是否一致这在虚拟带库里尤其重要因为你之前用 mtx load 手动动过磁带TSM 的记录可能已经和实际槽位对不上了。3.4 策略域、管理类与副本组策略这块是 TSM 配置里概念最多的部分策略域Domain面向客户端集合管理类Mgmt Class定义数据该往哪个存储池放副本组Copy Group决定保留多少版本。配置命令如下def domain STANDARD defmgmtclass STANDARD MC1 defcopygrp STANDARD MC1 TAPE副本组的关键参数可以单独调整参数含义常用值reteretention数据保留天数30rereadfrequency重读频率30vers保留的版本数2reteversions额外版本保留天数30文件系统的备份和 Oracle 数据库备份可以共用一套策略域但存储池分开更稳妥。文件备份走磁盘池数据库备份走磁带池这样互不干扰排查问题时也容易定位。3.5 注册客户端节点并跑通文件备份备份服务器这边的核心对象配置完之后注册一个客户端节点做文件系统备份验证。这一步能确保端到端链路通畅再往下做 Oracle 才心里有底# 服务器端注册节点 reg node CLIENT1 clientpass # 客户端执行增量备份 dsmc incr /etcdsmc incr 是增量备份命令首次执行会把 /etc 目录完整传上去。此时回到 TSM 服务器端执行 q process 可以看到活动会话备份完成后 q content 能列出磁带上的文件。文件备份链路通了说明库、驱动器、卷、策略这整条链路上的配置都是对的Oracle 接入只是在这个链路上多加一个数据库客户端而已。4. 接入 Oracle 备份TDP 客户端参数、RMAN 通道与手工验证4.1 Oracle 客户端环境准备Oracle 数据库服务器是 192.168.81.11操作系统是 RHEL 5.7数据库版本 11g。要让 RMAN 和 TSM 对接需要在客户端安装 TDP for Oracle 组件——原文档里写的“NUB 客户端”实际对应就是这套 Tivoli Data Protection 客户端引擎。安装完 TDPO 后需要配置两个文件。第一个是 TSM 客户端参数文件用于指定 TSM 服务器地址和节点信息vim /opt/tivoli/tsm/client/oracle/bin64/dsm.sys SERVERNAME TSM_SERVER COMMMethod TCPip TCPPort 1500 TCPSERVERADDRESS 192.168.81.7 NODE CLIENT1 PASSWORDACCESS generate第二个是 TDPO 自己的参数文件 tdpo.optRMAN 调用 sbt 通道时就是通过它找到 TSM 的客户端引擎vim /opt/tivoli/tsm/client/oracle/bin64/tdpo.opt TDPO_NODE CLIENT1 TDPO_PASSWORD clientpass TDPO_FS /opt/tivoli/tsm/client/oracle/bin64 TDPO_PSWDPATH /opt/tivoli/tsm/client/oracle/bin64TDPO_NODE 必须和 TSM 服务器端注册的节点名一致TDPO_FS 是 TDPO 二进制所在目录TDPO_PSWDPATH 是密码文件目录。这三个参数任何一个不对RMAN 初始化通道时都会直接报错而且报错信息经常是含糊的 ANS9017E 或 ANR0480W排查很费劲。4.2 服务器端节点与授权客户端准备就绪后回到 TSM 服务器端为 Oracle 数据库单独注册一个节点并授权它访问带库存储池reg node ORACLE oraclepass grant acces ORACLETDPO 客户端用独立节点而不是复用文件备份节点好处在于异机恢复时可以单独控制授权。后面讲恢复时你会看到新机器只要拿到原节点的访问授权就能读取全部数据库备份。4.3 RMAN 配置与备份脚本接下来在 Oracle 服务器上配置 RMAN。先给 RMAN 配置固定的 sbt 通道参数再写一份完整的备份脚本CONFIGURE CHANNEL DEVICE TYPE sbt_tape PARMS ENV(TDPO_OPTFILE/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt); RUN { BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; }PLUS ARCHIVELOG 的意思是连归档日志一起备份这是数据库可恢复的关键。DELETE INPUT 是备份完成后删除已备份的归档避免归档目录把磁盘撑爆。第一次跑备份建议先不并行单通道验证链路确认没问题再加并发通道否则出了问题很难判断是通道问题还是配置问题。4.4 手工发起备份与结果核对脚本准备好后手动执行 RMAN 备份rman target / RMAN RUN { BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; }备份过程中在 TSM 服务器端执行q process能看到当前的会话和传输字节数。备份结束后用q content查看磁带卷里到底写入了哪些文件这是确认 Oracle 备份是否真正落带的关键手段q content VOL01如果 q content 里能看到数据库数据文件、控制文件、归档日志的备份集Oracle 备份链路就算完整打通了。接下来最值得做的不是继续调优性能而是直接进入异机恢复验证——备份只有恢复过才知道能不能用。5. 五大常见问题与排查设备路径、容量、权限和授权5.1 设备路径识别错位mtx 打开机械手失败现象执行 mtx -f /dev/sg10 status 时报 open 失败或者提示 Illegal request。原因这是最常见的翻车点。Mhvtl 启动后生成大量设备节点很多人分不清机械手和磁带机拿 /dev/st0 这种磁带机节点去操作机械手。另外 iSCSI 登录后设备节点编号可能重新分配原节点号作废。解决每个环节开始前都用 lsscsi -g 核对一遍。typemediumx 的是机械手typetape 的是磁带机。mtx 只对机械手节点操作tar/dd 只对磁带机节点操作。5.2 磁带容量不够备份一跑就报卷满现象Oracle 备份刚开始没多久就报 ANS4158E 或 ANR1401W Volume full任务失败。原因Mhvtl 默认 CAPACITY500每盘磁带只有 500MB。Oracle 数据库一个数据文件就超过这个量不爆才怪。而且改过 mhvtl.conf 后如果没重启服务新容量不会生效。解决确认 /etc/mhvtl/mhvtl.conf 里 CAPACITY 是 2046执行 service mhvtl restart。重启后 mtx status 里如果还是旧容量把带库里的老卷删掉重新生成或让 TSM 重新格式化卷。5.3 设备权限和 SELinux 导致 TSM 打不开磁带机现象TSM 里 define path 成功但 checkin libvolume 或 audit library 时报设备无法打开、权限拒绝。原因默认情况下 /dev/st0、/dev/sg10 这些设备节点的 owner 是 rootTSM 服务用户打不开。再加上 SELinux 对 SCSI 设备访问的限制双重拦截。解决测试环境直接关 SELinux再把设备权限放开。service iptables stop和chkconfig iptables off一并处理避免防火墙在中间添乱。生产环境可以用 udev rule 给特定设备组赋权。5.4 iSCSI 映射后只剩磁带机没有机械手现象备份服务器 iscsiadm 登录成功ls /dev/st* 有设备但找不到 /dev/sch0TSM 定义库时提示没有机械手。原因tgt 配置里只添加了磁带机节点忘了把机械手节点也作为 backing-store 加进去。没有机械手带库就只是个裸驱动器无法自动换带。解决在 /etc/tgt/targets.conf 的 target 里补上 /dev/sg10机械手重启 tgtd 后重新登录。配置和验证命令可以合并执行service tgtd restart iscsiadm -m node -T iqn.2024-04.test.mhvtl:tsm -p 192.168.81.6 --logout iscsiadm -m node -T iqn.2024-04.test.mhvtl:tsm -p 192.168.81.6 --login lsscsi -g | grep mediumx5.5 异机恢复时 ANS9017E 拒绝访问现象新机器上 RMAN 恢复数据时报 ANS9017E拒绝访问或者 ANR0408I 之类的权限错误但同一份配置在原始客户端上跑是正常的。原因TSM 的节点访问控制默认只允许本节点读取自己的备份数据。新机器的节点名没有获得原备份节点的访问授权。解决在 TSM 服务器端把恢复权限授予新节点这是异机恢复里必做的一步grant acces ORACLE_NEW授权后记得检查新节点 tdpo.opt 里的 TDPO_NODE 和注册名完全一致大小写都不能差。6. 异机恢复演练把备份数据在新机器上重新拉起6.1 恢复前的授权检查异机恢复最容易卡在授权上。原备份节点是 ORACLE新机器节点是 ORACLE_NEW必须在 TSM 服务器端执行 grant acces ORACLE_NEW否则恢复一开始就直接报 ANS9017E。授权确认后按“spfile → controlfile → mount → 数据文件归档 → resetlogs”的顺序走任何一步跳过去都可能导致数据库无法打开。6.2 恢复命令与验证新机器装好 Oracle 二进制和 TDPO确认 dsm.sys、tdpo.opt 指向正确的 TSM 服务器后启动到 nomount 状态开始恢复STARTUP NOMOUNT; SET DBID 1234567890; RESTORE SPFILE FROM /opt/tivoli/tsm/client/oracle/bin64/tdpo.opt; RESTORE CONTROLFILE FROM /opt/tivoli/tsm/client/oracle/bin64/tdpo.opt; ALTER DATABASE MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN RESETLOGS;控制文件恢复成功才能 mountmount 之后 RMAN 才能读取 catalog 里的备份信息继续恢复数据文件。RESETLOGS 是异机恢复到原备份时间点的必然动作日志序列会重置这个库从此不能再往前回退。恢复完成后在库里做一次行数抽查再对新库立即做一次全备防止后续操作失误导致无备份可用。DB2 的恢复路径和 Oracle 一致只是把 TDPO 换成 TDP for DB2RMAN 换成 db2adutl 加 db2 restore授权方式和验证思路完全相同。那次恢复演练之前我也以为备份只要成功落带就够了结果在异机恢复时被授权问题卡了半天最后发现只是漏了一条 grant 命令。从那以后我每次搭完备份环境都会强制走一遍异机恢复流程哪怕只是恢复到空闲的虚拟机。希望帮到你。本文还有配套的精品资源点击获取