如何远程拷贝稀疏文件?

how to remote copy sparse file?

2017.11.09 21:43:04字数 439阅读 380

如何远程拷贝稀疏文件?

何谓稀疏文件

就是有空洞的文件,空洞并没有实际占用硬盘的物理空间。
Linux中常见的qcow2文件和raw文件,都是稀疏文件。

 

image.png


 

上图中的disk size < virtual size 的文件就是sparse file.

how to query sparse file's real size ?

最通用的方式是:

qemu-img info

很多地方写着ls -ls [sparse file] 也能显示出 sparse file's real size , 实测不然,要看使用的是什么文件系统。

xfs 下, ls -al 可以
tmpfs下 , ls 不行。

 [root@host0 run]# ls -ls disk.raw

20480 -rw-r--r-- 1 root root 53687091200 Nov  9 16:40 disk.raw

[root@host0 run]# ls -alh  disk.raw

-rw-r--r-- 1 root root 50G Nov  9 16:40 disk.raw

[root@host0 run]# qemu-img  info disk.raw

image: disk.raw

file format: raw

virtual size: 50G (53687091200 bytes)

disk size: 20M

[root@host0 run]# mount |grep run

tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)

proc on /run/docker/netns/b864c4925b13 type proc (rw,nosuid,nodev,noexec,relatime)

tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=52702352k,mode=700)

[root@host0 run]# pwd

/run

不要习惯性的使用scp去拷贝这种稀疏文件

用scp的后果是网络传输大小为该文件的virtual size .

  1. 浪费磁盘空间,
  2. 如果这个稀疏文件很大的话,scp会很慢。

rsync -S

rsync --sparse sparse-1 sparse-1-copy

资料上说是可以, 但实际测试发现rsync这个参数没有用。

[root@cloud-sz-kolla-b13-01 run]# rsync -avSh disk.raw  /opt/

sending incremental file list

disk.raw

^Crsync error: received SIGINT, Sjavascript:void(0)IGTERM, or SIGHUP (code 20) at rsync.c(551) [sender=3.0.9]

时间太长受不了了,这个参数有毛用啊!!!

通过nfs file system去cp

在目的服务器上配置一个nfs server, 然后在源server上mount , cp 这个文件。

这种方式适合实验环境, nfs server配置比较容易,但如果是生产环境,涉及到防火墙规则。

最佳实践:先tar,再scp

tar命令有一个针对sparse file的参数

tar S
有资料说先gzip或者tar再scp, 实验对比结果如下:

[root@cloud-sz-kolla-b13-01 run]# time tar cSf disk.raw.tar  disk.raw

 

real    1m7.728s

user    0m34.368s

sys     0m33.363s

 

[root@cloud-sz-kolla-b13-01 run]# time gzip -c disk.raw > disk.raw.gz

 

real    7m33.054s

user    7m27.749s

sys     0m5.322s

 

[root@cloud-sz-kolla-b13-01 run]# ls -alh disk.raw*

-rw-r--r-- 1 root root 50G Nov  9 16:40 disk.raw

-rw-r--r-- 1 root root 50M Nov  9 16:53 disk.raw.gz

-rw-r--r-- 1 root root 10K Nov  9 16:43 disk.raw.tar

 

所以tar比gzip 在处理sparse文件上强太多了。

Issues

raw文件拷贝过后文件大小发生变化

[root@cloud-sz-kolla-b13-01 images]# mount |grep repos

10.53.22.9:/vol_yum_repos on /var/ftp/pub/repos type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.63.246,local_lock=none,addr=10.53.22.9)

[root@cloud-sz-kolla-b13-01 images]# pwd

/var/ftp/pub/repos/images

 

[root@cloud-sz-kolla-b13-01 images]# qemu-img  info Atomic-26.raw

image: Atomic-26.raw

file format: raw

virtual size: 6.0G (6442450944 bytes)

disk size: 1.5G

 

[root@cloud-sz-kolla-b13-01 images]# cp Fedora-Atomic-26-20171030.0.x86_64.raw.tar  /opt/a/

[root@cloud-sz-kolla-b13-01 images]#

 

[root@cloud-sz-kolla-b13-01 a]# qemu-img info Fedora-Atomic-26-20171030.0.x86_64.raw

image: Fedora-Atomic-26-20171030.0.x86_64.raw

file format: raw

virtual size: 6.0G (6442450944 bytes)

disk size: 2.1G

为何从1.5G 变成了2.1G?

  • source: 是一个nfs文件系统
  • destination: /opt是一个xfs文件系统。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值