zoukankan      html  css  js  c++  java
  • 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脚本攻略》

  • 相关阅读:
    Spark Streaming Programming Guide
    Apache Kafka Replication Design – High level
    Apache Kafka源码分析 – Log Management
    Apache Kafka源码分析 – Broker Server
    Big Data资料汇总
    Spark 源码分析 -- task实际执行过程
    Spark源码分析 – 汇总索引
    Spark源码分析 – Shuffle
    C# Windows form application 播放小视频
    leetcode第一刷_Sudoku Solver
  • 原文地址:https://www.cnblogs.com/XYJK1002/p/5349242.html
Copyright © 2011-2022 走看看