白话 ramdisk

痴心易碎 提交于 2020-03-08 18:01:39

ramdisk 既是内存磁盘,就是利用物理内存的指定的容量,模仿磁盘的存储格式来存储文件,既然是模仿磁盘的存储格式来存储文件,那自然需要有磁盘的存储格式作为基础了。对于linux0.1x系统,支持的文件系统只有minix1.0,因此,要把指定的内存划分成可以存储文件,并能被minix1.0文件系统所能访问,就是按照minix1.0的格式来划分,存储了,亦即ramdisk也必须有引导块,超级块,逻辑块位图,I节点位图,I节点,逻辑块这些内容,而查找一个文件,也需要通过路径名,得到I节点号,再通过I节点号得到I节点,再通过I节点得到文件的存储在磁盘数据区(就是逻辑块)的内容,也就是说,内存磁盘就是一个磁盘,只不过是在内存中,并不需要在读取,或者写入时,先通过缓冲区,再对磁盘控制器发送命令,来达到读取数据的目的,而是直接就可以通过内存中内容,就能获得数据;同时,由于根文件系统的引导块是空的,所以再读取时,引导块的内容是不需要读到ramdisk中,因此会出现在读取根文件系统时时从超级块读起的现象。

由于linux0.1x使用的内存磁盘(ramdisk)不需要在操作的过程中写入数据,亦即ramdisk只再系统开始启动的时候,一次性的跟文件系统读到磁盘上,因此,它不需要格式化ramdisk,只需要一次性的把根文件系统的引导块,超级块等内容,一次性的读入,这样数据就是按照被读入的格式存放在磁盘上了,因此会有如果ramdisk 的内容小于根文件系统盘的大小的话,不会把跟文件系统读到ramdisk的限制。

但在现代版的ramdisk中,需要在使用的时候,不停的删除,添加文件到文件系统中,因此,需要把指定用于ramdisk的物理内存先按照指定的文件系统,先格式化,使物理内存按照指定文件系统的格式来划分物理内容,这样,以后往ramdisk增加文件时,就可以按照指定的文件系统的格式来记录文件的路径及文件的存储位置等,要访问这个新增加的文件时,也按照正常的磁盘文件的过程来访问即可。

下面的链接(google),把ramdisk 的创建,格式化,挂载的过程都列出来的,相信你一看就会

http://blog.csdn.net/zhanghuiliang/article/details/3136382

我把文章帖过来:

 

试分析linux中RamDisk工作原理

 

一 什么是RamDisk

Ram:内存,Disk:磁盘,在Linux中可以将一部分内存当作分区来使用,称之为RamDisk。对于一些经常被访问、并且不会被更改的文件,可以将它们通过RamDisk放在内存中,能够明显地提高系统性能。RamDisk工作于虚拟文件系统(VFS)层,不能格式化,但可以创建多个RamDisk。虽然现在硬盘价钱越来越便宜,但对于一些我们想让其访问速度很高的情况下,RamDisk还是很好用的。

如果对计算速度要求很高,可以通过增加内存来实现,使用ramdisk技术。 一个A RamDisk就是把内存假设为一个硬盘驱动器,并且在它的上面存储文件。假设有几个文件要频繁的使用,如果将它们加到内存当中,程序运行速度会大幅度提高,因为内存的读写速度远高于硬盘。划出部分内存提高整体性能,不亚于更换新的CPU。像Web服务器这样的计算机,需要大量读取和交换特定的文件。因此,在Web服务器上建立RamDisk会大大提高网络读取速度。




二 如何使用RamDisk
格式化一个ramdisk并把他加到一个目录上。列出所有可用的ramdisk用“ls -al /dev/ram*”。这就会列出你现有可用的ramdisk。这些ramdisk并不抢夺内存,除非进行格式化的一类操作。这里有一个使用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到"/tmp/ramdisk0". 现在你可以将这个目录看成一个虚拟的分区。使用它就象使用其它的目录一样。
如果对ramdisk的格式化失败,那就是你的内核不支持ramdisk。其内核配置选项是 CONFIG_BLK_DEV_RAM .
ramdisk的默认大小是 4Mb=4096 blocks. 在你进行mke2fs的时候你可以看到你的ramdisk的大小。mke2fs /dev/ram0 将产生类适于以下的信息:
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
执行df -k /dev/ram0 你实际用了多少空间:
>df -k /dev/ram0
Filesystem  1k-blocks  Used Available Use% Mounted on
/dev/ram0        3963    13      3746    0% /tmp/ramdisk0
那么麻烦是什么呢?在系统重新启动的时候,将刷新这个区域。不要将任何没有拷贝的数据放在这个区域。如果你对这个目录进行了修改,并且需要保留这些修改,采取一些办法进行备份。




三 改变RamDisks 的大小
要想使用RamDisk你必须或是得到内核的支持或是以模块的形式将他加载到系统中。其中内核的配置选项是 CONFIG_BLK_DEV_RAM . 把ramdisk编译成一个可加载的模块的好处是你可以在加载是重新确定ramdisk的大小。
第一个办法。在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
确切的说,我只是使用了9M多的空间,文件系统也将占用一定空间。
当你以模块的形式编译ramdisk时,你可以在加载的时候决定ramdisk的大小。这也可以通过修改/etc/conf.modules 的选项设置来做到。
options rd rd_size=10000
或是在命令行中指定参数给ismod:
insmod rd rd_size=10000
以下是介绍如何使用这样的模块的例子:
卸载ramdisk,umount /tmp/ramdisk0 .
卸载模块(再上一节所提到的过程中自动加载), rmmod rd
加载ramdisk模块并且把它的大校设为20M,insmod rd rd_size=20000
创建一个文件系统, mke2fs /dev/ram0
加载ramdisk, mount /dev/ram0 /tmp/ramdisk0

四 RamDisk的优缺点

RamDisk 就是将内存模拟为硬盘空间。无论什么时候你使用RamDisk,实际上你是在使用内存而不是硬盘。在这一点上既有优点又有缺点。最基本的,最大的优点是你是在使用内存,你所做的一切都会快一些,因为硬盘的速度较内存慢。最大的缺点是如果你改变了数据库服务器的内容并且重新启动机器时,所做的一切改动都将丢失。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!