簡體   English   中英

Tar在bash腳本中備份奇怪的行為

[英]Tar backup strange behaviour in bash script

我有bash腳本用於備份/目錄,並且我正在使用管道查看器(pv)查看進度條。當我手動運行命令時,它工作正常,但是當我在bash腳本中運行相同的命令時,進度條顯示它已執行100 %,最終達到108%,盡管ETA達到100%時顯示00:00,但仍然繼續?? 這是我的劇本

DIR_1="/var /root /sbin /bin /etc /lib /www /usr /mnt";

CAL_1=$(du -skc $DIR_1 | awk '{print $1}' | tail -n1);

    if [ "$1" = "fullbackup" ]                                                                            
    then                                                                                                  
            echo "`date +%F\ %H:%M` backup started..">>$FLOG;                                             
            /bin/nice -n 19 tar cf - `echo $DIR_1` | pv -s ${CAL_1}k >$DESTINATION/$FILENAME -f 2>$TARLOG;
            if [ $? -eq 0 ]                                                                               
            then                                                                                          
                    echo "`date +%F\ %H:%M` tar archive successfull" >>$FLOG ;                            
                    NEW=$(cd $DESTINATION && ls -t full* | head | sed '1!d');                             

            elif [ $? -ne 0 ]                                                                             
            then                                                                                          
                    echo "`date +%F\ %H:%M` tar archive failed">>$FLOG;                                   
                    rm $DESTINATION/$FILENAME;                                                            
                    exit;                                                                                 
            fi                                                              

這是怎么回事。 您是在告訴pv tar文件的大小是$ DIR_1下文件的總和,有時不是。

特別是,當您運行該程序並獲得108%而不是100%時,8%的差異就是tar文件的開銷。 您可以通過將$ CAL_1返回的值與ls -l $DESTINATION/$FILENAME返回的值進行比較,輕松地驗證這一點。

du -k決定K的含義與pv對其進行測量的方式也可能存在一些差異。 為了消除這種可能性,請同時刪除pvdu中的“ k”。

我認為以交互方式運行它是一個紅鯡魚。 我猜想,當您以交互方式運行時,您會在tar開銷接近於0的小型文件系統上運行,而當您在腳本中運行時,它是在大型文件系統上運行的。 (小型文件系統是交互式執行的操作,因為誰想要等待幾個小時才能獲得結果?)。

要驗證消除交互還是腳本情況,請確保您在同一文件系統上運行兩者。

如果這樣做不能解決問題,建議您將上述提到的特定輸出添加到您的問題中,例如$ CAL_1的值是什么以及最終tar文件的ls是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM