首页 > 代码库 > /dev目录下的loop和ram

/dev目录下的loop和ram

我们使用top命令会发现关于磁盘的内容中,可以看到loop和ram伪设备文件,但是它们是做什么的呢?


首先我们要先说一下在Linux的中I/O设备分两类,也就是块设备和字符设备。它们最简单的区分就是对数据的读取顺序:

  • 字符设备:连续的数据流,程序要顺序读取,不能随机跳跃式读取,比如键盘输入的东西

  • 块设备:可以随机访问数据,比如硬盘、光盘、U盘等,通常以块为单位的进行存取,块这个概念是操作系统层面的,落实到硬盘其实硬盘存取数据的最小单位是扇区(512字节)。块通常是由1个或多个扇区组成。

上述两种设备提供的驱动程序访问接口不同。loop和ram虽然都是块设备,但是它们是虚拟块设备,也叫作伪设备,它们不是真的,只是模拟了块设备的访问方式。


loop:循环接口文件


在使用/dev/loop之前,这种设备必须与现有文件系统上的文件进行关联,而且该文件要包含一个完整的文件系统,那么这个文件就可以像磁盘设备一样被挂载。这个表达比较晦涩,说白了这种设备主要用于把img、iso等格式的镜像文件关联到loop设备上,然后在挂载到某个目录。


相信大家都用过早起在windows平台上的虚拟光驱来加载ISO文件,然后到了后期windows平台本身就支持这种挂载了,比如在windows 8上。

技术分享

现在可以看明白了吧,只是在Linux上它使用了/dev/loop这个设备文件,因为Linux系统一切皆文件。在centos上默认有0-7个这样的设备,如下图。

技术分享

现在我们尝试在Linux上挂载一个ISO的镜像文件来看一下

losetup /dev/loop# /PATH/镜像文件
mount /dev/loop# /挂载点

技术分享

上面的挂载使用了2条命令,也可以用一条来完成,这时候系统会自动选择空闲的loop设备来使用

mount -o loop /PATH/镜像文件 /挂载点

技术分享

losetup -a 查看当前loop设备使用情况,一般你要使用这个设备先查看一下哪些是空闲的

技术分享

卸载

如果你是通过mount -o一条命令来完成挂载的话

umount /挂载点  就好了

如果你是通过losetup和mount 两条命令完成挂载的话

umount /挂载点
losetup -d /dev/loop#


ram:内存文件系统,就是把内存中的一部分空间挂载到目录上当成块设备来访问。

技术分享

要使用这种功能,先要建立一个目录用于挂载,一般建立在tmp目录下,因为内存不能永久保存数据,而tmp目录正是为了存放临时文件而存在的。

mkdir radisk    目录名称自定义

技术分享

格式化

mke2fs /dev/ram0   这里你可以随意选择一个没有被使用的ram

技术分享

Block size也就是块大小为 1024bytes 这个是默认的,可以使用-d但是指定具体大小

Fragment size段大小

4096个indoes 16384个块

mount /dev/ram0 /tmp/ramdisk  挂载

技术分享

查看分区

技术分享

分区大小为16M,为什么呢?根据上面的输出默认块大小为1024bytes,而且一共有16384个块,那16384*1024就是一共有多少字节,然后再除以1024就是有多少KB,再除以1024就是有多少MB,结果就是16MB。

现在就可以像使用内存文件系统了。


注意:实现内存文件系统有三种方式,上面的方式是Ramdisk,另外还有Ramfs和Tmpfs。它们都是提前编译到内核中的功能,本身并不是Linux内核必须使用的组件。包括上面的loop也是一样。

本文出自 “小恶魔的家” 博客,请务必保留此出处http://littledevil.blog.51cto.com/9445436/1868099

/dev目录下的loop和ram