我们使用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的镜像文件来看一下
1
2
|
losetup
/dev/loop
# /PATH/镜像文件
mount
/dev/loop
# /挂载点
|
上面的挂载使用了2条命令,也可以用一条来完成,这时候系统会自动选择空闲的loop设备来使用
1
|
mount
-o loop
/PATH/
镜像文件 /挂载点
|
1
|
losetup -a 查看当前loop设备使用情况,一般你要使用这个设备先查看一下哪些是空闲的
|
卸载
如果你是通过mount -o一条命令来完成挂载的话
1
|
umount
/挂载点 就好了
|
如果你是通过losetup和mount 两条命令完成挂载的话
1
2
|
umount
/挂载点
losetup -d
/dev/loop
#
|
ram:内存文件系统,就是把内存中的一部分空间挂载到目录上当成块设备来访问。
要使用这种功能,先要建立一个目录用于挂载,一般建立在tmp目录下,因为内存不能永久保存数据,而tmp目录正是为了存放临时文件而存在的。
1
|
mkdir
radisk 目录名称自定义
|
格式化
1
|
mke2fs
/dev/ram0
这里你可以随意选择一个没有被使用的
ram
|
Block size也就是块大小为 1024bytes 这个是默认的,可以使用-d但是指定具体大小
Fragment size段大小
4096个indoes 16384个块
1
|
mount
/dev/ram0
/tmp/ramdisk
挂载
|
查看分区
分区大小为16M,为什么呢?根据上面的输出默认块大小为1024bytes,而且一共有16384个块,那16384*1024就是一共有多少字节,然后再除以1024就是有多少KB,再除以1024就是有多少MB,结果就是16MB。
现在就可以像使用内存文件系统了。
注意:实现内存文件系统有三种方式,上面的方式是Ramdisk,另外还有Ramfs和Tmpfs。它们都是提前编译到内核中的功能,本身并不是Linux内核必须使用的组件。包括上面的loop也是一样。
本文转自linuxjavachen 51CTO博客,原文链接:http://blog.51cto.com/littledevil/1868099,如需转载请自行联系原作者