linux/unix dd命令是一個非常好的管理磁盤命令
dd命令作用:指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換,起到一個初始化磁盤的作用
dd指令選項詳解
if=file --> 輸入文件名,缺省為標准輸入
of=file --> 輸出文件名,缺省為標准輸出
ibs=bytes --> 一次讀入bytes個字節(即一個塊大小為 bytes 個字節)
obs=bytes --> 一次寫bytes個字節(即一個塊大小為 bytes 個字節)
bs=bytes --> 同時設置讀寫塊的大小為 bytes,可代替 ibs 和obs
cbs=bytes --> 一次轉換bytes個字節,即轉換緩沖區大小
skip=blocks --> 從輸入文件開頭跳過 blocks個塊後再開始復制
seek=blocks --> 從輸出文件開頭跳過 blocks個塊後再開始復制。(通常只有當輸出文件是磁盤或磁帶時才有效)
count=blocks --> 僅拷貝blocks個塊,塊大小等於 ibs 指定的字節數
conv=conversion[,conversion...] --> 用指定的參數轉換文件
ascii --> 轉換EBCDIC為 ASCII
ebcdic --> 轉換ASCII為 EBCDIC
ibm --> 轉換ASCII為 alternate EBCDIC
block --> 把每一行轉換為長度為 cbs的記錄,不足部分用空格填充
unblock --> 使每一行的長度都為 cbs,不足部分用空格填充
lcase --> 把大寫字符轉換為小寫字符
ucase --> 把小寫字符轉換為大寫字符
swab --> 交換輸入的每對字節
noerror --> 出錯時不停止
notrunc --> 不截短輸出文件
sync --> 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
注意:指定數字的地方若以下列字符結尾乘以相應的數字:b=512,c=1, k=1024, w=2, xm=number m,kB=1000,K=1024,MB=1000*1000,M=1024*1024,GB=1000*1000*1000,G=1024*1024*1024
創建基於文件的sswap分區:
a. dd if=/dev/zero of=/project/swapfile bs=1024 count=500000 => 通過zero文件生成一個5G的文件
b. mkswap /project/swapfile => makes file usable for swapping生成swap分區文件
c. swapon /project/swapfile => enables swapping,使swap分區生效
d. swapoff/project/swapfile => 關閉指定的swap分區
e. swapoff -a => disables all swapping for entries listed in: /etc/fstab關閉所有fstab中的swap分區
備份:
[root@server ~]# dd if=/dev/sda of=/dev/sdb => 備份整個磁盤到另外一個磁盤
[root@server ~]# dd if=/dev/sdb of=sda.bak => 備份整個磁盤為某個文件
[root@server ~]# dd if=/dev/sda | gzip > sda.bak.gz => 備份並且壓縮
[root@server ~]# dd if=/dev/sdaof=dbt.bak count=1 bs=512 skip=446
=> 跳過前446字節備份磁盤第一扇區的後66字節DPT信息到指定文件
恢復:
[root@server ~]# dd if=/dev/sdb of=/dev/sda
[root@server ~]# gzip -dc sda.bak.gz | dd of=/dev/sda
[root@server ~]# dd if=/path/to/image of=/dev/hdx count=1 bs=512 seek=446
=> 將備份DPT信息寫到MBR後面的66字節
銷毀數據:
[root@server ~]# dd if=/dev/urandom of=/dev/sda1 => 利用隨機數填充硬盤數據,達到銷毀數據的作用
通過比較dd指令輸出中所顯示的命令執行時間(選時間最少的那個),即可確定系統最佳的block size大小
注意:其中磁盤要以 -o sync的選項掛載,否則會導致數據寫入到緩存中,而非寫入磁盤上去,導致測試不准確
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
測試讀寫速度
注意:其中磁盤要以 -o sync的選項掛載,否則會導致數據寫入到緩存中,而非寫入磁盤上去,導致測試不准確
[root@server ~]# mount -o sync,remount /
[root@server ~]# mount | grep sync
/dev/sda2 on / type ext4 (rw,sync)
[root@server ~]# dd if=/dev/zero of=/tmp/test.dd bs=4096 count=5000 => 測試寫入速度
[root@server ~]# dd if=/tmp/test.dd of=/dev/null bs=4096 count=5000=> 讀取測試