我正在尝试理解我的服务器中的一种奇怪行为。我们通过 NFSv4 向应用程序服务器共享一个 btrfs 卷。其中一个应用程序将使用此导出卷下的日志文件。由于文件在应用程序中保持打开状态,因此 logrotate 将使用 copytruncate 对其进行轮换。
“head”和“tail”命令均在连接了磁盘的 NFS 服务器上运行(所有服务器都在 Google Cloud Platform 上,同一区域)。“du”指定文件大约有 250MB。
是否应避免在 btrfs 卷中使用截断?如何解释这种奇怪的行为?
答案1
我发现输出第一行实际上是个问题:
head -1 file.log | wc -c
43297796
由于某种原因,第一行是很长的二进制行。
time head -1 file.log > /dev/null
实际上在 0.035 秒内就返回了。我不知道是什么导致这一行变成了二进制行,但在弄清楚之后,谜团就解开了。