文章目录
- Linux 备份要点
- 确定备份的目录和文件
- 备份的种类、频率与工具的选择
- 完整备份
- 增量备份
- 差异备份
- 镜像备份
- 定期备份
- 远程备份的脚本
- 使用rsync上传备份数据
Linux 备份要点
在Linux系统中,备份数据是非常重要的,特别是在生产环境中。以下是Linux备份的一些要点:
确定备份的目录和文件
Linux备份的目录和文件取决于用户需要备份的数据内容和重要性,以下是一些常见的备份目录和文件:
-
/etc:包含系统配置文件,例如网络配置、用户账户信息、服务配置等。
-
/home:包含用户主目录,其中包括用户的文档、音乐、视频、图片等文件。
-
/var:包含系统日志、缓存文件、邮件、数据库等数据。
-
/usr/local:包含用户安装的软件和应用程序。
-
/root:root用户的主目录,其中包括root用户的文档、配置文件等。
-
/opt:包含第三方软件和应用程序。
-
/srv:包含服务数据,例如Web服务器的网站数据、FTP服务器的文件等。
-
/boot:包含系统启动文件和内核文件。
-
/lib:包含系统共享库文件。
-
/mnt:包含挂载的文件系统或设备。
当然,以上仅是一些常见的备份目录和文件,具体需要备份哪些目录和文件取决于用户需要保护的数据内容和重要性。
虽然Linux备份可以备份大部分的目录和文件,但有些目录和文件不应该被备份或者无法被备份,以下是一些不能备份的目录和文件:
-
/proc和/sys:这些目录包含的是虚拟文件系统,其中的文件不是实际的文件而是系统内核的相关信息,无法被备份。
-
/dev:这个目录包含的是设备文件,备份这些文件没有意义,因为它们不包含实际的数据。
-
/run:这个目录包含的是运行时的系统信息,例如进程ID和锁文件,这些信息在系统重启后会被重新创建,无需备份。
-
/tmp:这个目录包含的是临时文件,通常不需要备份。
-
已经被加密的文件:如果文件已经被加密,备份也没有意义,因为备份文件也会被加密,无法还原。
-
大文件或者已损坏的文件:备份大文件需要消耗大量的时间和存储空间,因此不建议备份过大的文件。如果文件已经损坏,备份也没有意义,因为备份文件也会是损坏的。
总之,不能备份的目录和文件通常是没有实际意义或者无法还原的文件,备份时需要注意排除这些文件,以避免浪费时间和存储空间。
备份的种类、频率与工具的选择
备份分为多种类型,根据不同的备份需求和数据类型,需要选择不同的备份类型,以下是常见的备份类型、备份频率和备份工具的选择:
完整备份
完整备份(Full backup)是指备份系统中所有的文件和目录,包括系统文件和用户文件。完整备份的优点是备份文件包含了所有的数据,恢复时速度较快;缺点是备份文件较大,备份时间较长。完整备份通常用于定期备份,例如每周或每月备份一次。
以下是一个小案例,介绍如何使用tar工具进行完整备份:
假设我们有一个Web服务器,其中有一个/var/www/html目录,存储了网站的所有静态文件和动态脚本。我们需要对该目录进行完整备份,以防止数据丢失。
- 使用tar命令进行备份:
tar -czvf /backup/html_backup.tar.gz /var/www/html
# -c :表示创建新的备份文件
# -z :表示使用gzip压缩
# -v :表示显示详细信息
# -f :表示指定备份文件名和路径
该命令将/var/www/html目录下的所有文件和子目录打包成一个名为html_backup.tar.gz的压缩文件,并将其保存在/backup目录下。
2. 恢复备份文件:
tar -xzvf /backup/html_backup.tar.gz -C /
# -z :表示使用gzip解压缩
# -x :表示从备份文件中恢复数据
# -v :表示显示详细信息
# -f :表示指定备份文件名和路径
# -C :示指定解压缩路径
该命令将html_backup.tar.gz文件解压缩,并将其恢复到根目录/下。
增量备份
增量备份(Incremental backup)是指备份系统中自上次备份后新增或修改过的文件和目录,与完整备份不同,增量备份只备份最新的变更,因此备份文件较小,备份时间也较短。增量备份通常用于频繁备份,例如每天备份一次。
以下是一个小案例,介绍如何使用rsync工具进行增量备份:
假设我们有一个文件夹/data,其中存储了重要的数据文件,我们需要每天备份一次/data目录,以防止数据丢失。
- 使用rsync命令进行增量备份:
rsync -avz --delete /data /backup/data_backup/
# -a :表示归档模式
# -v :示显示详细信息
# -z :表示使用gzip压缩传输
# --delete :表示删除目标目录中已经不存在的文件
该命令将/data目录的变更同步到/backup/data_backup目录中,第一次备份时,rsync会备份所有的文件,之后每天备份时,rsync只会备份新增或修改过的文件。备份完成后,目标目录/backup/data_backup中会保存最新的备份文件。
2. 恢复备份文件:
如果需要恢复备份文件,可以直接将备份文件复制回原始目录/data中,或者使用rsync命令进行恢复:
rsync -avz /backup/data_backup/ /data/
该命令将/backup/data_backup目录中的文件同步到/data目录中,-a表示归档模式,-v表示显示详细信息,-z表示使用gzip压缩传输。
差异备份
差异备份是指备份系统中自上次备份以来新增或修改过的文件和目录,与上一次备份之间的差异。
差异备份只备份新增或修改的文件和目录,而不是备份整个文件系统。
以下是一个小案例,介绍如何使用xfsdump工具进行差异备份:
假设我们有一台服务器,其中存储了重要的数据文件,我们需要每天进行差异备份,以保留系统最新的变更,并避免备份文件过大。
- 安装xfsdump工具:
xfsdump是一款用于备份和恢复XFS文件系统的工具,可以在大多数Linux发行版中找到。如果系统中没有安装该工具,可以使用以下命令进行安装:
yum install -y xfsdump
- 运行xfsdump进行备份:
先进行完整备份
xfsdump -l 0 -L 'fullbackup' -M 'fullbackup' -f /backupdata/home.dump /home
- xfsdump:命令名称,表示使用xfsdump工具进行备份。
- -l 0:备份级别为0,表示完全备份。
- -L ‘fullbackup’:备份标签为’fullbackup’,用于标记备份文件。
- -M ‘fullbackup’:备份模式为’fullbackup’,表示完全备份。
- -f /backupdata/home.dump:备份结果保存到/backupdata/home.dump文件中。
- /home:备份源路径,表示备份/home目录下的所有文件和子目录。
- 第一次进行差异备份
xfsdump -l 1 -L 'fullbackup-1' -M 'fullbackup-1' -f /backupdata/home.dump1 /home
- xfsdump:命令名称,表示使用xfsdump工具进行备份。
- -l 1:备份级别为1,表示增量备份。
- -L ‘fullbackup-1’:备份标签为’fullbackup-1’,用于标记备份文件。
- -M ‘fullbackup-1’:备份模式为’fullbackup-1’,表示差异备份。
- -f /backupdata/home.dump1:备份结果保存到/backupdata/home.dump1文件中。
- /home:备份源路径,表示备份/home目录下的所有文件和子目录。
- 恢复备份文件:
让/home整个恢复到原本的状态
xfsrestore -f /backupdata/home.dump -L fullbackup /home
更多信息请查看这篇博客:XFS文件系统备份与还原
镜像备份
镜像备份是指将整个硬盘或分区的内容完整地复制到另一个硬盘或分区中,以实现数据的完全备份。镜像备份的优点是备份结果与原始数据完全相同,可以快速还原系统。但是,由于备份结果的大小与原始数据一致,因此备份时间较长,占用存储空间较大。
在Linux系统中,可以使用dd命令进行镜像备份。dd命令是一个强大的数据复制工具,可以将数据从一个文件或设备复制到另一个文件或设备中。
以下是一个使用dd命令进行镜像备份的例子:
假设我们要将/dev/sda磁盘的整个内容备份到/dev/sdb中:
dd if=/dev/sda of=/dev/sdb bs=4M conv=sync,noerror
- sudo:使用管理员权限运行该命令;
- if=/dev/sda:表示输入文件为/dev/sda,即备份源;
- of=/dev/sdb:表示输出文件为/dev/sdb,即备份目标;
- bs=4M:表示以4MB为单位进行数据块复制;
- conv=sync,noerror:表示在出现读取错误时,使用同步模式继续复制,同时忽略读取错误。
这条命令的作用是将/dev/sda整个磁盘的内容复制到/dev/sdb中,其中bs参数指定数据块大小为4MB,conv参数指定在出现读取错误时,使用同步模式继续复制,同时忽略读取错误。
定期备份
定期备份是指按照一定的时间间隔,定期对系统数据进行备份,以保证数据的安全性和可靠性。通过定期备份,可以避免因系统故障、病毒攻击等原因导致数据丢失或损坏的风险。在Linux系统中,可以使用cron定时任务来实现定期备份。
以下是一个使用cron定时任务实现每天定期备份的例子:
假设我们要在每天凌晨3点进行一次全盘备份,备份结果保存到/home/backup目录下:
- 创建备份脚本文件
首先,我们需要创建一个备份脚本文件,例如/home/backup.sh,该脚本文件的内容如下:
#!/bin/bash
# 全盘备份
dd if=/dev/sda of=/home/backup/backup.img bs=4M conv=sync,noerror
该脚本文件的作用是将/dev/sda整个磁盘的内容备份到/home/backup/backup.img文件中,其中bs参数指定数据块大小为4MB,conv参数指定在出现读取错误时,使用同步模式继续复制,同时忽略读取错误。
2. 添加定时任务
接下来,我们需要使用cron定时任务来实现每天定期备份。可以使用以下命令打开cron编辑器:
sudo crontab -e
然后,在编辑器中添加以下行:
0 3 * * * /bin/bash /home/backup.sh
该行的含义是,在每天凌晨3点执行/home/backup.sh脚本文件进行备份。其中,0表示分钟数,3表示小时数,*表示任意日期,*表示任意月份,*表示任意星期几。最后,/bin/bash /home/backup.sh指定执行备份脚本文件。
远程备份的脚本
如果管理两台以上的Linux主机时,那么互相将对方的重要数据保存一份在自己的系统中也是个不错的想法。那么怎么保存?使用USB硬盘复制来吗?当然不是,你可以通过网络来处置。我们假设你已经有一台主机,这台主机的IP 是192.168.200.30 而且这台主机已经提供了 sshd这个网络服务了,接下里可以这样做。
使用rsync上传备份数据
要使用rsync你必须要在你的服务器上面获取某个账号使用权,并让该账号可以不用密码也登才行。
[root@server1 ~]# ssh-keygen
[root@server2 ~]# ssh-keygen
[root@server2 ~]# ssh-copy-id server1主机IP
[root@server1 ~]# ssh-copy-id server2主机IP
# copy过程要输入对方主机的密码
# 当提示你可以使用 ssh 对面主机IP时即为配置成功
当你已经设置好了两个服务器可以不用密码都可以登录远程服务器,而同样的,你要让 /backup/weekly/ 整个备份到 /home/下面时,可以简单地这样做
[root@server2 ~]# vim /backup/rsync.sh
#!/bin/bash
remotedir=/home
basedir=/backup/weekly
host=192.168.200.20
id=root
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}
然后执行程序就可以远程备份了
[root@localhost ~]# sh /backuo/rsync.sh
sending incremental file list
weekly
sent 5,244,244 bytes received 35 bytes 10,488,558.00 bytes/sec
total size is 5,242,880 speedup is 1.00