目的
学习如何使用partclone实用程序备份分区
要求
- 根权限
- 必须卸载备份分区
困难
简单
约定
介绍
如果你曾经用过Clonezilla
要创建操作系统的备份,您已经体验了partclone
。不像其他工具dd
,partclone知道如何与特定的文件系统进行交互,因此它可以创建更小的备份,仅克隆分区中的已用空间。在本教程中,我们将学习如何使用partclone
从命令行。
块级备份
备份可以在文件级别或更深的级别进行block level
。前者是partclone运行的级别。我们都知道和爱dd
,但是使该程序在某些情况下出色的特征之一,在其他情况下也表现出劣势:dd对文件系统一无所知。该程序仅复制磁盘或分区的每个块,从而创建1:1完美克隆(一个160GiB磁盘,将产生一个160Gib备份)。 Partclone的行为有所不同,因为它可以与最常见的文件系统类型进行智能交互,仅备份分区中已使用的块,从而获得更小的备份。
partclone操作于block level
给我们带来的好处是,不必担心保留诸如acls
要么selinux labels
。
支持的文件系统
Partclone支持所有最常用的文件系统,例如:ext2,ext3,ext4,hfs +,reiserfs,xfs,jfs,ntfs,fat(12/16/32),exfat等。要备份的文件系统将确定与文件系统一起使用的后缀。程序,遵循语法partclone.<fileystem_type>
效用。例如,要备份ext2文件系统,我们将使用parclone.ext2
命令。此外,如果partclone不支持某些特定的文件系统,partclone.dd
可以使用。
安装
Partclone应该在最常见的发行版存储库中可用。要在Ubuntu或Debian中安装它,我们可以使用apt:
# apt-get update && apt-get install partclone
要将其安装在Fedora上:
# dnf install partclone
在CentOS和Rhel上,我们应该首先启用EPEL
软件源(Enterprise Linux的额外软件包)。 CentOS在官方资源库中提供了epel-release软件包,因此要启用此软件源,我们只需要运行:
# yum install epel-release
在Rhel上启用EPEL存储库需要额外的步骤。首先,我们必须从项目页面下载epel-release软件包,然后我们应该安装检索到的软件包:
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install epel-release-latest-7.noarch.rpm
启用存储库后,我们只需要使用yum
安装partclone软件包:
# yum install partclone
在Archlinux上,我们可以通过pacman安装partclone:
# pacman -S partclone
克隆分区
足够多的文字,让我们看看partclone的作用。首先,我们必须记住,要克隆分区,一定不能挂载它。因此,如果要备份系统分区,则必须从活动CD访问驱动器(这是clonezilla所做的)。如果您使用lvm
在分区系统上,我们不受此限制,因为我们可以创建逻辑卷的实时快照并对其运行partclone,从而保留正常运行时间。
我将备份从用作逻辑卷的快照/home
划分。格式为ext4
文件系统,它被称为home_snap_lv
。我们要做的就是:
# partclone.ext4 -c -s /dev/fingolfin_vg/home_snap_lv -o /mnt/data/backup.pcl
让我们分析一下命令。首先,我们使用与我们感兴趣的文件系统相关的扩展名ext4运行partclone。然后我们提供了-c
选项。这使我们可以指定要执行的操作是克隆(partclone也可以用于还原备份)。的-s
选项让我们指定要克隆的源(在本例中为逻辑卷快照home_snap_lv)。最后-o
选项,简称--output
,告诉partclone我们要将备份映像存储在哪里。请注意.pcl
这里的扩展名是完全任意的:为了方便起见,我们只使用它。
启动后,partclone将显示操作进度:
Partclone v0.3.11 http://partclone.org
Starting to clone device (/dev/fingolfin_vg/home_snap_lv) to image (/mnt/data/backup.pcl)
Reading Super Block
Calculating bitmap... Please wait...
Elapsed: 00:00:01, Remaining: 00:00:00, Completed: 100.00%
Total Time: 00:00:01, 100.00% completed!
done!
File system: EXTFS
Device size: 16.1 GB = 3932160 Blocks
Space in use: 2.2 GB = 547088 Blocks
Free Space: 13.9 GB = 3385072 Blocks
Block size: 4096 Byte
Elapsed: 00:00:02, Remaining: 00:00:44, Completed: 4.31%, 2.90GB/min,
current block: 52992, total block: 3932160, Complete: 1.35%
但是,也可以使用ncurses表示那些信息”graphically”(这是clonezilla所做的)。我们要做的就是添加-N
选项。正在运行:
# partclone.ext4 -N -c -s /dev/fingolfin_vg/home_snap_lv -o /mnt/data/backup.pcl
将产生以下输出:
压缩备份
如前所述,partclone仅在文件系统上备份使用的块,从而优化了存储备份所需的空间。但是,由于Shell重定向的强大功能,我们可以将partclone与gzip
快速生成较小的备用图片:
# partclone.ext4 -c -s /dev/fingolfin_vg/home_snap_lv | gzip -c -9 > /mnt/data/backup.pcl
这次我们没有使用-o
选项以指定输出文件。相反,我们通过管道将程序的标准输出传递给gzip
标准输入。我们还指定了-c
选项,简称--stdout
,让我们修改gzip行为以压缩或解压缩为stdout
。使用的压缩级别由-9
选项,可用的最大值。默认压缩率是-6
。或者--fast
可以用来使用最快的压缩方式,从而提高速度而不是效率,反之亦然,--best
对于相反的行为,获取最小的文件。
最后,我们使用了>
运算符,将输出重定向到我们所需的目标文件。您会注意到我添加了一个.gz
前缀:这也是完全可选的,并且仅出于约定。
还原备份
Partclone还可以用于在现有分区上还原以前制作的备份。唯一的限制是该分区的大小必须大于或等于原始分区。
恢复备份非常容易。例如,我们要还原先前制作的备份(同样必须卸载分区):
# partclone.ext4 -r -s /mnt/data/backup.pcl -o /dev/fingolfin_vg/home_snap_lv
这次我们提供了-r
选项,简称--restore
,并反转了我们之前使用的参数。先前用于-o
选项,这次代表我们的来源,因此我们将其用作-s
选项。备份的源之前是分区,这次是我们的目的地,因为我们要还原备份。
如果我们使用gzip压缩partlcone输出,则恢复备份的命令会有所变化。我们必须解压缩包,然后使用 shell 的强大功能即时恢复它:
# gzip -c -d /mnt/data/backup.pcl.gz | partclone.ext4 -r -o /dev/fingolfin_vg/home_snap_lv
的-c
开关,再次用于解压缩为stdout,通过使用-d
选项,将压缩文件的名称作为参数传递。然后,将输出通过管道传递给partclone stdin并还原到原始分区。可以使用以下命令获得与上述命令相同的结果zcat
程序:
zcat /mnt/data/backup.pcl.gz | partclone.ext4 -r -o /dev/fingolfin_vg/home_snap_lv
总结思想
Partclone是clonezilla使用的核心程序,并且是一个非常不错的工具,它仅考虑已使用的块即可获得文件系统的”smart”备份。将其与lvm分区结合使用,无需重新引导系统即可获得分区的备份。有关此真正有用的程序的更多信息,请参考其手册。