8

使用partclone备份磁盘分区

 3 years ago
source link: https://www.lujun9972.win/blog/2018/03/08/%E4%BD%BF%E7%94%A8partclone%E5%A4%87%E4%BB%BD%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用partclone备份磁盘分区

在linux中,最常用的 block level 备份工具应该非 dd 莫属了。 然而用 dd 做磁盘备份有一个不好的地方就是太费空间,磁盘多大,生成的备份文件就有多大。

partclone 跟 dd 类似,也是一款 block level 的备份工具,因此使用它你无需担心会破坏磁盘中 aclsselinux labels 这一类特殊的文件权限。

但是跟 dd 相比, partclone 能够识别大多数常见的文件类型,只备份磁盘中用到的那些block,从而大大减少备份所耗的空间。

目前 partclone 支持的文件系统格式包括ext2, ext3, ext4, hfs+, reiserfs, xfs, jfs, ntfs, fat(12/16/32), exfat。

对每种文件系统 partclone 都提供了对应的 partclone.<fs> 对应。比如备份 ext4 文件系统则使用 parclone.ext4 进行备份。 对于不支持的文件系统, partclone 也提供了 partclone.dd 来备份。

安装partclone

archlinux上可以直接使用pacman来安装:

sudo pacman -S partclone --noconfirm
resolving dependencies...
looking for conflicting packages...

[0;1mPackages (1)[0m partclone-0.2.89-2

[0;1mTotal Installed Size:[0m  1.48 MiB
[0;1mNet Upgrade Size:    [0m  0.00 MiB

[1;34m::[0;1m Proceed with installation? [Y/n] [0m
(0/1) checking keys in keyring                     [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) checking keys in keyring                     [----------------------] 100%
(0/1) checking package integrity                   [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) checking package integrity                   [----------------------] 100%
(0/1) loading package files                        [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) loading package files                        [----------------------] 100%
(0/1) checking for file conflicts                  [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) checking for file conflicts                  [----------------------] 100%
(0/1) checking available disk space                [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) checking available disk space                [----------------------] 100%
[1;34m::[0;1m Processing package changes...
[0m(1/1) reinstalling partclone                       [[1;33mc[m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m[0;37mo[m[0;37m [m[0;37m [m]   0%
(1/1) reinstalling partclone                       [----------------------] 100%
[1;34m::[0;1m Running post-transaction hooks...
[0m(1/1) Arming ConditionNeedsUpdate...

备份磁盘分区

在备份磁盘分区之前,请先确保被备份的分区需要先卸载。不过如果你是用的 lvm ,那么可以创建一个逻辑卷的 live snapshot,因此可以不受此限制。

下面这个例子,我把安装好的orangepilite做个备份。

将orangepilite断电后,推出TF卡,然后插入读卡器中,插入电脑的USB接口。然后执行

sudo partclone.ext4 -c -s /dev/sdb1 -o /mnt/orangepilite.pcl

-c表示clone一个备份 -s指定clone的源 -o指定保存的镜像文件

你会发现,虽然TF卡是8G,但是产生的orangepilite.pcl只有1.3G

[lujun9972@T520 lujun9972]$ ls -lh /mnt/orangepilite.pcl 
-rw------- 1 root root 1.3G 3月   8 21:23 /mnt/orangepilite.pcl

不过更多的时候,我们会对镜像文件压缩存储,我们可以让 partclonegzip 连用实现这一点

sudo bash -c "partclone.ext4 -c -s /dev/sdb1 |gzip -c -9 >/mnt/orangepilite.pcl.gz"

最后产生的备份文件只有454M

[lujun9972@T520 lujun9972]$ ls -lh /mnt/orangepilite.pcl.gz 
-rw-r--r-- 1 root root 454M 3月   8 21:34 /mnt/orangepilite.pcl.gz

相比之下,用 dd 备份后压缩的大小为5.4G!

[lujun9972@T520 mnt]$ sudo bash -c "dd if=/dev/sdb1 | gzip -c -9 >/mnt/orangepilite.dd.gz"
记录了15205152+0 的读入
记录了15205152+0 的写出
7785037824 bytes (7.8 GB, 7.3 GiB) copied, 601.261 s, 12.9 MB/s
[lujun9972@T520 mnt]$ ls -l /mnt/orangepilite.dd.gz 
-rw-r--r-- 1 root root 5791589654 3月   8 21:49 /mnt/orangepilite.dd.gz
[lujun9972@T520 mnt]$ ls -lh /mnt/orangepilite.dd.gz 
-rw-r--r-- 1 root root 5.4G 3月   8 21:49 /mnt/orangepilite.dd.gz

从备份还原

从备份还原很简单

sudo partclone.ext4 -r -s /mnt/orangepilite.pcl -o /dev/sdb1

这里 -r 表示还原(restore),然后把上面备份的 -s-o 参数值反过来就是了。

若备份的是压缩过的文件,则只需要运行

sudo bash -c "gzip -c -d /mnt/orangepilite.pcl.gz | partclone.ext4 -r -o /dev/sdb1"

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK