当前位置: 首页 > 科技观察

树莓派自建NAS云盘-数据自动备份

时间:2023-03-17 19:48:14 科技观察

把你的树莓派变成数据的安全之地。在系列的第一篇文章中,我们讨论了设置NAS的一些基本步骤,添加两个1TB存储硬盘(一个用于数据存储,一个用于数据备份),以及系统(NFS)挂载数据存储磁盘到远程终端。在本文(系列文章的第二篇)中,我们将探讨自动数据备份。数据自动备份,保证数据安全,方便硬件损坏后的数据恢复,减少文件误操作带来的不必要的麻烦。备份策略让我们从为小型NAS考虑备份策略开始。建议大家有个时间节点,每天计划备份数据,以免干扰我们正常访问NAS。例如,备份时间应避开访问NAS和写入文件的时间。比如每天凌晨2点去备份数据。此外,您还必须决定每日备份需要保留多长时间,因为如果没有时间限制,存储空间将很快用完。一般情况下,每日备份保存一周即可。如果数据出现问题,您可以轻松地从备份中恢复原始数据。但是,如果您需要将数据恢复到更早的时间怎么办?您可以将星期一的备份文件保留一个月,而将每月的备份文件保留更长的时间。让我们将每月备份保留一年,将每年备份保留更长的时间,比如五年。这样,五年内备份盘上会产生大量的备份:每周7次每日备份,每月4次每周备份,每年12次每月备份,每五年5次年度备份。你应该记得,我们构建的备份磁盘和数据磁盘的大小相同(每个1TB)。如何将1TB数据的10个备份从数据盘存储到一个只有1TB大小的备份盘?如果您创建完整备份,这显然是不可能的。因此需要创建增量备份,每次备份都是基于之前的备份数据。增量备份方式并不是隔天将存储空间增加一倍,只是每天增加一点点占用空间。这是我的情况:我的NAS从2016年8月开始运行,我的备份驱动器上有20个备份。目前,我在数据盘上存储了406GB的文件。我的备份磁盘使用了726GB。当然,备份磁盘空间的使用在很大程度上取决于数据更改的频率,但如您所见,增量备份不会占用20次完整备份所需的空间。但是,随着时间的推移,1TB的空间可能不足以进行备份。一旦数据增长接近1TB限制(或任何备份磁盘容量),应选择更大的备份磁盘大小并将数据移动到那里。使用rsync进行数据备份rsync命令行工具可用于生成完整备份。pi@raspberrypi:~$rsync-a/nas/data//nas/backup/2018-08-01该命令对挂载在/nas/data/目录下的数据盘中的数据进行完整的拷贝备份。备份文件保存在/nas/backup/2018-08-01目录下。-a参数以归档模式备份,会备份所有元数据,如文件修改日期、权限、所有者和软链接文件。现在您已经在8月1日创建了完整的初始备份,您将在8月2日创建您的第一个增量备份。pi@raspberrypi:~$rsync-a--link-dest/nas/backup/2018-08-01//nas/data//nas/backup/2018-08-02上面的代码行创建了另一个关于/备份nas/data目录中的数据。备份路径为/nas/backup/2018-08-02。这里的参数--link-dest指定了备份文件所在的路径。这样,本次备份会与/nas/backup/2018-08-01的备份进行对比,只备份修改过的文件,不会复制没有修改过的文件,但是前一个备份将在文件中创建指向它们的硬链接。在备份文件中使用硬链接文件时,您通常不会注意到硬链接文件和原始副本之间的区别。它们的行为完全相同,如果您删除其中一个硬链接或文件,其他硬链接或文件仍然存在。您可以将它们视为同一文件中的两个不同条目。下面是一个例子:左框是第二次备份后原始数据的状态。中间的方块是昨天的备份。昨天的备份只有图像file1.jpg而没有file2.txt。右侧的框反映了今天的增量备份。增量备份命令创建了昨天不存在的file2.txt。由于file1.jpg从昨天开始就没有被修改过,所以今天创建了一个不占用额外磁盘空间的硬链接。自动备份你肯定不想每天早上都输入命令进行数据备份。您可以创建一个任务计划来调用下面的脚本来自动执行备份。#!/bin/bashTODAY=$(date+%Y-%m-%d)DATADIR=/nas/data/BACKUPDIR=/nas/backup/SCRIPTDIR=/nas/data/backup_scriptsLASTDAYPATH=${BACKUPDIR}/$(ls${BACKUPDIR}|tail-n1)TODAYPATH=${BACKUPDIR}/${TODAY}if[[!-e${TODAYPATH}]];然后mkdir-p${TODAYPATH}firsync-a--link-dest${LASTDAYPATH}${DATADIR}${TODAYPATH}$@${SCRIPTDIR}/deleteOldBackups.sh***代码指定数据路径,备份路径、脚本路径以及昨天和今天的备份路径。第二段代码调用rsync命令。***一段代码执行deleteOldBackups.sh脚本,会清除一些过期和不需要的备份数据。如果不想频繁调用deleteOldBackups.sh,也可以手动执行。下面是今天讨论的备份策略的一个简单而完整的示例脚本。#!/bin/bashBACKUPDIR=/nas/backup/functionlistYearlyBackups(){foriin012345dols${BACKUPDIR}|egrep"$(date+%Y-d"${i}yearago")-[0-9]{2}-[0-9]{2}"|排序-u|head-n1done}functionlistMonthlyBackups(){foriin0123456789101112dols${BACKUPDIR}|egrep"$(date+%Y-%m-d"${i}个月前")-[0-9]{2}"|排序-u|head-n1done}functionlistWeeklyBackups(){foriin01234dols${BACKUPDIR}|grep"$(date+%Y-%m-%d-d"lastmonday-${i}weeks")"完成}functionlistDailyBackups(){foriin0123456dols${BACKUPDIR}|grep"$(date+%Y-%m-%d-d"-${i}day")"完成}functiongetAllBackups(){listYearlyBackupslistMonthlyBackupslistWeeklyBackupslistDailyBackups}functionlistUniqueBackups(){获取所有备份|sort-u}functionlistBackupsToDelete(){ls${BACKUPDIR}|}grep-v-e"$(echo-n$(listUniqueBackups)|sed"s//\\\|/g")"}cd${BACKUPDIR}listBackupsToDelete|在读取file_to_delete时;dorm-rf${file_to_delete}done这个脚本会先根据你的备份策略列出所有需要保存的备份文件,然后删除那些不再需要的备份在目录下创建一个计划任务来执行以上代码。以root用户权限打开crontab-e,输入以下命令,会创建一个定时任务,每天凌晨2点执行/nas/data/backup_scripts/daily.sh。02***/nas/data/backup_scripts/daily.sh创建定时任务请参考cron创建定时任务。当没有备份任务时,卸载您的备份磁盘或将其挂载为只读磁盘;使用远程服务器作为你的备份盘,这样数据就可以通过互联网进行同步你也可以使用以下方法来加强你的备份策略,防止备份数据被意外删除或破坏:本文中的备份策略示例是备份一些我认为有价值的数据。您还可以根据个人需要修改这些策略。我将在《树莓派自建 NAS 云盘》系列的第三篇文章中讨论Nextcloud。Nextcloud提供更方便的访问NAS云盘数据的方式,同时提供离线操作,您也可以在客户端同步您的数据。