• 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把生成的文件打印出来,可以看到中间填充的是 

    #-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)
  • 相关阅读:
    Ubuntu完全教程,让你成为Ubuntu高手!
    Centos7安装完毕后重启提示Initial setup of CentOS Linux 7 (core)的解决方法
    MS SQL操作Xml示例
    MY SQL sql_mode设置
    MS SQL " 无法启动分布式事务"问题的解决思路
    MS SQL常用系统表汇总
    SQL不同服务器数据库之间数据操作整理
    OPENQUERY用法
    SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程
    各种主流 SQLServer 迁移到 MySQL 工具对比
  • 原文地址:https://www.cnblogs.com/architectforest/p/12851043.html
Copyright © 2020-2023  润新知