全部產品
Search
文件中心

Elastic Compute Service:備份本地碟檔案

更新時間:Dec 27, 2024

為了避免因誤刪除、誤修改、誤覆蓋等操作引起的資料丟失或受損,您可以定期備份本地碟的檔案,提高資料安全性。您可以參考本文通過以下三種常用方式備份:通過雲備份定期備份、備份至OSS、備份至雲端硬碟或NAS。本文不適用於備份自建資料庫。

重要

本文僅適用於備份本地碟的檔案,如果本地碟儲存了資料庫,且您需要備份該資料庫,可以參見備份ECS自建資料庫

方式一:通過雲備份定期備份

適用情境

限制

特點

費用

雲備份支援對ECS上的檔案或檔案目錄進行定期備份(例如備份本地碟、自建資料庫Oracle/MySQL/SQL Server),並在需要時進行資料恢複,適用於需要高度可靠備份方案的情境。更多關於雲備份的資訊,請參見為什麼要選擇雲備份

  • SAAS化雲備份服務,便捷高效

  • 無需編寫指令碼

  • 檔案內容級重刪壓縮,節約儲存成本

  • 支援備份恢複

收取檔案備份軟體使用費儲存容量費等。計費詳情,請參見ECS檔案備份費用

操作步驟

  1. 準備工作。

    • 確保本地碟所在地區需支援雲備份服務。支援雲備份的地區,請參見開服地區

    • 確保本地碟所屬執行個體已經安裝雲助手。

      重要

      如果執行個體是2017年12月01日之後購買的,則預設已預裝雲助手用戶端,無需再安裝;否則需要您自行安裝雲助手Agent

  2. 登入雲備份Cloud Backup控制台,並選擇地區為本地碟所在地區。

  3. 左側導覽列選擇備份 > ECS檔案備份,在ECS实例列表頁簽找到本地碟所屬執行個體,在操作欄單擊備份

    image

  4. 進入建立備份計劃頁面,按照介面提示配置,單擊確定

    請注意以下配置(其他配置按需設定,說明請參考建立備份計劃周期性備份Elastic Compute Service檔案):

    • 备份目录规则:選擇指定目录

    • 備份檔案路徑:填寫需要備份的本地碟資料的絕對路徑,支援多個路徑。具體規則,請參考介面提示。

    • 备份策略:用於指定備份時間、周期、備份保留時間等。若未建立備份策略,請先建立備份策略

    當達到備份執行時間時,系統就會啟動執行備份任務。當備份任務狀態為成功時,表示當天備份完成。您可以在備份歷史中看到備份點。

    image

相關操作
  • 恢複資料:將本地碟資料備份到雲上備份庫後,若檔案丟失或者異常時,您可以根據歷史備份點進行檔案恢複。具體操作,請參見恢複ECS檔案

  • 瀏覽和下載已備份檔案:具體操作,請參見瀏覽和下載備份檔案

方式二:定期備份至OSS

通過ossutilcrontab命令,並編寫自動化指令碼,定期備份本地碟資料至OSS。

適用情境

特點

費用

適合大規模資料備份,尤其是需要低成本、高可靠性的儲存方案。更多OSS的特性,請參見OSS產品優勢

需要編寫指令碼

收取OSS儲存費。計費詳情,請參見儲存費用

重要

本方案是一個最簡單的樣本和基本思路,還存在一些局限性,需要您結合自身業務去做一些完善和補充。

例如,該方案每次都是全量備份,隨著時間推移會佔用越來越多的儲存空間;直接將整個目錄打包成單個ZIP檔案可能影響備份速度和儲存效率。在真實的業務情境中,需要結合自身業務做一些額外的策略,例如:

  • 增量或差異備份:只備份自上次備份以來發生改變的資料,更高效地利用儲存資源並加快備份速度。

  • 分塊備份:將資料集分成多個小塊或根據目錄結構、檔案類型等邏輯進行分組備份。

