在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk技术。 RamDisk有三种实现方式:
1、传统意义上的ramdisk:
Linux内核2.0/2.2就已经支持,为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k。
1)如何创建ramdisk:
# create a mount point:
mkdir /tmp/ramdisk0
# create a filesystem:
mke2fs /dev/ram0
# mount the ramdisk:
mount /dev/ram0 /tmp/ramdisk0
经过上面三步,你可以将这个目录看成一个虚拟的分区,使用它就象使用其它的目录一样使用内存了。(如果对ramdisk的格式化失败,那就是你的内核不支持ramdisk)
注:ramdisk的默认大小 4Mb=4096 blocks,在进行mke2fs的时候可以看到相关信息:
mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09
Linux ext2 filesystem format
Filesystem label=
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
First data block=1
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
此外,我们可以创建多个ramdisk,例如:
2)修改大小:
在lilo.conf文件中加入:
ramdisk_size=10000 (or ramdisk=10000 for old kernels)
这样在你使用lilo命令和重新启动计算机之后,ramdisk的默认大小将会是10M。这是一个/etc/lilo.conf文件的例子:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
label=linux
root=/dev/hda2
read-only
ramdisk_size=10000
3)ramdisk特点:
RamDisk就是将内存模拟为硬盘空间。在使用RamDisk时实际上是在使用内存而不是硬盘,所以会提升速度。缺点是断电重启后,目录下的内容将消失,我们可以通过定时备份/rsync的方式消除。
2、ramfs:
Ramfs顾名思义是内存文件系统,它处于虚拟文件系统(VFS)层,它是基于ram的动态文件系统的一种Linux硬盘缓冲机制。
1)硬盘缓冲机制:
一般的在Linux上所有的文件都被缓冲在内存中。内存中的数据页在回写后仍然会保存在内存中以防再次使用,但是回写后的数据会被标识为clean,这样系统就可以用这些内容干别的事情了。同样的,文件数据再被回写后也被表识为clean,但是并没有在内存中擦除直到虚拟内存对他再次分配。一个相似的机制也同样适用于目录。
对于ramfs,它没有回写地址。文件写入ramfs中后和平时一样分配目录和页,但是他们回写不了。这就意味着他们的内存永远也不能被标识为clean,所以他们在期待回收内存的时候不会被虚拟内存释放。
2)创建ramfs:
它无需格式化,可以创建多个,只要内存足够,在创建时可以指定其最大能使用的内存大小。
# mkdir /testRam
# mount -t ramfs none /testRAM
缺省情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。
# mount -t ramfs none /testRAM -o maxsize=2000 (创建了一个限定最大使用内存为2M的ramdisk)
3)ramfs特点:
ramfs and ramdisk
比较老的ramdisk在内存区外分配一个综合的块,用它作为文件系统的回写堆。这个块的是固定大小的,所以挂载的文件系统也是固定的。而且额外的开销也很大。
和ramfs对比,ramdisk浪费了空间,让cpu做了不必要的工作,弄脏了cpu的缓存。总之,ramfs 相对来说比较简单。
3、tmpfs:
Tmpfs是一个虚拟内存文件系统,它不同于传统的用块设备形式来实现的Ramdisk,也不同于针对物理内存的Ramfs。Tmpfs可以使用物理内存,也可以使用交换分区。
在Linux内核中,虚拟内存资源由物理内存(RAM)和交换分区组成,这些资源是由内核中的虚拟内存子系统来负责分配和管理。Tmpfs向虚拟内存子系统请求页来存储文件,它同Linux的其它请求页的部分一样,不知道分配给自己的页是在内存中还是在交换分区中。同Ramfs一样,其大小也不是固定的,而是随着所需要的空间而动态的增
Tmpfs会默认挂载到/dev/shm上,默认最大为内存的一半大小,使用df -h命令可以看到。
[root@AY1212111202285f63122 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 20G 7.6G 11G 42% /
tmpfs 250M 0 250M 0% /dev/shm
1)修改tmpfs大小:
mount -o size=20G -o remount /dev/shm
如果需要永久修改/dev/shm的值,需要修改/etc/fstab:
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0 #/etc/fstab中增加该行
然后重新挂载:
mount -o remount /dev/shm
2)特点:
tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。