簡體   English   中英

如何一致地讀取間歇性硬盤?

[英]How to read an intermittent hard drive consistently?

我有一個故障的硬盤驅動器間歇性地工作。 冷啟動后,我可以訪問它大約30-60秒,然后硬盤驅動器失敗。 我願意編寫一個軟件來將這個驅動器備份到一個新的更大的磁盤上。 我可以在GNU / Linux或Windows下開發它,我不在乎。

問題是:我只能訪問磁盤一段時間,並且有些文件很大, 需要的時間比要復制的要長 出於這個原因,我正在考慮將整個硬盤備份成較小的部分,例如bit trenting。 在嘗試閱讀另一組之前,我會閱讀一些兆字節並存儲它。 我的主循環將是這樣的:

while(1){
    if(!check_harddrive()){ sleep(100ms); continue; }
    read_some_megabytes();
    if(!check_harddrive()){ sleep(100ms); continue; }
    save_data();
    update_reading_pointer();
    if(all_done){ break; }
}

問題是check_harddrive()函數。 我願意用C / C ++編寫這個,以獲得最大的API /庫兼容性。 我需要對文件處理程序進行一些控制以檢查它們是否仍然有效,並且我需要一些東西來返回錯誤數據,但如果驅動器在復制過程中失敗則返回。

如果我濫用“硬編碼”硬件異常,C#會給我最好的結果嗎?

另一種方法是測量我需要多長時間來重啟我的硬盤驅動器,並編程程序只在這段時間內讀取它,並標記我何時重啟電源。

在這種情況下你會做什么? 是否有任何工具/實用程序已經這樣做了?

哦,有一個偉大的應用程序來讀取壞光學媒體在這里 ,它被稱為IsoPuzzle,它不是我的,我只想分享與我的問題相關的東西。

!編輯!

一些澄清。 我是家庭用戶,是大學計算機工程專業的學生,​​我寧願丟失數據而不是花費數千美元來恢復它。 希捷的保修仍然涵蓋了硬盤,但由於他們給了我5年的保修期,我想盡一切可能,直到時間用完。

當我說冷啟動時,我的意思是在沒有電源的情況下啟動幾秒鍾。 熱啟動會重新啟動計算機,冷啟動會將其關閉,等待幾秒鍾然后重新啟動它。 由於有問題的硬盤是內置的SATA,我可以斷開電源線,等待幾秒鍾再重新連接。

到現在為止,我將使用robocopy,我只是在尋找它,看看我如何使用它。 如果我不需要編寫自己的代碼,而是編寫腳本,那就更容易了。

!EDIT2!

我不清楚,我的驅動器是希捷7200.11。 眾所周知,它有一個糟糕的固件,並不總是可以通過簡單的固件更新來修復(不會出現此錯誤)。 驅動器在物理上處於工作狀態的100%,只是固件被擰緊,使其在幾秒鍾后進入無限繁忙狀態。

我會先從硬件角度來解決這個問題。 它是一個外部驅動器 - 如果是這樣,你能在不同的情況下嘗試嗎?

你提到冷啟動工作,然后退出。 這與熱有關嗎? 你有沒有嘗試過像冰箱一樣長時間使用硬盤?

從軟件方面來說,我有一個第二個線程,密切關注一些重復循環讀取少量數據更新的進度計數器,然后它將能夠通過您定義的超時發出故障信號。

您可能對robocopy (“Robust File Copy”)感興趣。 Robocopy是一個命令行工具,它可以容忍網絡中斷並恢復先前停止的復制(不完整的文件用日期戳記對應於1980-01-01並包含恢復記錄,因此Robocopy知道從哪里繼續)。

你知道......我喜歡“ 懶惰 ”......這就是我要做的事:

我會寫2個簡單的腳本。 其中一個會啟動robocopy(關閉持久性特征)並開始復制,而另一個會定期檢查(可能是通過嘗試列出根目錄的內容,如果它需要的時間超過它已經死了幾秒鍾。 ..再次..)驅動器是否仍在工作,如果硬盤停止工作,它將重新啟動機器。 登錄后讓他們啟動並設置自動登錄,這樣當機器重新啟動時,它會自動繼續。

我認為最簡單的方法是復制整個磁盤映像。 在Linux下,您的磁盤將顯示為塊設備,例如/dev/sdb1

開始復制磁盤映像,直到出現讀取錯誤。 然后等待用戶“修復”磁盤並從最后一個位置開始讀取。

您可以輕松掛載文件磁盤映像並讀取其內容,請參閱mount -o loop選項。

使用前冷卻磁盤。 我聽說有幫助。

從“我需要獲取數據”的角度來看,如果您的數據對您非常有價值,我建議您將驅動器發送給數據恢復專家。 根據數據的價值,成本(可能是幾百美元)是微不足道的。 理想情況下,你會發現一個數據恢復專家不只是運行一些軟件來進行恢復 - 如果軟件方法不起作用,他們應該可以做一些事情,比如更換驅動器上的電路板,可能還有其他事情(我不是數據恢復專家)。

如果驅動器上的數據值沒有達到該級別,則應考慮購買許多軟件中的一個用於數據恢復。 例如,我個人已經使用過,並會從Runtime軟件http://www.runtime.org推薦GetDataBack。 我用它來恢復一個失敗的驅動器,它對我有用。

現在轉到更一般的信息......關於故障驅動器的數據恢復的標准過程是盡可能少地在驅動器上進行。 您應拔掉驅動器,並停止嘗試執行任何操作。 驅動器出現故障,可能會變得越來越糟。 你不想玩它。 您需要最大化獲取數據的機會。

該過程的工作方式是使用逐塊(不是逐個文件)讀取驅動器的軟件,並制作驅動器的映像副本。 該軟件嘗試讀取每個塊,並在它們失敗時重試讀取,並寫入一個圖像文件,該文件是整個硬盤驅動器的映像。

一旦硬盤驅動器成像,軟件就會對圖像進行處理,以識別驅動器的各個邏輯部分 - 分區,目錄和文件。 然后它可以讓您從圖像中復制文件。

該軟件通常可以從圖像中“推斷”結構。 例如,如果分區表損壞或丟失,軟件將掃描整個映像,查找可能是分區的內容,如果它們看起來像分區,它會將它們視為分區,看看它是否可以找到目錄和文件。 因此,使用大量有關驅動器上不同結構的知識來編寫好的軟件。

如果你想學習如何編寫這樣的軟件,對你有好處! 我的建議是,您從有關各種操作系統如何在硬盤驅動器上組織數據的書籍開始,這樣您就可以開始直觀地了解軟件如何使用驅動器映像從中提取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM