热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何实现Linux环境下的备份

文章标题:如何实现Linux环境下的备份。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  Linux系统管理员常常问的一个问题是:如何备份我的系统?对于windows系统来说,进行备份是很简单的工作(仅仅需要在菜单模式下点击鼠标就可以完成)。 Linux备份工作则要麻烦的多,若你不熟悉Linux系统文件和设备,情况则会变得更糟。该篇文章讨论了在Linux环境下保护数据的方法和相关的设备信息。
  
  1、什么是备份?
  
  最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据。一次备份可能是简单的cp命令,将一个文件复制到其他目录下,也可能是使用特定的程序将数据流写进一个特定的设备中的复杂过程。很多情况下是将要备份的数据写入到磁带机中,但有些情况也不是这样的。在Linux环境下,或其他Unix系统,备份可以是将文件拷贝到已存在的文件系统,可替换的文件系统,磁带机,远程文件系统,甚至是远程系统的上的磁带机。当然,从用户的角度来看,并不存在磁带机或ZIP驱动器的概念,而仅仅是文件而已。
  
  2、应该选择哪一种备份设备?
  
  市场上有很多自称是“完美的系统备份选择”的设备,包括磁带机,便携式磁盘驱动器,甚至有神秘的Internet备份系统。对于备份操作来说,磁带机提供了最可信的存储方式。为什么是磁带机呢?当然,Iomega公司的Jaz或Zip驱动器看上去是令人感兴趣的备份工具,但是它们易于在硬盘驱动器崩溃的情况下因为文件系统的原因而导致问题出现。对于Internet备份来说,当你因为系统崩溃而不能访问互联网时,就不能恢复系统的数据。同样,你能真正信任你的数据存放在别人的远程系统么?
  
  因此,我们选择了磁带机,但是如何访问磁带机呢?正如文章前面提到的,在Linux系统中,在用户状态的角度来看,任何都可以被看做是文件。因此,可以“打开”合适的磁带驱动器文件来进行写入操作,将要备份的数据写入到文件中去。虽然这听上去过于简单了,但是实际情况就是这样。Linux环境下根文件系统的/dev目录包含了所有和物理设备关联的文件。当对这些文件进行操作,实际上是在操作下层的物理设备。下面的表格说明了Linux环境下设备文件是如何和物理设备关联起来的:
  
  设备(Device) 回卷(Rewinding) 不回卷(No-Rewind)
  1st SCSI tape drive /dev/st0 /dev/nst0
  2nd SCSI tape drive /dev/st1 /dev/nst1
  nth SCSI tape drive /dev/st[n-1] /dev/nst[n-1]
  1st ATAPI tape drive /dev/ht0 /dev/nht0
  2nd ATAPI tape drive /dev/ht1 /dev/nht1
  nth ATAPI tape drive /dev/ht[n-1] /dev/nht[n-1]
  1st floppy tape drive /dev/ft0 /dev/nft0
  
  这正如在上表中看的那样,设备名是基于位于针对这种设备类型的分层结构的设备的逻辑数字,而不是其物理ID(SCSI)或者IDE通道(ATAPI)。因此,即使某个SCSI磁盘机被分配为SCSI设备的ID4,如果它是SCSI链的第一个磁带设备,则它将是 /dev/st0, 而不是/dev/st4,这种命名惯例有利于跟踪系统中的磁带设备,甚至在拥有多个驱动类型的磁带设备。同样,在2.0.X内核下,只支持单个ATAPI设备,2.2版本的内核可以使用多个ATAPI驱动(ht0, ht1,...)。
  
  现在我们来看看这些文件是如何被命名的,回卷和不回卷的区别在哪里呢?简单的说,回卷设备允许在结束操作以后,自动将磁带回卷到开始处,而不回卷设备在操作结束以后,将磁带机停留在当时的位置而不进行回卷操作。对于大多数简单备份操作,回卷设备更适合一些,因为在备份操作结束以后其自动回卷以准备取出磁带。而对于那些复杂的备份操作(如附加备份,逻辑搜索及那些高端备份工具的操作),不回卷设备更适合一些。
  
  3、Linux环境下的设备访问
  
  在Linux环境下,设备访问是通过和它们关联的设备节点文件。这些节点位于/dev目录下,但是不要混淆概念—一个设备节点不仅仅是一个简单的文件。当打开一个设备节点以供访问时,其有特殊的属性来通知内核操作的是哪一个物理设备。每一个节点文件都有一个关联的主号和从号(major and minor number)及设备类型属性,例如,对于SCSI磁带机的设备节点情况如下:
  
  crw-rw-rw- 1 root operator 9, 0 Dec 1 04:10 /dev/st0
  
  第一个“c”表示该设备是一个字符设备(意味着该设备在I/O操作时每次仅仅处理一个字符),主号为9,从号为0。主号就象一个地址来通知内核使用哪个设备驱动器,而从号则被用来定义该设备的某个特定实例的功能。如果该节点文件不存在呢?Linux提供了一个命令来方便的创建一个设备节点文件-mkmod,命令格式如下:
  
  mknod /dev/nodename [c|b] major minor
  
  然而若系统中没有合适的设备节点,则需要检测内核是否支持了这种类型的设备。这可以通过命令cat /proc/devices的输出来察看,在我的系统中,情况如下:
  
  Character Devices
  1 mem 10 misc
  2 pty 14 sound
  3 ttyp 21 sg
  4 ttyS 29 fb
  5 cua 37 ht
  7 vcs 128 ptm
  9 st 136 pts
  Block Devices
  1 ramdisk
  2 fd
  3 ide0
  9 md
  22 ide1
  
  很多管理员在操作回卷设备时都会遇到关于mt命令的问题。mt命令实现操作一个“磁带”设备。例如,命令mt -f /dev/st0 eod 命令设置磁带为进行新的附加备份做好准备,磁带机/dev/st0将前进到数据结束处以准备新的附加备份操作,但由于st0是回卷设备,磁带机在定位到数据结束以后马上回卷到开始处并关闭磁带设备(因为st0是一个回卷设备)。这时候如果进行备份操作则会覆盖磁带中的数据信息,而不是将新数据附在磁带数据结束处。若使用非回卷设备,mt将会把磁带停留在eod的位置,随后的备份操作将被添加到上次备份结束以后的地方。
  
  对于这种问题的推荐解决方法是在为希望使用的非回转设备建立符号链接,如:/dev/tape,mt命令在没有提供-f参数时则可以使用/dev/tape来操作该设备。若系统拥有多个磁带设备,则你可以不使用符号链接的方式,而使用环境变量TAPE=/dev/nst[x]来达到一样的结果。对于上面两种方法,在使用mt命令时不需要使用-f参数,例如:mt eod,则会自动使用正确的介质位置,而无需关心使用的是哪个/dev设备。
  
  4、Linux环境下的基本备份方法
  
  现在我们已经讨论了如何调用磁带设备,并且我们已经知道如何决定使用回卷或非回卷设备。但是如何实现将系统的文件从系统中搬移到磁带设备上呢?这是各种备份工具的功能了。所有的Linux发布都提供了所有备份工具的祖先:tar(当然实际上dbppt和bppt, a/k/a dump and restor,才是Unix系统的备份工具的亚当)。tar命令在Unix Version 7中出现的。该命令的名字来自于"Tape ARchiver"。该命令被设计为能非常容易的实现将数据从系统备份到磁带中或者从磁带中恢复数据。
  
  tar命令的基本语法为:
  
  tar -mode -option [files]
  
  这里c表示创建(backup),-x提取(restore)或者-t内容列表(list),选项包括如下元素:如-v表示详细输出,-f file表示目的(创建模式)或源(提取或者列表模式),更详细的信息,请看系统tar命令的手册(man tar)。
  
  使用tar做最简单的备份如下所示:
  
  tar -cvf /dev/st0
  lost+found/
  var/
  var/adm/
  var/adm/LST/
  var/adm/LST/log/
  var/adm/LST/log/debug
  var/adm/LST/log/history
  var/adm/LST/log/cmd.trace
  var/adm/LST/log/install.success
  var/adm/LST/log/postin.failed
  var/adm/LST/log/install.failed
  var/adm/LST/analyse/
  var/adm/LST/analyse/boot.img
  var/adm/LST/analyse/boot.msg
  var/adm/LST/analyse/boot.info
  var/adm/LST/analyse/boot.diag
  var/adm/LST/analyse/boot.params
  var/adm/LST/database/
  var/spool/
  [...]
  
  该命令的c选项表示创建一个新的备份(c),并且使用详细模式(v),并且将整个系统备份输出到/dev/st0(f)。在这种情况下,tar操作将打开/dev/st0文件(设备),将数据流以tar的数据格式的写入到那个打开的文件,并且在所有的数据被写入以后,关闭文件。因为我们这里选择了回卷设备/dev/st0,文件(存储介质)将使设备驱动在tar关闭文件以后回卷磁带。
  
  下一步将是验证数据被正确的写入到磁带中。不幸的是,Linux环境下的tar命令仅仅提供了一种比较模式的验证手段-磁带内容被重新读入,并和原始文件逐字节进行比较。然而,这仍然比没有验证要好很多。因为在进行恢复时发现磁带中有坏数据是一个非常糟糕的事情。
  
  在恢复结束并且被验证以后,一切并没有结束,因为系统中的数据是不断变化的,一个保持不断变化的系统的备份的方法是持续进行定期的对发生变化的数据进行备份。有很多方法可以实现这样的备份,但是最方便的是增量(incremental)和差分(differential)备份。
  
  这两种方法的备份方法都是依赖于时间,或者是基于上一次备份(增量),或者基于上一次完全备份。增量备份仅仅备份那些上次备份以来修改过的数据,有时候也被称为常规备份;而差分备份则仅仅备份上次完全备份以来变化过的文件。下表是几种备份方案的特点比较:
  
  5、完全备份 增量备份 差分备份
  
  空间使用 Most Least Less than Full
  备份速度 Slowest Fastest Faster than Full
  恢复速度 Fastest Slowest Faster than Incremental
  
  差分备份可能会备份增量备份忽略的数据,但是差分备份恢复速度要比增量快,因为它仅仅需要上一次完全备份和最近的一次差分备份;而增量备份
推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
author-avatar
lucky燕子加加加
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有