为什么我没有看到使用 ls 立即复制文件?

为什么我没有看到使用 ls 立即复制文件?

是不是内存缓冲的原因?我这样做了cp /network/large_file . &,并且一直ls -lh在监视进度,但文件直到大约 400MB 才出现。 Linux 2.6 内核、Bash 4、4GB 交换空间、16GB RAM。

答案1

这可能取决于您的底层文件系统、可能的 HDD 缓冲区、Raid 控制器缓冲区(如果您使用的是 raid)等。复制文件时,它首先在内存中启动流,通知磁盘有一个挂起的写入操作 - 磁盘会从那里处理它。写入已“完成”,但文件实际上仍在由磁盘写入,这是很常见的情况。有些文件系统可以防止这种“滞后”,例如 ZFS,我相信 BtrFS(这称为写入时复制)。其他文件系统会报告复制/写入操作已完成,但实际上并非如此 - 如果断电等,这可能会导致文件损坏。ZFS 和 BtrFS 不会向操作系统报告文件写入操作已完成,直到文件写入操作完成为止。已完全完成——防止出现这种情况。

要测试这一点,请尝试复制更大的内容 - 例如将您最喜欢的发行版的 DVD iso 从一个目录复制到另一个目录。命令行将很快返回到提示符,但是如果您立即键入sync并发送命令,您会注意到它将挂起命令行,直到写入操作完全完成。 (如果您有磁盘活动指示灯,您还会注意到它们仍在闪烁)

相关内容