我目前正在使用以下命令将我的 Raspberry Pi 3 备份到本地 NAS:
sudo dd if=/dev/mmcblk0 bs=1M | gzip > /mnt/MyCloud/"$(date +%FT%T)".gz
这应该每天运行,使用 cron 作业。
- 如果驱动器坏了,这足以恢复吗?
- 有没有更好/更快的方法?
- 如果我想恢复整个系统,我该怎么做?驱动器已压缩,因此我
dd if=my-backup.gz of=/dev/mmcblk0
认为我不能
答案1
- 这对于恢复来说已经足够了(实际上,不建议在实时系统上执行此操作,但如果您不使用经常更改的文件(例如数据库),那么系统可以确定如何在恢复时恢复自身。如果您没有数据库,那么
sync;sync;sync
在启动整个系统备份之前使用以确保文件的缓存已闪存到驱动器) - 请参阅下文以获得更好的解决方案
- 只需使用
gunzip -c /path/to/your.image.gz | dd of=/dev/sdX
在我看来,这是对备份驱动器空间的浪费,因为你要多次克隆相同的未更改内容。使用tar
增量模式,它将仅备份先前内容之间的更改。
增量备份的简单示例tar
#!/bin/sh
TAR='/bin/tar'
DATE='/bin/date'
SrcDir='/'
BkpDir='/mnt/MyCloud'
f=$($DATE '+%Y-%m-%dT%H-%M-%S')
snar="${BkpDir}/snar.diff" # If you need full backup then remove
# ${snar} file before doing backup
[ -f "${snar}" ] && level=1 || level=0
$TAR -czf "${BkpDir}/${f}_dump.level.${level}.tgz" \
--listed-incremental=${snar} \
--no-check-device \
--totals \
--level=${level} \
--directory=${SrcDir} \
--exclude=tmp/* \
--exclude=media/* \
--exclude=mnt/* \
--exclude=proc/* \
--exclude=sys/* \
--exclude=dev/* \
--exclude=run/* \
--exclude=var/tmp/* \
--exclude=var/run/* \
--exclude=var/lock/* \
--exclude=var/cache/locate/* \
--exclude=var/dcc/dccifd \
--exclude=var/lib/amavis/amavisd.sock \
--exclude=var/lib/php5/sess_* \
--exclude=var/spool/postfix/dev/* \
--exclude=var/spool/postfix/pid/* \
--exclude=var/spool/postfix/private/* \
--exclude=var/spool/postfix/public/* \
--exclude=backup \
--exclude=${BkpDir} \
.
exit $?
答案2
也许我在这里太简单了,但在查看了用于安排备份等的 DD 和 crontab 的选项后,我决定采用不同的方法,部分原因是我更习惯 Windows 系统。
- 关闭 RPi。
- 移除 SD 卡。
- 转到 Windows PC(Linux 也可以,但我想使用 DD)。
- 使用 Win32DiskImager读将内容归档。
我每隔几个月才这样做一次,但是除了系统更新之外,SD卡上几乎没有什么变化。 Win32 磁盘映像器下载@sourceforge
这将提供完整的系统备份。如上所述,我认为除了占用空间之外,对整个驱动器进行多份备份几乎没有意义。我的方法提供了完整备份,而且我的其他文件(例如 dlna 音乐和 webserve 文件夹)无论如何都不存储在 SD 卡上,而是存储在 USB 驱动器上。我的方法很简单,但它有效。否则,tar 增量备份方法看起来非常好。