你可以像下面一样使用 shell 循环语句遍历一个系统并定位其所有的磁带驱动器:
for d in 0 1 2 3 4 5 do mt -f "/dev/rmt/${d}" status done 2:倒带 mt rew mt rewind mt -f /dev/mt/0 rewind mt -f /dev/st0 rewind 3:弹出磁带 mt off mt offline mt eject mt -f /dev/mt/0 off mt -f /dev/st0 eject 4:擦除磁带(倒带,在支持的情况下卸载磁带) mt erase mt -f /dev/st0 erase #Linux mt -f /dev/rmt/0 erase #Unix 5:张紧磁带盒如果磁带在读取时发生错误,你重新张紧磁带,清洁磁带驱动器,像下面这样再试一次:
mt retension mt -f /dev/rmt/1 retension #Unix mt -f /dev/st0 retension #Linux 6:在磁带当前位置写入 EOF 标记 mt eof mt weof mt -f /dev/st0 eof 7:将磁带前进指定的文件标记数目,即跳过指定个 EOF 标记磁带定位在下一个文件的第一个块,即磁带会定位在下一区域的第一个块(见图01):
mt fsf mt -f /dev/rmt/0 fsf mt -f /dev/rmt/1 fsf 1 #go 1 forward file/tape (see fig.01) 8:将磁带后退指定的文件标记数目,即倒带指定个 EOF 标记磁带定位在下一个文件的第一个块,即磁带会定位在 EOF 标记之后(见图01):
mt bsf mt -f /dev/rmt/1 bsf mt -f /dev/rmt/1 bsf 1 #go 1 backward file/tape (see fig.01)这里是磁带定位命令列表:
fsf 前进指定的文件标记数目。磁带定位在下一个文件的第一块。 fsfm 前进指定的文件标记数目。磁带定位在前一文件的最后一块。 bsf 后退指定的文件标记数目。磁带定位在前一文件的最后一块。 bsfm 后退指定的文件标记数目。磁带定位在下一个文件的第一块。 asf 磁带定位在指定文件标记数目的开始位置。定位通过先倒带,再前进指定的文件标记数目来实现。 fsr 前进指定的记录数。 bsr 后退指定的记录数。 fss (SCSI tapes)前进指定的 setmarks。 bss (SCSI tapes)后退指定的 setmarks。 基本备份命令让我们来看看备份和恢复命令。
9:备份目录(tar 格式) tar cvf /dev/rmt/0n /etc tar cvf /dev/st0 /etc 10:恢复目录(tar 格式) tar xvf /dev/rmt/0n -C /path/to/restore tar xvf /dev/st0 -C /tmp 11:列出或检查磁带内容(tar 格式) mt -f /dev/st0 rewind; dd if=/dev/st0 of=- ### tar 格式 ### tar tvf {DEVICE} {Directory-FileName} tar tvf /dev/st0 tar tvf /dev/st0 desktop tar tvf /dev/rmt/0 foo > list.txt 12:使用 dump 或 ufsdump 备份分区 ### Unix 备份 c0t0d0s2 分区 ### ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t0d0s2 ### Linux 备份 /home 分区 ### dump 0uf /dev/nst0 /dev/sda5 dump 0uf /dev/nst0 /home ### FreeBSD 备份 /usr 分区 ### dump -0aL -b64 -f /dev/nsa0 /usr 12:使用 ufsrestore 或 restore 恢复分区 ### Unix ### ufsrestore xf /dev/rmt/0 ### Unix 交互式恢复 ### ufsrestore if /dev/rmt/0 ### Linux ### restore rf /dev/nst0 ### 从磁带媒介上的第6个备份交互式恢复 ### restore isf 6 /dev/nst0 ### FreeBSD 恢复 ufsdump 格式 ### restore -i -f /dev/nsa0 13:从磁带开头开始写入(见图02) ### 这会覆盖磁带上的所有数据 ### mt -f /dev/st1 rewind ### 备份 home ### tar cvf /dev/st1 /home ### 离线并卸载磁带 ### mt -f /dev/st0 offline从磁带开头开始恢复:
mt -f /dev/st0 rewind tar xvf /dev/st0 mt -f /dev/st0 offline 14:从最后一个 tar 后开始写入(见图02) ### 这会保留之前写入的数据 ### mt -f /dev/st1 eom ### 备份 home ### tar cvf /dev/st1 /home ### 卸载 ### mt -f /dev/st0 offline 15:从 tar number 2 后开始写入(见图02) ### 在 tar number 2 之后写入(应该是 2+1)### mt -f /dev/st0 asf 3 tar cvf /dev/st0 /usr ### asf 等效于 fsf ### mt -f /dev/sf0 rewind mt -f /dev/st0 fsf 2从 tar number 2 恢复 tar:
mt -f /dev/st0 asf 3 tar xvf /dev/st0 mt -f /dev/st0 offline 如何验证使用 tar 创建的备份磁带?定期做全系统修复和服务测试是很重要的,这是唯一确定整个系统正确工作的途径。参见我们的验证 tar 命令磁带备份的教程以获取更多信息。
示例 shell 脚本 #!/bin/bash # A UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux) # This script make both full and incremental backups. # You need at two sets of five tapes. Label each tape as Mon, Tue, Wed, Thu and Fri. # You can run script at midnight or early morning each day using cronjons. # The operator or sys admin can replace the tape every day after the script has done. # Script must run as root or configure permission via sudo. # ------------------------------------------------------------------------- # Copyright (c) 1999 Vivek Gite <vivek@nixcraft.com> # This script is licensed under GNU GPL version 2.0 or above # ------------------------------------------------------------------------- # This script is part of nixCraft shell script collection (NSSC) # Visit for more information. # ------------------------------------------------------------------------- # Last updated on : March-2003 - Added log file support. # Last updated on : Feb-2007 - Added support for excluding files / dirs. # ------------------------------------------------------------------------- LOGBASE=/root/backup/log # Backup dirs; do not prefix / BACKUP_ROOT_DIR="home sales" # Get todays day like Mon, Tue and so on NOW=$(date +"%a") # Tape devie name TAPE="/dev/st0" # Exclude file TAR_ARGS="" EXCLUDE_CONF=/root/.backup.exclude.conf # Backup Log file LOGFIILE=$LOGBASE/$NOW.backup.log # Path to binaries TAR=/bin/tar MT=/bin/mt MKDIR=/bin/mkdir # ------------------------------------------------------------------------ # Excluding files when using tar # Create a file called $EXCLUDE_CONF using a text editor # Add files matching patterns such as follows (regex allowed): # home/vivek/iso # home/vivek/*.cpp~ # ------------------------------------------------------------------------ [ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF" #### Custom functions ##### # Make a full backup full_backup(){ local old=$(pwd) cd / $TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR $MT -f $TAPE rewind $MT -f $TAPE offline cd $old } # Make a partial backup partial_backup(){ local old=$(pwd) cd / $TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIR $MT -f $TAPE rewind $MT -f $TAPE offline cd $old } # Make sure all dirs exits verify_backup_dirs(){ local s=0 for d in $BACKUP_ROOT_DIR do if [ ! -d /$d ]; then echo "Error : /$d directory does not exits!" s=1 fi done # if not; just die [ $s -eq 1 ] && exit 1 } #### Main logic #### # Make sure log dir exits [ ! -d $LOGBASE ] && $MKDIR -p $LOGBASE # Verify dirs verify_backup_dirs # Okay let us start backup procedure # If it is Monday make a full backup; # For Tue to Fri make a partial backup # Weekend no backups case $NOW in Mon) full_backup;; Tue|Wed|Thu|Fri) partial_backup;; *) ;; esac > $LOGFIILE 2>&1 关于第三方备份工具Linux 和类Unix系统都提供了许多第三方工具,可以用来安排备份,包括磁带备份在内,如:
Amanda
Bacula
rsync
duplicity
rsnapshot