From d0ab018157430e40ffd86c731f5a128dd2b8a2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=A4=A9=E5=9E=9A?= Date: Fri, 15 Dec 2023 17:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ebf=E5=B7=A5=E5=85=B7=EF=BC=9B?= =?UTF-8?q?=E6=9B=B4=E6=96=B0README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +++++++++++++++ bf | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100755 bf diff --git a/README.md b/README.md index 62b06a0..1272a88 100644 --- a/README.md +++ b/README.md @@ -124,3 +124,40 @@ cvs / 2 /tmp/clamav ``` bash cvs /home 2 /tmp/clamav ``` +``` + +
+ +## bf + + 备份文件工具。 + +**所需依赖:** + +- openssl +- 如保存备份文件到腾讯云 COS,则需安装:coscli +- 如保存备份文件到华为云 OBS,则需安装:obsutil + +**参数说明:** + +- `$1` : 备份文件名称 +- `$2` : 备份文件路径 +- `$3` : 备份文件加密秘钥路径 + +**使用方式:** + +```bash +bf 备份文件名称 备份文件路径 备份文件加密秘钥路径 +``` + +示例: + +- 备份 `/opt/gitea` 目录 +``` bash +bf gitea /opt/gitea +``` + +- 备份 `/opt/gitea` 目录,同时使用 `/root/gitea.key` 作为秘钥加密备份文件 +``` bash +bf gitea /opt/gitea /root/gitea.key +``` diff --git a/bf b/bf new file mode 100755 index 0000000..af2a11a --- /dev/null +++ b/bf @@ -0,0 +1,133 @@ +#!/bin/bash + +# 备份目录脚本 + +## 参数配置 +### 当前的日期、日期时间 +date=`date +%Y%m%d` +datetime=`date +%Y%m%d`_`date +%H%M%S` +### 需要备份的目录名称 +dirName=$1 +### 需要备份的文件夹(绝对路径) +backupPath=$2 +### 备份成果文件名称 +backupFileName=$dirName"_backup_"$datetime".tar.gz" +### 是否生成备份成果文件哈希值【0:不生成,1:生成】 +generateBackupFileSHA=1 +### 是否加密【0:不加密,1:加密】 +needEncrypt=1 +### 加密秘钥文件(秘钥为文件的第一行内容) +encryptPasswordFile=$3 +### 备份模式【0:备份到本地目录,1:备份到华为云OBS,2:备份到腾讯云COS】 +model=2 +### 备份文件保存路径(仅当 model 为 0 时生效) +targetsPath=/bak/$dirName +### obsutil(OBS工具) 路径(绝对路径) +obsutil=/opt/obsutil/obsutil +### OBS 桶名称(仅当 model 为 1 时生效) +obsBucketName=demo +### OBS 目录(仅当 model 为 1 时生效) +obsFolderName=$dirName +### coscli(COS工具)路径(绝对路径) +coscli=/opt/coscli/coscli +### COS 桶名称(仅当 model 为 2 时生效) +cosBucketName=demo +### COS 目录(仅当 model 为 2 时生效) +cosFolderName=$dirName +### COS 对象类型(仅当 model 为 2 时生效)【STANDARD:标准存储,MAZ_STANDARD:标准存储(多AZ),STANDARD_IA:低频存储,MAZ_STANDARD_IA:低频存储(多AZ),MAZ_INTELLIGENT_TIERING:智能分层存储,ARCHIVE:归档存储,DEEP_ARCHIVE:深度归档存储】 +cosStorageClass=STANDARD +### 临时路径(临时的工作目录) +tmpPath=/tmp/backup/$dirName/$date + +## 相关方法 +### 创建临时目录 +createTmpPath () { + echo '------------------------------ 开始创建工作目录... ------------------------------' + mkdir -pv $tmpPath + echo '------------------------------ 工作目录创建完成! ------------------------------' +} +### 压缩备份目录 +condense () { + echo '------------------------------ 开始压缩备份目录... ------------------------------' + cd $tmpPath + tar czPf $backupFileName $backupPath + echo '------------------------------ 备份目录压缩成功! ------------------------------' +} +### 生成备份文件哈希值 +generateSHA () { + echo '------------------------------ 开始生成备份文件哈希... ------------------------------' + cd $tmpPath + openssl dgst -sha512 -out $backupFileName'_SHA512' $backupFileName + mkdir -pv $targetsPath + mv $backupFileName'_SHA512' $targetsPath + echo '------------------------------ 备份文件哈希生成成功( 哈希文件见:' $targetsPath ' )! ------------------------------' +} +### 加密备份文件 +encrypt () { + echo '------------------------------ 开始加密备份文件... ------------------------------' + cd $tmpPath + mv $backupFileName bak_$backupFileName + openssl enc -e -aes256 -a -kfile $encryptPasswordFile -in bak_$backupFileName -out $backupFileName + rm -rf bak_$backupFileName + echo '------------------------------ 备份文件加密成功! ------------------------------' +} +### 将备份文件保存到本地 +saveToLocal () { + echo '****************************** 使用本地模式,将保存备份文件到本地目录( '$targetsPath' ) ******************************' + mkdir -pv $targetsPath + mv $tmpPath/$backupFileName $targetsPath/$backupFileName +} +### 将备份文件保存到华为云 OBS +saveToOBS () { + echo '****************************** 使用 OBS 模式,将保存备份文件到 OBS 桶( '$obsBucketName' ) ******************************' + $obsutil mkdir obs://$obsBucketName/$obsFolderName + $obsutil cp -f $tmpPath/$backupFileName obs://$obsBucketName/$obsFolderName/$backupFileName + rm -rf $tmpPath/$backupFileName +} +### 将备份文件保存到腾讯云 COS +saveToCOS () { + echo '****************************** 使用 COS 模式,将保存备份文件到 COS 桶( '$cosBucketName' ) ******************************' + $coscli cp $tmpPath/$backupFileName cos://$cosBucketName/$cosFolderName/$backupFileName --storage-class $cosStorageClass + rm -rf $tmpPath/$backupFileName +} +### 保存备份文件 +save () { + echo '------------------------------ 开始保存备份文件... ------------------------------' + case $model in + 0) + saveToLocal + ;; + 1) + saveToOBS + ;; + 2) + saveToCOS + ;; + *) + saveToLocal + ;; + esac + echo '------------------------------ 备份文件保存成功! ------------------------------' +} + +## 开始备份 +echo '====================================================================================================' +echo `date +%Y-%m-%d` `date +%H:%M:%S` +echo '============================== 开始备份 '$dirName' ...... ==============================' +### 创建工作目录 +createTmpPath +### 打包备份目录 +condense +### 加密备份文件 +if [ $needEncrypt == 1 ];then + encrypt +fi +### 生成备份文件哈希 +if [ $generateBackupFileSHA == 1 ];then + generateSHA +fi +### 保存备份文件 +save +echo '============================== '$dirName' 备份成功!!! ==============================' +echo `date +%Y-%m-%d` `date +%H:%M:%S` +echo '===================================================================================================='