zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
    SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化
    Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
    关于X锁的问题--由select+X锁是否持有到事务结束的误区
    SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题
    Replication的犄角旮旯(八)-- 订阅与发布异构的问题
    Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
    JavaScript 学习笔记 -- String.trim + format
    SQL笔记
    SQL笔记
  • 原文地址:https://www.cnblogs.com/architectforest/p/12851043.html
Copyright © 2011-2022 走看看