linux環迴文件

咱們一般在設備上(好比磁盤分區)上建立文件系統,這些存儲設備可以以設備文件的形式來使用,如/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'
View Code

 

實例: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.
View Code

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腳本攻略》

相關文章
相關標籤/搜索