我们有基于 beaglebone 黑色的定制板,具有 256MB RAM 和 4GB eMMC。主板运行 Linux 内核 4.9
我们遇到了一种情况,我们在其中创建了一个文件tempfs
,然后在验证之后,我们必须将它移动到 eMMC 的 ext4 分区。只归档一个certificate
在某些情况下,我们在一个目录中有多个证书,因此我们必须将整个目录从 tempfs 移动到 eMMC 上的 ext4 分区。
所以,我们所担心的问题之一是atomicity
的mv
(移动)操作。
根据rename
系统调用 Linux 手册页重命名文件是一个原子操作。
http://man7.org/linux/man-pages/man2/rename.2.html
但是我们不确定重命名操作是否涉及在两个文件系统之间移动文件,原子性仍然可用。所以问题是将文件从原子移动tmpfs
到ext4
原子吗?
显然,一种可能的解决方案是将文件保存在同一分区上的不同文件夹中(显然在同一文件系统上)并使用mv
. 对于使用以下重命名方法的目录
SRC_dir --> TMP_DEST_dir
DEST_dir --> BAK_DEST_dir
TMP_DEST_dir --> DEST_dir
delete BAK_DEST_dir
Run Code Online (Sandbox Code Playgroud)
对替代品的任何建议?
编辑
在我得到回复后,我尝试在板上遵循测试代码,
#include <stdio.h>
#include <errno.h>
int main()
{
int retcode = 0;
system("touch /tmp/rename_test");
retcode = rename("/tmp/rename_test", "/home/fs_rename_test");
if ( retcode …
Run Code Online (Sandbox Code Playgroud)