linux centos传文件快,linux(centos8):用fallocate快速生成大文件

一,fallocate的用途?

1,用途

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

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

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

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

fallocate

使用非常的方便

2,fallocate和truncate有所区别

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

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

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

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

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

但实际占用的空间是0

本文中会举例子来说明

3,什么是空洞文件?

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

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

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

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

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

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

[root@centos8 logs]# whereisfallocate

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.zip50M b.zip

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

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

而不是一个空洞文件

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

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

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

查看占用磁盘空间的大小

[root@centos8 html]# du -sh b.zip84K 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.zip30M 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.zip20M 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 -shtrunc1000 trunc100

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

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

#-c,  select printable characters or backslash escapes

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

[root@centos8 logs]# od -c trunc1000000000 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 release8.1.1911 (Core)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值