操作步驟

  1. 準備工作。

    • 已經開通OSS服務,並建立了OSS bucket。具體操作,請參見建立儲存空間

    • 已擷取OSS bucket名稱、OSS的endpoint以及待備份本地碟資料的儲存路徑。

  2. 登入ECS執行個體。

  3. 安裝OSSutil工具並配置訪問憑證。

    重要

    下載OSSutil工具需要本地碟所屬的ECS執行個體已開通公網。如何為ECS執行個體開通公網?

    1. 安裝OSSutil工具。

      sudo yum install unzip -y
      sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
    2. 配置OSSutil的訪問憑證。

      在使用者目錄下建立.ossutilconfig檔案並配置憑證。

      sudo -i  # 切換到root使用者(如果目前使用者沒有sudo許可權,則需要通過其他方式登入或提權)
      
      cat <<EOF > /root/.ossutilconfig
      [Credentials]
      language=EN
      endpoint=YourEndpoint
      accessKeyID=YourAccessKeyId
      accessKeySecret=YourAccessKeySecret
      EOF

      YourEndpointYourAccessKeyIdYourAccessKeySecret替換為您的實際的資訊。

  4. 實現定時備份。

    1. 安裝壓縮公用程式(本文以安裝zip為例)。

      sudo yum install zip
    2. 編寫備份指令碼(假設指令碼為backup_to_oss.sh)。

      樣本指令碼(僅供參考,請根據實際需要修改):將本地碟資料通過zip包的方式備份至OSS指定路徑

      • /path/to/your/local/data:替換為本地碟資料目錄。

      • your-bucket-name:替換為您的OSS bucket名稱。

      • path/in/oss/to/store/backups/:替換為OSS中希望存放備份的目錄。

      #!/bin/bash
      
      LOCAL_DIR="/path/to/your/local/data/"
      BACKUP_TMP_DIR="/mnt/backup_tmp/"
      OSS_BUCKET="your-bucket-name"
      OSS_PREFIX="path/in/oss/to/store/backups/"
      SYNC_TIME_FILE="/var/tmp/last_backup.timestamp"
      OSSUTIL_PATH="/usr/bin/ossutil"
      LOG_FILE="/var/log/backup_to_oss.log"
      DATE_STAMP=$(date +%Y%m%d%H%M%S)
      ZIP_FILE_NAME="backup_$DATE_STAMP.zip"
      
      # 確認zip工具已安裝
      if ! command -v zip &> /dev/null; then
          echo "zip command not found. Please install zip." >&2
          exit 1
      fi
      
      # 建立臨機操作備份目錄(如果不存在)
      mkdir -p "$BACKUP_TMP_DIR"
      
      # 檢查LOCAL_DIR是否存在且非空
      if [ -z "$(ls -A "$LOCAL_DIR")" ]; then
          echo "No files to backup in $LOCAL_DIR" | tee -a "$LOG_FILE"
          exit 0
      fi
      
      # 打包需要備份的檔案,並捕獲任何錯誤輸出
      (cd "$LOCAL_DIR" && zip -r "$BACKUP_TMP_DIR/$ZIP_FILE_NAME" .) >> "$LOG_FILE" 2>&1 || {
          echo "Failed to create ZIP archive. Error: $(zip -r "$BACKUP_TMP_DIR/$ZIP_FILE_NAME" . 2>&1)" | tee -a "$LOG_FILE"
          exit 1
      }
      
      if [ $? -eq 0 ]; then
          # 使用ossutil上傳ZIP檔案
          OSS_PATH="oss://$OSS_BUCKET/$OSS_PREFIX$ZIP_FILE_NAME"
          if "$OSSUTIL_PATH" cp "$BACKUP_TMP_DIR/$ZIP_FILE_NAME" "$OSS_PATH" >> "$LOG_FILE" 2>&1; then
              echo "Uploaded: $ZIP_FILE_NAME" | tee -a "$LOG_FILE"
          else
              echo "Failed to upload: $ZIP_FILE_NAME" | tee -a "$LOG_FILE"
          fi
          rm "$BACKUP_TMP_DIR/$ZIP_FILE_NAME" # 成功上傳後刪除本地ZIP檔案
      else
          echo "Failed to create ZIP archive." | tee -a "$LOG_FILE"
      fi
      
      # 記錄本次備份時間(即使備份失敗也更新,以避免重複上傳相同內容)
      date +%s > "$SYNC_TIME_FILE"
      echo "Backup process completed." | tee -a "$LOG_FILE"
  5. 給指令碼執行許可權並測試。

    sudo chmod +x /home/backup_to_oss.sh
    ./backup_to_oss.sh

    確保指令碼運行無誤,且資料能成功上傳至OSS。

  6. 執行crontab -e開啟crontab編輯器,添加一行來定時執行您的備份指令碼。例如每天淩晨2點執行:

    0 2 * * * /home/backup_to_oss.sh

    /home/backup_to_oss.sh:替換為指令碼實際的存放路徑。

  7. 更多配置(按需設定)。

    • (可選)設定指令碼開機自啟動。

      1. 建立backup_to_oss.service檔案。

        sudo vi /etc/systemd/system/backup_to_oss.service
      2. 在開啟的檔案中,添加以下內容。添加後按下Esc鍵,然後輸入:wq,儲存並關閉檔案。

        [Unit]
        Description=Back to OSS
        After=network.target
        
        [Service]
        ExecStart=/home/backup_to_oss.sh
        RestartSec=3
        Restart=always
        
        [Install]
        WantedBy=default.target
      3. 運行以下命令來重新載入systemd配置。

        sudo systemctl daemon-reload
      4. 運行以下命令啟動服務並設定為開機自啟動。

        sudo systemctl start backup_to_oss.service
        sudo systemctl enable backup_to_oss.service
    • (可選)設定OSS備份檔案保留時間長度。

      1. 建立本地檔案,並在檔案中配置XML格式的生命週期規則。

        vim OSSLifecycleConfig.xml

        樣本規則(請根據需求修改):bucket的test/路徑下的檔案僅保留30天,超過30天的檔案全部刪除。規則參數說明,請參見lifecycle(生命週期)

        <?xml version="1.0" encoding="UTF-8"?>
        <LifecycleConfiguration>
          <Rule>
            <ID>test-rule1</ID>
            <Prefix>test/</Prefix>
            <Status>Enabled</Status>
            <Expiration>
              <Days>30</Days>
            </Expiration>
          </Rule>
        </LifecycleConfiguration>
      2. ossutil讀取到生命週期配置添加到指定的Bucket。

        ossutil lifecycle --method put oss://bucketname OSSLifecycleConfig.xml

        bucketname:替換為實際的OSS bucket名稱。

