一、流程步骤解释

1. 定义变量:

设置用于访问远程共享目录的用户名和密码。
定义远程共享目录路径。
定义本地挂载点。

2. 挂载远程共享目录:

先卸载本地挂载点,避免异常。
使用 mount 命令将远程共享目录挂载到本地路径。

3. 本地备份:

定义本地备份路径和备份文件名。
检查并创建本地备份目录。
使用 tar 命令将系统备份到本地备份文件,排除不需要备份的目录。

4. 检查挂载:

  • 定义远程目录下的日志文件,用于判断路径是否成功挂载。

  • 检查日志文件是否存在以判断挂载是否成功。
    如果挂载失败,记录失败日志。
    如果挂载成功,执行以下操作:

      记录挂载成功日志。
      复制本地备份文件到远程共享目录。
      删除本地备份文件。
      删除远程3天前的备份文件,并记录日志。
      记录备份成功日志。
    

二、详细脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/sh
#此脚本用于将linux系统备份到windows共享文件夹或NAS服务器,
#原理是1.备份系统到本地2.挂载远程路径到linux3.将备份文件复制到该路径下4.删除过期的备份文件、断开连接

# 1. 定义变量
username='backup' # 访问远程共享目录的用户名
password='backup' # 访问远程共享目录的密码
remotepath="//172.29.60.22/backup/linux/oracle" # 远程共享目录路径

localpath="/backup22" # 本地挂载点
umount $localpath # 先卸载本地挂载点,避免异常

# 2. 挂载远程共享目录到本地
mount -t cifs -o username=$username,password=$password $remotepath $localpath

# 3. 定义本地备份路径和文件名
localBackupPath="/usr/localbackup"
backupToFile=$localBackupPath/$HOSTNAME"_backup`date +%y%m%d`.tgz"

# 4. 定义要删除的3天前的备份文件路径
beforeThreeDayFile="/backup22/oradb_backup`date -d -8day +%y%m%d`.tgz"

# 5. 检查并创建本地备份目录
if [ ! -d "$localBackupPath" ]; then
mkdir $localBackupPath
fi

# 6. 备份系统到本地备份文件
tar -cvpzf $backupToFile --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/media --exclude=$localBackupPath --exclude=$localpath /

# 7. 定义远程目录下的日志文件,用于判断路径是否成功挂载
logFile="/backup22/backup_log_in22.txt"

# 8. 检查挂载是否成功
if [ ! -f "$logFile" ]; then
echo -e "`date +%y%m%d_%T`挂载失败\n" >> "/backup22/backup_log_local.txt"
echo -e "`date +%y%m%d_%T`挂载失败\n"
else
echo -e "`date +%y%m%d_%T`已挂载备份服务器到本地\n" >> "$logFile"

# 9. 复制备份文件到远程共享目录
cp $backupToFile $localpath

# 10. 删除本地备份文件
rm -f $backupToFile

# 11. 删除远程3天前的备份文件
rm -f $beforeThreeDayFile
echo -e "\n三天前的文件已删除"$beforeThreeDayFile >> "$logFile"

# 12. 记录备份成功日志
echo -e "\n`date +%y%m%d_%T`备份成功_"$backupToFile >> "$logFile"
echo -e "\n`date +%y%m%d_%T`备份成功_"$backupToFile
fi

三、原纪录

https://blog.csdn.net/lglglgl/article/details/80334546