gpt4 book ai didi

c - 如何在 sync/fsync/syncfs 到可移植设备后确保数据完整性

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:14 24 4
gpt4 key购买 nike

根据 sync 手册页,不能保证调用 sync 后光盘会刷新其缓存:“根据标准规范(例如 POSIX.1-2001),sync() 会安排写入,但可能会在实际写入完成之前返回。但是,由于版本 1.3.20 Linux 实际上会等待。(这仍然没有保证数据完整性:现代磁盘有大缓存。)“

而且,在fsync手册中,没有提到这一点。

有没有办法确保在调用 sync 后所有写入磁盘尤其是可移植设备 (USB) 的操作已完成?我遇到过调用sync/fsync后数据和元数据信息还没有完全写入光盘的情况。我很好奇windows/linux中的“Safely remove device”怎么知道所有的数据都已经被设备自己完全写入了。

最佳答案

I am curious how "Safely remove device" in windows/linux knows that all data has been fully written by the device itself.

对于 IXish 系统:

使用 umount command 卸载 USB 设备的分区或 umount() system call .


blockdev --flushbufs

可能会刷新设备的缓冲区,但不会阻止任何人再次访问设备并重新填充缓冲区。


/proc文件系统中也有这个内核接口(interface):

/proc/sys/vm/drop_caches

可用于刷新不同的缓冲区:

逐字记录来自 https://www.kernel.org/doc/Documentation/sysctl/vm.txt

[...]

To free dentries and inodes:

  echo 2 > /proc/sys/vm/drop_caches

[...]

关于c - 如何在 sync/fsync/syncfs 到可移植设备后确保数据完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com