一,fallocate的用途?

1,用途

我们有时需要用大文件来测试下载速度,

有时需要用大文件来覆盖磁盘空间,

如果在网上搜索,很多文章讲的是使用dd等工具,

事实上linux系统已经内置了生成大文件的工具,

fallocate

使用非常的方便

2,fallocate和truncate有所区别

fallocate:为文件预分配物理空间,不是生成空洞文件

而且fallocate分配的空间在磁盘的扇区上是连续的,

能减少后续写入和读取文件时的磁盘寻道的资源开销

truncate:生成的是空洞文件,并不占用实际的磁盘空间,

只是文件看上去逻辑大小比较大,

但实际占用的空间是0

本文中会举例子来说明

3,什么是空洞文件?

UNIX的文件操作,允许操作的偏移位置超过当前的文件长度,

这样中间留出的空间的字节会被设置为0,

这部分空间被称为空洞(hole)

linux系统上空洞不占用实际的硬盘空间

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,查看fallocate命令所属的包?

[root@centos8 logs]# whereis fallocate
fallocate: /usr/bin/fallocate /usr/share/man/man1/fallocate.1.gz /usr/share/man/man2/fallocate.2.gz [root@centos8 logs]# rpm -qf /usr/bin/fallocate
util-linux-2.32.1-17.el8.x86_64

fallocate在centos8上默认已内置,

如果有误删此命令,可以用dnf安装

[root@centos8 logs]# dnf install util-linux

三,查看fallocate的版本和帮助

1,查看fallocate的版本

[root@centos8 logs]# fallocate --version
fallocate,来自 util-linux 2.32.1

2,查看fallocate的帮助

[root@centos8 logs]# fallocate --help
用法:
fallocate [选项] <文件名> 为文件预分配空间或从文件回收空间。 选项:
-c, --collapse-range 移除文件中的某个范围
-d, --dig-holes 检测零并替换为空洞
-i, --insert-range insert a hole at range, shifting existing data
-l, --length <数字> 范围操作的长度(字节数)
-n, --keep-size 保持文件的显示大小
-o, --offset <数字> 范围操作的偏移量(字节数)
-p, --punch-hole 将某个范围替换为空洞(连带打开 -n)
-z, --zero-range 清零并保证分配某个范围
-x, --posix use posix_fallocate(3) instead of fallocate(2)
-v, --verbose 详尽模式 -h, --help display this help
-V, --version display version 更多信息请参阅 fallocate(1)。

3,​查看fallocate的手册

[root@centos8 logs]# man fallocate

四,fallocate的使用例子:

1,按指定大小生成文件

#-l: length,指定文件的长度

[root@centos8 logs]# fallocate -l 50M /data/web/www/html/b.zip

查看文件的显示大小

#-h: human-readable,用人性化的方性显示结果

[root@centos8 html]# ll -h b.zip
-rw-r--r-- 1 root root 50M 5月 8 14:25 b.zip

查看文件占用磁盘空间的大小

[root@centos8 html]# du -sh b.zip
50M b.zip

说明:我们用du查看文件可以看到,

用fallocate生成的文件在磁盘上确实占用了50M的空间

而不是一个空洞文件

2,把前面创建的大文件中的零替换为空洞:

#-d:挖洞,仅替换为0的数据,使不再占用多余的磁盘空间

[root@centos8 html]# fallocate -d b.zip

查看占用磁盘空间的大小

[root@centos8 html]# du -sh b.zip
84K b.zip

查看文件显示大小

[root@centos8 html]# ll -h b.zip
-rw-r--r-- 1 root root 50M 5月 8 15:21 b.zip

逻辑大小还是50M,

但对磁盘的占用变成了84K

3,在文件上挖出指定大小的空洞

生成一个占用30M磁盘空间的文件

生成一个30M大小的文件

[root@centos8 html]# fallocate -l 30M c.zip
[root@centos8 html]# ll -h c.zip
-rw-r--r-- 1 root root 30M 5月 8 15:33 c.zip
[root@centos8 html]# du -sh c.zip
30M c.zip

du命令显示文件确实是30M大小

从偏移10M的位置挖一个10M大小的洞

应该还剩20M

#-p:挖洞,不管文件中是否有非0数据,会改变文件的内容

#-o:  偏移位置

#-l: 挖洞的大小

[root@centos8 html]# fallocate -p -o 10M -l 10M c.zip

查看文件显示大小

[root@centos8 html]# ll -h c.zip
-rw-r--r-- 1 root root 30M 5月 8 15:38 c.zip

查看文件占用磁盘空间的大小

[root@centos8 html]# du -sh c.zip
20M c.zip

