16条实用的Linux/Unix 磁带管理命令

系统 Linux
每个磁带设备能存储多个备份文件。磁带备份文件通过 cpio,tar,dd 等命令创建。同时,磁带设备可以由多种程序打开、写入数据、及关闭。

在本教程中你将会了解到:

磁带设备名

管理磁带驱动器的基本命令

基本的备份和恢复命令

为什么备份?

一个备份计划对定期备份文件来说很有必要,如果你宁愿选择不备份,那么丢失重要数据的风险会大大增加。有了备份,你就有了从磁盘故障中恢复的能力。备份还可以帮助你抵御:

  1. 意外的文件删除
  2. 文件或文件系统损坏
  3. 服务器完全毁坏,包括由于火灾或其他问题导致的同盘备份毁坏
  4. 硬盘或 SSD 崩溃
  5. 病毒或勒索软件破坏或删除文件

你可以使用磁带归档备份整个服务器并将其离线存储。

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

每个磁带设备能存储多个备份文件。磁带备份文件通过 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 磁带设备名,在关闭时弹出(如果可以的话)。

磁带设备名示例

  1. /dev/rmt/1cn 指明正在使用 unity 1,压缩密度,无倒回。
  2. /dev/rmt/0hb 指明正在使用 unity 0,高密度,BSD 行为。
  3. Linux 上的自动倒回 SCSI 磁带设备名:/dev/st0
  4. Linux 上的无倒回 SCSI 磁带设备名:/dev/nst0
  5. FreeBSD 上的自动倒回 SCSI 磁带设备名:/dev/sa0
  6. FreeBSD 上的无倒回 SCSI 磁带设备名:/dev/nsa0

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

输入下列命令:

  1. ### Linux(更多信息参阅 man) ### 
  2. lsscsi 
  3. lsscsi -g 
  4.  
  5. ### IBM AIX ### 
  6. lsdev -Cc tape 
  7. lsdev -Cc adsm 
  8. lscfg -vl rmt* 
  9.  
  10. ### Solaris Unix ### 
  11. cfgadm –a 
  12. cfgadm -al 
  13. luxadm probe 
  14. iostat -En 
  15.  
  16. ### HP-UX Unix ### 
  17. ioscan Cf 
  18. ioscan -funC tape 
  19. ioscan -fnC tape 
  20. ioscan -kfC tape 

mt 命令示例

在 Linux 和类 Unix 系统上,mt 命令用来控制磁带驱动器的操作,比如查看状态或查找磁带上的文件或写入磁带控制标记。下列大多数命令需要作为 root 用户执行。语法如下:

  1. mt -f /tape/device/name operation 

设置环境

你可以设置 TAPE shell 变量。这是磁带驱动器的路径名。在 FreeBSD 上默认的(如果变量没有设置,而不是 null)是 /dev/nsa0。可以通过 mt 命令的 -f 参数传递变量覆盖它,就像下面解释的那样。

  1. ### 添加到你的 shell 配置文件 ### 
  2.  TAPE=/dev/st1 #Linux 
  3.  TAPE=/dev/rmt/2 #Unix 
  4.  TAPE=/dev/nsa3 #FreeBSD 
  5.  export TAPE 

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

  1. mt status  ### Use default 
  2. mt -f /dev/rmt/0  status ### Unix 
  3. mt -f /dev/st0 status ### Linux 
  4. mt -f /dev/nsa0 status ### FreeBSD 
  5. mt -f /dev/rmt/1 status ### Unix unity 1 也就是 tape device no. 1 

你可以像下面一样使用 shell 循环语句遍历一个系统并定位其所有的磁带驱动器:

  1. for d in 0 1 2 3 4 5 
  2. do 
  3.  mt -f "/dev/rmt/${d}" status 
  4. done 

2:倒带

  1. mt rew 
  2. mt rewind 
  3. mt -f /dev/mt/0 rewind 
  4. mt -f /dev/st0 rewind 

3:弹出磁带

  1. mt off 
  2. mt offline 
  3. mt eject 
  4. mt -f /dev/mt/0 off 
  5. mt -f /dev/st0 eject 

4:擦除磁带(倒带,在支持的情况下卸载磁带)

  1. mt erase 
  2. mt -f /dev/st0 erase  #Linux 
  3. mt -f /dev/rmt/0 erase #Unix 

5:张紧磁带盒

如果磁带在读取时发生错误,你重新张紧磁带,清洁磁带驱动器,像下面这样再试一次:

  1. mt retension 
  2. mt -f /dev/rmt/1 retension #Unix 
  3. mt -f /dev/st0 retension #Linux 

6:在磁带当前位置写入 EOF 标记

  1. mt eof  
  2. mt weof  
  3. mt -f /dev/st0 eof 

7:将磁带前进指定的文件标记数目,即跳过指定个 EOF 标记

磁带定位在下一个文件的***个块,即磁带会定位在下一区域的***个块(见图01):

  1. mt fsf 
  2. mt -f /dev/rmt/0 fsf 
  3. mt -f /dev/rmt/1 fsf 1 #go 1 forward file/tape (see fig.01) 

8:将磁带后退指定的文件标记数目,即倒带指定个 EOF 标记

磁带定位在下一个文件的***个块,即磁带会定位在 EOF 标记之后(见图01):

  1. mt bsf 
  2. mt -f /dev/rmt/1 bsf 
  3. mt -f /dev/rmt/1 bsf 1 #go 1 backward file/tape (see fig.01) 

