Login

Navigation

This articles is published 208 days ago and last updated 208 days ago, some information may be out of date.

Linux 的命令基本用法 - dd

Cover.jpg

picture from unsplash

前言:
dd(data duplicator)命令是一個簡單而多功能且強大的工具, 可以無視操作系統的情況下一塊一塊的將數據從原始地址複製到目的地。 免費開源的Clonezilla 硬碟克隆軟件,也是以 dd 的的形式備份系統。

要點: 確保目的地的分區大小不能小於原始分區大小

基本命令參數:
指命說明
if=指定原始地址(input file)
of=指定目的地址(output file)
bs=指定 block size (* 可以是64K、1M、1G等)
count=處理bs(block size)的數量
conv=轉換選項
noerror無視錯誤(如: conv=noerror)
nocreat不建立輸出檔案(如:conv=nocreat)
notrunc不對數據進行任何刪減(如:conv=notrunc)
sync填充每個塊到指定位元組
status=progress檢視進度
dd的使用:

克隆分區

從物理盤 /dev/sda 的1分區 到物理盤 /dev/sdb 的1分區.

dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=notrunc,noerror,sync

克隆整個硬盤

從物理盤 /dev/sda 到物理盤 /dev/sdb

dd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror,sync

這條命令是克隆整個盤, 包括MBR(所以也包括bootloader), 所有的分區、UIUD 以及數據.

克隆 CD/DVD 光碟為鏡像文件

使用這樣的指令將光碟整個備份成 ISO 檔:

sudo dd if=/dev/cdrom of=cdrom.iso bs=2048

如果光碟已經掛載,在使用 dd 備份之前,建議先將光碟卸載,從而避免不必要的光碟讀取動作。

刪除硬碟資料

出於安全方面的考慮,有時需要擦除丟棄的磁碟。

刪附硬碟資料:

dd if=/dev/zero of=/dev/sda bs=4k

bs=4k選項使dd一次為每個區間讀取或寫入4K的zero(即清零)資料。

建立硬碟鏡像文件

使用Live CD開機進入系統,確保沒有硬碟會被加載,同時掛載外買的硬碟用於備份鏡像文件。

配合 gzip 將資料壓縮

dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c  > /path/to/backup.img.gz

如果系統文件格式為FAT32,就需要分割多個文件儲存。

dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | split -a3 -b2G - /path/to/backup.img.gz

也可以透過網絡ssh備份鏡像文件

dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | ssh [email protected] dd of=backup.img.gz

透過鏡像文件還原系統

利用備份的鏡像文件還原系統

gunzip -c /path/to/backup.img.gz | dd of=/dev/sda
也可以使用gzip -dc 替代gunzip -c

如果備份時分割多個鏡像文件,還原時可用以下指命

cat /path/to/backup.img.gz* | gunzip -c | dd of=/dev/sda

備份和恢復 MBR

MBR 存儲在硬碟的前 512 個字節中。它由4部分組成:

  1. 前 440 個字節包含引導代碼(引導加載程序)。
  2. 接下來的 6 個字節包含硬碟簽名。
  3. 接下來的 64 個字節包含分區表(4 個條目,每個條目 16 個字節,每個主分區一個條目)。
  4. 最後 2 個字節包含引導簽名。

MBR 保存為mbr_file.img

dd if=/dev/sd X of= /path/to/mbr_file.img bs=512 count=1

也可以從鏡像文件中提取 MBR

dd if= /path/to/disk.img of= /path/to/mbr_file.img bs=512 count=1

回復MBR

dd if=/ path/to/mbr_file.img of=/dev/sd X bs=512 count=1

只恢復引導加載程序,而不是主分區表,只需恢復 MBR 的前 440 字節:

dd if= /path/to/mbr_file.img of=/dev/sd X bs=440 count=1

僅恢復分區表,使用:

dd if= /path/to/mbr_file.img of=/dev/sd X bs=1 skip=446 count=64

大小寫轉換

轉換為大寫:

dd if=file1 of=file2 conv=ucase

轉換為小寫:

dd if=file1 of=file2 conv=lcase

硬碟I/O效能測試

利是dd指命建立一個指定大小文件,從而查看硬碟的讀取和寫入效能。

dd if=/dev/zero of=file1 bs=10M count=100 status=progress
結語:
dd 雖然是多功能且強大的工具,但基於對硬碟進行底層操作,如果操作不慎都會造成硬碟部分或全部資料的遺失,所以在操作也要非常小心。
參考資料: