Linux系统备份还原工具2(TAR/压缩工具)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统备份还原工具2(TAR/压缩工具)相关的知识,希望对你有一定的参考价值。

相比DD备份还原工具,TAR压缩还原工具更加小巧和灵活,但是不能备份MBR。当然可以通过重新安装GRUB来解决MBR的这一问题。同时,TAR的做法也是官方推荐的。

注意:一个硬盘启动时最新经过MBR(只有512KB),然后通过MBR指向操作系统的GRUB(也就是内核的引导程序)。

准备备份

为准备系统的完整备份,最好清空垃圾桶,并从当前安装中删除任何不需要的文件和程序。这包括可以填充不需要的许多文件的主文件夹。这样做可以减少创建的存档的大小,就是说释放空间有多少。

下面列出了一个例子,可以自己决定适用的例子:

  • 删除所有电子邮件。
  • 擦拭您保存的浏览器个人资料和搜索记录。
    • 如果您不担心安全问题,则此步骤不是必需的。许多用户明确要求备份他们的电子邮件和浏览器设置。

  • 卸载任何外部驱动器,并删除任何不希望包含在备份中的光盘或光盘等光盘。
    • 这将减少您在此过程中稍后输入的排除数量。
  • 通过/home中的用户文件夹的内容,删除子目录中的所有不需要的文件,通常人们下载文件并忘记它们。

备份

要开始,请打开一个终端,在Ubuntu这可以通过应用程序菜单->附件->终端完成一些目录需要root或超级用户的读写权限(需要备份),以了解为什么看到FilePermissions要获得临时root权限,请简单地介绍您要发布的任何命令,如RootSudo中所述。 

对于这个例子,我们将目录更改为root。这就是备份的地方。这是一个任意的决定,你应该在其他地方创建备份。例如,对于安装的外部硬盘驱动器,可以使用内部连接的另一个分区或磁盘,甚至可以使用主目录中的文件夹。在所有情况下,请确保将存档归档的位置具有足够的空间。只需使用cd命令在那里导航。

cd / 

以下是如何存档系统的示例性命令。

tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 

要了解发生了什么,我们将剖析命令的每一部分。

  • tar - 是创建存档的命令。紧随其后的每个字母修改,每个字母都在下面进行了说明。

    • c - 创建一个新的备份存档。

    • v - 详细模式,tar将打印它在屏幕上的工作。

    • p - 保留在档案中放置的文件的权限,以便稍后恢复。

    • z - 用‘gzip‘压缩备份文件使其更小。

    • f <filename> - 指定存储备份的位置,backup.tar.gz是此示例中使用的文件名。它将存储在当前工作目录中,即使用cd命令时设置的目录。

  • --exclude=/example/path - 此模型之后的选项指示tar什么目录备份。我们不想备份一切,因为一些目录不是很有用的包括。第一个排除规则指示tar不会自动恢复,这对于避免操作过程中的错误很重要。

  • --one-file-system - 不要在不同的文件系统上包含文件。如果您希望其他文件系统(例如/home分区)或挂载在/media中的外部媒体备份,您需要单独备份或省略此标志。如果你省略了这个标志,你将需要添加更多的-exclude=参数来避免你不想要的文件系统。这些将是root中的/proc/sys/mnt/media/run/dev目录。/proc/sys是将虚拟文件系统提供给运行内核的变量,因此您不想尝试备份或还原它们。 /dev是一个tmpfs,其内容由udev动态创建和删除,因此您也不想备份或还原它。同样,/run是一个tmpfs,它保存有关不需要备份的运行系统的变量。

  • 重要的是要注意,这些排除是递归的。这意味着位于被排除的所有文件夹中的所有文件夹也将被忽略。在该示例中,排除/media文件夹不包括所有已安装的驱动器和介质。

    • 如果您希望在/media中备份某些分区,只需删除排除,并写入一个不包括您不想备份存储在其中的分区的新分区。例如

      • tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 
  • / - 所有选项都是要备份的目录。因为我们要备份系统上的所有东西,我们使用/作为根目录。像排除项一样,这个递归地包括根目录下不包括在排除项或其他选项中的每个文件夹。

一旦满足该命令,执行它并等待它完成。操作的持续时间取决于文件的数量和压缩选择。一旦完成,请检查您设置的目录以查找存档。在我们的示例中,backup.tar.gz将位于/目录中,一旦完成。然后可以将此归档移动到任何其他目录以进行长期存储。

注意:在进程结束时,您可能会收到一条消息:“tar:错误退出延迟从以前的错误”或某事,但在大多数情况下,您可以忽略该消息。

备用备份

