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

相关文章
相关标签/搜索