linux ext4源码详解,Ext4文件系统架构分析(九) ——ioctl源码分析之交换两个文件的物理extents...

1.交换两个文件的extents

Ext4的EXT4_IOC_MOVE_EXT命令用于交换两个文件的extents,实际上是交换两个文件的对应逻辑长度的数据的物理存储空间(见下图),也是EXT4文件系统碎片整理的基础。

78cc034eca686aeaca055ffd1e52c870.png

用户可以通过ioctl函数使用Ext4文件系统的Ioctl命令EXT4_IOC_MOVE_EXT将用户指定交换的两个文件及交换的范围的相关信息struct move_extent的地址传给ioctl的第三个参数unsigned int arg:

997a04951ff7da759f00a6bf899dbf61.png

ioctl(fd, EXT4_IOC_GROUP_ADD, arg )

至于操作是否成功,结果验证可以使用filefrag命令,分别在执行转移前后使用该命令获取文件的区段信息,就可以判断是否执行的转移(交换)操作。

2.EXT4_IOC_MOVE_EXT交换文件extents的限制

利用Ext4的EXT4_IOC_MOVE_EXT交换两个文件的extents的操作受到以下限制(这里将进行转移的文件称为源文件,参与转移操作正确执行的另一文件称为donor文件):

1.文件自身的限制:

1)源文件与donor文件应该是不同的文件;

2)源文件与donor文件应该是常规文件;

2.交换区段的参数限制(即调用mext_check_arguments()函数检查struct move_extent的元素数值是否有效):

1)donor文件都不能设置SUID或SGID;

2)两个文件都不能支持swapfile,也就是两个文件都不能是swapfile;

3)两个文件应当在同一个Ext4文件系统中;

4)两个文件都要是基于extent的;

5)两个文件都不能是0长

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值