备份本地盘文件

为了避免因误删除、误修改、误覆盖等操作引起的数据丢失或受损,您可以定期备份本地盘的文件,提高数据安全性。您可以参考本文通过以下三种常用方式备份:通过云备份定期备份、备份至OSS、备份至云盘或NAS。本文不适用于备份自建数据库。

重要

本文仅适用于备份本地盘的文件,如果本地盘存储了数据库,且您需要备份该数据库,可以参见备份ECS自建数据库

方式一:通过云备份定期备份

适用场景

限制

特点

费用

云备份支持对ECS上的文件或文件目录进行定期备份(例如备份本地盘、自建数据库Oracle/MySQL/SQL Server),并在需要时进行数据恢复,适用于需要高度可靠备份方案的场景。更多关于云备份的信息,请参见为什么要选择云备份

  • SAAS化云备份服务,便捷高效

  • 无需编写脚本

  • 文件内容级重删压缩,节约存储成本

  • 支持备份恢复

收取文件备份软件使用费存储容量费等。计费详情,请参见ECS文件备份费用

操作步骤

  1. 准备工作。

    • 确保本地盘所在地域需支持云备份服务。支持云备份的地域,请参见开服地域

    • 确保本地盘所属实例已经安装云助手。

      重要

      如果实例是2017年12月01日之后购买的,则默认已预装云助手客户端,无需再安装;否则需要您自行安装云助手Agent

  2. 登录云备份Cloud Backup控制台,并选择地域为本地盘所在地域。

  3. 左侧导航栏选择备份 > ECS文件备份,在ECS实例列表页签找到本地盘所属实例,在操作栏单击备份

    image

  4. 进入创建备份计划页面,按照界面提示配置,单击确定

    请注意以下配置(其他配置按需设置,说明请参考创建备份计划周期性备份云服务器ECS文件):

    • 备份目录规则:选择指定目录

    • 备份文件路径:填写需要备份的本地盘数据的绝对路径,支持多个路径。具体规则,请参考界面提示。

    • 备份策略:用于指定备份时间、周期、备份保留时间等。若未创建备份策略,请先新建备份策略

    当达到备份执行时间时,系统就会启动执行备份任务。当备份任务状态为成功时,表示当天备份完成。您可以在备份历史中看到备份点。

    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包的方式定期备份至云盘或文件存储NAS的指定路径下。

适用场景

特点

费用

  • 云盘:适用需要在线存储和轻松访问备份文件的情况。

  • NAS:适用于数据共享和备份,或需要快速访问备份数据场景。

需要编写脚本

  • 备份至云盘:收取云盘费用。计费详情,请参见块存储计费

  • 备份至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实例,存储至该实例的云盘,完整备份本地盘实例的数据。具体操作,请参见源服务器迁移至目标实例

  • 本地盘发生损坏后的处理

    如果本地盘发生损坏,阿里云会触发系统事件,并及时给您发送通知、应对措施和事件周期等信息。您可以根据场景进行运维。更多信息,请参见本地盘实例运维场景和系统事件