假设我们有一个大小为
FILE_SIZE
字节的文件,并且:
FILE_SIZE <= min(page_size,physical_block_size)
;- 文件大小不会改变(即不执行
truncate()
或追加write()
); 仅通过完全覆盖其内容来修改文件:
pwrite(fd,buf,FILE_SIZE,0);
在ext4
上是否保证:
- 这样的写入与并发读取相对应是原子性的吗?
这样的写入在系统崩溃时是事务性的吗?
(即,在崩溃后,文件的内容完全来自某个以前的写入,我们永远不会看到部分写入或空文件)
第二点是否正确:
- 使用
data=ordered
? 使用
data=journal
或单个文件启用日志记录?(使用
ioctl(fd,EXT4_IOC_SETFLAGS,EXT4_JOURNAL_DATA_FL)
)physical_block_size<FILE_SIZE<=page_size
时?
- 我没有找到对我的问题
2
的明确答案。 - 我想知道,如果上述内容是真实的,它是否已经在某个地方记录下来了?
Ext4
在使用data=ordered
或者data=journal
时不是原子的。只有在使用data=writeback
时,写操作才会发生在同一个地方。 - Irfan Latif