15 个对系统管理员有用的 Linux 和 Unix 磁带管理命令

[ad_1]

ape 设备应定期用于归档文件或将数据从一台服务器传输到另一台服务器。 通常,磁带设备都连接到 Unix 盒子,并通过 mt 或 mtx 进行控制。 您必须将所有数据备份到磁盘(可能在云中)和磁带设备。 在本教程中,您将了解:

  • 磁带设备名称
  • 管理磁带机的基本命令
  • 基本备份和恢复命令

为什么需要备份?

备份计划是您定期备份文件所必需的。 如果您选择不备份自己的文件,则可能会丢失重要数据。 备份允许您:

  • 能够从磁盘故障中恢复
  • 意外删除文件
  • 文件或文件系统损坏
  • 完整的服务器销毁,包括因火灾或其他问题而破坏现场备份
  • 硬盘驱动器和 SSD 确实崩溃
  • 病毒和勒索软件可能会损坏或删除文件

您可以使用基于磁带的存档来备份整个服务器并将磁带移至异地。

了解磁带文件标记和块大小

每个磁带设备可以存储多个磁带备份文件。 磁带备份文件是使用 cpio、tar、dd 等创建的。 但是,磁带设备可以由各种程序打开、写入数据和关闭。 您可以在物理磁带上存储多个备份(磁带)。 每个磁带文件之间是一个“磁带文件标记”。 这用于指示一个磁带文件在哪里结束,另一个在物理磁带上开始。 您需要使用 mt 命令来定位磁带(向前卷、倒卷和标记)。

数据如何存储在磁带驱动器上

