DD 复制在终端上工作,但不在 cron 上工作

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 这样的日志文件系统快速恢复),但对于热磁盘转储来说永远不会如此。磁盘转储需要很长时间才能完成,在转储的开始和结束之间实际上有无数个中间状态,并且转储将包含这些状态的混合,即使使用日志文件系统也可能无法恢复。

而且我仍然没有提到原始磁盘转储备份的所有其他错误:

  • 已用空间和可用空间没有区别。无论您有一个 100 kB 的文件还是数万个文件中的 250 GB,一切都将被复制。这是非常低效的。仅当您需要磁盘的相同克隆并且磁盘已卸载时才使用此方法。
  • 您不能进行差异或增量备份。您的所有备份都必须是完整备份。各种低效:
    1. 由于这会占用大量空间,因此您通常只会保留所有数据的一个副本。如果您的文件在备份之前已损坏或删除而您没有注意到,则损坏或删除的数据会复制到之前的备份上,使其变得无用。
    2. 由于您对以前的数据执行此操作,因此如果您的系统在转储过程中出现故障(由于您复制整个磁盘需要更长的时间),那么您的原始系统备份都会一次性丢失。
    3. 如果 100 kB 的数据自上次备份以来发生了变化,您仍将转储整个磁盘。在您的情况下,这至少降低了一百万倍的效率。
  • 您无法将此转储恢复到具有不同几何形状的磁盘。如果您的替换磁盘较小,则无需讨论;如果您的替换磁盘更大,您可能能够恢复丢失的额外空间或对分区表和分区超级块进行一些手动更改(对于未启动的人来说是危险的)。你想相信你的文件,你的工作,这样的黑客吗?
  • 即使您使用循环设备挂载原始图像并手动复制文件……您最终还是要手动复制文件!!那么您从原始磁盘转储中获得了什么?只需复制你该死的文件!

很多人都去过那里,并且有很多关于灾难恢复的经验可以分享。不要试图发明你自己的备份解决方案,你最终会把事情搞砸。使用适当的备份时间,如dumptarrsync。如果您需要更强大的东西,请使用AmandaBacula,或其他数百种现成的解决方案之一。

可能不是你期待的答案,但不得不说。


Aln*_*tak 5

拜托,拜托,请不要用于dd备份您的物理卷,原因在您问题的评论中说明。

至少,如果您想进行磁盘到磁盘备份,请使用类似的东西rsync(尽管即使那样也不是没有问题),如果您无法从cron.