首页 > 系统相关 >linux文件系统:删除大文件、删除大量文件

linux文件系统:删除大文件、删除大量文件

时间:2023-10-15 14:22:57浏览次数:32  
标签:文件 rsync 删除 大量文件 link linux rm root

linux 文件删除

文件删除控制的变量

i_link :文件的硬连接数量
i_count :引用计数(每有一个程序使用i_count加1)

文件删除的条件:

i_link0 & i_count0

rm命令

对于删除命令rm而言,实际就是减少磁盘引用计数i_link。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_link减少了,如果没其它的链接i_link就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_link及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

以上讲的i_link及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?

前面说了,rm操作只是将文件的i_link减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。

资料:
https://www.zjh336.cn/?id=1866

为什么rm删除大量文件很慢

rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。

使用rsync解决删除慢的问题

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。
rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。
rsync删除文件的原理就是把一个空文件夹同步到有很多文件的文件夹。

  • 1、删除大量文件
    先建立一个空目录
mkdir -p /root/blank

用rsync删除目标目录

rsync --delete-before -d /root/blank/ /root/edatacache/
  • 2、删除大文件

创建一个空文件

touch /root/empty.txt

用rsync清空/root/data.txt文件

rsync --delete-before -d --progess --stats /root/empty.txt /root/data.txt

标签:文件,rsync,删除,大量文件,link,linux,rm,root
From: https://www.cnblogs.com/xiaohaigegede/p/17765581.html

相关文章

  • Linux系统稳定性压测工具-Stress安装及使用(转)
    在线安装:执行命令yuminstall-yepel-release&&yuminstallstress-y离线安装:一、stress工具下载:点击此处下载https://fossies.org/linux/privat/stress-1.0.4.tar.gz 二、上传stress包登录要安装的服务器,将stress-1.0.4.tar.gz上传到服务器,解压安装此处以实际工......
  • 复制文件夹,linux
    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。假设复制源目录为dir1,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了如果dir2目录不存在,则可以直接使用cp-rdir......
  • 第六周Linux教材第十一章学习笔记——EXT2文件系统
    EXT2文件系统11.1概述Linux使用EXT2(Card等1995)作为默认文件系统。EXT3是EXT2的扩展,EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系统相同。EXT4(Cao等2007)是EXT......
  • 《Unix/linux系统编程》教材第11章学习笔记
    第11章:EXT2文件系统EXT2文件系统Linux一直使用EXT2作为默认文件系统。EXT2文件系统数据结构创建虚拟硬盘mke2fs[-bblksize-Nninodes]devicenblockseg:ddif=/dev/zeroof=vdiskbs=1024count=1440mke2fsvdisk1440在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文......
  • linux读书笔记第四章
    在Linux中,文件权限是保护文件和目录的重要机制之一。通过设置文件的属性和权限,可以控制对文件的访问、修改和执行操作。1.文件属性:在Linux中,每个文件都有三个基本属性:拥有者(user)、所属组(group)和其他人(others)。这三个属性确定了谁有权访问文件以及可以执行哪些操作。2.文件权限......
  • kernel6.5.7+busybox1.36.1制作一个Mini Linux (没启动起来)
    目录前奏下载linux内核源码并编译下载busybox的源代码制作根文件系统镜像文件安装qemu...有兴趣的同学可参考该文档将其完善...前奏rambo@debian:~$cat/etc/issueDebianGNU/Linux12\n\lrambo@debian:~$free-htotalusedfree......
  • linux命令-kill pkill
    linux环境杀死进程常用kill-9命令。kill-924213kill命令杀死指定进程PID,需要配合ps使用,而pkill直接对进程对名字进行操作,更加方便。比如pkill-9tomcat无需查找tomcat进程号,直接杀死tomcat相关进程。pkill踢掉用户还有一种用法,强制某个登陆用户下线。who命令查询当前登陆......
  • 以PMIC为例简析Linux MFD/Remap/Regulator的使用
     关键词:ADI、SPI、Regmap、MFD、Regulator、PMIC等等。 以SC27XX为例,梳理一个PMIC用到的内核模块。1.MFD框架MFD是Multi-FunctionDevice,MFD子系统是Linux下一种用于管理和控制多功能设备的软件框架。他提供一种统一接口,使得多个设备可以通过一个驱动程序进行管理和控制。K......
  • Linux 中 tmux工具实现分屏
     系统:centos7.61810001、下载tmux工具[root@pc1~]#tmuxbash:tmux:commandnotfound...[root@pc1~]#yuminstalltmux-y##安装命令 002、启动 tmux功能在终端直接输入 tmux,然后底部会出现如下效果: 003、左右分屏:ctrl+b,然后输入%: 00......
  • Bazzite:专为 Steam Deck 和 PC 上的 Linux 游戏打造的发行版
    导读对于一个专为 Linux 游戏定制的发行版,你是否感兴趣呢?如果答案是肯定的,那么我们为你准备了绝佳选择。Bazzite是一个新推出的基于Fedora的发行版,它是为 Linux桌面上的游戏,以及越来越火热的 SteamDeck 定制的。在此文章中,我们将对Bazzite进行简短总结,并探讨......