完全不对!在文件系统中,文件并不是顺序排列的,也许一个1G的文件有100MB在'0, 0'->100mb地址,后面可以在'10000000, 10000000'->900mb,并不要求这一个G的东西全部按顺序放到一起,控制这一切的,仅仅是一个文件的地址信息(你可以把它想象成指针),所以可以通过改变地址信息控制文件。<br><br><div class="gmail_quote">2008/6/13 Zu <<a href="mailto:zzh@rashost.com">zzh@rashost.com</a>>:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">可能是我没有把问题说清楚,我的原话是:<div class="Ih2E3d"><br><br><b><i>有2个文件,file1和file2,大小都是4G,如果想合并file1和file2,可以 cat<br>
file2>>file1来实现,这样要花几分钟时间。有没有一种办法,能把file2 "剪切"<br>到file1中?也就是说把file2在文件系统中占用的数据块分配给file1?使用的是ext3文件系统。</i></b><br><br></div>mv 的作用是把一个文件改一个名字,该文件除了文件名以外其他信息都不变,所以mv的速度特别快。mv不能把一个文件的内容移动到另一个文件的末尾去。我觉着下面shell909090说的比较有道理:<br>
<br><b><i>有点困难,因为根据我的理解,任何文件在磁盘中都是"块</i></b><div><b><i>"的集合存储的。如果头<br>
一个文件正好放满N块还好说,如果正好差一点,那么后面的数据按</i></b><b><i>照规则必须先<br>
填充前面的块。这样会造成后一个文件全面的内容位移</i></b><b><i>,其读写数据量没有比直接<br>
附加低多少。</i></b></div><br>举例:<br>file1的文件长度是1个字节,在块大小是4k的ext3文件系统下,这个文件要占用4k的空间,也就是一个块的空间。<br>file2的文件长度是8K+1个字节,在块大小是4k的ext3文件系统下,这个文件要占用8K+4k的空间,也就是3个块的空间。<br>如果要把file2剪切到file1的末尾,要做到比"cat file2>>file1"更快,不修改内核中的文件系统能做到吗?<br>
<br>2008/6/13 马利 <<a href="mailto:richard.ma.19850509@gmail.com" target="_blank">richard.ma.19850509@gmail.com</a>>:<div class="Ih2E3d"><br>> 看看mv的源代码就差不多了吧,适当复用,没看出来和内核有什么关系<br>><br>> --<br>> 马利<br>> <a href="http://richard.ma" target="_blank">richard.ma</a><br>
</div><div><div></div><div class="Wj3C7c">
> --<br>> ubuntu-zh mailing list<br>> <a href="mailto:ubuntu-zh@lists.ubuntu.com" target="_blank">ubuntu-zh@lists.ubuntu.com</a><br>> <a href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh" target="_blank">https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh</a><br>
><br>><br><br><br><br>-- <br>瑞豪开源VPS - 基于Linux/Xen - 最低58元/月 - 免费试用<br><a href="http://www.RasHost.com" target="_blank">http://www.RasHost.com</a><br>
</div></div><br>--<br>
ubuntu-zh mailing list<br>
<a href="mailto:ubuntu-zh@lists.ubuntu.com">ubuntu-zh@lists.ubuntu.com</a><br>
<a href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh" target="_blank">https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh</a><br>
<br></blockquote></div><br>