Linux

DD 副本在終端工作,但不是由 cron

  • November 24, 2010

在 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 以防止每小時作業在備份期間修改磁碟。我還關閉了其他服務和生產數據庫,以盡量減少重要位置的磁碟寫入。

您的“備份”腳本正在由 cron 執行……並且您在腳本中關閉了 cron 以防止 cron 作業在“備份”期間執行。你真的看不出問題出在哪裡?您的腳本關閉了 crond,但 crond 正在執行您的腳本,因此,關閉 crond 將關閉連接到您的腳本的描述符,然後這些描述符將因管道損壞或 crond 本身的中斷信號而死。

由於腳本死亡,crond 將不再重新啟動。這就是我們所說的“踢自己的腳”。

即使在重新啟動 crond 之後,它也不會註冊該作業已完成,因為它在執行期間已關閉和/或必鬚髮出終止信號。無論是 crond 本身還是 anacron(取決於您使用的 cron 調度程序),它都必須再次執行該作業,可能會進入無限循環。

如果您沒有可靠性管理和災難恢復方面的實際經驗,那麼您的問題就是一個很好的例子,說明發明自己的“備份”解決方案是錯誤的。更糟糕的是,缺乏對系統如何工作的了解。

首先,也是最重要的,您不要在實時文件系統上進行原始磁碟轉儲。文件系統的發明是為了讓您不直接接觸原始磁碟內容。您想保存儲存在文件系統中的文件,這對您來說很重要。所以你必須通過文件系統訪問它們,而不是儲存在磁碟上的原始字節。如果分區已掛載,則絕對不能保證您的數據實際儲存在磁碟上,並且在復製過程中磁碟將保持一致狀態。

即使您可以以可恢復的方式對磁碟的狀態進行快照(例如突然的電源故障,可以使用 ext3 之類的日誌文件系統快速恢復),但對於熱磁碟轉儲而言,這絕不是正確的。磁碟轉儲需要很長時間才能完成,在轉儲的開始和結束之間幾乎存在無限的中間狀態,並且轉儲將包含這些狀態的混合,即使使用日誌文件系統也可能無法恢復。

而且我仍然沒有提到原始磁碟轉儲備份的所有其他問題:

  • 已用空間和可用空間之間沒有區別。無論您有一個 100 kB 的文件還是 250 GB 的數万個文件,都將被複製。這是非常低效的。僅當您需要相同的磁碟複製並且磁碟 unmounted時才使用此方法。

  • 您不能進行差異備份或增量備份。您的所有備份都必須是完整備份。各種低效:

    1. 由於這會佔用大量空間,因此您通常只會保留所有數據的一個副本。如果您的文件在備份之前已損壞或刪除,而您沒有註意到,則損壞或刪除的數據會復製到以前的備份上,使其無用。
    2. 由於您對以前的數據執行此操作,因此如果您的系統在轉儲過程中出現故障(由於您正在複製整個磁碟,這需要更長的時間),您的原始系統備份都會一次性失去。
    3. 如果自上次備份以來更改了 100 kB 的數據,您仍將轉儲整個磁碟。在您的情況下,這至少會降低一百萬倍的效率。
  • 您無法將此轉儲還原到具有不同幾何形狀的磁碟。如果您的替換磁碟較小,則無需討論;如果您的替換磁碟更大,您可以恢復失去額外空間或對分區表和分區超級塊進行一些手動(並且對初學者來說很危險)更改。你想相信你的文件,你的工作,這樣的黑客嗎?

  • 即使您使用循環設備安裝原始圖像並手動複製文件……**您最終也會手動複製文件!**那麼您從進行原始磁碟轉儲中獲得了什麼?只需複制您該死的文件!

很多人都去過那裡,並且有很多關於災難恢復的經驗可以分享。不要試圖發明自己的備份解決方案,否則你會搞砸的。使用適當的備份,例如dumptarrsync。如果您需要更強大的功能,請使用AmandaBacula或其他數百種現成的解決方案之一。

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

引用自:https://serverfault.com/questions/89010