Linux 删除大量小文件的两种方案 | 运维进阶

这篇具有很好参考价值的文章主要介绍了Linux 删除大量小文件的两种方案 | 运维进阶。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【摘要】Linux如何删除大量小文件?本文介绍了两种方法。

【作者】赵靖宇

环境:

RHEL 6.5 + Oracle 11.2.0.4

需求:

使用df -i巡检发现Inodes使用率过高,需要清理删除文件来解决。如果Inodes满,该目录将不能写,即使df -h查看还有剩余空间。

1.问题现象

Oracle的adump下记录的是sys的登陆审计信息,特点是小碎文件非常多,经常会遇到使用rm -rf *命令删除不了,报错-bash: /bin/rm: Argument list too long。

这是因为通配符*在执行时会替换为具体的文件名,例如rm -rf file1 file2 file3 ...,如果文件数量过多,就容易出现这个错误。

比如在下面的环境中,adump目录下文件已达到114万+,执行rm -rf *命令时就会报这个错误:

[oracle@jystdrac2 adump]$ pwd/opt/app/oracle/admin/crmdb/adump[oracle@jystdrac2 adump]$ ls|wc -l1149787[oracle@jystdrac2 adump]$ rm -rf *-bash: /bin/rm: Argument list too long[oracle@jystdrac2 adump]$ du -sh4.4G

2.解决方案

清楚了问题现象,解决方案就从除去rm -rf *命令的方式之外,还有哪些方法可用,如果通过网络搜索,可能会找到结合find命令再去执行rm的方式,但其实效率非常差,具体写法这里就不列出了,因为我们通常也不会这样处理。那么如何较为效率的删除大批小文件呢?结合网络的经验,并实测验证,最终总结了两种常见的解决方案,效率上也都尚可。

方案一:巧用rsync的方式达到删除目的

建立一个空文件夹,使用rsync --delete-before -d <空文件夹> <需要清理删除小文件的目录>命令最终达到删除大批小文件的目的。下面演示具体操作:​​​​​​​

[oracle@jystdrac2 adump]$ mkdir /data/null[oracle@jystdrac2 adump]$ ls -l /data/nulltotal 0[oracle@jystdrac2 ~]$ nohup rsync --delete-before -d /data/null/ /opt/app/oracle/admin/crmdb/adump/ &

使用man rsync查看rsync命令相关的参数说明如下:​​​​​​​

-d, --dirs                  transfer directories without recursing--delete-before         receiver deletes before transfer (default)

方案二:使用find命令的delete参数

使用find <需要清理删除小文件的目录> -type f -delete命令直接删除大批小文件。

使用man find查看find命令相关的参数说明如下:​​​​​​​

       -type c              File is of type c:                            b      block (buffered) special                            c      character (unbuffered) special                            d      directory                            p      named pipe (FIFO)                            f      regular file                            l      symbolic  link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken.  If you want to                     search for symbolic links when -L is in effect, use -xtype.                                   s      socket                            D      door (Solaris)                     -delete              Delete files; true if removal succeeded.  If the removal failed, an error message is issued.  If -delete fails, find’s exit status will be nonzero              (when it eventually exits).  Use of -delete automatically turns on the ‘-depth’ option.                            Warnings:  Don’t forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything              below the starting points you specified.  When testing a find command line that you later intend to use with -delete, you should explicitly  spec-              ify -depth in order to avoid later surprises.  Because -delete implies -depth, you cannot usefully use -prune and -delete together.

下面演示具体操作:

[oracle@jystdrac1 adump]$ nohup find /opt/app/oracle/admin/crmdb/adump/ -type f -delete &

可以参考下面的命令来简单监控删除过程中Inodes使用率的变化:

while true; do df -i /; sleep 10; done

比如我这里节点jystdrac1使用的find方法,节点jystdrac2使用的rsync方法,实际观察Inodes释放速度区别并不大:​​​​​​​

# 使用的find方法,观察Inodes释放速度:[oracle@jystdrac1 ~]$ while true; do df -i /; sleep 10; doneFilesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1519124 287772   85% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1519015 287881   85% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1513880 293016   84% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1511132 295764   84% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1502434 304462   84% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1494583 312313   83% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1489111 317785   83% /Filesystem                        Inodes   IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 1487629 319267   83% /
# 使用的rsync方法,观察Inodes释放速度:[oracle@jystdrac2 ~]$ while true; do df -i /; sleep 10; doneFilesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 963029 843867   54% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 955037 851859   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 953088 853808   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 950523 856373   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 948754 858142   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 944613 862283   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 942619 864277   53% /Filesystem                        Inodes  IUsed  IFree IUse% Mounted on/dev/mapper/vg_linuxbase-lv_root 1806896 938510 868386   52% /

