• slider image 168
:::
條列式新聞
新聞載入中,請稍後...

9-3-4-3 script 快照刪除程式

使用或呼叫本程式的用法

/path/pooldestroy-LXC 201 2017-02-02  [delete]
表示會將虛擬機代號 201 在 2017-02-02 當日的快照保留1份快照。
(後面如果加上 delete 參數則當日的快照全數刪除)

 

 

 

#!/bin/bash
# -------------------------------------------------------------------------------------------------------------------------------------------------
# $1 虛擬機 id                  --->    201
# $2 要刪除快照的目期                 --->    2017-02-28
# $3 指定 delete ,表示該日期的快照全部刪除    --->    delete 或 無
# -------------------------------------------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------- 虛擬機 儲存 volume 名稱 ---------
mountpoint="VM2/vz/subvol-$1-disk-1"                                        # 虛擬機zfs掛載點 ---> 唯一修改處
# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------

 

tmpfile1=/tmp/$1.destroysnapshot.source.`od -vAn -N8 -tu8 /dev/urandom |sed -e 's/ *//'`            # 產生暫存檔1的名稱
tmpfile2=/tmp/$1.destroysnapshot.line.`od -vAn -N8 -tu8 /dev/urandom |sed -e 's/ *//'`                # 產生暫存檔2的名稱
echo
echo
echo
    # 檢查是否代入參數
if [ "" == "$1" ] || [ "" == "$2" ]; then                                    # 缺少前面兩個參數
    echo "-----------------------------"                                    # 其實只要檢查第2個參數是否有提供即可
    echo "沒有參數"
    echo "    參數格式:$0 虛擬機代號            日      期        刪   除"
    echo "    參數格式:$0 [201-204|216]         2016-09-13        [|delete]"
    echo "-----------------------------"
    exit
fi

echo "預設  : 刪除 $2 多餘快照,保留 $2 第1筆及最後1筆快照"
echo "參數:delete: 該日期的快照全部刪除"
echo
sleep 2

# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------------------------
echo "虛擬機 LXC $1 掛載點:${mountpoint}"
echo
destroydatetime=$2                                            # 要刪除快照的時間
deleteyn=$3                                                # 是否當日全部的快照全部刪除
sleep 1

echo "開始取得 snapshot 列表..." ;echo
/sbin/zfs list -t snapshot |grep ${mountpoint}|grep ${destroydatetime}  > ${tmpfile1}            # 匯出虛擬機快照列表

LXCsnapshotstringlength=`cat ${tmpfile1} | head -n 1 | awk 'BEGIN {FS=" "}  {print  $1}' | wc -c`    # 方法1 取得快照全名長度

#read tttt < ${tmpfile1}                                        # 方法2 讀取虛擬機 volume 的第1行
#LXCsnapshotstringlength=`echo $tttt |awk 'BEGIN {FS=" "}  {print  $1}' | wc -c`            # 取得快照全名的長度

if [ "${vzdisk[0]}" -eq "0" ] ; then                                    # 檢核虛擬機所儲存位置的 volume 是否存在
    echo "錯誤訊息:"                                        # 如果沒有,表示虛擬機的代號($1) 錯誤
    echo "        虛擬機儲存的 volume 無法找到"
    echo "        虛擬機代號錯誤"
    exit
fi

cat ${tmpfile1} | colrm ${LXCsnapshotstringlength} >  ${tmpfile2}                    # 擷取快照名稱

vzdisk[0]=`cat ${tmpfile2} | wc -l`                                    # 計算當日快照數量


i=1    # 編號由1開始
# --------------------------------------------------------------------------------------------------------------------------
while read line; do

    poolname=$line        # 讀取第1筆快照名稱

    echo "i="$i
    echo  "第$i筆資料="$line

    # 如果是   第1筆    或是    最後一筆
    if [ "$i" == "1" ] || [ "$i" == "${vzdisk[0]}" ] ; then
        if [ "${deleteyn}" == "delete" ]; then                        # 如果指定全部刪除
            {                                    # 那就刪除吧
                echo "刪除快照:${poolname}"
                echo "開始刪除指令: /sbin/zfs destroy " $poolname
                /sbin/zfs destroy $poolname
            }
            else                                    # 如果沒有指定全部刪除
                echo "快照 ${poolname} 保留"                    # 那麼 就保留不刪除
            fi
    fi

    #if [ "$i" -gt "0" ] && [ "$i" -lt "${vzdisk[0]}" ] ; then
    # 如果編號大於1    而且    小於    最大編號 ---> 扣除第1和最後一筆之間的所有快照
    if [ "$i" -gt "1" ] && [ "$i" -lt "${vzdisk[0]}" ] ; then
            echo "開始處理第$i筆資料:"$line                        # 全數刪除
        echo "開始刪除指令: /sbin/zfs destroy " $poolname
        /sbin/zfs destroy $poolname                            # 刪除該筆快照
    fi

    echo "--------------------------"
    # http://mirror.sars.tw/Bash_Shell_by_ols3/c860.html
    let i=i+1                                        # 編號 +1
done < ${tmpfile2}
echo  --------------------------------------------------------------------------------------------------------------------------
echo 刪除完畢,保留當日快照備份如下:
/sbin/zfs list -t snapshot|grep ${mountpoint}| grep ${destroydatetime}                # 列出當日快照
echo  ----------------------------------------
# 程式結束
rm ${tmpfile1}                                            # 刪除暫存檔1
rm ${tmpfile2}                                            # 刪除暫存檔2
exit 0

# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------
# ----------------------------------------   程式結束  -----------------------------------------------

 


:::
展開 | 闔起

文章類別

書籍目錄

展開 | 闔起

線上使用者

17人線上 (11人在瀏覽線上書籍)

會員: 0

訪客: 17

更多…