下載已備份資料

您可以通過OSS控制台、命令列工具ossutil等,從OSS下載已經備份的資料。具體操作,請參見簡單下載

方式三:定期備份至同執行個體的雲端硬碟或NAS

將本地碟資料通過ZIP包的方式定期備份至雲端硬碟或Apsara File Storage NAS的指定路徑下。

適用情境

特點

費用

  • 雲端硬碟:適用需要線上儲存和輕鬆訪問備份檔案的情況。

  • NAS:適用於資料共用和備份,或需要快速存取備份資料情境。

需要編寫指令碼

  • 備份至雲端硬碟:收取雲端硬碟費用。計費詳情,請參見Block Storage計費

  • 備份至NAS:收取NAS費用。計費詳情,請參見計費概述

重要

本方案是一個最簡單的樣本和基本思路,還存在一些局限性,需要您結合自身業務去做一些完善和補充。

例如,該方案每次都是全量備份,隨著時間推移會佔用越來越多的儲存空間;直接將整個目錄打包成單個ZIP檔案可能影響備份速度和儲存效率。在真實的業務情境中,需要結合自身業務做一些額外的策略,例如:

  • 增量或差異備份:只備份自上次備份以來發生改變的資料,更高效地利用儲存資源並加快備份速度。

  • 分塊備份:將資料集分成多個小塊或根據目錄結構、檔案類型等邏輯進行分組備份。

