咱們一般在設備上(好比磁盤分區)上建立文件系統,這些存儲設備可以以設備文件的形式來使用,如/dev/device_name。爲了使用存儲設備上的文件系統,咱們將其掛載到掛載點。html
環迴文件系統是指那些在文件中而非物理設備中建立的文件系統。咱們也能夠將這些文件做爲文件系統掛載到掛載點上。node
dd的幫助已經很是詳細linux
[root@future ~]# dd --help 用法:dd [操做數] ... 或:dd 選項 Copy a file, converting and formatting according to the operands. 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=N copy only N 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=WHICH WHICH info to suppress outputting to stderr; 'noxfer' suppresses transfer stats, 'none' suppresses all 塊和字節數後可能帶有如下的一個或多個後綴: c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y. 每一個 CONV 符號可能爲: ascii 由EBCDIC 碼轉換至ASCII 碼 ebcdic 由ASCII 碼轉換至EBCDIC 碼 ibm 由ASCII 碼轉換至替換的EBCDIC 碼 block 將結束字符塊裏的換行替換成等長的空格 unblock 將cbs 大小的塊中尾部的空格替換爲一個換行符 lcase 將大寫字符轉換爲小寫 nocreat do not create the output file excl fail if the output file already exists notrunc do not truncate the output file ucase change lower case to upper case sparse try to seek rather than write the output for NUL input blocks swab swap every pair of input bytes noerror 讀取數據發生錯誤後仍然繼續 sync 把每一個輸入的塊以 NUL 填充至 ibs 的大小 若是配合 block 或 unblock 使用, 則以空格代替 NUL 填充 fdatasync 結束前將輸出文件數據寫入磁盤 fsync 相似上面,可是元數據也一同寫入 FLAG 符號能夠是: append 追加模式(僅對輸出有意義;隱含了conv=notrunc) direct 使用直接I/O 存取模式 directory 除非是目錄,不然 directory 失敗 dsync 使用同步I/O 存取模式 sync 與上者相似,但同時也對元數據生效 fullblock 爲輸入積累完整塊(僅iflag) nonblock 使用無阻塞I/O 存取模式 noatime 不更新存取時間 noctty 不根據文件指派控制終端 nofollow 不跟隨連接文件 count_bytes treat 'count=N' as a byte count (iflag only) 對運行中的"dd"進程發送一個USR1 信號會使得 I/O 的統計信息被打印到標準錯誤設備而後恢復複製操做。 $ dd if=/dev/zero of=/dev/null& pid=$! $ kill -USR1 $pid; sleep 1; kill $pid 18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s 可用選項有: --help 顯示此幫助信息並退出 --version 顯示版本信息並退出 請向bug-coreutils@gnu.org 報告dd 的錯誤 GNU coreutils 項目主頁:<http://www.gnu.org/software/coreutils/> GNU 軟件通常性幫助:<http://www.gnu.org/gethelp/> 請向<http://translationproject.org/team/zh_CN.html> 報告dd 的翻譯錯誤 要獲取完整文檔,請運行:info coreutils 'dd invocation'
實例:shell
問題1:在大小爲1GB的文件中建立ext4文件系統、app
解答:async
1.建立一個1G大小的文件,命名爲lookbackfile.imgide
[root@future ~]# dd if=/dev/zero of=lookbackfile.img bs=1G count=1 記錄了1+0 的讀入 記錄了1+0 的寫出 1073741824字節(1.1 GB)已複製,33.9402 秒,31.6 MB/秒
之因此建立的文件是1.1G,是由於硬盤做爲塊設備,其分配存儲空間時是按照塊大小的整數倍進行的。oop
2.使用mkfs命令將1GB文件格式化問ext4文件spa
[root@future ~]# mkfs.ext4 lookbackfile.img mke2fs 1.41.12 (17-May-2010) lookbackfile.img is not a block special device. 不管如何也要繼續? (y,n) y 文件系統標籤= 操做系統:Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 正在寫入inode表: 完成 Creating journal (8192 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 24 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
3.檢查文件系統操作系統
[root@future ~]# file lookbackfile.img lookbackfile.img: Linux rev 1.0 ext4 filesystem data (extents) (large files) (huge files)
4.掛載環迴文件
[root@future ~]# mount -o loop lookbackfile.img /mnt/loopback/
在內部,這個環迴文件掛載到了/dev/loop1設備上。
或者使用
[root@future ~]# losetup /dev/loop1 lookbackfile.img [root@future ~]# mount /dev/loop1 /mnt/loopback/
5.查看是否掛載上了
[root@future dev]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_future-lv_root 18G 4.6G 12G 29% / tmpfs 491M 80K 491M 1% /dev/shm /dev/sda1 477M 29M 424M 7% /boot /dev/sr0 4.4G 4.4G 0 100% /media/CentOS_6.6_Final /root/lookbackfile.img 976M 1.3M 924M 1% /mnt/loopback
原理:
dd命令建立了一個文件,準備將其作爲環迴文件使用。dd是一個用於複製原始數據的通用命令。它將數據從if參數指定的文件複製到of參數指定的文件中。另外,咱們指定的dd以大小爲1GB的塊爲單位進行復制,共複製了1塊,這樣就建立了一個1GB的文件。/dev/zero是一個特殊的文件,若是讀取這個文件,讀出來的內容都是0。
當mount知道它使用的是環迴文件時,它會自動在/dev中創建一個對應該環迴文件的設備,並進行掛載。若是想手動掛載,可使用losetup命令創建設備,而後使用mount命令進行掛載。
參考資料:《linux shell腳本攻略》