背景

运维组内部有一个服务器日志的离线备份需求:

  1. Filebeat将日志打到一个WindowsServer的SMB共享上,然后要通过FTP的形式在办公环境进行离线备份;
  2. 要在生产环境备份服务器上保留14天以防线下备份失效;

方案

  1. 生产环境备份服务器提供相应文件夹共享,并开放权限;
  2. 建立计划任务,定时打包实现文件备份转储以及删除超过14天的备份文件;
  3. 线下建立离线存储服务器,同步FTP数据到加密磁盘
  4. 线下磁盘的定期轮转和永久存储

脚本

  1. 基于时间的命名备份方案
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @echo off
    ::该脚本已被放弃,原因是备份源文件的日期和打包备份日期相差4天,导致题不对版
    ::设置7z的命令行程序路径
    set zip7=C:\Program Files\7-Zip\7z.exe

    ::设置压缩包保存路径
    set Save=D:\temp

    ::当天日期,备份文件名
    set curdate=%date:~0,4%-%date:~5,2%-%date:~8,2%

    ::设置要打包压缩的文件夹
    set Backup=D:\AllLogsBackup\*

    ::备份命令 无压缩只存档,压缩完成后删除
    ::备份密码为 #IHte9tE90bYgJjxtYNmD
    "%zip7%" a -tzip "%Save%\logs_%curdate%.zip" "%Backup%" -mx0 -sdel -p#IHte9tE90bYgJjxtYNmD

    ::删除超过14天的备份--start--
    forfiles /p "%Save%" /m *.zip -d -14 /c "cmd /c del /f @path"
  2. 基于目标文件夹下文件名进行的备份方案
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    :: 因备份文件目录名就为文件产生日期,且因线下同步完成之后会删除,即备份目录下只有一份备份文件夹,所以采用文件名作为备份名称。
    ::设置7z的命令行程序路径
    set zip7=C:\Program Files\7-Zip\7z.exe

    ::设置压缩包保存路径
    set Save=D:\temp

    ::设置要打包压缩的文件夹
    set Backup=D:\AllLogsBackup$\*

    ::备份文件名
    for /f "delims=" %%i in ('dir /b D:\AllLogsBackup$') do set filename=%%i

    ::备份命令 无压缩只存档,压缩完成后删除
    "%zip7%" a -tzip "%Save%\%filename%.zip" "%Backup%" -mx0 -sdel

    ::删除超过14天的备份--start--
    ::forfiles /p "%Save%" /m *.zip -d -14 /c "cmd /c del /f @path"

离线备份

  1. 使用Windows Server作为备份环境,挂载4块硬盘进行备份(使用bitlock加密磁盘,不做Raid);
  2. 使用FreeFileSync建立同步批处理文件,并加入计划任务定期执行;
  3. 每周人工巡检,定期手动更替备份目标路径。