tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. VM的大小由RM(Real Memory)和swap组成, RM就是物理内存, swap是通过硬盘虚拟出来的内存空间, 大小是可以配置的. swap的读写速度相对RM(Real Memory)要慢许多. 在物理内存不足时一个进程申请内存, 内核的VM子系统就会把RM里面的一些不常用的数据交换到swap里面, 在需要使用这些数据时再从swap交换到RM里. tmpfs最大可用的存储空间等于 RM + swap, 但是tmpfs本身不知道实际使用的空间是RM还是swap.
blueline:/data/local/tmp # mkdir memory
blueline:/data/local/tmp # mount -t tmpfs -o size=512M tmpfs memory
blueline:/data/local/tmp # dd if=/dev/zero of=memory/block
#卸载tmpfs
blueline:/data/local/tmp # rm memory/block
blueline:/data/local/tmp # umount memory
ramfs是Linux下一种基于RAM做存储的文件系统。在使用过程中你就可以把ramfs理解为在普通的HDD上建立了一个文件系统,而现在HDD被替换成了RAM,因为是RAM做存储所以会有很高的存储效率。由于ramfs的实现就相当于把RAM作为最后一层的存储,所以在ramfs中不会使用swap。
- 达到空间上限时可以继续写入
- 非固定大小
- 不会使用swap
- ramfs中的数据会常驻内存,由Unevictable LRU管理[3]
#挂载ramfs,并向ramfs写入数据,以占用内存
blueline:/data/local/tmp # mount -t ramfs -o size=10M ramfs ./ramfs/
blueline:/data/local/tmp # setenforce 0
blueline:/data/local/tmp # dd if=/dev/zero of=./ramfs/test.file bs=1M count=800
说明:占用内存大小为test.file文件大小,由于dd if=/dev/zero of=./ramfs/test.file bs=1M count=800
是覆盖写,所以占用内存大小就是800M
#卸载ramfs
blueline:/data/local/tmp # rm ramfs/test.file
blueline:/data/local/tmp # umount ramfs
说明
命令 dd if=/dev/zero of=./ramfs/test.file bs=1M count=20
是覆盖写。
dd 命令的作用: dd 命令是 Linux/Unix 系统中用于复制和转换文件的强大工具。它可以将输入文件的内容复制到输出文件中,并在此过程中进行各种转换操作。
if=/dev/zero: 指定输入文件为 /dev/zero。这个设备是一个特殊的设备文件,可以无限提供零字节的数据。
of=./ramfs/test.file: 指定输出文件为 ./ramfs/test.file,也就是将数据写入到这个文件中。
bs=1M: 指定每次读写的数据块大小为 1MB。
count=20: 指定总共写入 20 个 1MB 的数据块,也就是一共写入 20MB 的数据。
为什么是覆盖写?
当你使用 dd 命令将数据写入一个已存在的文件时,新的数据会覆盖旧的数据。
在这个命令中,我们指定了输出文件 ./ramfs/test.file,如果这个文件已经存在,那么 dd 命令就会直接覆盖这个文件的内容,用新的零字节数据填充。
总结:
这个命令的作用是将 20MB 的零字节数据写入到 ./ramfs/test.file 文件中。如果该文件之前存在,那么原来的内容会被完全覆盖。因此,这是一种覆盖写操作。
需要注意的是:
数据丢失: 覆盖写操作会覆盖原有数据,请谨慎使用。
文件大小: 如果 ./ramfs/test.file 文件之前已经存在,但大小小于 20MB,那么 dd 命令会将文件扩展到 20MB,多余的部分用零填充。
ramfs 特性: 由于 ramfs 是内存文件系统,数据不持久化,系统重启或卸载后,文件中的数据会丢失。
[1] Linux的tmpfs和ramfs. https://www.cnblogs.com/milton/p/11541260.html
[2] Linux: 内存文件系统 ramfs. https://blog.csdn.net/halo_hsuh/article/details/105768540
[3] Unevictable LRU Infrastructure. https://www.cnblogs.com/pengdonglin137/p/17876210.html