这里是磁带定位命令列表:

  1. fsf    前进指定的文件标记数目。磁带定位在下一个文件的***块。 
  2.  
  3. fsfm   前进指定的文件标记数目。磁带定位在前一文件的***一块。 
  4.  
  5. bsf    后退指定的文件标记数目。磁带定位在前一文件的***一块。 
  6.  
  7. bsfm   后退指定的文件标记数目。磁带定位在下一个文件的***块。 
  8.  
  9. asf    磁带定位在指定文件标记数目的开始位置。定位通过先倒带,再前进指定的文件标记数目来实现。 
  10. fsr    前进指定的记录数。 
  11.  
  12. bsr    后退指定的记录数。 
  13.  
  14. fss    (SCSI tapes)前进指定的 setmarks。 
  15.  
  16. bss    (SCSI tapes)后退指定的 setmarks。 

基本备份命令

让我们来看看备份和恢复命令。

9:备份目录(tar 格式)

  1. tar cvf /dev/rmt/0n /etc 
  2. tar cvf /dev/st0 /etc 

10:恢复目录(tar 格式)

  1. tar xvf /dev/rmt/0n -C /path/to/restore 
  2. tar xvf /dev/st0 -C /tmp 

11:列出或检查磁带内容(tar 格式)

  1. mt -f /dev/st0 rewind; dd if=/dev/st0 of=- 
  2.  
  3. ### tar 格式 ### 
  4. tar tvf {DEVICE} {Directory-FileName} 
  5. tar tvf /dev/st0 
  6. tar tvf /dev/st0 desktop 
  7. tar tvf /dev/rmt/0 foo > list.txt 

12:使用 dump 或 ufsdump 备份分区

  1. ### Unix 备份 c0t0d0s2 分区 ### 
  2. ufsdump 0uf /dev/rmt/0  /dev/rdsk/c0t0d0s2 
  3.  
  4. ### Linux 备份 /home 分区 ### 
  5. dump 0uf /dev/nst0 /dev/sda5 
  6. dump 0uf /dev/nst0 /home 
  7.  
  8. ### FreeBSD 备份 /usr 分区 ### 
  9. dump -0aL -b64 -f /dev/nsa0 /usr 

13:使用 ufsrestore 或 restore 恢复分区

  1. ### Unix ### 
  2. ufsrestore xf /dev/rmt/0 
  3. ### Unix 交互式恢复 ### 
  4. ufsrestore if /dev/rmt/0 
  5.  
  6. ### Linux ### 
  7. restore rf /dev/nst0 
  8. ### 从磁带媒介上的第6个备份交互式恢复 ### 
  9. restore isf 6 /dev/nst0 
  10.  
  11. ### FreeBSD 恢复 ufsdump 格式 ### 
  12. restore -i -f /dev/nsa0 

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

  1. ### 这会覆盖磁带上的所有数据 ### 
  2. mt -f /dev/st1 rewind 
  3.  
  4. ### 备份 home ### 
  5. tar cvf /dev/st1 /home 
  6.  
  7. ### 离线并卸载磁带 ### 
  8. mt -f /dev/st0 offline 

从磁带开头开始恢复:

  1. mt -f /dev/st0 rewind 
  2. tar xvf /dev/st0 
  3. mt -f /dev/st0 offline 

15:从***一个 tar 后开始写入(见图02)

  1. ### 这会保留之前写入的数据 ### 
  2. mt -f /dev/st1 eom 
  3.  
  4. ### 备份 home ### 
  5. tar cvf /dev/st1 /home 
  6.  
  7. ### 卸载 ### 
  8. mt -f /dev/st0 offline 

16:从 tar number 2 后开始写入(见图02)

  1. ### 在 tar number 2 之后写入(应该是 2+1)### 
  2. mt -f /dev/st0 asf 3 
  3. tar cvf /dev/st0 /usr 
  4.  
  5. ### asf 等效于 fsf ### 
  6. mt -f /dev/sf0 rewind 
  7. mt -f /dev/st0 fsf 2 

从 tar number 2 恢复 tar:

  1. mt -f /dev/st0 asf 3 
  2. tar xvf /dev/st0 
  3. mt -f /dev/st0 offline 

关于第三方备份工具

Linux 和类Unix系统都提供了许多第三方工具,可以用来安排备份,包括磁带备份在内,如:

Amanda

Bacula

rsync

duplicity

rsnapshot

责任编辑:武晓燕 来源: oschina博客
相关推荐

2010-04-28 14:00:24

Unix系统

2018-12-13 15:00:51

zypper命令Linux

2010-07-08 13:39:36

LinuxUnix快捷键

2015-07-27 09:22:53

Unix文件系统命令

2010-04-07 16:46:08

Unix命令

2011-05-11 09:29:43

LinuxUnix

2010-04-07 17:01:08

Unix命令

2018-04-18 08:36:48

Linux命令运维

2023-11-28 15:19:00

Linux运维btop命令

2010-05-07 16:47:56

Unix系统

2010-05-07 16:21:54

Unix系统

2011-01-18 13:53:42

Linux Shell命令

2009-12-24 17:04:18

nohup命令

2014-05-04 11:17:39

Unix命令Linux命令

2010-12-17 09:52:32

bash命令

2010-05-07 17:29:26

Unix系统

2010-05-04 15:22:25

Unix系统

2010-04-19 12:54:01

Oracle数据库

2010-04-28 13:25:50

Unix操作系统

2019-09-09 15:43:29

UnixLinux命令行
点赞
收藏

51CTO技术栈公众号