1. 程式人生 > >dd命令製作U盤啟動盤 wodim燒錄光碟 附dd命令介紹

dd命令製作U盤啟動盤 wodim燒錄光碟 附dd命令介紹

首先格式化U盤:使用fdisk -l 檢視U盤到掛載點,如我的為/dev/sdb1。解除安裝U盤,執行格式化命令:mkfs.vfat  /dev/sdb1

然後重新掛載U盤,開始製作啟動盤:

# dd if=/ntfs/linux_all/sys/CentOS-7.0-1406-x86_64-DVD.iso of=/dev/sdb

注意是/dev/sdb 不是/dev/sdb1  否測出現:isolinux.bin missing or corrupt 錯誤

此時可以重新開一個終端以dd命令相同到使用者執行:# while killall -USR1 dd; do sleep 5; done
此時在dd命令到終端中即可顯示燒錄進度:
3618528+0 records in
3618528+0 records out
1852686336 bytes (1.9 GB) copied, 392.471 s, 4.7 MB/s
3673141+0 records in
3673141+0 records out
1880648192 bytes (1.9 GB) copied, 397.562 s, 4.7 MB/s
3726407+0 records in
3726407+0 records out
1907920384 bytes (1.9 GB) copied, 402.54 s, 4.7 MB/s
3779793+0 records in

附:
一 dd命令:
dd是Linux/UNIX 下的一個非常有用的命令,作用是用指定大小的塊拷貝一個檔案,並在拷貝的同時進行指定的轉換。
引數
1.if=檔名:輸入檔名,預設為標準輸入。即指定原始檔。<if=inputfile>
3.ibs=bytes:一次讀入bytes個位元組,即指定一個塊大小為bytes個位元組。
obs=bytes:一次輸出bytes個位元組,即指定一個塊大小為bytes個位元組。
bs=bytes:同時設定讀入/輸出的塊大小為bytes個位元組。
4.cbs=bytes:一次轉換bytes個位元組,即指定轉換緩衝區大小。
5.skip=blocks:從輸入檔案開頭跳過blocks個塊後再開始複製。
6.seek=blocks:從輸出檔案開頭跳過blocks個塊後再開始複製。
注意:通常只用當輸出檔案是磁碟或磁帶時才有效,即備份到磁碟或磁帶時才有效。
7.count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的位元組數。
8.conv=conversion:用指定的引數轉換檔案。
ascii:轉換ebcdic為ascii
ebcdic:轉換ascii為ebcdic
ibm:轉換ascii為alternateebcdic
block:把每一行轉換為長度為cbs,不足部分用空格填充
unblock:使每一行的長度都為cbs,不足部分用空格填充
lcase:把大寫字元轉換為小寫字元
ucase:把小寫字元轉換為大寫字元
swab:交換輸入的每對位元組
noerror:出錯時不停止
notrunc:不截短輸出檔案

sync:將每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊。

使用wodim燒錄光碟:檢視光碟機資訊:

wodim --devices
wodim: Overview of accessible drives (1 found) :
-------------------------------------------------------------------------
 0  dev='/dev/scd0'	rwrw-- : 'HL-DT-ST' 'DVDRAM GT31N'
-------------------------------------------------------------------------
執行燒錄
wodim -sao -v  speed=1 dev=/dev/scd0 /ntfs/linux_all/sys/CentOS-7.0-1406-x86_64-DVD.iso 

-v verbose
-eject 刻完自動彈出光碟
speed=1 dev=0,3,0 :1M速刻錄到dev=/dev/scd0

二  /dev/zero 與 /dev/null區別:

/dev/null

/dev/null看作"黑洞"。 它非常等價於一個只寫檔案。所有寫入它的內容都會永遠丟失。 而嘗試從它那兒讀取內容則什麼也讀不到。所以我們是不能從他那裡讀到資料的,所以在dd命令中當我們為了測試某個磁碟的讀效能時候,就可以將of指定為/dev/null 這樣相當從要測試的裝置上讀出的資料都填到了這個無底洞中。同時, /dev/null對命令列和指令碼都非常的有用的。例如,當我們標準輸出中有很多很多的無用資訊時候而我們並不需要,這樣就可以將輸出重定向到/dev/null中:

禁止標準輸出. 1 cat $filename >/dev/null

/dev/zero

像/dev/null一樣, /dev/zero也是一個偽檔案。 他產生連續不斷的null的流(二進位制的零流,而不是ASCII型的)。寫入它的輸出會丟失不見, 而從/dev/zero讀出一連串的null也比較困難, 雖然這也能通過od或一個十六進位制編輯器來做到。 /dev/zero主要的用處是用來建立一個指定長度用於初始化的空檔案,就像臨時交換檔案。另一個應用是為特定的目的而用零去填充一個指定大小的檔案,就像我們在用dd命令為了測試磁碟寫效能時候,我們可以將if指定為/dev/zero這樣,他就相當源源不斷的向我們要測試的裝置中寫入資料。

/dev/random與/dev/unrandom
dev/random和/dev/urandom是unix系統提供的產生隨機數的裝置,很多應用都需要使用random裝置提供的隨機數,比如ssh keys, SSL keys, TCP/IP sequence numbers等等。他們的區別在於,/dev/urandom生成的速度比/dev/random快。如果不能立即生成隨機串,/dev/random會一直阻塞,有時會非常耗費CPU;/dev/urandom則會根據其他值立即生成一個隨機串,不會阻塞。/dev/urandom生成的隨機值沒有/dev/random隨機。大多數情況下,我們選用/dev/urando

三   fsync dsync sync區別

在用dd做讀或者寫的時候,應該要注意自己的使用場景,如果需要將資料寫入磁碟的話

dd if=/dev/zero of=test bs=64k count=16k 是不準確的,

而 dd if=/dev/zero of=test bs=64k count=16k conv=fsync 比較準備,他在dd結束前會寫到磁碟,

而dd if=/dev/zero of=test bs=64k count=4k oflag=dsync或者sync 是真正的每寫一次就寫一次磁碟,所以其實可以聽到磁碟啪啪啪的響的。

conv=fsync Synchronize output data and metadata just before finishing 意思也就是在dd命令結束前同步data和metadata

oflag=dsync是說Use synchronized I/O for data. For the output file, this forces a physical write of output data on each write,注意用詞 a physical write of output data on each write,那就是他是每一次寫都得等到這一次寫寫到了磁碟才進行下一個寫,也就是如果我們使用dd寫100次,每次寫都是寫到磁碟後才進行下一次寫的操作

dd如何繞開cache
如果要規避掉檔案系統cache,直接讀寫,不使用buffer cache,需做這樣的設定
iflag=direct,nonblock
oflag=direct,nonblock
iflag=cio
oflag=cio
direct 模式就是把寫入請求直接封裝成io 指令發到磁碟
非direct 模式,就把資料寫入系統快取,然後就認為io 成功,並由作業系統決定快取中的資料什麼時候被寫入磁碟

(參考:http://blog.csdn.net/menogen/article/details/38059671)