LINUX学习笔记之RAM-disk说明
整理日期:2019年5月28日RAM-disk 说明内存盘的存取速度要远快于目前的物理硬盘,可以被用作需要高速读写的文件。像WEB服务器这样的计算机,需要大量的读取和交换特定的文件,因此,在WEB服务器上建立RamDisk会大大提高网络读取速度。注意:在2.6版本后(uname -r查看版本),Ramdisk的这一作用开始被tmpfs(Virtual memory file system supp
整理日期:2019年5月28日
RAM-disk 说明
内存盘的存取速度要远快于目前的物理硬盘,可以被用作需要高速读写的文件。像WEB服务器这样的计算机,需要大量的读取和交换特定的文件,因此,在WEB服务器上建立RamDisk会大大提高网络读取速度。
注意:在2.6版本后(uname -r查看版本),Ramdisk的这一作用开始被tmpfs(Virtual memory file system support)取代。tmpfs 就像虚拟磁盘(RamDisk),但不一样。像虚拟磁盘一样,tmpfs 可以使用 RAM,
但也可以使用交换分区来存储。而传统的虚拟磁盘是个块设备,并且需要格式化才能真正地使用,tmpfs 是一个文件系统,而不是块设备,只要安装,它就可以使用了。
不过要记住,RamDisk中的数据会在机器重新启动后消失,因此应把其中有用的数据及时备份到硬盘中。
一定要记住保存RamDisk中有用的东西,否则,重新启动后将化为乌有。你可以用cron设定一个计划,每隔10分钟扫描一下RamDisk中的文件是否发生变化,如有,拷贝到硬盘中,这会比较安全。
最酷的应用是如果你有1G的内存,划出256M来作为暂存区/tmp,如果很多程序用到/tmp,那么你的系统性能会大大提高,而且重新启动后垃圾消失,真是一举两得。
为了能够使用RAMdisk你的内核必须要支持RAM disk,即:在编译内核时,要选中RAM disk support这一选项,会在配置文件中定义CONFIG_BLK_DEV_RAM。为了让内核有能力在内核加载阶段就能装入RAMDISK,
并运行其中的内容,要选中initial RAM disk(initrd) support选项,会在配置文件中定义CONFIG_BLK_DEV_INITRD。
系统中已有的“内存盘”
查看系统中有那些“内存盘” Linux内核默认创建了16个ramdisks。它们目前是未启用的,不占用任何内存空间。这16个设备分别是/dev/ram0 – /dev/ram15。虽然我们可以看到还有/dev/ram16 – 19,
但是它们默认是不可用的。 通过更改rd.c的配置,可以使系统支持的RAM disk的数量增加到255个。为了使用更多的RAM disk,我们可以使用“mknod /dev/ramX b 1 X”命令创建更多的RAM disk设备文件,
并且通过chmod命令将他们的访问权限改成我们想要的。
使用下面的命令查看:
[root]# ls -l /dev/ram*
查看系统中内存盘的大小 [root]# dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
RAMDISK: Compressed image found at block 0
也就是说,默认的 RamDisk 是4MB的。 格式化RamDisk #一般是使用ext2文件系统格式化RANdisk,而在此之前,即使我们的电脑中有ramdisk*设备文件,他们是不占空间,没有用处的,必须进行格式化之后才能使用。
接下来就需要做文件系统了,也就是格式化。RamDisk是临时性的,所以没有带日志的文件系统的必要,所以我们一般做ext2就可以了:
[root]# mke2fs -m 0 /dev/ram0 //使用ext2文件系统格式化ram0
mke2fs 的-m<百分比值>选项:指定给管理员保留扇区的比例。在这里,-m 0,即:不为管理员保留任何扇区,任何普通用户都可以使用所有可用的空间。
【创建挂载点并挂载RamDisk】
现在,我们的 RamDisk 已经可以使用了,只需要再将它挂接到一个可访问的目录点:
[root]# mkdir /mnt/rd
[root]# mount /dev/ram0 /mnt/rd //将/dev/ram0挂载到/mnt/rd目录下
我们来验证一下,RamDisk是否已经挂在成功了:
[root]# mount | grep ram0
/dev/ram0 on /mnt/rd type ext2 (rw)
[root]# df -h | grep ram0 /dev/ram0
16M 13K 16M 1% /mnt/rd
【使用RamDisk】
Now that it has been created, you can copy, move, delete, edit, and list files on the ramdisk exactly as if they were on a physical disk partiton.
To unmount the ramdisk, simply enter the following:
[root]# umount -v /mnt/rd /dev/ram0 umounted
关于RAMdisk的使用的例子,这里给出一个很常见的用法:使用RamDisk做/tmp目录.如果你的内存太多,那么可以将其中一部分做为/tmp目录,这样将大大提高你的系统执行速度。
而且,/tmp将会在系统重新启动时被删除,多么惬意呀。
与RAMdisk有关的命令行参数: ramdisk_size=N 这个参数告诉RAM磁盘驱动将RAM磁盘的大小设置为N k,默认是4096(4 MB)。
RAM磁盘的大小会根据需要动态的增长,因此其大小有个上限加以限制以免它用光所有可用的内存而坏事。ramdisk_size这个参数实际是设置这个上限值的。
我们可以通过命令:dmesg | grep RAMDISK来查看这个上限值。要注意的是,这个值在系统运行阶段是不能再被修改的。尽管RAM磁盘的大小有个最大值,
但我们可以指定需要使用的RAM磁盘的容量。比如,在本例中我们设为2MB。通过写入RAM磁盘设备来创建。命令为dd if=/dev/zero of=/dev/ram0 bs=1k count=2048。
当我们没有指定需要使用的RAM磁盘的容量,而直接在其上挂载文件系统时,它的容量是其上限值。load_ramdisk=N 这个参数告诉内核是否要载入一个RAMDISK映像。
load_ramdisk =1时指定核心将软盘载入内存。默认值是0,表示内核不要去载入RAMDISK映像。prompt_ramdisk=N此参数告诉内核是否要给你个提示要求插入含RAMDISK映像的软盘。
在只用一张软盘的配置下RAMDISK映像与刚刚载入/启动的核心在相同的软盘上,故不需要提示,这种情况可以用 prompt_ramdisk=0'。 在使用两张软盘的配置下你需要交换软盘,故可以使用
prompt_ramdisk=1’。因为这是预设值,所以不必真的去指定它。
ramdisk_start=NNN
为了使内核映像能够与压缩的RAMDISK映像放在一张软盘内,所以加入这个 `ramdisk_start=’ 指令。 内核不能够放在压缩过的RAMDISK磁盘的文件系统映像里,因为它得从最开始的第零磁区开始放置,
这样基本输出入系统(BIOS)才能载入启动磁区而内核也才能够开始启动执行。(参考Documentation/ramdisk.txt,但是我不太明白)???注意:如果你使用的是没有压缩的RAMDISK磁盘映像,
那么内核可以是要载入的RAMDISK磁盘的文件统映像的一部份,且该软盘可以由 LILO 启动,两者也可以如同压缩的映像那样为分开的两部份。
如果你使用启动/根(boot/root)两张磁盘的方式(内核一张,RAMDISK映像放第二张)那么RAMDISK磁盘会由第零磁区开始,并使用零作为偏移值(offset)。因为这是预设值,你根本不必真的去使用这个指令。
使用"rdev -r" 命令“rdev –r”设置内核镜像文件中的两个字节(32bit),这两个字节中各个位的含义如下:低11位(0 -> 10)指定了一个偏移量(以1K的块为单位),最到能寻址到2M,用以指定到何处去寻找RAM磁盘。
第14位指示RAM磁盘是否被加载。第15位指示是否在加载RAM磁盘之前给出一个提示并等待用户指令。 如果随着数据被写入RAM磁盘,RAM磁盘的大小是动态增长的,那么指定RAM磁盘的大小的域将被忽略。11到13位没有被使用,
所以可以为0。 上面所列的数据并非什么秘密,可以在参照下列地方:
进入内核源码所在目录:
./arch/i386/kernel/setup.c:
#define RAMDISK_IMAGE_START_MASK 0x07FF
./arch/i386/kernel/setup.c:
#define RAMDISK_PROMPT_FLAG 0x8000./arch/i386/kernel/setup.c:
#define RAMDISK_LOAD_FLAG 0x4000
考察一个典型的"两张软盘启动",内核在第一张软盘上,并且已经将一个RAM磁盘镜像文件放到了第二张软盘上。 所以你希望将0到13位设置为0,这将意为着你的RAM磁盘处于从软盘起始地址偏移量为0KB的地方。
相同功能的命令行参数为:“ramdisk_start=0” 你希望第14位为1,即声明加载RAM磁盘。相同功能的命令行参数为:“load_ramdisk=1 你希望第15位为1,这是声明希望显示一个提示并等待用户的按键以得到一个提示机会来更换软盘。
形同功能的命令行参数为:“prompt_ramdisk=1” 将上述的标志位综合在一起得到:2^15 + 2^14 + 0 = 49152作为参数传递给rdev用来设置内核镜像里的两个字节。所以如果创建上述的第一个磁盘,
你需要进行如下操作:
/usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0
/usr/src/linux# rdev /dev/fd0 /dev/fd0
/usr/src/linux# rdev -r /dev/fd0 49152
如果你创建一个使用了lilo的启动磁盘,为了得到上面说明的那些效果,你需要使用下列lilo的参数:append = “ramdisk_start=0 load_ramdisk=1prompt_ramdisk=1"考虑到默认的start = 0和prompt = 1,
你可以简化lilo的命令行参数为:append = “load_ramdisk=1” 一个创建压缩RAM磁盘的例子: 为了创建一个RAM磁盘的镜像,你需要你一个单独的块设备。这个块设备可以是一个RAM磁盘设备本身,
也可以是一个未使用的磁盘分区(比如一个没有被挂载的交换分区)。在这个例子中,我们将使用RAM磁盘设备:”/dev/ram0”。
a)确定你希望使用的RAM磁盘的容量 比如,在本例中我们设为2MB。通过写入RAM磁盘设备来创建。最好写入0,这样下一步创建镜像时进行最大比例压缩的时候比较方便压缩未使用的块。
命令为:dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
b)创建一个文件系统。在本例中使用ext2fs。命令为:mke2fs -vm0 /dev/ram0 2048
c)挂载这个磁盘设备 无论是一个RAM磁盘设备,还是一个单独的分区,向里面拷贝你需要的文件(比如:/etc/* /dev/* …)。然后卸载这个设备(umount)。
d)压缩这个RAM磁盘镜像。 压缩之后,被实际使用的空间大约能压缩到原来的50%,并且未被使用的空间几乎被完全压缩到0。命令为:dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
e)将内核放入软盘。 命令为:dd if=zImage of=/dev/fd0 bs=1k
f)将RAM磁盘镜像放入软盘。 使用一个比内核所占空间略大的偏移量。之所以要有一个略大的偏移量,可以方便以后更换内核,而不会覆盖到RAM磁盘的镜像。比
如,如果内核占用了350KB,那么写入RAM磁盘镜像的时候使用400KB的偏移量是比较合理的。注意:确定"偏移量+RAM磁盘镜像的体积"不会超出软盘的容量(通常是1440KB)。
命令为:dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400 g)使用rdev命令设置启动设备,RAM磁盘偏移量,是否提示换磁盘标志,等等。
比如设置:prompt_ramdisk=1, load_ramdisk=1,ramdisk_start=400,这些标志时,可以计算出来:2^15 + 2^14 + 400 = 49552,使用的命令可能为:rdev /dev/fd0 /dev/fd0rdev -r /dev/fd0 49552
到此为止,你已经获得了你自己的启动/根压缩RAM磁盘(软盘),你也可以将步骤d和步骤f通过管道一步执行。
//
一 什么是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,实际上你是在使用内存而不是硬盘。在这一点上既有优点又有缺点。最基本的,最大的优点是你是在使用内存,你所做的一切都会快一些,
因为硬盘的速度较内存慢。最大的缺点是如果你改变了数据库服务器的内容并且重新启动机器时,所做的一切改动都将丢失。
//
一、linux内核
1.查看linux内核版本
uname -r
2.下载对应的linux内核
https://www.kernel.org/pub/linux/kernel/
将内核文件夹解压到/usr/src/
#cd /usr/src/linux***(你的内核文件夹)
#make menuconfig //进入内核编译的配置界面
这里会出现错误:
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
*** Unable to find the ncurses librariesor the
*** required header files.
*** 'make menuconfig' requires thencurses libraries.
***
*** Install ncurses (ncurses-devel) andtry again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error1
make: *** [menuconfig] Error 2
提示缺少了ncurses 库
apt-get install libncurses5-dev
2 # make xconfig
CHECK qt
* Unable to find the QT4 tool qmake. Trying to useQT3
*
* Unable to find any QT installation. Please make surethat
* the QT4 or QT3 development package is correctlyinstalled and
* either qmake can be found or install pkg-config orset
* the QTDIR environment variable to the correctlocation.
*
sed < scripts/kconfig/lkc_proto.h> scripts/kconfig/lkc_defs.h's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
HOSTCC scripts/kconfig/kconfig_load.o
make[1]: *** No rule to make target`scripts/kconfig/.tmp_qtcheck', needed by`scripts/kconfig/qconf.o'. Stop.
make: *** [xconfig] Error 2
提示缺少qt 开发环境
apt-get install qt4-dev-tools
#make xconfig
CHECK qt
/usr/bin/moc -i scripts/kconfig/qconf.h -oscripts/kconfig/qconf.moc
HOSTCXXscripts/kconfig/qconf.o
HOSTLD scripts/kconfig/qconf
scripts/kconfig/qconf Kconfig
No protocol specified
qconf: cannot connect to X server :0.0
make[1]: *** [xconfig] Error 1
make: *** [xconfig] Error 2
3.解决问题 继续
#sudo make menuconfig
# 選擇下面的 module
# Networking support ->
# Networking options ->
# Network packet filtering framework (Netfilter) ->
# IP: Netfilter Configuration
4.重新编译系统(比较久)
sudo make all
5.编译模块
sudo make modules_install
这里会出现错误
#make menuconfig
然后进入Loadable module support, 选中Enable loadable module support
可以了 继续编译模块
sudo make modules_install
sudo make install
//
配置RAMDISK过程
#make menuconfig
(1).打开配置菜单,修改两个配置项,分别是:
a):General setup–>选择 Initial RAM filesystem and RAM disk… 项
b):Device Drivers–>Block devices–>选择 RAM block device support 项
c):并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
d):device driver->block device里的一个选项,?Default Ramdisk 设置ramdisk的大小.16384
Note:修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes, 之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,
这里就要对应为8192了,以此 类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你 做的ramdisk不匹配,
则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。
(2).进入File systems菜单,选上<*> Second extended fs support
ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。
2.修改内核启动参数
方法有二:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义
修改为CONFIG_CMDLINE=“initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M”
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x400000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的
b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量
以上a),b)的效果是一样的。
4.编译内核
#make zImage ARCH=arm CROSS_COMPILE=arm-linux-
编译完成后在当前目录下就出现了zImage内核映像了。
5.其实 uImage就是在zImage的开头部分增加了一个64字节的内核映像说明。说明一下:zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,
说明这个映像文 件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另 外,Linux2.4内核不支持uImage,
Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。
5.制作uImage内核映像
由于使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:
1.把zImage 拷到uboot 的tools 目录下
2. ./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n “Linux kernel Image” -d zImage uImage-ramdisk
说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录 之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。
6.还有一个是启动到最后面,会提示
RAMDISK: Compressed image found at block 0
RAMDISK: incomplete write (2270 != 32768)
之类,这问题就是上面说的内核配置的ramdisk大小不对,要去修改一下内核配置
我将它修改成12288(1024的整数倍)
/
Linux中ramdisk,tmpfs,ramfs比较与说明
2016年07月31日 22:08:56 maomaoxiaogang 阅读数:4263
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=10429687&id=4180274
mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。目前mount已经不仅仅局限于Linux了。
在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如Clone CD,Daemon tool,WinMount等
RamDisk有三种实现方式:在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk,分为:Ramdisk, ramfs, tmpfs.
①第一种就是传统意义上的,可以格式化,然后加载。
这在Linux内核2.0/2.2就已经支持,其不足之处是大小固定,之后不能改变。为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,
一个是设定Ramdisk的大小,默认是4096k;另一个是initrd的支持。
如果对Ramdisk的支持已经编译进内核,我们就可以使用它了:
首先查看一下可用的RamDisk,使用ls /dev/ram*
首先创建一个目录,比如test,运行mkdir /mnt/test;
然后对/dev/ram0 创建文件系统,运行mke2fs /dev/ram0;
最后挂载 /dev/ram0,运行mount /dev/ram /mnt/test,就可以象对普通硬盘一样对它进行操作了。
装载后写入速度在700M/S-800M/S之间,如果umount再加载,只要不重启linux,那文件依然会保存在/dev/ramX中。
②另两种则是内核2.4才支持的,通过Ramfs或者Tmpfs来实现:
它们不需经过格式化,用起来灵活,其大小随所需要的空间而增加或减少。Ramfs顾名思义是内存文件系统,它处于虚拟文件系统(VFS)层,而不像ramdisk那样基于虚拟在内存中的其他文件系统(ex2fs)。
因而,它无需格式化,可以创建多个,只要内存足够,在创建时可以指定其最大能使用的内存大小。如果你的Linux已经将Ramfs编译进内核,你就可以很容易地使用Ramfs了。创建一个目录,加载Ramfs到该目录即可:
#mkdir /testRam
#mount -t ramfs none /testRAM
缺省情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。
#mount -t ramfs none /testRAM -o maxsize=2000
(创建了一个限定最大使用内存为2M的ramdisk)
建立ramfs时全用命令:#mount -t ramfs proc /ram1
删除ramfs时用命令:#umount /ram1
如果删除之前不进行资料保存就会丢失。
如果挂载是不是用proc的参数,而是用none的话,卸载就会出现"none busy"的bug,busy的设备是不能卸载的。
写入速度在900M/S-1100M/S之间,umount后再加载数据消失。
③ Tmpfs是一个虚拟内存文件系统,它不同于传统的用块设备形式来实现的Ramdisk,也不同于针对物理内存的Ramfs。Tmpfs可以使用物理内存,也可以使用交换分区。在Linux内核中,虚拟内存资源由物理内存(RAM)和交换分区组成,这些资源是由内核中的虚拟内存子系统来负责分配和管理。Tmpfs向虚拟内存子系统请求页来存储文件,它同Linux的其它请求页的部分一样,不知道分配给自己的页是在内存中还是在交换分区中。同Ramfs一样,其大小也不是固定的,而是随着所需要的空间而动态的增减。使用tmpfs,首先你编译内核时得选择”虚拟内存文件系统支持(Virtual memory filesystem support)” 。
然后就可以加载tmpfs文件系统了:
#mkdir -p /mnt/tmpfs
#mount tmpfs /mnt/tmpfs -t tmpfs
同样可以在加载时指定tmpfs文件系统大小的最大限制:
#mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m
写入速度在1.2G/S-1.3G/S,umount后再加载数据消失。
/
linux(NFS)上文件或者目录共享的实现
默认情况下,tmpfs会mount到/dev/shm目录。使用tmpfs,就是说你可以使用这个目录,这个目录就是tmpfs,如你写临时文件到此目录,这些文件实际上是在VM中。
要使用tmpfs,您要在内核配置时,启用“Virtual memory file system support”。
为防止tmpfs使用了全部VM,有时候要限制其大小。要创建一个最大为32 MB的tmpfs文件系统,键入:
1
#mount tmpfs /dev/shm -t tmpfs -o size=32m
添加到 /etc/fstab,应该是这样:
tmpfs /dev/shm tmpfs size=32m 0 0
通过命令mount -t ramfs none /tmp,所有/tmp目录下的写入其实都写在内存中。ramfs文件系统并不知道临时文件系统的可用内存数量该如何限制。
要为/tmp目录设置指定数量内存,使用命令mount -t tmpfs -o size=1g none /tmp。这条命令将分配给/tmp目录1G内存空间。选择tmpsfs可以让管理员通过命令df –h来查看文件空间使用情况,这样可以避免/tmp写入超过1G的内容。
内存文件系统同样可以在服务器重启后自动挂载。在/etc/fstab文件中加入如下配置:
none /tmp ramfs size=1g 0 0
在/etc/fstab中,第一列指明了需要被挂载的设备名。因为没有涉及到真实设备,所以在此列将其配置为none。接下来的两列为指定挂在目录与被挂载的文件系统类型,在本例中配置被挂载目录为/tmp,文件系统类型为ramfs。需要为内存文件设置容量参数;在本例中将其设置为1G。因为文件系统并不存在于磁盘上,所以最后两列只需配置参数为0。
首先确认自己的服务器上面是否有portmap和nfs包,一般情况下都会有.
查询命令:
rpm -qa | grep portmap
rpm -qa | grep nfs
如果有就接着向下走
linux(NFS)上文件或者目录共享的实现
启动portmap和nfs,但是portmap的先于nfs启动,因为portmap为nfs动态分配端口
linux(NFS)上文件或者目录共享的实现
查看是有启动正常用如下命令
prcinfo -p
如果看到portmap和nfs表示启动正常
linux(NFS)上文件或者目录共享的实现
设置你要共享的文件和目录 编辑vi /etc/exports
格式如下:
共享目录 允许访问的主机ip(权限)
linux(NFS)上文件或者目录共享的实现
输出共享目录和文件
1.要不重启nfs服务
2.使用exportfs -rv命令
linux(NFS)上文件或者目录共享的实现
接着到另一台服务器上面去挂载nfs服务器输出的文件和目录
1.新建你要挂载的目录
2.查看nfs服务器的输出目录
showmount -e nfs的ip
linux(NFS)上文件或者目录共享的实现
linux(NFS)上文件或者目录共享的实现
挂载目录或文件
格式如下:
mount NFS服务器地址:/usr/local/web /mnt/websites
linux(NFS)上文件或者目录共享的实现
查看挂载结果
df -h
linux(NFS)上文件或者目录共享的实现
测试共享时候成功,在web1上面下面的挂载目录下面新建一个文件然后随便写点东西看web2上面时候同步
卸载目录的命令:
umount /mnt/websites
exportfs: /mnt/demo requires fsid= for NFS export
解决方法:
/mnt/demo 10.0.1.57(fsid=0,rw,async) //加入fsid=0参数就可。
cd /home/liaowj/ehang/prd
mkdir -p ramdisk_200_112
mount 10.10.200.112:/dev/shm /home/liaowj/ehang/prd/ramdisk_200_112
顺便告诉大家,需要直播设备的朋友可以进我的店铺地址:https://shop66907778.taobao.com/
更多推荐
所有评论(0)