短期文件是否刷新到磁盘?

Wu *_*eng 10 linux ext4 disk

我的程序创建了许多小的短期文件。它们通常会在创建后一秒钟内被删除。这些文件位于由真实硬盘支持的 ext4 文件系统中。我知道 Linux 会定期将 ( pdflush) 脏页刷新到磁盘。由于我的文件是短暂的,很可能它们没有被pdflush. 我的问题是,我的程序是否会导致大量磁盘写入?我关心的是我硬盘的寿命。

由于文件很小,我们假设它们的总和小于dirty_bytesdirty_background_bytes

Ext4 开启了默认日志,即元数据日志。我还想知道是元数据还是数据写入磁盘。

msw*_*msw 7

除非您谈论的是固态驱动器,否则大量磁盘写入不会成为驱动器寿命的主要因素。

如果您真的想完全避免磁盘写入,请查看tmpfs

  • tmpfs 确实很适合这种情况,但我仍然想知道,作为一般的操作系统问题,数据是否写入磁盘(不必要)? (2认同)

fro*_*utz 6

一个使用ext4的简单实验:

创建一个 100MB 的图像...

# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s
Run Code Online (Sandbox Code Playgroud)

让它成为一个循环设备......

# losetup -f --show image
/dev/loop0
Run Code Online (Sandbox Code Playgroud)

制作文件系统并挂载...

# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp
Run Code Online (Sandbox Code Playgroud)

使用短期文件进行某种运行。(将此更改为您喜欢的任何方法。)

for ((x=0; x<1000; x++))
do
    (echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
     sleep 1
     rm /mnt/tmp/short-lived-file-$x ) &
done
Run Code Online (Sandbox Code Playgroud)

卸载、同步、解锁。

# umount /mnt/tmp
# sync
# losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)

检查图像内容。

# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3
Run Code Online (Sandbox Code Playgroud)

就我而言,它列出了所有文件名,但没有列出任何文件内容。所以只有内容没有写。