Solaris 系统的远程磁带备份通常涉及两个核心场景:将本地数据备份到远程磁带机,或者将远程主机的数据备份到本地的磁带机。这里我为你梳理一个清晰、完整的步骤指南。
核心概念与准备
磁带设备名:在 Solaris 10 及以前,通常为
/dev/rmt/[0-9][lmn] (如
/dev/rmt/0n)。
n 表示不回卷,
c 表示压缩。
关键命令:
tar:适用于文件和目录,结构简单。
ufsdump/ufsrestore:专门用于 UFS 文件系统,支持全量/增量备份,能备份 i 节点信息。
dd:原始块复制,常用于裸设备或整个磁带拷贝。
ssh:实现远程执行和加密传输。
rsh(不推荐):传统方式,无加密,需配置 .rhosts,安全性差。
场景一:将本地数据备份到远程磁带机(磁带机在远程主机上)
这是最常见的情况。你需要有访问远程主机的权限。
方法一:使用
rsh(传统,不安全,仅适用于可信内网环境)
步骤:
配置远程访问:在远程主机(假设主机名
tapeserver)上,将本地主机(
backupclient)的 root 用户加入
/etc/hosts.equiv 或 root 的
~/.rhosts 文件。
# 在 tapeserver 的 /etc/hosts.equiv 中添加
backupclient
# 或在 root 的 ~/.rhosts 中添加
backupclient root
执行备份命令:
- 备份整个
/home 目录:tar cvf - /home | rsh tapeserver dd of=/dev/rmt/0n obs=1024k
- 使用
ufsdump 备份整个 UFS 文件系统:ufsdump 0uf - /home | rsh tapeserver dd of=/dev/rmt/0n bs=1024k
0 表示 0 级(全量),u 更新备份记录,f - 表示输出到标准输出。
方法二:使用
ssh(推荐,安全)
步骤:
设置 SSH 密钥认证:在本地主机为 root 生成 SSH 密钥对,并将公钥添加到远程主机
tapeserver 的 root 用户
~/.ssh/authorized_keys 文件中。
# 在 backupclient 上
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@tapeserver
执行备份命令:
场景二:将远程主机的数据备份到本地磁带机(磁带机在本地)
方法:通过 SSH 拉取数据并写入本地磁带
步骤:
同样配置 SSH 密钥认证,使本地 root 能无密码登录远程数据服务器(
dataserver)。
执行备份命令:
场景三:使用 dd 和 nc(netcat)进行高速网络备份(适用于受控环境)
当 SSH 加密开销影响速度时,可在受信任网络中使用 nc。
步骤(示例,将本地数据备份到远程磁带机):
在远程主机(接收端)启动监听:
# 在 tapeserver 上
nc -l 12345 | dd of=/dev/rmt/0n bs=1024k
在本地主机(发送端)发送数据流:
# 在 backupclient 上
ufsdump 0uf - /home | nc tapeserver 12345
注意:nc 命令无加密,需按顺序执行,且传输完成后自动退出。
高级操作与最佳实践
磁带操作命令:
- 查看磁带状态:
mt -f /dev/rmt/0n status
- 回卷磁带:
mt -f /dev/rmt/0 rewind
- 弹出磁带:
mt -f /dev/rmt/0 offline
- 前进到下一个文件:
mt -f /dev/rmt/0n fsf 1
备份脚本示例(使用 SSH):
#!/bin/bash
# backup_remote_tape.sh
REMOTE_HOST="tapeserver"
TAPE_DEV="/dev/rmt/0n"
BACKUP_PATH="/home"
DUMP_LEVEL="0"
echo "Starting remote tape backup of $BACKUP_PATH at $(date)"
ufsdump ${DUMP_LEVEL}uf - $BACKUP_PATH | \
ssh root@$REMOTE_HOST "dd of=$TAPE_DEV bs=1024k 2>/dev/null"
if [ ${PIPESTATUS[0]} -eq 0 ] && [ ${PIPESTATUS[1]} -eq 0 ]; then
echo "Backup completed successfully at $(date)"
# 可选:回卷远程磁带
ssh root@$REMOTE_HOST "mt -f $TAPE_DEV rewind"
else
echo "Backup FAILED! Check commands and connections." >&2
exit 1
fi
恢复数据示例:
注意事项
权限:几乎所有操作都需要
root 权限,尤其是访问原始磁带设备和执行
ufsdump。
网络稳定性:网络中断可能导致备份失败或磁带损坏。对于大型备份,考虑使用
mbuffer 等工具缓冲数据。
磁带管理:清晰标记磁带(物理标签和电子标签),记录备份内容、日期和级别。
验证备份:定期进行恢复测试,确保备份有效。
Solaris 版本差异:Solaris 11 开始默认使用 ZFS,备份工具应改为
zfs send 和
zfs receive,但上述方法对 UFS 或兼容环境依然有效。
总结流程图:
选择场景:
├─ 磁带机在远程 → 数据流:`本地 | ssh 远程 "dd of=磁带机"`
└─ 磁带机在本地 → 数据流:`ssh 远程 "命令" | dd of=本地磁带机`
选择工具:
├─ 安全优先:`ssh`
├─ 简单文件:`tar`
└─ UFS全量/增量:`ufsdump`
根据你的具体环境(Solaris 版本、网络配置、安全要求)选择最适合的组合。对于生产环境,强烈建议使用 ssh 并配合自动化脚本和日志记录。