首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当多个进程试图在两个不同的文件系统之间对相同的文件进行mv时会发生什么?

当多个进程试图在两个不同的文件系统之间对相同的文件进行mv时会发生什么?
EN

Unix & Linux用户
提问于 2015-12-04 22:25:36
回答 1查看 1.7K关注 0票数 2

我意外地启动了32个进程(虚拟机上每个内核一个进程),以在两个mv文件系统之间创建一些文件,但只有一些进程成功地在mv‘d中运行:

代码语言:javascript
复制
for i in `seq 1 32`; do
    mv /path/to/ext4-1/pattern* /path/to/ext4-2/ &
done

当多个进程试图对相同的文件进行mv时,到底会发生什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-12-06 00:33:07

同一个文件系统中的mv对于每个文件都是原子的,但是跨文件系统,这是一个更复杂的操作(假设您只移动常规文件,并且最初不存在目的地):

  1. 如果目标文件存在,请删除它。
  2. 打开源文件进行读取。有些实现可能在上一步之前执行此操作。
  3. 创建目标文件。如果在此存在,某些实现可能会截断它。有些实现可能在上一步之前执行此操作。
  4. 从源文件中读取一些数据并将其写入目标文件。
  5. 在目标文件上复制源文件的元数据。一些实现可能在下一步之后执行部分或全部操作。
  6. 关闭源文件和目标文件。
  7. 删除源文件。

在大多数情况下,如果两个mv进程同时尝试移动同一个文件,它们都会复制数据:首先启动的实例将创建一个文件,第二个实例将删除该文件并创建一个新的文件。然而,如果你运气不好,就有可能丢失数据。例如:

  1. 实例1执行副本并关闭两个文件(步骤1-6)。
  2. 此时,实例2到达该文件并移除目标(步骤1),但在打开源文件之前被抢占。
  3. 实例1继续删除源文件(步骤7)。
  4. 实例2继续执行步骤2,但该文件不再存在。

我认为,如果一个文件存在于目标,它将有正确的内容。但正如我们所看到的,文件有可能消失。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/247454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档