linux环回文件

我们通常在设备上(比如磁盘分区)上创建文件系统,这些存储设备能够以设备文件的形式来使用,如/dev/device_name。为了使用存储设备上的文件系统,我们将其挂载到挂载点。

环回文件系统是指那些在文件中而非物理设备中创建的文件系统。我们也可以将这些文件作为文件系统挂载到挂载点上。

dd的帮助已经非常详细

[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

实例:

问题1:在大小为1GB的文件中创建ext4文件系统、

解答:

1.创建一个1G大小的文件,命名为lookbackfile.img

[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,是因为硬盘作为块设备,其分配存储空间时是按照块大小的整数倍进行的。

2.使用mkfs命令将1GB文件格式化问ext4文件

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

原文地址:https://www.cnblogs.com/XYJK1002/p/5349242.html