标签聚合



最近更新


搜索算法:优学派学生平板U51...

搜索算法:最近,温度骤降加上雨雪天气,让人直呼不想出门,那些要赶去上辅...
刘军SEO:手机回收网-速回收...

刘军SEO:如今手机的更新速度越来越快,各类全面屏手机让人看花了眼。不...
北京SEO:从芯片上讲,为什么...

北京SEO:对于一款电话北京SEO来说,双向通话和实时定位是其最重要的...
百度算法:神操作!业主嫌吵买来...

百度算法:网购平台上的“震楼神器”站长之家(chinaz)11月8日消...
海瑶seo:6名“买家”网购换...

海瑶seo:站长之家(chinaz)11月17日消息为保障买家权益,电...
SEO研究中心:深度推荐 ir...

SEO研究中心:如果你以为一款SEO研究中心机器人就足以彻底代替人工进...
网站推广优化:万合天宜新作《万...

网站推广优化:提到万合天宜,是不是脑子立刻飘出洗脑旋律“万万没想到,啦...
企业网站优化:腾讯背后出刀 与...

企业网站优化:互联网领域真是一个无休无止的战场,但凡想往上爬,就要不断...
haiyaoseo:网狐科技江...

haiyaoseo:2017年11月3日,由gmgc、成都市经济和信息...
seocnm:提前一天退休:3...

seocnm:it之家讯微软将在美国当地时间7月29日终止win7/w...
seo云优化:网易126邮箱开...

seo云优化:无意中发现网易开始为126用户提供升级vip的服务,其产...
排名优化:二胎时代来了,社区育...

排名优化:社区育儿项目一直鲜有人提到,因为在原有的社区环境之下,很难做...

seo推广:Linux文件系统之sparse文件处理与传输

0.什么是sparse文件

当用户申请一块很大的存储空间时,由于最开始并没有写入数据(全是空),此时文件系统为了节省存储资源,提高资源利用率,不会分配实际存储空间,只有当真正写入数据时,操作系统才真正一点一点地分配空间,比如一次64kb。于是这个seo推广看起来很大,而占用空间很小,实际占用空间只与用户填的数据量有关。该文件看起来像一个大盒子,但可能装的东西不多,空洞很大,因此称为稀疏文件(sparsefile)。sparseseo推广是linux文件系统的一个高级特性,能够实现磁盘的超负载使用(overload)。它最经典的应用就是为虚拟机创建虚拟硬盘以及数据库快照,比如我们使用qemu-img创建一个大小为20gb的raw文件(注意qcow2格式不是sparseseo推广):

fgp@node1:~$qemu-imgcreate-frawtest.raw20gformatting'test.raw',fmt=rawsize=21474836480fgp@node1:~$qemu-imginfotest.rawimage:test.rawfileformat:rawvirtualsize:20g(21474836480bytes)disksize:0

以上我们使用qemu-img创建了一个20g的镜像文件,由qemu-imginfo显示,virtualsize为我们分配的空间大小,而disksize为实际占用的空间,最开始并不占任何磁盘空间。

