Bootstrap

Linux Tar打包 备份 恢复 克隆到新的硬盘 操作流程方法

概述

    1.当我们配置系统和环境后,要备份或则克隆到其他硬盘上,该怎么做呢?下面介绍一下tar方法。我们都知道的Linux系统是万物皆文件。那么系统当然也可以把它当文件打包,tar是linux下的一个打包工具,下面用的ubuntu系统做示例,看看怎么操作吧。

一,系统备份

    参考自此篇文章:https://help.ubuntu.com/community/BackupYourSystem/TAR

    1.去到你的系统的根目录下

cd /

    2.切换到根用户,或者用su指令

su root

    3.备份系统

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,它保存有关正在运行的系统的不需要备份的变量。

执行完成后,可能会出现一些提示或错误,“tar:Error exit from previous errors”或文件已经更改之类的消息,可以忽略它。

然后把backup.tar.gz这个备份文件复制到你的硬盘U盘。

2.为恢复到新硬盘,做准备

    1.首先备份一下UUID

sudo blkid

记录一下这些信息,我的是这样的,备份下来后面会用到

/dev/sda1: UUID="6815-BB32" TYPE="vfat" PARTUUID="e8860503-01"
/dev/sda2: UUID="0a93b854-4bb1-4e95-8805-72839b44d8ce" TYPE="ext4" PARTUUID="e8860503-03"
/dev/sda3: UUID="55e55928-707f-4109-b482-e95f8887ad75" TYPE="swap" PARTUUID="e8860503-05"

 备份一下硬盘挂载信息

df -h

 可见我的sda2是挂载在boot/efi下面的,到时候恢复也要创建这个目录并把sda2上挂载上去

udev            3,9G     0  3,9G   0% /dev
tmpfs           795M  9,3M  786M   2% /run
/dev/sda2       109G   31G   73G  30% /
tmpfs           3,9G  176K  3,9G   1% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           3,9G     0  3,9G   0% /sys/fs/cgroup
/dev/sda1       511M  1,2M  510M   1% /boot/efi
tmpfs           795M   52K  795M   1% /run/user/1000

    2.备份一下,硬盘分区格式及大小

sudo fdisk -l

得到,备份记录下来,后面会用到

Disk /dev/sda: 119,2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A3E432CA-5547-4E0D-839D-7C30FC6167C9

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   1050623   1048576   512M EFI System
/dev/sda2    1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3  233359360 250068991  16709632     8G Linux swap

    3.用live-cd启动ubuntu,也就是一个linux的启动盘,开机时选试用ubuntu(try ubuntu,一般是第一个),(系统盘的制作可以在网上查阅,这里不说)

打开终端,对新的硬盘进行分区和格式化,查看硬盘的标号,一般是sda

sudo fdisk -l

然后用fdisk分区

sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): 

输入d,把原有的分区都删除掉,然后输入p查看分区

Disk /dev/sda: 119,2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A3E432CA-5547-4E0D-839D-7C30FC6167C9

Device         Start       End   Sectors   Size Type

然后新建分区,输入n,分区号和大小都要和之前备份的那个一样,重复3次后是这样的

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   1050623   1048576   512M Linux filesystem
/dev/sda2    1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3  233359360 250068991  16709632     8G Linux filesystem

对sda1分区类型进行更改,输入t,选1,输入1,就是linux efi类型了,全部类型可以在输入t后输入l查看。看着对应的来就行了。

对sda2分区类型进行更改,输入t,选2,输入83,Linux文件系统类型

对sda3分区类型进行更改,输入t,选3,输入19,linux swap类型

然后就和原来的分区一样了

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   1050623   1048576   512M EFI System
/dev/sda2    1050624 233359359 232308736 110,8G Linux filesystem
/dev/sda3  233359360 250068991  16709632     8G Linux swap

然后输入w 保存退出 

    4.对分区格式化,根据之前的UUID信息和格式

格式化sda1

sudo mkfs.vfat /dev/sda1

格式化sda2,更改uuid,这里的-U后面的uuid就是之前记录下来的要一样

sudo mkfs.ext4 -U 0a93b854-4bb1-4e95-8805-72839b44d8ce /dev/sda2

格式化sda3上,更改UUID

sudo mkswap -U 55e55928-707f-4109-b482-e95f8887ad75 /dev/sda3

好了,准备工作做完了。

三,系统恢复

可以开始恢复系统了

    1.挂载系统根目录,就是系统文件的那个分区,我这里是sda2,挂载到mnt下面

sudo mount /dev/sda2 /mnt

在MNT根目录下面,新建boot/efi目录,挂载sda1

sudo mkdir /mnt/boot
sudo mkdir /mnt/boot/efi
sudo mount /dev/sda1 /mnt/boot/efi

将你之前复制的backup.tar.gz放到到/mnt/目录下,准备恢复

去到mnt目录下

cd /mnt

切换到根用户或者用sudo的命令,由于live-cd没有用户密码所以先要设置根的密码

sudo passwd root

su

解包的备份文件

tar -xvpzf backup.tar.gz -C . --numeric-owner

命令解释:

简要说明:

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

-C <directory> - 此选项告诉tar在解压缩之前更改为特定目录。在此示例中,我们将还原到根(/mnt)目录。

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

IconsPage /warning.png 这将覆盖指定装载中的每个文件和目录,并使用存档中的文件和目录。归档后创建的任何文件都不会存储在归档中,因此将保持不变允许恢复需要完成的时间。提取完成后,您可能需要重新创建原始存档中未包含的目录,因为您使用--exclude将其排除。这不适用于--one-file-system排除的文件系统。这可以使用以下命令完成:

mkdir /proc /sys /mnt /media 
完成后,重启并在进行备份时将所有内容恢复到系统状态。

查看sda1的UUID,更改/etc/fstab中文件里面的sda1的UUID

sudo blkid

我的显示是

/dev/sda1: UUID="48e1-89a1" TYPE="vfat" PARTUUID="e8860503-01"

将里面的UUID复制,打开的/mnt/etc/fstab中

sudo gedit /mnt/etc/fstab

看见

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=0a93b854-4bb1-4e95-8805-72839b44d8ce /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=6815-BB32  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/sda3 during installation
UUID=55e55928-707f-4109-b482-e95f8887ad75 none            swap    sw              0       0

找到

# /boot/efi was on /dev/sda1 during installation
UUID=6815-BB32  /boot/efi       vfat    umask=0077      0       1

将UUID后面的码换成刚刚得到的48e1-89a1,保存,退出。

    2.修复GRUB

参考此链接:https://jingyan.baidu.com/article/5553fa82cd48a765a23934ae.html

此过程中要联网,在终端输入

sudo -i add-apt-repository ppa:yannubuntu/boot-repair 
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

等待下载完成后,有个窗口弹出,选择Recommended repairs

等待它自动完成,弹出的窗口选是就行了。

完成后,重启就可以进入系统了。

;