随后,所有数据都使用 tar 以顺序磁带归档格式存储。 第一个磁带存档将从磁带的物理开头(tar #0)开始。 下一个将是 tar #1 等等。

Unix 上的磁带设备名称

  1. /dev/rmt/0 或 /dev/rmt/1 或 /dev/rmt/[0-127] : Unix 上的常规磁带设备名称。 磁带被倒带。
  2. /dev/rmt/0n :这被称为不倒带,即在使用磁带后,将磁带保持在当前状态以执行下一个命令。
  3. /dev/rmt/0b :使用磁带接口,即 BSD 行为。 各种操作系统(如 AIX、Windows、Linux、FreeBSD 等)的可读性更高。
  4. /dev/rmt/0l :将密度设置为低。
  5. /dev/rmt/0m :将密度设置为中等。
  6. /dev/rmt/0u :将密度设置为高。
  7. /dev/rmt/0c :将密度设置为压缩。
  8. /dev/st[0-9] :Linux 特定的 SCSI 磁带设备名称。
  9. /dev/sa[0-9] : FreeBSD 特定的 SCSI 磁带设备名称。
  10. /dev/esa0 : 弹出的 FreeBSD 特定的 SCSI 磁带设备名称 close (如果有能力)。

磁带设备名称示例

  • /dev/rmt/1cn 表明我正在使用统一 1,压缩密度并且没有倒带。
  • /dev/rmt/0hb 表明我正在使用统一 0、高密度和 BSD 行为。
  • Linux 上的自动倒带 SCSI 磁带设备名称:/dev/st0
  • Linux 上的非倒带 SCSI 磁带设备名称:/dev/nst0
  • FreeBSD 上的自动倒带 SCSI 磁带设备名称:/dev/sa0
  • FreeBSD 上的非倒带 SCSI 磁带设备名称:/dev/nsa0

如何列出已安装的 SCSI 磁带设备?

键入以下命令:

## Linux (read man pages for more info) ##
lsscsi 
lsscsi -g
 
## IBM AIX ##
lsdev -Cc tape
lsdev -Cc adsm 
lscfg -vl rmt*
 
## Solaris Unix ##
cfgadm –a 
cfgadm -al 
luxadm probe
iostat -En
 
## HP-UX Unix ##
ioscan Cf
ioscan -funC tape
ioscan -fnC tape
ioscan -kfC tape

我的 Linux 服务器的示例输出:

Fig.03: Installed tape devices on Linux server

mt 命令示例

在 Linux 和类 Unix 系统中,mt 命令用于控制磁带机的操作,例如查找磁带上的状态或查找文件或将磁带控制标记写入磁带。 您必须以 root 用户身份键入以下命令。 语法是:

mt -f /tape/device/name operation

设置环境

您可以设置 TAPE shell 变量。 这是磁带机的路径名。 默认值(如果变量未设置,但如果它为空则不是)在 FreeBSD 上是 /dev/nsa0。 它可以被传递给 mt 命令的 -f 选项覆盖,如下所述。

 ## Add to your shell startup file ##
TAPE=/dev/st1 #Linux
TAPE=/dev/rmt/2 #Unix
TAPE=/dev/nsa3 #FreeBSD
export TAPE

1:显示磁带/驱动器的状态

mt status  #Use default 
mt -f /dev/rmt/0  status #Unix
mt -f /dev/st0 status #Linux 
mt -f /dev/nsa0 status #FreeBSD
mt -f /dev/rmt/1 status #Unix unity 1 i.e. tape device no. 1

您可以按如下方式使用 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:在磁带的当前位置写入 n 个 EOF 标记

mt eof
mt weof
mt -f /dev/st0 eof

7:向前空间计数文件即跳转n个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:向后空间计数文件,即倒带 n 个 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    Forward space count files.  The tape is positioned on the first block of the next file.
 
       fsfm   Forward space count files.  The tape is positioned on the last block of the previous file.
 
       bsf    Backward space count files.  The tape is positioned on the last block of the previous file.
 
       bsfm   Backward space count files.  The tape is positioned on the first block of the next file.
 
       asf    The tape is positioned at the beginning of the count file. Positioning is done by first rewinding the tape and then spacing forward over count filemarks.
 
       fsr    Forward space count records.
 
       bsr    Backward space count records.
 
       fss    (SCSI tapes) Forward space count setmarks.
 
       bss    (SCSI tapes) Backward space count 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 format ##
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 backup c0t0d0s2 partition ##
ufsdump 0uf /dev/rmt/0  /dev/rdsk/c0t0d0s2
 
## Linux backup /home partition ##
dump 0uf /dev/nst0 /dev/sda5
dump 0uf /dev/nst0 /home
 
## FreeBSD backup /usr partition ##
dump -0aL -b64 -f /dev/nsa0 /usr

12:使用ufsrestore或restore恢复分区

## Unix ##
ufsrestore xf /dev/rmt/0
## Unix interactive restore ##
ufsrestore if /dev/rmt/0
 
## Linux ##
restore rf /dev/nst0
## Restore interactive from the 6th backup on the tape media ##
restore isf 6 /dev/nst0
 
## FreeBSD restore ufsdump format ##
restore -i -f /dev/nsa0

13:从磁带开头开始写入(见图02)

## This will overwrite all data on tape ##
mt -f /dev/st1 rewind
 
### Backup home ##
tar cvf /dev/st1 /home
 
## Offline and unload tape ##
mt -f /dev/st0 offline

要从磁带的开头恢复:

mt -f /dev/st0 rewind
tar xvf /dev/st0
mt -f /dev/st0 offline

14:在最后一个 tar 之后开始写入(见图 02)

## This will kee all data written so far ##
mt -f /dev/st1 eom
 
### Backup home ##
tar cvf /dev/st1 /home
 
## Unload ##
mt -f /dev/st0 offline

15:在 tar 编号 2 之后开始写入(见图 02)

## To wrtite after tar number 2 (should be 2+1)
mt -f /dev/st0 asf 3
tar cvf /dev/st0 /usr
 
## asf equivalent command done using fsf ##
mt -f /dev/sf0 rewind
mt -f /dev/st0 fsf 2

要从 tar 编号 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 <[email protected]>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit https://bash.cyberciti.biz/ 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 系统都提供了许多第三方实用程序,您可以使用它们来安排备份的创建,包括磁带备份,例如:

  • 阿曼达
  • 巴库拉
  • rsync
  • 表里不一
  • 快照

也可以看看

  • 手册页 – 恢复 (8)

[ad_2]

Related Posts