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的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的

当然,因为不实际写入硬盘,所以你在容量只有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

文件系统对于这样创建的文件有特殊处理,叫稀疏文件,现在创建大文件光速了,再也不用纠结等半天了。

时间: 2016-12-02

linux下fallocate快速创建大文件的相关文章

Linux下清空或删除大文件内容的5种方法

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意:在我们进一步深入了解这些方法之前,请记住: 由于在 Linux 中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 前面已经说道,下面的这些方法都是从命令行中达到清空文件的目的

Linux 下清空或删除大文件内容的 5 种方法

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意:在我们进一步深入了解这些方法之前,请记住: 由于在 Linux 中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 前面已经说道,下面的这些方法都是从命令行中达到清空文件的目的

linux下shell脚本切割大文件为多个小txt文件

解决方法: 1. 先使用split命令切割大文件,每个小文件保存100万行 split 参数: -b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等: -l  :以行数来进行分割: #按每个文件1000行来分割除 split -l 1000 httperr8007.log httperr   httpaa,httpab,httpac ........   #按照每个文件100K来分割 split -b 100k httperr8007.log http   httpaa,ht

Linux 中清空或删除大文件内容的五种方法_Linux

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何Linux命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意: 由于再Linux中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 提示:在下面的示例中,我们将使用名为 access.log 的文件来作为示例样本. 1. 通过重定向到 Nul

PHP如何快速读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较

Linux下的目录创建命令使用实践

[文章摘要]        本文以实际的C源程序为例子,介绍了Linux下的目录创建命令(mkdir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词]        C语言  Linux  目录创建  makefile  开发   一.mkdir命令简介         mkdir命令用来创建指定名称的目录,其命令格式为:mkdir [选项] 目录...        其中,[选项]可以是"-m"."-p"或"-v".此外,目录名是

Linux下最快速共享目录的方法

Linux下最快速共享目录的方法 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目团队,还想在一分钟内做到,怎么办? 很简单,使用SimpleHTTPServer. 各种Linux发行版通常都内置了Python,故使用此

Linux下编写Lua扩展so文件和调用方法实例

  这篇文章主要介绍了Linux下编写Lua扩展so文件和调用方法实例,本文给出C语言代码.编译SO文件.Lua中调用代码实例,需要的朋友可以参考下 代码如下: #include #include #include #include #include #include #include #include #include #include #include "lua.h" #include "lualib.h" #include "lauxlib.h&qu

linux下svn提交忽略某些文件、目录(ignore属性

 svn也是一个目录同步了我们可以用它来做版本控制了,下面一起来看看关于linux下svn提交忽略某些文件.目录(ignore属性),希望例子对各位有帮助.     在项目中,有些文件是不需要将本地的提交到svn仓库,例如config.php文件,特别是定义了绝对路径的,或者是缓存目录.图片目录等,所以为了方便,在每次提交svn的时候,都需要忽略这些文件.目录,避免不慎提交引起团队中其他成员需要修改其本地的版本. linux下用svn propedit svn:ignore命令可以编辑忽略文件.