--one-file-system选项的“问题” 将是您必须包含/boot/home或其他分区。

以下是一个tar示例,其中包含有关排除的其他建议,以使生成的归档更小。在使用此示例之前,请查看并理解不包括的内容,并根据需要进行修改。

cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /
tar -cvpzf backup.tar.gz \\
--exclude=/backup.tar.gz \\
--exclude=/proc \\
--exclude=/tmp \\
--exclude=/mnt \\
--exclude=/dev \\
--exclude=/sys \\
--exclude=/run \\ 
--exclude=/media \\ 
--exclude=/var/log \\
--exclude=/var/cache/apt/archives \\
--exclude=/usr/src/linux-headers* \\ 
--exclude=/home/*/.gvfs \\
--exclude=/home/*/.cache \\ 
--exclude=/home/*/.local/share/Trash /
  • /var/log不包括您可能需要或可能不想备份日志的日志。一般建议 - 在台式机上跳过它们,但将其包含在服务器上。
  • /var/cache/apt/archives排除apt下载的任何.deb。这节省了大量的空间。
  • /usr/src/linux-headers*再次是一个空间保护。
  • /home/*/{.cache,.gvfs,.local/share/Trash}可能根本不需要备份这些文件。 

附加提示

  • 为了保持良好的记录,您应该在文件名中包含备份的日期和描述。
  • 另一个选择是使用bzip2压缩您的备份而不是gzip。Bzip2以牺牲速度提供更高的压缩比。如果压缩对您很重要,只需j替换命令中z,并将文件名更改为.tar.bz2本指南的其余部分使用gzip,在使用示例之前进行后续更改。

  • 如果要排除除当前以外的所有其他安装程序 - 这意味着挂载到目录的分区 - 然后使用排除规则附加--one-file-system选项。这具有停止焦油从任何其他任何目录(包括/ mnt或/ media)到其他任何安装位置的效果。例如,许多用户为/home创建一个单独的挂载,以将用户文件夹与根分开,将此选项添加到我们的原始示例将完全排除家庭内容。

存档拆分

如果要将存档刻录到光盘,或将其传输到文件系统的最大文件大小限制(例如FAT32,每个文件限制为4GB),那么在归档创建过程中或之后,您将不得不拆分该文件。一个简单的手段就是使用split命令。以下是两种情况的示例。更多的信息不仅仅是传达到这里,可以在分页的手册页中找到,使用在码头上拆分阅读。确保您将这些档案全部保存在您以后标签提取的目录中。一旦档案被分割成合适的大小,它们可以一次被刻录到光盘上。

在压缩期间分割

tar -cvpz <put options here> / | split -d -b 3900m - /name/of/backup.tar.gz. 
  • 直到管道(|)的前半部分与我们前面的例子相同,除了省略f选项。没有这个,tar会将归档输出到标准输出,然后将其传送到split命令。
  • -d - 此选项意味着归档后缀将是数字而不是字母顺序,每个分割将以01开始顺序,并随每个新的分割文件而增加。

  • -b - 此选项指定要拆分的大小,在此示例中,我已将其设置为3900mB以适应FAT32分区。

  • - - 连字符是输入文件的占位符(通常是已创建的实际文件),并指示拆分以使用标准输入。 

  • /name/of/backup.tar.gz。是将应用于所有生成的分割文件的前缀。它应该直接到你想要的归档文件夹。在我们的示例中,第一个拆分归档将位于/name/of/中,并命名为backup.tar.gz.01。

压缩完成后分割

split -d -b 3900m /path/to/backup.tar.gz /name/of/backup.tar.gz.  
  • 这里不用使用标准输入,而是简单地拆分由/path/to/backup.tar.gz指定的现有文件。

重建存档

重构完整的存档是容易的,首先光盘装入保持拆分档案的目录。然后只需使用cat将所有归档写入一个,并将标准输出发送到tar以提取到指定的目录。

cat *tar.gz* | tar -xvpzf - -C /  
  • 在tar.gz之前和之后,使用*作为通配符,告诉猫从第一个匹配文件开始,并添加匹配的每一个,一个称为catenation的进程,命令如何得到它的名字。
  • 之后,在本示例中,它将所有通过标准输出传递给tar以将其提取到根目录中。
  • 有关恢复的更完整的说明,请参阅恢复

通过网络进行备份

命令tar本身不包括网络支持,但是当与其他程序结合使用时,可以实现此功能。两个常见的选项是netcat(nc)和ssh。

Netcat

命令nc被设计为通用网络工具。它建立了两台联网机器之间的简单连接。这种连接存在,直到用户手动断开连接,不像像文件完成时终止的tcp那样的常规连接。

接收电脑 

在接收端,您将设置netcat来编写备份文件,如下例所示。此命令将设置一个机器接收从网络到端口1024的标准输入,然后将其写入文件backup.tar.gz。端口的选择完全取决于用户,只要是1024或更大。一个简单的例子:

nc -l 1024 > backup.tar.gz 

发送电脑 

在要备份的机器上,tar命令将被管道传输到nc,然后将其通过网络发送备份到要写入文件的相关端口。注意,在<接收主机>的位置,替换为网络上的计算机的名称。f选项被省略,因为我们不写入本地文件,而是通过标准输出移动归档。以下是一个例子:

tar -cvpz <all those other options like above> / | nc -q 0 <receiving host> 1024 

如果一切顺利,备份将通过网络进行管道传输,而不用接触正在读取的文件系统。

SSH

您也可以使用SSH。有关其正确使用的完整说明,请参阅SSH以下命令是可能的例子。

tar -cvpz <all those other options like above> / | ssh <backuphost> "( cat > ssh_backup.tar.gz )"

在示例中:

  • 命令的tar一半与上述相同,省略f选项,通过标准输出将档案管理到ssh并连接到联网的计算机上。
  • ssh_backup.tar.gz将在指定的计算机上创建的文件的名称。

  • <backuphost> - 应该在网络上替换为有问题的计算机的名称。

恢复

您将要从Live CD还原。如果需要,首先分区并格式化驱动器。你可以用gparted来做到这一点然后简单地挂载你要恢复的分区。如果您在nautilus中打开驱动器,它将被自动安装在/media下面看看找出哪里:

ls /media 

恢复您的备份

sudo tar -xvpzf /path/to/backup.tar.gz -C /media/whatever --numeric-owner

简要说明:

  • x - 告诉tar立即提取f选项指定的文件。在这种情况下,档案是/home/test/backup.tar.gz

  • -C <directory> - 此选项告诉tar在提取之前更改为特定目录。在这个例子中,我们正在恢复到根目录(/)。

  • --numeric-owner - 此选项指示tar还原归档文件的数字所有者,而不是匹配您正在还原的环境中的任何用户名。这是因为您要恢复的系统中的用户标识不一定与您用于还原的系统(例如,Live CD)相匹配。

这将覆盖指定的mount上的每个文件和目录中的文件。归档后创建的任何文件将不存在归档中的等效项,因此将保持不变

允许恢复完成所需的时间。一旦提取完成,您可能需要重新创建未包含在原始存档中的目录,因为它们使用--exclude排除在外这不适用于使用--one-file-system排除的文件系统这可以通过以下命令完成:

mkdir /proc /sys /mnt /media 

一旦完成,重新启动,一切都应该恢复到系统的状态,当你进行备份。 

恢复GRUB

要启动系统,您需要恢复grub。为此,您将需要在chroot中进行重新配置:

sudo -s
for f in dev dev/pts proc ; do mount --bind /$f /media/whatever/$f ; done
chroot /media/whatever
dpkg-reconfigure grub-pc 

你会得到一个菜单,询问你应该安装什么驱动器。选择计算机将要启动的任何驱动器。

有关修复grub的更多信息,请参阅GrubHowto

通过网络恢复

这个简短的指南,假设你使用nc进行如上所述的原始备份。

接收电脑 

确保磁盘已安装,并使用以下命令接受网络上的输入,然后将其提取到所指示的路径。在这个例子中,目录/mnt/disk将被提取到。

nc -l 1024 | sudo tar -xvpzf - -C /media/whatever 

发送电脑 

在要发送归档的计算机上,使用以下命令:

cat backup.tar.gz | nc -q 0 <receiving host> 1024 

几点评论: 

  • 一个命令中-字符将告诉tar接受来自标准输入而不是文件的输入。在这种情况下,输入来自管道。 

  • 备份文件将被扩展,而不会保存在接收计算机的磁盘上,与备份时一样。

 

参考:

https://help.ubuntu.com/community/BackupYourSystem/TAR(官方TAR备份还原教程)

http://blog.csdn.net/zeg635702733/article/details/53992224(TAR还原到一个大小不一致的硬盘)

http://www.linuxfly.org/post/493/(迁移Linux)

http://www.jiazhoulvke.com/2014/10/27/linux/(硬盘迁移)

http://www.linuxidc.com/Linux/2015-04/116451.htm(更换主板)

以上是关于Linux系统备份还原工具2(TAR/压缩工具)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 的备份和压缩命令

15Linux文档的压缩与打包

Linux怎么备份与还原

Linux服务器系统备份还原

Linux之tar命令

linux下tar命令详解