使用内存文件系统 就是图它特别快

操作演示

3种创建内存文件系统的方式 tmpfs 使用操作比较友好 ramfs 比较快,但危险 格式化内存 步骤稍微繁琐

创建几个文件夹用来演示挂载

1
mkdir /mnt/m01 /mnt/m02 /mnt/m03 

方案1-格式化内存

linux系统 目前有16个ram块

1
2
3
root@sharezx:/mnt# ls /dev/ram*
/dev/ram0  /dev/ram10  /dev/ram12  /dev/ram14  /dev/ram2  /dev/ram4  /dev/ram6  /dev/ram8
/dev/ram1  /dev/ram11  /dev/ram13  /dev/ram15  /dev/ram3  /dev/ram5  /dev/ram7  /dev/ram9

使用一个当临时下载目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
root@sharezx:/mnt# mke2fs /dev/ram0
mke2fs 1.42.6 (21-Sep-2012)
Filesystem label=1.42.6-24922
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
40960 inodes, 163840 blocks
8192 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=167772160
5 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

root@sharezx:/mnt# mount /dev/ram0 /mnt/m01/
root@sharezx:/mnt# df -h /dev/ram0
Filesystem      Size  Used Avail Use% Mounted on
/dev/ram0       630M  476K  598M   1% /mnt/my500mfs

此处的一个ram可以空间为600M

测试写入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
root@sharezx:/mnt/m01# dd if=/dev/zero of=bf01 bs=4M count=100
100+0 records in
100+0 records out
419430400 bytes (419 MB) copied, 0.611773 s, 686 MB/s
root@sharezx:/mnt/m01# dd if=/dev/zero of=bf02 bs=4M count=100
dd: error writing ‘bf02’: No space left on device
58+0 records in
57+0 records out
239964160 bytes (240 MB) copied, 0.353483 s, 679 MB/s
root@sharezx:/mnt/m01# ll -h
total 630M
drwxr-xr-x 2 root root 4.0K Nov 29 23:12 .
drwxr-xr-x 6 root root 4.0K Nov 29 23:05 ..
-rw-r--r-- 1 root root 400M Nov 29 23:12 bf01
-rw-r--r-- 1 root root 229M Nov 29 23:12 bf02

写入的两个文件共629M

整理后脚本

1
2
3
4
5
6
7
8
9
ls /dev/ram*
mke2fs /dev/ram0
df -h /dev/ram0
mount /dev/ram0 /mnt/m01/

dd if=/dev/zero of=bf01 bs=4M count=100
dd if=/dev/zero of=bf02 bs=4M count=100

umount /mnt/m01/

方案2-ramfs

ramfs 不会占用虚拟内存 完全使用物理内存 但无法限制最大使用空间 容易出事故

测试写入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
root@sharezx:/mnt# mount -t ramfs ramfs /mnt/m02
root@sharezx:/mnt# dd if=/dev/zero of=/mnt/m02/bf01 bs=4M count=100
100+0 records in
100+0 records out
419430400 bytes (419 MB) copied, 0.34215 s, 1.2 GB/s
root@sharezx:/mnt# dd if=/dev/zero of=/mnt/m02/bf02 bs=4M count=100
100+0 records in
100+0 records out
419430400 bytes (419 MB) copied, 0.345581 s, 1.2 GB/s
root@sharezx:/mnt# ll -h /mnt/m02
total 801M
drwxr-xr-x 2 root root    0 Nov 29 23:18 .
drwxr-xr-x 7 root root 4.0K Nov 29 23:17 ..
-rw-r--r-- 1 root root 400M Nov 29 23:17 bf01
-rw-r--r-- 1 root root 400M Nov 29 23:18 bf02

写入速度显示为1.2G每秒 两个文件共800M
由于没法限制大小,使用不当则内存会耗尽
因此存在导致系统挂断的风险

整理后脚本

限制大小的参数加了也不会有效果

1
2
3
4
5
mount -t ramfs ramfs /mnt/m02
dd if=/dev/zero of=/mnt/m02/bf01 bs=4M count=100
dd if=/dev/zero of=/mnt/m02/bf02 bs=4M count=100
ll -h /mnt/m02
umount /mnt/m02

方案3-tmpfs

tmpfs 可以限制大小 使用的内存是物理内存+虚拟内存 具体使用由系统调度
刚创建的时候不会耗内存,随着写入文件 会增大占用的内存

测试

向内存文件系统中写入1g文件, 写入速度为900M每秒
超过 1200M的限制就停了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
root@sharezx:/mnt# mount -t tmpfs -o size=1200M tmpfs /mnt/m03 
root@sharezx:/mnt# cd m03/
root@sharezx:/mnt/m03# dd if=/dev/zero of=bf01 bs=4M count=256
256+0 records in
256+0 records out
1073741824 bytes (1.1 GB) copied, 1.43094 s, 750 MB/s
root@sharezx:/mnt/m03# dd if=/dev/zero of=bf02 bs=4M count=256
dd: error writing ‘bf02’: No space left on device
45+0 records in
44+0 records out
184549376 bytes (185 MB) copied, 0.183267 s, 1.0 GB/s
root@sharezx:/mnt/m03# cd ..
root@sharezx:/mnt# umount m03

向机械硬盘中写入1g文件, 写入速度为140M每秒

1
2
3
4
5
root@sharezx:/mnt# dd if=/dev/zero of=/volume1/video/bf001 bs=4M count=256
256+0 records in
256+0 records out
1073741824 bytes (1.1 GB) copied, 7.61542 s, 141 MB/s
root@sharezx:/mnt# rm /volume1/video/bf001

整理后脚本

1
2
3
4
5
6
7
mount -t tmpfs -o size=1200M tmpfs /mnt/m03 
dd if=/dev/zero of=bf01 bs=4M count=256
dd if=/dev/zero of=bf02 bs=4M count=256
umount m03

dd if=/dev/zero of=/volume1/video/bf001 bs=4M count=256
rm /volume1/video/bf001