0%
Linux dd Command
introduction
- convert and copy a file (Copy a file, converting and formatting according to the operands.)
- 該名稱來自數據複製器 (data duplicator),但幽默地說它也意味著磁盤破壞者或數據破壞者 (data destroyer),因為它是一個非常強大的工具
- 用途
- 備份與回復原始設備檔案,例如 MBR(master boot record)。
- 轉換資料格式,例如 ASCII 轉換為 EBCDIC,大小寫轉換等。
- 建立固定大小的檔案。
param
- bs=BYTES
- read and write BYTES bytes at a time (also see ibs=,obs=)
- cbs=BYTES
- convert BYTES bytes at a time
- conv=CONVS
- convert the file as per the comma separated symbol list
- count=BLOCKS
- copy only BLOCKS input blocks
- ibs=BYTES
- read BYTES bytes at a time (default: 512)
- if=FILE
- read from FILE instead of stdin
- iflag=FLAGS
- read as per the comma separated symbol list
- obs=BYTES
- write BYTES bytes at a time (default: 512)
- of=FILE
- write to FILE instead of stdout
- oflag=FLAGS
- write as per the comma separated symbol list
- seek=BLOCKS
- skip BLOCKS obs-sized blocks at start of output
- skip=BLOCKS
- skip BLOCKS ibs-sized blocks at start of input
- status=noxfer
- suppress transfer statistics
- count_bytes
- treat ‘count=N’ as a byte count (iflag only)
- skip_bytes
- treat ‘skip=N’ as a byte count (iflag only)
- seek_bytes
- treat ‘seek=N’ as a byte count (oflag only)
常用說明
-
if=FILE
:指定輸入檔案名稱(input file)為 FILE
。
-
of=FILE
:指定輸出檔案名稱(output file)為 FILE
。
-
ibs=BYTES
:指定輸入區塊大小(input block size),一次讀取 BYTES
位元組的資料,預設為 512 位元組。
-
obs=BYTES
:指定輸出區塊大小(output block size),一次寫入 BYTES
位元組的資料,預設為 512 位元組。
-
bs=BYTES
:指定 block size,一次讀取與寫入 BYTES
位元組的資料,此選項會覆蓋 ibs
與 obs
的設定。
-
cbs=BYTES
:一次轉換 BYTES
位元組的資料。
-
count=N
:只處理 N
個輸入區塊,每個區塊的大小為 ibs
。
-
seek=N
:在輸出時跳過輸出檔案的前 N
個區塊,每個區塊的大小為 obs
。
-
skip=N
:在輸入時跳過輸入檔案的前 N
個區塊,每個區塊的大小為 ibs
。
-
conv=CONVS
:指定資料的轉換選項,如果一次要指定多種轉換,則以逗點分隔。
e.g.
備份整顆硬碟
- 將
/dev/sda
所有的資料寫入 /dev/sdb
: 1 2 3
| sudo dd if=/dev/sda of=/dev/sdb // 讀取錯誤時還是繼續拷貝資料的話,就要加上 `conv=noerror` 參數,這個選項通常在備份資料時會使用到,另外加上 `sync` 可以讓 `dd` 以 synchronized I/O 的方式備份資料: sudo dd if=/dev/sda of=/dev/sdb conv=noerror,sync
|
建立固定大小的檔案
- 建立一個 10MB 大小的檔案:
1 2
| dd if=/dev/zero of=file1 bs=10485760 count=1 // 這裏的 block size 的計算方式為 10*1024*1024 = 10MB。
|
修改檔案內容
- 將檔案開頭的 512 bytes 改為 null:
1 2
| dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc # 這裡的 notrunc 參數代表不要將輸出檔案截短,只取代開頭的前 512 bytes,其餘內容不變。假設 file1 不存在,那麼這行指令就會建立一個 512 bytes 的 file1 檔案。
|
reference