ham*_*tar 2 scripting linux redhat dd cron
在 RHEL5.4 系统上,我设置了一个脚本,每晚通过 cron 使用 dd copy 备份驱动器。我将 dd 输出吐到日志文件和电子邮件中。当我发现它甚至无法在 cron 下运行时,它就在 /etc/crontab 和 /var/spool/cron/root 中。
该脚本应该将 /dev/sda 复制到 /mnt/backup/sda.img (/mnt/backup 是一个已安装的 250gb 外部)。
当我在终端以 root 身份运行它时,它工作正常,我可以看到数据正在写入磁盘,并且 sda.img 越来越大。
然而,当作为 cron 运行时,我从 dd 得到输出,说它复制了 147gb,但找不到它把 147gb 吐到哪里 - 它没有把它放在 sda.img 中。它不在文件系统的任何地方,因为它只剩下 50gb。
它去了哪里?以及如何确保在终端中发生的 cron 中发生同样的事情。
我确实停止了 crond 并在备份之前和之后启动它,但是我的印象是 cron 启动了工作,我关闭了它,它备份了,再次启动并且正在愉快地进行。
谢谢。
编辑:抱歉,dd 行是
dd if=/dev/sda of=/mnt/backup/sda.img bs=400K
而 cron 行是
01 0 * * * 2-6 /root/applog_backup.sh
当它与
mount -o loop,offset=32256 sda.img /mnt/restore一起工作时,我可以访问这些文件
我关闭了 cron 以防止每小时作业在备份期间修改磁盘。我还关闭了其他服务和生产数据库,以尽量减少重要地方的磁盘写入。
Jul*_*ano 11
您的“备份”脚本由 cron 执行……并且您在脚本中关闭了 cron,以防止在“备份”期间运行 cron 作业。你真的看不出问题在哪里?您的脚本关闭了 crond,但 crond 正在运行您的脚本,因此,关闭 crond 将关闭连接到您的脚本的描述符,然后该描述符将因管道损坏或来自 crond 本身的中断信号而死亡。
由于脚本死亡,crond 将不再重新启动。这就是我们所说的“在脚上开枪”。
即使在重新启动 crond 之后,它也不会注册该作业已完成,因为它在执行期间已关闭和/或必须发出终止信号。无论是 crond 本身还是 anacron(取决于您使用的 cron 调度程序),它都必须再次运行该作业,可能会进入无限循环。
如果您没有可靠性管理和灾难恢复方面的实际经验,那么您的问题就是一个很好的例子,说明您发明自己的“备份”解决方案会出错。更糟糕的是,缺乏对系统如何工作的了解。
首先,也是最重要的一点,不要在活动文件系统上进行原始磁盘转储。发明了文件系统,以便您不会直接接触原始磁盘内容。您想保存存储在文件系统中的文件,这对您来说很重要。所以你必须通过文件系统访问它们,而不是存储在磁盘上的原始字节。如果挂载了分区,则绝对无法保证您的数据确实存储在磁盘上,并且磁盘在复制过程中会保持一致状态。
即使您可以以可恢复的方式对磁盘状态进行快照(例如突然断电,这可以通过像 ext3 这样的日志文件系统快速恢复),但对于热磁盘转储来说永远不会如此。磁盘转储需要很长时间才能完成,在转储的开始和结束之间实际上有无数个中间状态,并且转储将包含这些状态的混合,即使使用日志文件系统也可能无法恢复。
而且我仍然没有提到原始磁盘转储备份的所有其他错误:
很多人都去过那里,并且有很多关于灾难恢复的经验可以分享。不要试图发明你自己的备份解决方案,你最终会把事情搞砸。使用适当的备份时间,如dump、tar或rsync。如果您需要更强大的东西,请使用Amanda或Bacula,或其他数百种现成的解决方案之一。
可能不是你期待的答案,但不得不说。
拜托,拜托,请不要用于dd备份您的物理卷,原因在您问题的评论中说明。
至少,如果您想进行磁盘到磁盘备份,请使用类似的东西rsync(尽管即使那样也不是没有问题),如果您无法从cron.
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |