移至主內容
DarkRanger's Secret Area

主導覽

  • 首頁
  • 關於本站
  • Linux
  • 程式開發
  • N900
  • 譯文
  • 資訊技術辭典

文章分類

  • 影劇
  • 遊戲
  • 筆記
  • 雜文
  • 資訊技術
  • 站務訊息

最新內容

  • How-To:Linux 安裝 DevilutionX
  • 於 2012 年建立的一份音樂播放清單
  • How-To:Linux 安裝 Medal of Honor: Allied Assault
  • Fallout 4 (2015)
  • How-To:Linux 安裝 Blood
  • 《終極動員令》系列早期作品原始碼釋出
  • How-To:Linux 安裝 Doom 3
  • Nausicaä of the Valley of the Wind (1984)
  • Intel 內顯與 Linux 桌面死當問題排解
  • 《哥吉拉 -1.0》心得補遺

ddrescue 磁碟對拷腳本

發表日期:星期五, 01/28/2022 - 22:56,更新日期:星期日, 12/11/2022 - 20:15

可能先前多少曾提及過,ddrescue 這款磁碟救援工具已是 DR 最主要的磁碟複製方案。基本上無論磁碟好壞,DR 預設都是使用這支工具來做複製。這樣做的好處,是即便中途發生非預期的讀取失敗,也無須中斷重來。而且能夠將錯誤區域註記下來,後續便可再針對錯誤區域重試,或者做其它的處置。

 

去年為公司的舊電腦規劃了中期延壽計畫,雖然其中有許多電腦大概都用了超過 10 年。但其實只要將 HDD 換成 SSD,就能夠獲得顯著的效能改善,足敷日常任務所需。因此便經常使用 ddrescue,將舊 HDD 的資料原封不動地對拷到新的 SSD 上。倘若新的磁碟較大,則對拷後便會再用其它工具(如 GParted 等),做分割區大小的調整。

 

然而磁碟對拷本身就是一個一旦做錯就會整個悲劇的動作。也就是倘若把來源跟目標磁碟顛倒了,就會反過來清除掉舊磁碟裡的資料。因此每次在操作時總是戰戰兢兢,執行指令前都要再三確認來源跟目標是否正確,生怕一個恍神就犯下嚴重錯誤。當然,是否有更保險的操作流程?確實是有,就是分成兩個步驟來進行,且每一步驟都只接上一顆磁碟。先接上來源磁碟,將來源磁碟複製成一個映像檔,完成後卸除;再接上目標磁碟,然後將映像檔輸出到目標磁碟,如此一來就能夠很大程度避免磁碟的混淆風險。

 

但此舉會耗費雙倍的時間,也會依賴高額的儲存空間,就效益來說並不是很理想。這使得 DR 得思考是否有其它的辦法,因為預防風險始終勝於事後補救,且總不能完全依賴「小心為上」這種心態層面的要求。是人都會犯錯,而工程思維就是要設計出合適的流程或方法,來阻隔或減緩人為錯誤的發生。就像許多飛安事故的檢討,即便事後調查確認是人為疏失,也經常會改變設計來避免類案發生。

 

於是乎,DR 寫了一支互動式的 Python 腳本(ddrescue_d2d.py),來協助產出 ddrescue 指令。下載後給予可執行權限,然後以 root 權限執行:

  • chmod +x ddrescue_d2d.py
  • sudo ./ddrescue_d2d.py

 

這支腳本的運作是根據 DR 平常的確認邏輯,首先它會執行 Linux 的 fdisk 工具,並將輸出結果彙整成包含磁碟代號、型號(如果有的話)、大小以及分割區數目的精簡清單,供使用者檢視,並從中選取來源及目標磁碟。完成來源及目標的選取後,會再次列出磁碟資訊,供使用者確認是否繼續下一步。倘若目標磁碟已有分割區存在,也會再要求使用者確認一次。最後會產出相應的 ddrescue 指令,但不會執行,而是由使用者自行複製指令後再執行。

 

倘若欲由腳本接著就執行產出的 ddrescue 指令,則可以將腳本內的 SAFE_MODE 參數從 True 改為 False。這樣腳本執行到最後,還會再詢問使用者一次,同意後便會執行 ddrescue。

 

資訊技術