操作步驟

  1. 準備工作。

  2. 設定定時備份。

    1. 登入ECS執行個體。

    2. 安裝ZIP工具(下文以Alibaba Cloud Linux為例)。

      sudo yum install zip
    3. 編寫備份指令碼(假設路徑為/home/backup_script.sh)。

      執行以下命令編寫指令碼,並儲存。

      vim /home/backup_script.sh

      樣本指令碼(僅供參考,請根據實際需要修改):將本地碟資料通過ZIP包的方式備份至指定路徑下

      • /path/to/local_disk/:替換為待備份的本地碟資料的絕對路徑。

      • /path/to/backup/:替換為資料要備份的目標路徑。

      #!/bin/bash
      
      # 組態變數
      LOCAL_DISK="/path/to/local_disk/"
      NAS_MOUNT="/path/to/backup/"
      ZIP_NAME="backup_$(date +%Y%m%d%H%M%S).zip"
      LOG_FILE="/var/log/backup_to_nas.log"
      
      # 確保ZIP工具已安裝
      if ! command -v zip &> /dev/null; then
          echo "Error: zip command not found. Please install zip." >&2
          exit 1
      fi
      
      # 執行備份
      echo "Starting backup at $(date)" >> "$LOG_FILE"
      zip -r "$NAS_MOUNT/$ZIP_NAME" "$LOCAL_DISK" >> "$LOG_FILE" 2>&1
      if [ $? -eq 0 ]; then
          echo "Backup completed successfully at $(date)" | tee -a "$LOG_FILE"
          echo "Backup file: $NAS_MOUNT/$ZIP_NAME" | tee -a "$LOG_FILE"
      else
          echo "Backup failed. Check log for details." >> "$LOG_FILE"
          exit 1
      fi
      
      # 清理到期備份(樣本:保留最近30天的備份)
      
      # find "$NAS_MOUNT" -type f -name 'backup_*' -mtime +30 -delete >> "$LOG_FILE" 2>&1
      # if [ $? -eq 0 ]; then
      #    echo "Old backups cleaned up successfully." >> "$LOG_FILE"
      # else
      #    echo "Error occurred while cleaning up old backups. Check log for details." >> "$LOG_FILE"
      # fi
      
      echo "Backup process finished at $(date)" >> "$LOG_FILE"
    4. 儲存指令碼,並給予執行許可權。

      sudo chmod +x /home/backup_script.sh

      /home/backup_script.sh:替換為指令碼實際的存放路徑。

    5. 執行crontab -e開啟crontab編輯器,添加一行來定時執行您的備份指令碼。例如每天淩晨2點執行:

      0 2 * * * /home/backup_script.sh

      /home/backup_script.sh:替換為指令碼實際的存放路徑。

    6. (可選)設定指令碼開機自啟動。

      1. 建立backup_script.service檔案。

        sudo vi /etc/systemd/system/backup_script.service
      2. 在開啟的檔案中,添加以下內容。添加後按下Esc鍵,然後輸入:wq,儲存並關閉檔案。

        [Unit]
        Description=Backup Files Script
        After=network.target
        
        [Service]
        ExecStart=/home/backup_script.sh
        
        [Install]
        WantedBy=default.target
      3. 運行以下命令來重新載入systemd配置。

        sudo systemctl daemon-reload
      4. 運行以下命令啟動服務並設定為開機自啟動。

        sudo systemctl start backup_script.service
        sudo systemctl enable backup_script.service
下載已備份資料

相關操作

  • 將本地碟資料移轉到其他ECS執行個體

    您可以將單台或多台本地碟執行個體整體資料一鍵遷移到其他ECS執行個體,儲存至該執行個體的雲端硬碟,完整備份本地碟執行個體的資料。具體操作,請參見原始伺服器遷移至目標執行個體

  • 本地碟發生損壞後的處理

    如果本地碟發生損壞,阿里雲會觸發系統事件,並及時給您發送通知、應對措施和事件周期等資訊。您可以根據情境進行營運。更多資訊,請參見本地碟執行個體營運情境和系統事件