关于linux mv指令机制

        最近在mv文件的时候,操作失误将生产服务器一个1TB的文件夹mv到了/opt/test目录,因为最后/opt/目录被沾满所以1TB的文件夹没有迁移过来,写入了30GB数据到了/opt/test目录,因为系统分区被沾满,所以把test目录给删除了。

        那么问题就来了,1TB的源目录哪些文件被mv到了/opt/test目录中,因为/opt/test/目录被删除无法进行判断,查看生产系统都正常没有发现数据丢失。

        在测试服务器上进行实验,测试将大量数据mv到小于该数据容量硬盘会发生什么现象。新建一个5GB的硬盘,将root目录中的数据(远大于5GB)mv到这个5GB硬盘中.

        执行 mv /root /mnt,在mv的过程中,发现源盘的容量没有减少,但是目标盘的数据量不断在增加,指导目标目录空间被沾满,源盘的数据都没有减少。

       所以鉴于上面的实验可以得知,在mv数据的时候,mv指令因为目标目录被沾满而未完成mv操作,不会对源目录的数据进行删除操作,只是将源目录中的数据写入到目标目录中。

       下面通过strace跟踪mv执行过程。

情况A,mv单个文件,在根目录创建文件“1”,写入数据“111111111111111”,然后mv“1”文件到/mnt目录。通过下面可以知道在数据写入完成后,然后unlink掉源文件“1”

情况B,如果mv整个目录,目录中包含多个文件,那么是mv完成单个文件后就删除对应的源文件,还是mv完成整个目录后,再删除源文件及目录?

创建文件夹mvdata3,写入6个测试文件

执行mv /root/mvdata3 /mnt。

通过上面截图可知,首先判断目标目录/mnt中有没有mvdata3目录及对应所需mv的文件;第二步打开源文件并将数据写入到目标文件。可以看到在文件“1”完成写入后,没有对文件“1”进行unlink操作,而是继续mv文件“2”,依次类推,知道文件“6”。

在文件“1”到文件“6”全部写入完成后,通过strace看到最后删除文件及目录

所以通过上面strace跟踪mv执行可以得出结论,mv操作是在完成所有数据写入后,再执行的删除源文件动作。

相关推荐

  1. Vue--关于v-model指令

    2023-12-25 13:52:03       10 阅读
  2. 关于rabbitmq的prefetch机制

    2023-12-25 13:52:03       19 阅读
  3. 人机对话--关于意识机器

    2023-12-25 13:52:03       35 阅读
  4. 关于Spring @Transactional事务传播机制详解

    2023-12-25 13:52:03       34 阅读
  5. Golang 关于反射机制(一文了解)

    2023-12-25 13:52:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 13:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 13:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 13:52:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 13:52:03       20 阅读

热门阅读

  1. go语言基础 -- 字符串及其常用函数

    2023-12-25 13:52:03       34 阅读
  2. 前端学习笔记

    2023-12-25 13:52:03       40 阅读
  3. sklearn网格搜索找寻最优参数

    2023-12-25 13:52:03       40 阅读
  4. 常用git指令

    2023-12-25 13:52:03       35 阅读
  5. 2023年底和2024年节假日及补班日期

    2023-12-25 13:52:03       95 阅读
  6. 门面设计模式

    2023-12-25 13:52:03       36 阅读