2013-01-08 75 views
0

我有兩個問題,這兩個問題在Linux終端都視爲Tar。爲了讓您知道我所看到的內容,我已經在下面發佈了一個指向我桌面圖像的鏈接。 http://worldofclucky.net/errors/ServerLag/desktop.png Linux Ubuntu 12.04 Desktop http://wocl.net/errors/ServerLag/desktop.png1LINUX終端 - Tar:未找到文件。跳過文件?

正如你可以在左上角的終端上看到的,有三條消息:

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 

謝謝你在先進的協助,如果你需要更多的信息,請不要問。

+0

這與Linux或終端無關。我修改了這個問題來表明這一點。 –

回答

3

我想你錯過了 '/'(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}') 
+0

確實有效!謝謝。現在到問題的第一部分,關於可能的跳過,你知道這件事嗎? – Clucky

+0

你的意思是如果這些文件因焦油中的變化而被跳過?您可以手動驗證焦油歸檔的內容。 – jgr

+0

是的,它確實存在於焦油中,我剛剛檢查過。但我不知道它是否損壞或不... – Clucky

1

如果磁盤空間不是問題,你可以做一個cp -ap /home/MinecraftServers /-sometemp-dir,然後從那裏進行備份。

複製的文件在備份過程中將保持靜態,因爲沒有進程正在寫入它們。這是在實時數據聚集時的常見做法。