Linux / Ubuntu 备份数据


同步发布在个人笔记Linux / Ubuntu 备份数据

需要备份的文件

对于我们的 linux 服务器(当然也适用于桌面端),时常进行一次系统备份是十分有益的,类似于快照功能,可以让我们的数据与系统免于意外的发生,出了问题进行恢复即可。那么我们应该用什么工具来备份呢?又要备份些什么呢?

  • 工具
    和 Windows 平台不同,linux 备份不需要进入引导系统,直接在本系统运行时就可以。工具就使用几乎每个 linux 系统都自带的 tar 工具。
  • 目录
    最好的目标当然是全盘备份,这种备份可以用 dd 命令,但是这需要另一块硬盘或分区,不符合我们今天的情况。使用 tar 工具时,推荐备份
    • 根目录 /
      这是系统所在,建议排除 /proc /lost+found /mnt /sys/media /dev可以根据情况选择是否要备份;
    • /home
      如果 /home 分区是单独一盘的话,建议单独备份。

tar 工具

Linux tar(英文全拼:tape archive )命令用于备份文件。
tar 用于创建和解压归档文件的命令行工具,可以用来将多个文件和目录组合成一个单一的归档文件,也可以用来解压已经存在的归档文件。
今天会用到的相关参数是:

参数全称意义
-ccreat创建打包文件
-Cdictionary在指定路径解包
-xextract / get提取打包文件
-vverbose输出详细的文件列表,使用-vv指令,可以输出更加详细的文件属性,包括时间、大小、所有者、权限等。
-Pabsolute-paths使用绝对路径(tar 默认使用相对路径)
-ppreserve-permissions / same-permissions保留文件的权限
-zgzip / ungzip使用gzip工具进行压缩或者解压缩
-ffile指定打包文件的文件名
–excludeexclude排除文件或文件夹(文件夹后不可有“/”)

备份/打包过程

我是在一个位置专门新建了一个路径用来保存备份文件,你也可以在任意位置,但是注意,如果备份文件在你要备份的文件路径中,要把备份文件排除在备份路径之外。

  • 举例:如果要备份 / ,备份的结果文件在 /backup.tgz,那么就要排除掉这个文件。

首先获得 root 权限

sudo su

然后分别备份根目录和用户目录

sudo tar cvPpzf sys_backup.tgz --exclude=/home --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys /
sudo tar cvPpzf home_backup.tgz /home/user_name

这样就在当前文件夹收获两个备份文件:sys_backup.tgz、home_backup.tgz

恢复/解包过程

当有数据丢失时,如果还能进系统,那就直接在系统里恢复,如果已经不能进系统了那就用 U 盘启动进系统修复就好。

sudo su

然后分别恢复两个分区

sudo tar xvPpzf sys_backup.tgz -C /
# 创建那些没备份的文件夹
mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys
mkdir /home

sudo tar xvPpzf home_backup.tgz -C /home/user_name

流程自动化

最终当然是想要实现自动化的备份呀,那我们就在用来保存备份文件的文件夹,新建两个 shell 脚本

  • start_backup.sh
    这是启动备份脚本的脚本,主要任务是处理 log 文件并启动 server_backup.sh。
  • server_backup.sh
    这是备份脚本,主要是保存上一次备份的文件,并进行新一次的备份。使用 nohup 命令,使得任务在后台运行,且把输入记录到 nohup.out。

start_backup.sh

#!/bin/bash

date

if [ -f "nohup.out" ];then
    mv nohup.out nohup.pre
    echo "找到上次记录 nohup.out ,并保留为 nohup.pre。"
else
    echo "未找到上次记录!"
fi

nohup bash server_backup.sh &

server_backup.sh

#!/bin/bash
echo "####################################"
date
echo "####################################"
echo ""
echo ""

if [ -f "home_backup.tgz" ];then
    rm home_backup.tgz.bak
    mv home_backup.tgz home_backup.tgz.bak

    echo "**********************************************"
    echo "保留上次 /home 备份文件为 home_backup.tgz.bak。"
else
    echo "**********************************************"
    echo "未找到上次 /home 分区备份文件!"
fi

echo "Starting Backup /home ......"
echo ""

tar cvPpzf home_backup.tgz /home/user_name
echo "成功备份 /home 分区!"
echo ""
echo ""
echo ""


if [ -f "sys_backup.tgz" ];then
    rm sys_backup.tgz.bak
    mv sys_backup.tgz sys_backup.tgz.bak
    echo "**********************************************"
    echo "保留上次 / 备份文件为 sys_backup.tgz.bak。"
else
    echo "**********************************************"
    echo "未找到上次 / 分区备份文件!"
fi

echo "Starting Backup / ......"
echo ""
tar cvPpzf sys_backup.tgz --exclude=/home --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys /
echo "成功备份 / 分区!"
echo ""

备份时,使用命令:

sudo bash start_backup.sh

也可以把这个命令设定为定时任务。
由于需要自主输入 sudo 密码,就需要使用管道以及 sudo -S

参数全称意义
-Sstdin从标准输入读取密码
自动运行的命令为:
cd your_path
echo “your_password” | sudo -S bash start_backup.sh
  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值