zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ES6 基础
    JavaScript 基础
    Java 虚拟机
    MinIO 搭建使用
    .NET 半天搭建Jenkins持续集成与自动化部署系统
    驱动领域DDD的微服务设计和开发实战
    走向架构师必备的技能
    分布式系统与消息的投递¶
    求数组的子数组之和的最大值
    KVO初探
  • 原文地址:https://www.cnblogs.com/alibai/p/4111715.html
Copyright © 2011-2022 走看看