【发布时间】:2013-12-17 14:29:13
【问题描述】:
我正在使用make 和tar 进行备份。执行 makefile 时,tar 命令显示file changed as we read it。在这种情况下,
- 出现警告时 tar 包正常
- 但它会停止以下备份的 tar 命令
- 显示警告的文件实际上并没有改变——出现警告真的很奇怪
- 显示警告的文件是随机出现的,我的意思是,每次我运行我的 makefile 时,显示警告的文件都不同
-
--ignore-failed-read没有帮助。我在 MinGW 中使用 tar 1.23 - 我刚把我的电脑换成WIN7 64位。该脚本在旧的 WIN7 32 位中运行良好。但 tar 版本不如 1.23 新。
如何停止 tar 的警告以在警告后停止备份?
Edit-2:这可能是原因
如上所述,bash shell 脚本在我的旧计算机上运行良好。与旧电脑相比,msys 版本不同。 tar 命令的版本也是如此。在旧计算机中,tar 为 1.13.19,在新计算机中为 1.23。我复制了旧的 tar 命令而不将其依赖项 msys-1.0.dll 复制到新计算机并将其重命名为 tar_old。而且我还更新了 shell 脚本中的 tar 命令并运行该脚本。然后一切正常。所以,问题似乎出在 tar 命令上。我确信去皮重时没有任何文件更改。这是新版本中 tar 命令的错误吗?我不知道。
Edit-1:添加更多细节
备份由 bash shell 脚本调用。它扫描目标目录并构建 makefile 然后调用 make 以使用 tar 命令进行备份。下面是一个典型的由 bash shell 脚本构建的 makefile。
#--------------------------------------------
# backup VC
#--------------------------------------------
# the program for packing
PACK_TOOL=tar
# the option for packing tool
PACK_OPTION=cjvf
# M$: C driver
WIN_C_DIR=c:
# M$: D driver
WIN_D_DIR=d:
# M$: where the software is
WIN_PRG_DIR=wuyu/tools
# WIN_PRG_DIR=
# where to save the backup files
BAKDIR=/home/Wu.Y/MS_bak_MSYS
VC_FRAMEWORK=/home/Wu.Y/MS_bak_MSYS/tools/VC/VC_framework.tar.bz2
VC_2010=/home/Wu.Y/MS_bak_MSYS/tools/VC/VC_2010.tar.bz2
.PHONY: all
all: $(VC_FRAMEWORK) $(VC_2010)
$(VC_FRAMEWORK): $(WIN_C_DIR)/$(WIN_PRG_DIR)/VC/Framework/*
@$(PACK_TOOL) $(PACK_OPTION) "$@" --ignore-failed-read /c/$(WIN_PRG_DIR)/VC/Framework
$(VC_2010): $(WIN_C_DIR)/$(WIN_PRG_DIR)/VC/VS2010/*
@$(PACK_TOOL) $(PACK_OPTION) "$@" --ignore-failed-read /c/$(WIN_PRG_DIR)/VC/VS2010
如您所见,tar 包存储在 ~/MS_bak_MSYS/tools/VC/VC_2010.tar.bz2 中。我在 ~/qqaa 中运行脚本。 ~/MS_bak_MSYS 被排除在 tar 命令之外。因此,我正在创建的 tar 文件不在我试图放入 tar 文件的目录中。这就是为什么我对出现警告感到奇怪的原因。
【问题讨论】:
-
看起来您正在使用 Windows 设置,因此与您无关。然而,当底层文件系统是 glusterfs 时,我们也会遇到类似的问题。当 lstat 和 fstat 返回不同的值时,似乎存在错误:bugzilla.redhat.com/show_bug.cgi?id=1058526
-
在 windows docker 挂载的卷上使用 tar 时遇到了这个问题。将
tar实用程序替换为pax对我有用。