c++ - Linux : Can a directory rename be partially executed due to a power/transient mechanical failure in Server/Disk?

标签 c++ linux

C/C++重命名函数可以用来重命名一个目录。 假设以下情况(对于 Linux) 目录 X 有文件 A、B 和 C。 X 重命名为 Y(使用 C/C++ 重命名函数)。当操作正在进行时,服务器/磁盘的电源会断电。然后重新启动。 现在有可能只有少数文件在目录 X 中,而其他文件在 Y 中。 例如 ×:乙 Y : A, C

最佳答案

重命名只是改变一个名字。文件的“id”,在 linux 中目录是一个包含到其他文件和目录的“链接”的文件,保持不变!

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

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

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

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

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

关于c++ - Linux : Can a directory rename be partially executed due to a power/transient mechanical failure in Server/Disk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374646/

相关文章:

linux - 需要多个 crontab

c++ - 在 Qt 饼图中显示百分比?

c++ - 如何改进我的类(class)以创建输出文件

c++ - gcc exec if 和 else 也是...这是一个错误吗?

linux - Linux 上的 ActiveMQ

linux - 关闭终端后如何找到以nohup启动的进程?

linux - kubectl顶级节点报告的内存利用率高于Linux系统命令

c++ - 如何使用 cocos2d-x v3.2 在全局类(helloworld.h)中声明标签?

c++ - 双 bool 否定运算符

linux - 在启动时执行交互式脚本并显示到默认的 tty 附加监视器屏幕