• linux下fallocate快速创建大文件


    以前创建文件我一般用dd来创建,例如创建一个512M的文件:

    dd命令可以轻易实现创建指定大小的文件,如

    dd if=/dev/zero of=test bs=1M count=1000

    会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源)

    但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢

    在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘

    则可以

    dd if=/dev/zero of=test bs=1M count=0 seek=100000

    此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当

    seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的

    当然,因为不实际写入硬盘,所(www.111cn.net)以你在容量只有10G的硬盘上创建100G的此类文件都是可以的


    记得以前做Windows开发的时候,有个API叫SetEndOfFile,可以用来将文件内部游标所在位置设为文件末尾,可以用来截取或者扩展文件,这个函数本质上相当于直接操作文件分区表的结构,用它来作文件扩展是不需要频繁的填充文件,linux下肯定也有对应的东西,即ftrunc/truncate这两个函数。

    那么直接利用这个特性来创建大文件的工具就肯定有人做好了,经搜索找到了fallocate和truncate两个命令, 以及GNU dd的seek扩展:

    代码如下 复制代码
    # fallocate -l 10G bigfile
    # truncate -s 10G bigfile
    # dd of=bigfile bs=1 seek=10G count=0

    文件系统对于这样创建的文件有特殊处理,叫稀疏文件,现在创建大文件光速了,再也不用纠结等半天了。
    from:http://www.111cn.net/sys/linux/55537.htm

  • 相关阅读:
    设计带构造函数的Dog类 代码参考
    动态生成Person类的对象 代码参考
    Fragment传值
    Fragment的创建
    显示Intent和隐式Intent
    Intent及其七大属性及intent-filter设置
    Activity传值的几种方式
    认识Activity
    GridView的基本使用
    Spinner的基本使用
  • 原文地址:https://www.cnblogs.com/alibai/p/4111715.html
Copyright © 2020-2023  润新知