当前位置:首页 > 尘凡 > 正文内容

使用partclone备份磁盘分区

满纸空言4年前 (2021-04-15)尘凡19790

转自:http://blog.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/ 


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

partclone 跟 dd 类似,也是一款 block level 的备份工具,因此使用它你无需担心会破坏磁盘中 acls 或 selinux 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

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

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"


扫描二维码推送至手机访问。

版权声明:本文由满纸空言发布,如需转载请注明出处。

本文链接:https://mzky.cc/post/5.html

分享给朋友:

“使用partclone备份磁盘分区” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。