Linux 中出于完整性目的的磁盘页面缓存大小

Linux 中出于完整性目的的磁盘页面缓存大小

我正在尝试在特定于 Linux 的应用程序中出现可能的机器故障时限制基于块的磁盘格式的损坏。也就是说,文件以应用程序定义的固定大小单元读取和写入,偏移量基本上是该单元大小的倍数。

我意识到,如果在写入期间或同步写入之前发生了可怕的事情,则对块 n 的写入可能会或可能不会损坏:这是不可避免的。

我想尽量避免的是,如果块 n-1 或块 n+1 处于静止状态(在此期间没有活动),则可能会损坏它们。

现在,如果块大小小得离谱,例如 4 个字节,那么很明显,在各种操作系统和硬件意义上,块 n 将与块 n-1 和 n+1 “在同一页上”,并且当写入该页正在运行,那么某些灾难可能不仅会导致块 n,还会导致磁盘上的 n-1,n+1,... 损坏(即使没有更改?)。

是否有某种大小可以设置我的块,以便对块 n 的写入基本上独立于相邻块,从某种意义上说,如果一个块处于静止状态,则繁忙的相邻块不会导致它在发生以下情况时损坏:非拜占庭失败?

如有必要,可以通过插入填充来解决对齐问题,因此这并非不可克服。

到目前为止我的想法是:通常引用的 512 字节磁盘块似乎不太可能,因为它太小了,而且我不确定这是否适用于现代磁盘,并且无论如何,操作系统内存写入缓存单元大小肯定比这大。我知道 x86 页表可以是 4k(这听起来是一个合理的大小)或 4M(这听起来太大)。 sysconf(_SC_PAGESIZE) 返回一个数字,但它是正确的吗?

我们可以假设我的写入是针对非 daft 文件系统类型(例如 ext-n 或 xfs),并且机器是标准 64 位 Linux x86 机器(如果其中任何一个相关的话)。

相关内容