/dev/loop与设备文件系统
2013-08-15 19:40
260 查看
摘要:在进行测试的时候,我们往往需要新建一些磁盘分区或者设备等,此时对硬盘进行重新划分往往不太方面。这种情况下,我们可以通过伪设备来实现循环挂载,从而达到目的。本文主要为你讲解什么是循环挂载,什么是虚拟设备,设备和文件系统有什么关系。
disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。
在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。
这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。
在Linux中,设备名按照相应设备驱动程序的符号表项进行命名。这些设备被叫做”loop“设备,设备节点通常命名为/dev/loop0, /dev/loop1之类。 静态设备目录可以用makedev脚本创建,或者动态地由设备文件系统(udev)设施创建。
循环设备的管理界面是 losetup,这是util-linux软件包的一部分。
有时,循环设备被错误地认为是回环设备,但是这个术语在Linux内核中是为网络设备保留的(参见回环设备)。循环设备的概念和回环设备不同,虽然在名字上有相似的地方。
在NetBSD和OpenBSD等BSD所派生的系统中,循环设备被称为“虚拟节点设备”或“vnd”,并且设备被置于 /dev/vnd0, /dev/rvnd0 或/dev/svnd0等处。在文件系统中,使用vnconfig程序来进行配置。
FreeBSD在发行版5之前和其他BSD系统一样遵守约定,之后循环设备便被纳入记忆磁盘设备("md")。目前使用mdconfig[1]程序进行配置。
在Solaris/OpenSolaris中,循环设备被称为
"回环文件接口" 或 lofi,[2] 位于 /dev/lofi/1等处。SunOS
拥有 lofiadm 配置程序。"lofi"驱动程序支持只读压缩和可读写的加密。 自从1988年夏季开始更有SunOS/Solaris平台的第三方驱动 "fbk"[3] (文件模拟块设备,英文:File
emulates Blockdevice)
Mac OS X实现了一个本地的镜像挂载机制并作为其随机访问磁盘设备的抽象。这些设备如同普通设备一样出现在 /dev 中,读写操作被送往一个用户模式的辅助进程,并由辅助进程负责读取和写入的操作。在用户界面中当打开磁盘镜像的时候自动被启用。这可以处理多种格式的盘片、CD-ROM
或 DVD 镜像。
在Microsoft Windows操作系统上并不能原生支持循环挂载(直到Windows
7,这个功能才被原生实现,并通过工具diskpart进行工作)。 [4] 然而,这项能力经常通过第三方程序得以实现,例如Daemon
Tools 和 Alcohol 120% VMware的免费工具以及LTR
Data (ImDisk)都可以实现类似的功能
用一个循环设备节点连接文件。
在目录上挂载该循环设备
这两个操作既可以用两条命令来完成,也可以通过加上特殊的挂载符号的挂载命令来完成。第一个操作可以通过如Linux平台下的losetup[5]或者是SunOS上的lofiadm[6]命令完成。
例如,如果
其中第二条命令将设备挂载于目录
此外 mount 工具常常可以胜任整个挂载的程序:
之后设备便能用下列命令实现卸载:
在较底层的应用程序接口中,文件的关联与解除关联通过在循环设备上的ioctl 系统调用来实现。
设备文件系统包括设备文件、设备节点、设备特定文件,它们是驱动程序的接口,而在文件系统中,它们就像是普通文件。
块设备通常支持随机存取和寻址,并使用缓存器。操作系统为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或者写入数据的请求时,系统把数据中的每一个字符存储在适当的缓存中。当缓存被填满时,会采取适当的操作(把数据传走),而后系统清空缓存。
字符设备在实现时,大多不使用缓存器。系统直接从设备读取/写入每一个字符。
接受和丟棄所有輸入;即不產生任何輸出。
永遠在被填滿狀態的設備。
Loop設備
產生連續的NUL字元的串流(數值為0)。
產生一個虛假隨機的任意長度字元串流。(Blocking)
產生一個虛假隨機的任意長度字元串流。(Non-Blocking)
dd - convert and copy a file
bs=BYTES
read and write up to BYTES bytes at a time
if:inputfile
of:outputfile
6.2losetup命令
losetup - set up and control loop devices
Delete loop:
losetup -d loopdev...
Print name of first unused loop device:
losetup -f
1.循环挂载
在类Unix系统中,/dev/loop(或称vnd (vnodedisk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。
在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。
这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。
2.可用性
在各种操作系统中循环设备的命名存在着一些混乱。各种类Unix操作系统中,功能性的循环设备被以不同的名字命名。在Linux中,设备名按照相应设备驱动程序的符号表项进行命名。这些设备被叫做”loop“设备,设备节点通常命名为/dev/loop0, /dev/loop1之类。 静态设备目录可以用makedev脚本创建,或者动态地由设备文件系统(udev)设施创建。
循环设备的管理界面是 losetup,这是util-linux软件包的一部分。
有时,循环设备被错误地认为是回环设备,但是这个术语在Linux内核中是为网络设备保留的(参见回环设备)。循环设备的概念和回环设备不同,虽然在名字上有相似的地方。
在NetBSD和OpenBSD等BSD所派生的系统中,循环设备被称为“虚拟节点设备”或“vnd”,并且设备被置于 /dev/vnd0, /dev/rvnd0 或/dev/svnd0等处。在文件系统中,使用vnconfig程序来进行配置。
FreeBSD在发行版5之前和其他BSD系统一样遵守约定,之后循环设备便被纳入记忆磁盘设备("md")。目前使用mdconfig[1]程序进行配置。
在Solaris/OpenSolaris中,循环设备被称为
"回环文件接口" 或 lofi,[2] 位于 /dev/lofi/1等处。SunOS
拥有 lofiadm 配置程序。"lofi"驱动程序支持只读压缩和可读写的加密。 自从1988年夏季开始更有SunOS/Solaris平台的第三方驱动 "fbk"[3] (文件模拟块设备,英文:File
emulates Blockdevice)
Mac OS X实现了一个本地的镜像挂载机制并作为其随机访问磁盘设备的抽象。这些设备如同普通设备一样出现在 /dev 中,读写操作被送往一个用户模式的辅助进程,并由辅助进程负责读取和写入的操作。在用户界面中当打开磁盘镜像的时候自动被启用。这可以处理多种格式的盘片、CD-ROM
或 DVD 镜像。
在Microsoft Windows操作系统上并不能原生支持循环挂载(直到Windows
7,这个功能才被原生实现,并通过工具diskpart进行工作)。 [4] 然而,这项能力经常通过第三方程序得以实现,例如Daemon
Tools 和 Alcohol 120% VMware的免费工具以及LTR
Data (ImDisk)都可以实现类似的功能
3.实例
在目录上挂载包含文件系统的文件一般需要两步:用一个循环设备节点连接文件。
在目录上挂载该循环设备
这两个操作既可以用两条命令来完成,也可以通过加上特殊的挂载符号的挂载命令来完成。第一个操作可以通过如Linux平台下的losetup[5]或者是SunOS上的lofiadm[6]命令完成。
例如,如果
example.img是一个包含文件系统的常规文件,并且
/home/you/dir是 Linux用户的目录,超级用户(root)或许可以通过执行如下的命令来将文件挂载在目录上:
losetup /dev/loop0 example.img mount /dev/loop0 /home/you/dir
其中第二条命令将设备挂载于目录
/home/you/dir。执行上述语句的效果便是文件被作为文件系统挂载,文件的内容出现在被挂载的目录中(以被挂载的目录作为根目录)。
此外 mount 工具常常可以胜任整个挂载的程序:
mount -o loop example.img /home/you/dir
之后设备便能用下列命令实现卸载:
umount /home/you/dir # 或者通过诸如 mount | grep "/home/you/dir" # 或是 losetup -a | grep example.img 的查找找到与文件相关联的loop设备号码 # 并执行下列命令:(<N>代表设备号) umount /dev/loop<N>
在较底层的应用程序接口中,文件的关联与解除关联通过在循环设备上的ioctl 系统调用来实现。
4.设备文件
在类Unix操作系统中,设备文件系统允许软件通过标准输入输出系统调用与驱动程序交互,从而简化了许多任务。设备文件系统包括设备文件、设备节点、设备特定文件,它们是驱动程序的接口,而在文件系统中,它们就像是普通文件。
5.设备
5.1块设备
块设备是指与系统间用块的方式移动数据的设备。这些设备节点通常代表可寻址设备,如硬盘、CD-ROM和内存区域。块设备通常支持随机存取和寻址,并使用缓存器。操作系统为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或者写入数据的请求时,系统把数据中的每一个字符存储在适当的缓存中。当缓存被填满时,会采取适当的操作(把数据传走),而后系统清空缓存。
5.2字符设备
字符设备是指每次与系统传输1个字符的设备。这些设备节点通常为传真、虚拟终端和串口调制解调器之类设备提供流通信服务,它通常不支持随机存取数据。字符设备在实现时,大多不使用缓存器。系统直接从设备读取/写入每一个字符。
5.3伪设备
在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备是伪设备。操作系统运用了它们提供的多种功能。部份經常使用到的偽設備包括:/dev/null
接受和丟棄所有輸入;即不產生任何輸出。
/dev/full
永遠在被填滿狀態的設備。
/dev/loop
Loop設備
/dev/zero
產生連續的NUL字元的串流(數值為0)。
/dev/random
產生一個虛假隨機的任意長度字元串流。(Blocking)
/dev/urandom
產生一個虛假隨機的任意長度字元串流。(Non-Blocking)
6.两个相关的linux命令
6.1dd命令dd - convert and copy a file
bs=BYTES
read and write up to BYTES bytes at a time
if:inputfile
of:outputfile
6.2losetup命令
losetup - set up and control loop devices
Delete loop:
losetup -d loopdev...
Print name of first unused loop device:
losetup -f
相关文章推荐
- linux文件系统之loop环设备--新建一个文件系统并挂载
- 在用虚拟机装linux5的时候出现了“出现错误-未找到要在其中创建新文件系统的有效设备”的提示之后就无法安
- 特殊设备文件 /dev/null 和 /dev/zero
- Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1
- Linux内存文件系统——tmpfs(/dev/shm)
- /dev/null 和/dev/zero 设备文件说明 (
- 使用rman做文件系统和raw设备之间的转换
- devtmpfs文件系统创建设备节点
- 进程1格式化虚拟盘并设置虚拟盘为根设备并加载根文件系统
- ceph(存储之块设备、文件系统、对象存储)
- 10-09 Linux的文件系统介绍以及各种设备的说明
- 使用vmware提示无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件
- fstab文件中挂载/dev/mtdblock设备不行!
- 设备文件系统剖析与使用
- 出现错误-未找到要在其中创建新文件系统的有效设备。请检查您的硬件以找到问题的起因。
- NuttX文件系统学习之关键数据结构及设备注册
- linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
- 中断与异常、时钟源、文件系统、设备驱动
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
- linux中字符设备文件系统分析