Linux 内存/SSD缓存加速HHD/USB存储

最近入手了个斐讯N1盒子,打算用来当智能网关,负责转储、同步等自动化操作。但是斐讯N1的USB接口是2.0的,挂进samba直接进行大量小文件写操作的时候,速度和性能简直惨不忍睹,iowait直接干爆了cpu,经常卡到中断。因此迫切需要做一层缓存,来简化io操作,对usb读写进行优化。

Linux本身是带了一些缓存加速工具的,比如BCache等,它们的原理都是SSD与HHD混合存储加速,但是在N1上别说SSD了,连HHD都上不了。而且BCache这类必须先格式化原存储,然后合成出一个新挂载点才能使用,属实不适合N1这种场景。

别急,骚操作是可以有的,咱可以用rclone呀

灵活机动,无需格式化,甚至还能直接上云……不过这里仅介绍对本地文件系统的缓存加速

正文开始

其实,rclone是全平台的,这个方法哪都能用。

需要先将usb或硬盘都挂载好。如果需要使用内存进行缓存,还要将内存盘挂载好

内存盘挂载命令为

mount -t tmpfs -o size=20m tmpfs /mnt/xxx

20m表示内存盘大小,可设为xxm,xxg等。末尾是路径,需要先创建好文件夹(mkdir)且为空

取消挂载:

umount /mnt/xxx

注意,使用内存盘会导致断电时没来得及转储的文件丢失。如果你和我一样是N1的话,使用emmc就足够了

然后,安装rclone。不建议使用yum或apt安装,因为很可能会装到旧版

curl https://rclone.org/install.sh | sudo bash
apt install fusermount # Ubuntu / Debian
yum install fusermount # Centos

然后,将本地存储加入存储节点

rclone config

然后跟随提示操作:

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> demo
Type of storage to configure.
Choose a number from below, or type in your own value

…
XX / Local Disk
   \ "local"
…
Storage> xx
** See help for local backend at: https://rclone.org/local/ **

Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
Remote config
--------------------
[demo]
type = local
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
demo                 local

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

然后一个名为demo的本地文件储存点就好了

使用什么进行缓存受缓存点影响,把缓存点放在挂载的内存盘就是用内存进行缓存。

挂载命令:

rclone mount demo:/mnt/usb/share /xxx --vfs-cache-mode writes --vfs-cache-max-age 20s --vfs-cache-max-size 1G --cache-dir /xxx --daemon
参数说明
demo:/mnt/usb/share需要进行缓存的HHD/USB目录
demo为之前创建储存点时设置的名称
/xxx挂载点,需要为空文件夹
注意,挂载后无法使用chmod控制权限,需要使用rclone的参数额外配置
如:--allow-other--dir-perms xxx--file-perms xxx
--vfs-cache-mode writes对写操作进行缓存,可改为更高的full或更低的minimal
以控制对什么进行缓存,详见rclone文档
--vfs-cache-max-age 20s缓存时间。指写入完毕或读取完毕(缓存什么见上一个参数)且移动完毕后保留多久。
xxhxxmxxs
--vfs-cache-max-size 1G最大缓存大小,xxgxxm以此类推
--cache-dir /xxx缓存点,默认为~/.cache,缓存点放哪就是用什么加速
--daemon挂进后台

写入大量大小为3000-5000kb的文件进行测试

使用前(紫色是iowait):平均写入速度100kb/s (仅samba)

使用后:平均写入速度2mb/s

关于开机启动,可以使用crontab完成

crontab -e

写个脚本填进去,别忘了加运行权限

@reboot /xxx/xxx.sh

注意,读写操作必须确保在挂载之后,不然会无法持续稳定地自动运行。

关于“Linux 内存/SSD缓存加速HHD/USB存储”的5条评论

    1. 不是,一个是挂载路径,一个是缓存文件路径,缓存放高速存储器达到加速效果

      1. 全文前后三个路径用到xxx, 哪两个是相同的? 建议区分一下, 小白容易一头雾水

  1. 打算对50G的U盘空间(/mnt/sdb1/ttnode)进行缓存, 64m内存盘路径/mnt/locrad, rclone本地挂载点demo, 路径/mnt/rcde, 下面的命令是否正确请指正:
    rclone mount demo:/mnt/sdb1/ttnode /mnt/rcde –vfs-cache-mode writes –vfs-cache-max-age 20s –vfs-cache-max-size 50G –cache-dir /mnt/locrad –daemon

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注