既然两种方式差异不算大,那就根据需求或个人习惯选择即可。我自己更倾向于使用方案二,因为这样无需创建空目录,操作上也更直观。

最后再总结下删除大量小文件的方法:​​​​​​​

# 方案一:mkdir <空文件夹>rsync --delete-before -d <空文件夹> <需要清理删除小文件的目录># 方案二:find <需要清理删除小文件的目录> -type f -delete

相对来说这两种方式都比较效率,但由于整体小文件也是比较多,所以实际可以选择nohup放到后台执行。

原题:Linux如何删除大量小文件文章来源地址https://www.toymoban.com/news/detail-713962.html

到了这里,关于Linux 删除大量小文件的两种方案 | 运维进阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux下通过 rm -f 删除大量文件时报错:Argument list too long

    Linux下通过 rm -f 删除大量的小文件时出现类似如下错误信息:   -bash: /bin/rm: Argument list too long 如下图所示: 如果待删除文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。 这个是Linux系统存在的限制,可以通过如下指令查看该参数值的配置: 注: 删除

    2024年02月13日
    浏览(47)
  • Linux内核的两种安全策略:基于inode的安全与基于文件路径的安全

    在Linux中,一切皆为文件,实现系统安全的策略主要可分为两种:基于 inode 的安全、基于文件路径的安全。 基于inode的安全 为文件引入安全属性,安全属性不属于文件内容,它是文件的元数据,应该与 inode 关联,一些内核安全模块将安全属性存储在文件的扩展属性中,这种

    2024年02月12日
    浏览(45)
  • Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

    ossutil支持在Windows、Linux、macOS等系统中运行,您可以根据实际环境下载和安装合适的版本。 安装过程中,需要使用解压工具(unzip、7z)解压软件包,请提前安装其中的一个解压工具。 yum -y install unzip Linux系统一键安装 sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo b

    2024年02月13日
    浏览(66)
  • 数据结构学习系列之顺序表的两种删除方式

    方式1: 在顺序表的末端删除所存储的数据元素,代码如下: 示例代码: 注意事项: 1.形参传入到具有删除数据元素功能的函数后,需要做 入参合理性检查 ; 2.还需要判断此时 顺序表所存储的数据元素是否为空 ; 3. count是计数的变量 , 每次删除一个数据元素后,需要减

    2024年02月10日
    浏览(43)
  • css——文字实现渐变色的两种方案

    (一)通过设置color、background-image及background-clip实现文字颜色渐变 注意:如果使用的是块级元素,记得加上 background-color: transparent 效果如下: (二)通过svg的linearGradient及text元素实现文字的颜色渐变 效果如下:

    2024年01月21日
    浏览(53)
  • Java生成Echarts表图的两种方案

    简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可

    2024年02月16日
    浏览(37)
  • 关于 Token 过期问题的两种解决方案

     对于token过期,我们有两种方案:   方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。 我们希望当响应返回的数据是401身份过期时,让当前浏览页面强行跳转到登入页面,让用户 手动更新token。拿到

    2024年01月17日
    浏览(43)
  • error: (-215:Assertion failed)的两种解决方案

    问题描述:在对视频分帧读取进行差值哈希算法比较时出现读取错误现象,具体代码内容和报错如下: 而在差值哈希算法运行前,均值哈希算法可以正常运行: 反复仔细观察上述两段代码之后判断是img图片路径读取失败,下方为两种解决方法: 1. 删除报错语句的下方部分:

    2024年02月15日
    浏览(49)
  • 解决Windows Defender安全中心打开空白的两种方案

    有网友加粉丝群询问自己的 Windows 10 操作系统中的 Windows Defender 安全中心打开后出现页面空白情况,而之前自己也没有碰到过这种问题。既然问题来了,那就帮助找下解决方案,目前网络上其实也有给出一些解决方案,绝大部分是通过注册表方式来进行解决。不过有些网友表

    2024年02月10日
    浏览(42)
  • 无线路由器连接有线路由器的两种方案

    无线路由器连接有线路由器设置 描述:无线路由器tp-link tl-wr841n 连接有线路由器tp-link(具体型号不清)下面的设置都是以这两个路由器为例进行设置 目的:想从有线路由器接到无线路由器,实现无线上网功能 说明:无线连接有线两种方案: 1.无线wan口连接有线lan口 2.无线lan口

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包