回覆列表
  • 1 # 永記利維

    如果你研究足夠深入,可以用dd執行各種任務,但它最出色的功能就是讓你可以玩轉分割槽。當然,可以使用tar甚至scp來複制整個檔案系統,辦法就是從一臺計算機複製檔案,然後將它們原封不動地貼上到另一臺計算機上新安裝的Linux。但是,由於那些檔案系統歸檔不是完整的映象,它們需要在兩頭都執行主機作業系統作為基礎。

    另一方面,使用dd可以為幾乎任何數字化內容製作逐位元組對應的完美映象。但是在你開始將分割槽從一個地方複製到另一個地方,有必要提一下:“dd代表磁碟破壞者”這句盛傳於Unix管理員當中的老話有一定道理。即使在dd命令中輸錯哪怕一個字元,都會立即永久地清除整個驅動器的寶貴資料。是的,確保輸入無誤很重要。

    切記:在按下回車鍵呼叫dd之前,務必要考慮清楚!

    dd的基本操作

    我們已對你作了必要的警告,先從簡單的方面開始入手。假設你想為被指定為/dev/sda的整個磁碟的資料建立一個精確映象。你已插入了空的驅動器(理想情況下容量與/dev/sda系統一樣大)。語法很簡單:if =定義源驅動器,of =定義儲存資料的檔案或位置:

    # dd if=/dev/sda of=/dev/sdb

    下一個例子將建立/dev/sda驅動器的.img歸檔,將其儲存到使用者帳戶的主目錄中:

    # dd if=/dev/sda of=/home/username/sdadisk.img

    那些命令建立了整個驅動器的映象。你還可以專注於驅動器中的單個分割槽。下一個例子執行該操作,還使用bs設定一次複製的位元組數(本例中是4096個位元組)。調整bs值可能會影響dd操作的整體速度,但理想的設定將取決於你的硬體配置檔案及其他考量因素。

    # dd if=/dev/sda2 of=/home/username/partition2.img bs=4096

    恢復起來很簡單:實際上只要將if的值和of的值反過來。在本文中,if=對應你想要恢復的映象,of=對應你想要寫入映象的目標驅動器:

    # dd if=sdadisk.img of=/dev/sdb

    還可以在一個命令中同時執行建立操作和複製操作。比如說,該例子將使用SSH建立遠端驅動器的壓縮映象,並將生成的歸檔儲存到本地計算機:

    # ssh [email protected] "dd if=/dev/sda

    gzip -1 -"

    dd of=backup.gz

    你應該始終測試歸檔,確認它們是否正常可用。如果它是你建立的啟動驅動器,將它插入到計算機,看看是否正常啟動。如果它是普通的資料分割槽,掛載它以確保檔案存在且可以正常訪問。

    用dd擦除磁碟

    多年前,我有個朋友為其政府負責海外大使館的安保工作。他曾告訴我,他監管的每個大使館都配有政府發放的一把錘子。為什麼?萬一大使館遇到什麼危險,可以使用這把錘子砸爛所有硬碟。

    然而,你可以使用dd讓不法分子極難搞到你的舊資料。這個命令將花一些時間在/dev/sda1分割槽的每個角落上建立數百萬個0:

    # dd if=/dev/zero of=/dev/sda1

    # dd if=/dev/urandom of=/dev/sda1

    監控dd操作

    由於磁碟或分割槽歸檔可能要花很長時間,你可能需要為命令新增進度監控工具。安裝Pipe Viewer(Ubuntu上執行sudo apt install pv),並將其插入到dd。使用pv,最後一個命令看起來像這樣:

    # dd if=/dev/urandom

    pv

    dd of=/dev/sda1 4,14MB 0:00:05 [ 98kB/s] [ <=> ]

    厭煩了備份和磁碟管理?有了dd,你不會有太多的藉口。它用起來其實不難,不過要小心。祝你好運!

  • 中秋節和大豐收的關聯?
  • 為什麼現在社會上有很多騙子?