我们通常在设备上(比如磁盘分区)上创建文件系统,这些存储设备能够以设备文件的形式来使用,如/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'
实例:
问题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.
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脚本攻略》