`
iwindyforest
  • 浏览: 233653 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

把内存当硬盘用: tmpfs & ramfs & ramdisk

 
阅读更多

把内存当硬盘用: tmpfs & ramfs & ramdisk

一.tmpfs
某天我学了个“奇巧淫技”:在/etc/fstab 里加上一句none  /tmp  tmpfs   defaults 0 0,重起之后/tmp就在内存里了,因为/tmp放的是临时文件,这样每次关机就清空,又减少硬盘读写,而且读写又快,多好。

tmpfs是相当强大,它的空间能动态调整(但是大小不能超过上限),往里面塞文件它就变大,删文件就会变小。
看我往里面塞个1G的文件:
dd if=/dev/zero of=/tmp/bigfile count=1000000 bs=1024

内存里有1352M的cache(原来是300多M的)。
可以试下复制/dev/urandom而不是/dev/zero,再开个top,就能看cache慢慢增加了,可以看出tmpfs在cache里。
当内存不够用的时侯,就动用交换分区(swap)了,这可是影响性能的。

还有个方法是用mount挂载。
先建个文件夹吧,我在我家建了个.tmp_ram
mkdir ~/.tmp_ram
然后就是mount了
sudo mount -t tmpfs -o size=256M tmpfs ~/.tmp_ram
size指定的是能用的内存的上限。
这样,向~/.tmp_ram里写的文件其实都在内存而不是硬盘。

突然想到一个很好的用处,那就是把chrome的cache放内存了。
sudo mount -t tmpfs -o size=384M tmpfs ~/.cache/google-chrome
去掉sudo然后加到/etc/rc.local,那样每次开机就自动挂载。(要改成绝对路径,谢谢红联的相思爱文指出)
(其实这样没次都清空cache也有点影响上网的体验的,不过我还是喜欢保护硬盘,节省空间...)

二.ramfs
ramfs能实现类似的功能:
sudo mount -t ramfs -o size=256m ramfs ~/.tmp_ram
如果你往里面塞超过mount时设置的上限的文件,它不会提示空间不足,相反它突破你设的上限,动态增大了。而且ramfs不会用swap。

三. ramdisk
有没发现在/dev里面有ram0、ram1等等ramN设备文件,这就是ramdisk。
ramdisk和ramfs的差别之一是ramdisk的大小是固定的(通常只有10几M的大小,编译内核时设定的),可以在系统启动的时候用命令行参数调整。
要用ramdisk要先在/dev/ramN里建文件系统:(我这里用ext2)
sudo mke2fs -m 0 /dev/ram0
然后是挂载:
sudo mount /dev/ram0 ~/.tmp_ram

四.参考
linux kernel的文档:
tmpfs : http://lxr.linux.no/linux+v2.6.37.3/Documentation/filesystems/tmpfs.txt
ramfs : http://lxr.linux.no/linux+v2.6.37.3/Documentation/filesystems/ramfs-rootfs-initramfs.txt
ramdisk: http://lxr.linux.no/linux+v2.6.37.3/Documentation/blockdev/ramdisk.txt

WU.题外八卦:神奇的dd & mount & loopback device
dd 可以用来复制文件,把一个分区复制到另一个分区或者文件,把一个文件的一部分复制到其他地方等等。
dd if=/dev/cdrom  of=~/mycd bs=2048 conv=sync
这样就把整张cd拷成一个通常说的iso,只是我用的文件名没加.iso。
有iso那怎样打开?用mount就可以了。

mount是用来挂载文件系统的,这文件系统不一定就是硬盘分区的那几个,cd的文件系统就是iso 9660。
sudo mount ~/mycd /media/cdrom
这样打开/media/cdrom就是打开了这个iso。(/media/cdrom只是例子,挂载到其他地方也可以)
简直就是虚拟光驱。

dd if=/dev/zero of=~/myfs count=10000
mkfs. ext3 ~/myfs
sudo mount -o loop ~/myfs  /media/cdrom
首先用dd从/dev/zero复制了5.1M到~/myfs这个文件,也就是说myfs这个文件是5.1M大小,内容全是0。
然后用mkfs.ext2在这个文件上建了个ext2文件系统,挂载到/media/cdrom。
这样读写/media/cdrom其实是读写myfs这个文件。
然后你又可以在里面再建文件系统,再挂载到其他地方,很好玩。
而且如果你想验证一下这文件系统的结构是不是和书上说的一样(开头几个字节放什么、怎样放数据之类的),直接用编辑器打开myfs这个文件就可以了,而且linux支持很多文件系统。(看源码更好?)
loopback device就是一个虚拟的设备,能让一个文件通过块设备(硬盘就是块设备的一种)的方式读写。
loopback还跟网络有关,扯远了。

分享到:
评论

相关推荐

    文件系统资料

    存储介质多样,包括磁盘(硬盘、软盘)、光盘(CD、DVD)、闪存(NOR Flash、Nandflash、CF卡、SD卡、U盘)、内存(Ramdisk、tmpfs & ramfs)以及虚拟存储介质(如rootfs、proc、sysfs、usbfs、devpts、NFS)。...

    嵌入式linux启动完全注释

    例如,RamDisk和Ramfs/Tmpfs常用于临时存储,以提高速度,但它们依赖于系统内存,因此在资源有限的嵌入式环境中需要谨慎使用。而Cramfs因其高效压缩和只读特性,常用于固件更新和系统启动镜像。

    基于Linux的内存式WebGIS设计与实现.pdf

    - **ramdisk**:将一部分内存模拟为硬盘,但数据非持久化,重启后数据丢失。 - **ramfs**:与ramdisk类似,但无需预先分配大小,可动态扩展。 - **tmpfs**:在内存或交换分区中创建的虚拟文件系统,支持数据持久...

    嵌入式linux文件系统各种类型借鉴.pdf

    ramdisk、ramfs和tmpfs是基于RAM的文件系统,它们在系统运行时创建并存储在内存中。ramdisk是预先分配固定大小的内存空间,ramfs和tmpfs则按需动态扩展。ramfs和tmpfs的主要区别在于tmpfs在断电后不会保留数据,而...

    嵌入式linux系统中常用的文件系统.ppt

    - Tmpfs是一个基于内存的文件系统,类似于Ramdisk,但更灵活,可根据需要动态调整大小。数据在系统重启后丢失,主要用于临时文件和缓存。 7. **Yaffs**: - Yaffs是专为闪存设计的文件系统,尤其适用于NAND闪存,...

    linux根文件系统

    在Linux中,ramfs和tmpfs类似,都使用内存来存储文件,但ramfs不持久化数据,重启后数据丢失,而tmpfs可以挂载为临时文件系统,支持数据持久化到交换分区或实际磁盘空间。 二.根文件系统在Linux启动过程中的作用 ...

    linux文件系统[定义].pdf

    ramdisk和ramfs/tmpfs则是基于内存的文件系统,它们在内存中创建并存储数据,适合临时存储或在内存充足的环境中使用。 选择哪种文件系统取决于应用场景和硬件限制。例如,如果需要数据持久化和高可靠性,可能需要...

    文件系统知识点-制作根文件系统

    1.inittab表action说明; 2.嵌入式相关文件系统:autofs、cramfs、squashfs、JFFS2、YAFF2、ubifs、ramdisk、ramfs、tmpfs、procfs、sysfs; 3.windows文件系统:fat、FAT32、NTFS、EXT3、EXT4;

    Linux 文件系统介绍

    在嵌入式 Linux 应用中,由于存储设备通常是 RAM 或 ROM(如 FLASH 存储器),因此常用的文件系统类型包括 jffs2、yaffs、cramfs、romfs、ramdisk、ramfs/tmpfs 等。 - **NOR 和 NAND 闪存的区别**:NOR 闪存支持...

    Linux下根文件系统的制作.pdf

    常见的嵌入式文件系统包括:jffs2、yaffs、cramfs、romfs、ramdisk、ramfs/tmpfs等。本文以Cramfs为例,Cramfs是一个压缩的只读文件系统,特别适合资源有限的嵌入式环境,因为它节省内存且便于使用。 3. **Cramfs...

    嵌入式Linux文件系统详细介绍

    嵌入式Linux中常用的基于存储设备的文件系统包括jffs2、yaffs、cramfs、romfs、ramdisk、ramfs/tmpfs等。这些文件系统考虑到存储设备的硬件特性和系统需求而设计。 8. JFFS2文件系统 JFFS2是一个日志闪存文件系统...

    嵌入式系统/ARM技术中的基于嵌入式Cramfs 的根文件系统配置新方法

    2. **挂载点切换**:创建一个可写的临时文件系统,如Ramfs或tmpfs,当需要写操作时,将读写操作重定向到这个临时文件系统,然后在适当的时候将这些变化同步回Cramfs。 3. **快照和更新机制**:定期或按需创建Cramfs...

    Linux嵌入式文件系统横向对比

    不同的嵌入式系统文件系统类型...在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

Global site tag (gtag.js) - Google Analytics