linux(centos8):用fallocate快速生成大文件
一,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快速生成大文件的更多相关文章
- Linux使用dd命令快速生成大文件(转)
dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...
- linux使用dd命令快速生成大文件
dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...
- 使用dd命令快速生成大文件或者小文件的方法
使用dd命令快速生成大文件或者小文件的方法 转载请说明出处:http://blog.csdn.net/cywosp/article/details/9674757 在程序的测试中有些场 ...
- 使用dd命令快速生成大文件或者小文件
使用dd命令快速生成大文件或者小文件 需求场景: 在程序的测试中有些场景需要大量的小文件或者几个比较大的文件,而在我们的文件系统里一时无法找到那么多或者那么大的文件,此时linux的dd命令就能快速的 ...
- linux下fallocate快速创建大文件
以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1 ...
- linux下使用split 来分割大文件
linux下使用split 来分割大文件 2010-07-27 15:46:27| 分类: 技术文稿 | 标签:split 分割 linux |字号 订阅 平常都是使用ssh来进行远程 ...
- PHP几个快速读取大文件例子
PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents ...
- 利用Linux的硬连接删除MySQL大文件
利用Linux的硬连接删除MySQL大文件 http://blog.csdn.net/wxliu1989/article/details/22895201 原理:硬链接基础当多个文件共同指向同一ino ...
- Java快速读取大文件
Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...
随机推荐
- spring5源码 -- IOC容器设计理念和核心注解的作用
一. spring源码整体脉络介绍及源码编译 二. Spring IOC的源码深入学习 2.1 ioc容器的加载过程(重要) 2.2 bean的生命周期源码深度剖析 2.3 循环依赖总结讲解 2.4 ...
- xss的变形--如何绕过xss过滤
我们可以通过构造xss代码进行各种变形,以绕过xss过滤器的检测 1.大小写检测 将payload进行大小写转化 如<Img SRC='#' Onerror="alert(/xss/ ...
- 阿里云服务器外网IP无法访问网站
1.添加IIS时添加了127.0.0.1的IP监听导致无法访问外网IP 添加IP监听:netsh http add iplisten 127.0.0.1显示IP监听:netsh http show i ...
- .NetCore之接口缓存
1.问题:我们平时做开发的时候肯定都有用到缓存这个功能,一般写法是在需要的业务代码里读取缓存.判断是否存在.不存在则读取数据库再设置缓存这样一个步骤.但是如果我们有很多地方业务都有用到缓存,我们就需要 ...
- 知识全聚集 .Net Core 技术突破 | 如何实现一个模块化方案一
简介 模块化的介绍一共2篇 这一篇我们实现一个功能非常简单的StartupModules模块化. 第二篇我们来实现一个ABP的模块化效果. 思考 其实来简单想一下模块化的实验思路,写个接口=>模 ...
- vue大型项目高性能优化----想说爱你真的不容易
一.背景 目前公司的电子合同采用表单设计器+合同业务配合实现,做了半年多后终于上线,但是下边员工普遍反映卡顿,甚至卡死,爆栈.尤其是新增和修改合同页面,因为这部分数据量大,逻辑复杂,很容易崩溃,所 ...
- Java内部类使用场景和作用
一.Java内部类的分类 Java内部类一般包括四种:成员内部类.局部内部类.匿名内部类和静态内部类 大多数业务需求,不使用内部类都可以解决,那为什么Java还要设计内部类呢. 二.内部类的使用场景 ...
- vue单页面条件下添加类似浏览器的标签页切换功能
在用vue开发的时候,单页面应用程序,而又有标签页这种需求,各种方式实现不了, 从这个 到这个,然后再返回上面那个 因为每个标签页的route不一样,导致组件重新渲染的问题,怎么都不知道如何实现... ...
- Spring系列 之数据源的配置 数据库 数据源 连接池的区别
Spring系列之数据源的配置 数据源,连接池,数据库三者的区别 连接池:这个应该都学习过,比如c3p0,druid等等,连接池的作用是为了提高程序的效率,因为频繁的去创建,关闭数据库连接,会对性能有 ...
- selenium初探
先看看官方给的小demo from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = ...