c++ - Linux:由于服务器/磁盘中的电源/瞬态机械故障,目录重命名是否可以部分执行?
问题描述
C/C++ 重命名函数可用于重命名目录。假设以下情况(对于 Linux)目录 X 有文件 A、B 和 C。X 被重命名为 Y(使用 C/C++ 重命名函数)。操作进行期间服务器/磁盘的电源熄灭。然后重新启动。现在是否有少数文件在目录 X 中而其他文件在 Y 中的可能性。例如 X : B Y : A, C
解决方案
重命名只是更改名称。文件的“id”,在 linux 中,目录是包含指向其他文件和目录的“链接”的文件,保持不变!
由于文件系统总是直接依赖于任何硬件上的物理块存储,因此存储标签的完整块总是必须在文件系统结构中重写和链接。
如果在两者之间发生电源故障,“目录文件”可能会损坏。这意味着,涉及的不仅仅是单个重命名操作!
但是:现代文件系统有很多选项可以检测和修复这种情况。EG ext4 在后台有一个日志。如果任何访问可能被中断,日志会显示这些操作已开始但尚未完成的信息。通过安装这样的分区/fs,修复会自动进行。如果这是不可能的, fschk 可以完成这项工作。
仅移动“某些文件”的情况绝对不可能,因为重命名目录不是创建新目录并将文件名/指向节点 ID 的链接移动到新目录中,它只是一个新名称对于现有目录。
作为用户:只需使用现代文件系统,几乎所有断电故障都可以通过重启来恢复。您可能会在“旧”或“新”版本中找到您的文件系统,但不会介于两者之间。
推荐阅读
- php - 在 PHP 类中获取帖子术语
- html - WordPress/Avada - 如何在中型屏幕上修复环绕图像的文本
- python-3.x - While 循环在需要时不起作用
- python - 初始化二维列表
- json - jq 将 2 个 json 文件中的对象数组中的字段组合到第 3 个 json 文件中
- python - 如何在 Python 中删除以空格作为值的字典项?
- nativescript - 如何在构建时添加应用内购买功能(ios)
- java - 带有 carview 的 RecyclerViewAdapter 仅显示哈希图中的最后一项
- python - `/bin/sh: 1: python: not found` 在 docker 中通过 cron 运行时
- xcode - 通过外部硬盘驱动器上的 Git 跟踪更改的文件