注:qemu-imgcreate-fraw相当于`truncate-s20gtest.raw’。


seo推广:Linux文件系统之sparse文件处理与传输

当然也会有问题,比如系统生成了一堆sparseseo推广,如果文件系统满了,则这些文件都会写入失败,为了避免这种情况,需要控制sparse文件的数量。

1.如何判断是否sparseseo推广


seo推广:Linux文件系统之sparse文件处理与传输

除了以上的镜像文件可能是sparse文件,其他seo推广类型也有可能是sparse文件,如何判断是否sparse文件呢?最简单的办法是使用ls命令和du命令分别查看大小,如果二者大小不一致,则说明是sparseseo推广。我们可以使用dd命令快速生成一个sparseseo推广:

ddif=/dev/zeroof=sparse_filebs=1mseek=1024count=0

以上命令从第1024*1m处开始写seo推广(相当于中间空了1gb空间),写入/dev/zero,实际写入了0个块(count=0),因此实际上并没有写入任何数据。我们使用ls-lh查看其大小:

~$ls-lhsparse_file-rw-rw-r--1fgpfgp1.0gmay2615:47sparse_file

可见该文件显示为1g。

我们再使用du-h命令查看其占用磁盘空间大小:

~$du-hsparse_file0sparse_file

我们发现实际占用磁盘空间为0。

我们也可以直接使用ls的-s参数查看文件实际占用空间大小:

~$ls-slhsparse_file0-rw-rw-r--1fgpfgp1.0gmay2615:47sparse_file

其中第一列为实际占用磁盘空间大小,第6列为seo推广大小(虚拟大小)。

另外使用truncate命令可以随意调节seo推广大小(如果该seo推广不存在则会自动创建),比如:

~$truncate--size1tsparse_file~$du-hsparse_file0sparse_file~$ls-lhsparse_file-rw-rw-r--1fgpfgp1.0tmay2616:09sparse_file

以上我们把sparse_fileseo推广大小调为1tb,实际上就是往后面追加空洞(extendedpart(hole)readsaszerobytes),因此不会占用实际磁盘空间。当然也可以缩小文件大小,但是如果比文件数据占用空间还小的话,就会截取数据,因此部分数据会丢失。

truncate-s500msparse_file~$ls-lhsparse_file-rw-rw-r--1fgpfgp500mmay2616:12sparse_file

以上我们把该文件缩减为500mb。

2.sparseseo推广处理

sparse文件在处理时也存在一些问题,比如我们使用sed对一个sparseseo推广进行处理。

fgp@node1:~/tmp$echo"helloworld">test.rawfgp@node1:~/tmp$truncate-s1gtest.rawfgp@node1:~/tmp$ls-slhtotal68k4.0k-rw-rw-r--1fgpfgp1.0gmay2814:52test.rawfgp@node1:~/tmp$sed-i's/hello/hello/g'test.rawfgp@node1:~/tmp$ls-slhtotal1.1g1.1g-rw-rw-r--1fgpfgp1.0gmay2814:53test.raw

以上我们使用truncate创建了一个sparseseo推广,然后通过sed命令把hello改为hello,我们期望能够保留该文件的sparse特性,但实际上我们发现仅仅修改了该文件的一行数据,该seo推广的空洞被填满,瞬间占用磁盘空间为1g。一个只有4k大小的seo推广使用sed命令后变成了1g,这让人感到莫名其妙不是吗?

再比如我们我们使用tar命令对seo推广进行归档:

fgp@node1:~/tmp$qemu-imgcreate-frawtest.raw1gformatting'test.raw',fmt=rawsize=1073741824fgp@node1:~/tmp$timetar-cftest.tartest.rawreal0m2.145suser0m0.012ssys0m1.640sfgp@node1:~/tmp$timetar-cjftest.tar.xztest.rawreal1m0.692suser0m59.060ssys0m1.048sfgp@node1:~/tmp$ls-lshtotal1.1g0-rw-r--r--1fgpfgp1.0gmay2815:37test.raw1.1g-rw-rw-r--1fgpfgp1.1gmay2815:37test.tar156k-rw-rw-r--1fgpfgp153kmay2815:39test.tar.xz

以上我们创建了一个1g的sparse文件,当使用tar直接归档时发现该seo推广变成了非sparse文件,占用了1g的磁盘空间。而使用xz压缩时,虽然解决了存储空间的问题,同时也带来压缩时间开销问题(耗费了1分钟的时间进行压缩)。

接下来介绍下熟悉的经典命令cp,cp命令可谓无人不知。众所周知,它用于在本地拷贝文件。值得庆幸(为什么庆幸,因为并不是所有的命令都支持该特性)的是cp命令能够自动探测seo推广是否sparse文件,空洞数据不会拷贝,并且能够保留sparceseo推广副本的稀疏性质:

fgp@node1:~$cpsparse_filesparse_filepyfgp@node1:~$ls-slhsparse_file*0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_file0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_filepy

我们看看和cp命令类似的命令scp,scp用于远程拷贝文件(远程传输seo推广):

fgp@node1:~$scpsparse_filelocalhost:~/sparse_filepysparse_file100%2048mb97.5mb/s00:21fgp@node1:~$ls-slhsparse_file*0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_file2.1g-rw-rw-r--1fgpfgp2.0gmay2616:42sparse_filepy

我们发现scp不能识别sparseseo推广,传输一个sparse文件时会自动填满空洞,发送整个文件内容。

其实cp命令有一个针对sparse文件拷贝优化的参数--sparse=when,其中when的合法值为auto、always、never,默认为auto,能自动识别是否sparse文件。如果设置为never则会自动填满数据,拷贝整个seo推广:

fgp@node1:~$cp--sparse=neversparse_filesparse_filepy.2fgp@node1:~$ls-lhssparse_file*0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_file2.1g-rw-rw-r--1fgpfgp2.0gmay2616:42sparse_filepy2.1g-rw-rw-r--1fgpfgp2.0gmay2616:50sparse_filepy.2

可见sparse_filepy.2填满了空洞,相当于把sparseseo推广转化成了非sparseseo推广。

如果指定为always,则cp会尝试把seo推广转换为sparse文件,减少磁盘占用空间:

fgp@node1:~$cp--sparse=alwayssparse_filepysparse_filepy.3fgp@node1:~$ls-lshsparse_file*0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_file2.1g-rw-rw-r--1fgpfgp2.0gmay2616:42sparse_filepy2.1g-rw-rw-r--1fgpfgp2.0gmay2616:50sparse_filepy.20-rw-rw-r--1fgpfgp2.0gmay2616:52sparse_filepy.3

由结果发现,我们把非sparseseo推广sparse_filepy转成了sparseseo推广sparse_filepy.3。

注:cp命令黑科技,cp实现sparseseo推广的相互转换!

其实除了cp命令,我们上面的tar命令也支持–sparse参数:

fgp@node1:~/tmp$timetar-csftest.tartest.rawreal0m0.002suser0m0.000ssys0m0.000sfgp@node1:~/tmp$timetar-csjftest.tar.xztest.rawreal0m0.011suser0m0.000ssys0m0.008sfgp@node1:~/tmp$ls-slhtotal16k0-rw-r--r--1fgpfgp1.0gmay2815:37test.raw12k-rw-rw-r--1fgpfgp10kmay2815:42test.tar4.0k-rw-rw-r--1fgpfgp184may2815:43test.tar.xz

对比前面的结果,我们发现使用tar的-s(–sparse)参数很好的处理sparse文件。

另外cpio也支持同样的参数,但可惜的是scp命令不支持,因此我们使用scp远程传输大量的sparse文件时效率极低,并且浪费大量网络空间。比如我们经常使用qemu-img创建了一个40gb的rawseo推广,然后需要拷贝镜像到其他机器上,虽然该文件可能只占了1gb左右的磁盘空间,可使用scp需要传输40gb的空间,并且远程需要预留40gb的磁盘空间。那有没有高效传输sparseseo推广的方法呢?实际上,很可惜,好像并没有,不过有比较好的方法,请看下一节内容。

3.相对高效传输sparse文件的方法

我们前面说了scp不支持sparseseo推广的处理,好在rsync命令支持sparseseo推广处理:

fgp@node1:~$rsync-av--sparse--progresssparse_filelocalhost:~/sparse_filepyfgp@localhost'spassword:sendingincrementalfilelistsparse_file2,147,483,648100%74.67mb/s0:00:27(xfr#1,to-chk=0/1)sent2,148,008,037bytesreceived35bytes66,092,556.06bytes/sectotalsizeis2,147,483,648speedupis1.00fgp@node1:~$ls-lhssparse_file*0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_file0-rw-rw-r--1fgpfgp2.0gmay2616:39sparse_filepy

遗憾的是,虽然目标seo推广保留了其sparse特性,节省了目标主机的存储空间,但并没有节省网络传输带宽,依然传输了2gb的数据,rsync不能过滤掉空洞数据的传输。

值得一提的是rsync有一个参数--inplace,这个参数能够探测源文件和目标文件是否修改的块,传输时只传递修改的块,当然第一次传输seo推广时,这个参数并没有什么用。但可惜的是–sparse参数和–inplace参数不能同时使用。通常做法是第一次传输seo推广时,使用–sparse参数,之后如果对文件进行了修改,需要同步远程时,使用–inplace参数,它只会在原seo推广的基础上传输更新的块。(可以先在远程目标机器上先使用truncate命令创建一个同名的sparse文件,再使用–inplace参数传递)。

当然如果我们传输的是镜像文件,可以通过qemu-img把raw格式在本地转化为qcow2格式后再传输:

fgp@node1:~/tmp$ls-lshtotal00-rw-rw-r--1fgpfgp10gmay2815:00test.rawfgp@node1:~/tmp$qemu-imgconvert-fraw-oqcow2test.rawtest.qcow2fgp@node1:~/tmp$ls-lshtotal196k196k-rw-r--r--1fgpfgp193kmay2815:12test.qcow20-rw-rw-r--1fgpfgp10gmay2815:00test.raw

转化成qcow2格式后,不再是sparse文件,因此不会存在以上问题。由以上输出我们发现,该文件只有196k,因此传输量大幅度减少。

【本文是51cto专栏作者“付广平”的原创文章,如需转载请通过51cto获得联系】

戳这里,看该作者更多好文


相关链接:

洋舰SEO教程自学网,提供SEO优化的SEO培训教程、SEO优化培训VIP服务,同时提供SEO查询站长工具、SEO排名查询等。SEO交流QQ号 :   28770128
标签: SEO优化公司 百度seo教程 SEO十万个为什么 seo推广
上一篇:seo服务:崩坏3神之键系统讲解攻略 2.1版本神之键系统怎么玩
下一篇:常州seo:发帖软件我推荐博洋论坛营销推广软件