【问题标题】:LINUX terminal - Tar: File not found. Skipping files?LINUX 终端 - Tar:找不到文件。跳过文件?
【发布时间】:2012-12-22 19:50:08
【问题描述】:

我有两个问题,都是关于 linux 终端中的 Tar。为了让您了解我所看到的内容,我在下面发布了指向我的桌面图像的链接。 http://worldofclucky.net/errors/ServerLag/desktop.png Linux Ubuntu 12.04 Desktop http://wocl.net/errors/ServerLag/desktop.png1

正如您在左上角的终端上看到的,有三条消息:

tar: ./Frisnuk/Frisnuk/region/r.0.0.mca: file changed as we read it
tar: ./Frisnuk/server.log: file changed as we read it
ls: cannot access home/clucky/MinecraftServers/.backups/Backup-08-January-2013-15:31.tar.gz: No such file or directory

在前两条消息中,它指出无法读取文件,因为它已更改。该文件已更改,因为有一个服务器在运行时修改内容,这对整体备份不应该是一个问题,因为它们是来自 Minecraft 服务器的区域文件,这些文件可以彼此分开使用。我主要关心的是,它是跳过文件还是重做它们?如果它正在跳过文件,这可能是备份中的主要漏洞,因为有恶意的玩家可能会在备份时故意修改该区域,从而阻止其备份。那么如果是跳过文件,我怎么能重复它而不必重做整个备份呢?

在第三条消息中,它声明它无法访问文件 home/clucky/MinecraftServers/.backups/Backup-08-January-2013-15:31.tar.gz,但是,正如您在下面的窗口中清楚地看到的那样,该文件确实存在。我觉得这很奇怪,特别是因为如果您查看脚本,文件大小检查发生在脚本末尾,在备份发生很久之后。

我在下面发布了脚本,以便任何试图帮助我的人都可以轻松修改它:

timedate=`date '+%d-%B-%Y-%H:%M'`
echo "-------------- $timedate --------------" >> /home/clucky/MinecraftServers/backup.log
echo "[`date '+%H:%M'`] Starting Minecraft Backup" >> /home/clucky/MinecraftServers/backup.log
nice --adjustment=19 tar -zcpf /home/clucky/MinecraftServers/.backups/Backup-$timedate.tar.gz \
    --directory /home/clucky/MinecraftServers/ \
    --exclude=SkyBlockkit \
    --exclude=Tekkit \
    --exclude=Vanilla \
    --exclude=test \
    --exclude=Zflocco_LP \
    --exclude=Mortuus/plugins/dynmap/web --exclude=Mortuus/plugins/AutoSaveWorld/backups --exclude Mortuus/CraftBukkitVersion --exclude=Mortuus/orebfuscator_cache --exclude=Mortuus/plugins/#Removed --exclude=Mortuus/server.log \
    --exclude=Frisnuk/plugins/dynmap/web --exclude=Frisnuk/plugins/AutoSaveWorld/backups --exclude Frisnuk/CraftBukkitVersion --exclude=Frisnuk/orebfuscator_cache --exclude=Frisnuk/plugins/#Removed --exclude=Frisnuk/plugins/#AwaitingUpdate--exclude=Frisnuk/server.log \
    --exclude=dailybackup.log \
    --exclude=.backups \
    --exclude=backup.log \
    --exclude=backups.log \
    --exclude=backupscript.sh \
    --exclude=dailybackup.sh .
echo "[`date '+%H:%M'`] Finishing Minecraft Backup" >> /home/clucky/MinecraftServers/backup.log
#Purge files 3 days old
echo "[`date '+%H:%M'`] Purging Old Backups" >> /home/clucky/MinecraftServers/backup.log
find /home/clucky/MinecraftServers/.backups* -mmin +4320 -exec rm {} \;
echo "[`date '+%H:%M'`] Purging Complete" >> /home/clucky/MinecraftServers/backup.log
#Read back file size
filesize=$(ls -lah home/clucky/MinecraftServers/.backups/Backup-$timedate.tar.gz | awk '{ print $5}')
echo "     Total Compression Size: $filesize\n" >> /home/clucky/MinecraftServers/backup.log

非常感谢您的帮助,如果您需要更多信息,请询问。

【问题讨论】:

  • 这与Linux或终端无关。我已修改问题以表明这一点。

标签: linux bash tar minecraft region


【解决方案1】:

我认为您错过了这一行中的“/”(home vs /home):

filesize=$(ls -lah home/clucky/MinecraftServers/.backups/Backup-$timedate.tar.gz | awk '{ print $5}')

不应该是:

filesize=$(ls -lah /home/clucky/MinecraftServers/.backups/Backup-$timedate.tar.gz | awk '{ print $5}')

【讨论】:

  • 确实有效!谢谢。现在到问题的第一部分,关于可能的跳过,你知道吗?
  • 您的意思是如果文件在 tar 期间因更改而被跳过?您可以手动验证 tar 存档的内容。
  • 是的,它确实存在于 tar 中,我刚刚检查过。但我想知道它是否损坏了......
  • 我的猜测是,这只是一个猜测,当 tar 运行时,文件最终会以当前状态出现在存档中。
  • 好的,感谢您的帮助。我想我肯定会知道是否有人悲伤并且备份会产生块错误。 (消息包含一些 Minecraft 术语:Grief=摧毁另一个玩家财产;块错误=地图的 16x16 米部分重置为其默认生成的地形或服务器因此无法加载)
【解决方案2】:

如果磁盘空间不是问题,您可以发送cp -ap /home/MinecraftServers /-sometemp-dir,然后从那里进行备份。

您复制的文件在备份期间将保持静态,因为没有进程正在写入它们。这是对实时数据进行 tar 处理时的常见做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 2014-10-23
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多