首页 > 解决方案 > Linux:由于服务器/磁盘中的电源/瞬态机械故障,目录重命名是否可以部分执行?

问题描述

C/C++ 重命名函数可用于重命名目录。假设以下情况(对于 Linux)目录 X 有文件 A、B 和 C。X 被重命名为 Y(使用 C/C++ 重命名函数)。操作进行期间服务器/磁盘的电源熄灭。然后重新启动。现在是否有少数文件在目录 X 中而其他文件在 Y 中的可能性。例如 X : B Y : A, C

标签: c++linux

解决方案


重命名只是更改名称。文件的“id”,在 linux 中,目录是包含指向其他文件和目录的“链接”的文件,保持不变!

由于文件系统总是直接依赖于任何硬件上的物理块存储,因此存储标签的完整块总是必须在文件系统结构中重写和链接。

如果在两者之间发生电源故障,“目录文件”可能会损坏。这意味着,涉及的不仅仅是单个重命名操作!

但是:现代文件系统有很多选项可以检测和修复这种情况。EG ext4 在后台有一个日志。如果任何访问可能被中断,日志会显示这些操作已开始但尚未完成的信息。通过安装这样的分区/fs,修复会自动进行。如果这是不可能的, fschk 可以完成这项工作。

仅移动“某些文件”的情况绝对不可能,因为重命名目录不是创建新目录并将文件名/指向节点 ID 的链接移动到新目录中,它只是一个新名称对于现有目录。

作为用户:只需使用现代文件系统,几乎所有断电故障都可以通过重启来恢复。您可能会在“旧”或“新”版本中找到您的文件系统,但不会介于两者之间。


推荐阅读