五,看一个truncate的例子:

#-s: 指定文件大小

[root@centos8 logs]# truncate -s 100M ./trunc100

查看文件显示大小

[root@centos8 logs]# ll -h trunc100
-rw-r--r-- 1 root root 100M 5月 8 14:57 trunc100

查看文件占用磁盘空间的大小

[root@centos8 logs]# du -sh trunc100
0 trunc100

可见文件占用磁盘空间为0

用od把生成的文件打印出来,可以看到中间填充的是\0

#-c,  select printable characters or backslash escapes

#-c: 相当于 -t c ,表示输出可打印字符和转义字符

[root@centos8 logs]# od -c trunc100
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
620000000

六,查看centos的版本

[root@centos8 logs]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

linux(centos8):用fallocate快速生成大文件的更多相关文章

  1. Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  2. linux使用dd命令快速生成大文件

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  3. 使用dd命令快速生成大文件或者小文件的方法

    使用dd命令快速生成大文件或者小文件的方法     转载请说明出处:http://blog.csdn.net/cywosp/article/details/9674757     在程序的测试中有些场 ...

  4. 使用dd命令快速生成大文件或者小文件

    使用dd命令快速生成大文件或者小文件 需求场景: 在程序的测试中有些场景需要大量的小文件或者几个比较大的文件,而在我们的文件系统里一时无法找到那么多或者那么大的文件,此时linux的dd命令就能快速的 ...

  5. linux下fallocate快速创建大文件

    以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1 ...

  6. linux下使用split 来分割大文件

    linux下使用split 来分割大文件 2010-07-27 15:46:27|  分类: 技术文稿 |  标签:split  分割  linux   |字号 订阅   平常都是使用ssh来进行远程 ...

  7. PHP几个快速读取大文件例子

    PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents ...

  8. 利用Linux的硬连接删除MySQL大文件

    利用Linux的硬连接删除MySQL大文件 http://blog.csdn.net/wxliu1989/article/details/22895201 原理:硬链接基础当多个文件共同指向同一ino ...

  9. Java快速读取大文件

    Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...

随机推荐

  1. python3中抛异常except后面参数

    try: xxx except exception as e: print("给exception取了个别名叫做e") else: ccc

  2. vue自适应布局的n中方法

    在index.html中 head标签中 <script> //通过window.screen.width获取屏幕的宽度 var offWidth = window.screen.widt ...

  3. maximo入门---开发者提要

    1.添加控件 在一个程序设计器里添加控件,控件必须要和这个程序对象(这个程序关联的表)的一个属性绑定 ps maximo挺高级的,比如一个date类型的输入框,会自动给他补上时间控件 2.复制程序 复 ...

  4. 【思维】The Four Dimensions of Thinking :长线思维的力量

    "经历过这些苦难之后,我拥抱了一种新的人生哲学,就是更多地关注在那些长期可以获得复利的小收获上,而不是那种频繁的短跑冲刺和精力消耗". 斯坦福教授,著名的心理学家Philip Zi ...

  5. JVM学习(四)JVM调优

    一.调优命令 Sun JDK监控和故障处理命令有jps.jstat.jmap.jhat.jstack.jinfo jps,JVM Process Status Tool,显示指定系统内所有的HotSp ...

  6. kafka学习(四)kafka安装与命令行调用

    文章更新时间:2020/06/07 一.安装JDK 过程就不过多介绍了... 二.安装Zookeeper 安装过程可以参考此处~ 三.安装并配置kafka Kafka下载地址  http://kafk ...

  7. ubuntu桌面版修改屏幕刷新率之后无法进入桌面(一直卡在输入密码的界面)的解决办法

    deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiversedeb-src https://mir ...

  8. PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox

    PHAR:// PHP文件操作允许使用各种URL协议去访问文件路径:如data://,php://,等等 include('php://filter/read=convert.base64-encod ...

  9. git的详细使用,项目创建到同步远程仓库,版本回退,忽略文件,分支创建,分支合并,分支名称修改,冲突解决,项目迁移

    注意:此处省略git的安装 1..git的工作流程示意图: 2.本地仓库的初始化: 2.1 创建一个文件夹,如我创建的是:D:\gitdemo\shop 2.2 进入shop目录,鼠标右键,打开git ...

  10. Centos-配置网络或显示当前网络接口状态-ifconfig

    ifconfig 配置网络或显示当前网络接口状态,必须由root用户执行 相关选项 -a 显示所有网络接口信息,包括活动或非活动 -s 显示活动接口简要信息 -v 如果网卡接口出现错误则返回错误信息 ...