设为首页 收藏本站
查看: 2117|回复: 0

[经验分享] 在 macOS 系统上创建、挂载 Ramdisk(aka: RamFS、tmpfs)

[复制链接]

尚未签到

发表于 2017-6-9 12:52:36 | 显示全部楼层 |阅读模式
1. 计算扇区数(Sectors)
  扇区这个概念是从机械硬盘时代有的,后来为了保证向前兼容,在目前早已没有扇区的 SSD、优盘上仍旧保留了逻辑上的「扇区」概念。
一个扇区是 512 字节(bytes),所以 64MiB 的 RamFS,扇区数就是:
  64MiB * 1024KiB/MiB * 1024B/KiB / 512B/sector = 131072(sectors)

2. 创建基于内存的设备文件
  在 OS X 10.4 以上的操作系统中,对于储存类设备文件的管理已经交由 hdiutil 这个基于 DiskImages 框架的命令行工具进行管理类。[1]
所以我们的这个 RamFS 的设备文件的创建也不例外。先打开 Terminal,执行如下命令:



$hdiutil attach -nomount ram://131072
  然后终端上会显示出创建的设备文件
/dev/disk2
命令中:131072 即为扇区数。nomount 表示不要挂载,待会儿我们创建完文件系统再手动挂载。

3. 创建文件系统
  光有了基于内存的设备还不够,我们还需要在其之上创建文件系统。就像买了一张软盘,买回来之后我们还需要格式化才能使用一样。(这里举例没有使用优盘、硬盘的例子是因为这些相对「现代」的存储设备一般在出厂前都预先格式化过了。而大部分的软盘出厂前是没有格式化的,当然后期的软盘会格式化啦)这里我们创建 HFS+ 格式的文件系统,卷标为「Ram Disk」:



$newfs_hfs -v 'Ramdisk' /dev/disk2
  然后终端上会回显信息:
Initialized /dev/rdisk2 as a 64 MB case-insensitive HFS Plus volume
其中带「r」的「/dev/rdisk2」是 /dev/disk2 的原始设备。

4. 挂载 Ramdisk
  这里就很常规了,我们可以使用 UNIX 上传统的 mount 命令,把 /dev/disk2 挂在到任意目录。比如:编译时候的中间目录、浏览器缓存、Web 服务需要大量 IO 的目录,等等。



$mkdir -p ~/Ramdisk
$mount -o noatime -t hfs /dev/disk2 ~/Ramdisk
5. 搞定了
  上一步其实就完成了,我们可以在 Finder 中个人 Home 文件夹下找到 Ramdisk 并打开了,在左侧也能看到被挂载的 Ramdisk。
其中 mount 命令中 noatime 选项是为了让文件系统不更新访问时间,以减少磁盘 IO,进而提高性能[2](注:参考文献是针对 Linux 的)。不过实际效果可能很有限。
Finder 中展示 Ramdisk
在 Finder 中显示已挂载好的 Ramdisk

6. 接下来。。。
  可能会有些担忧,毕竟在 Finder 中左侧 Navbar 中直接展示出 Ramdisk 中感觉会比较显眼,可能不知道什么时候就给随手 eject 出去了。
所以,我们把他隐藏起来。这里可以 UNIX 上传统的 mount 命令(在 -o 选项中加入 nobrowse 参数)或者,也可以使用来自 Apple 的 hdiutil 工具。方法是在用 hdiutil 挂载时,使用 -nobrowse 开关。



$hdiutil mount -nobrowse /dev/disk2
  注:如果已经挂载了,记得先用 umount /dev/disk2 命令卸载。
终端会回显:
/dev/disk2 /Volumes/Ramdisk
然后,在 Finder 中就不会出现了。

7. 再接下来。。。
  我们可以设置开机自启动,虽然自从用了 macOS 重启的次数几乎很少了。

7.1. 创建脚本
  以下以替换系统的临时目录(/private/tmp)为例:
保存文件为 ramdisk.sh 到 root 的 Home 文件夹(/var/root)中(需要 root 权限),当然其他地方也可以,但要注意修改之后步骤的路径:



#!/bin/bash
ramdisk_size_in_mb=64
mount_point=/private/tmp

ramdisk_size_in_sectors=$((${ramdisk_size_in_mb}*1024*1024/512))

ramdisk_dev_file=`hdid -nomount ram://${ramdisk_size_in_sectors}`
newfs_hfs -v 'Ramdisk' ${ramdisk_dev_file}
mkdir -p ${mount_point}
mount -o rw,noatime,nobrowse -t hfs ${ramdisk_dev_file} ${mount_point}
chown root:wheel ${mount_point}
chmod 1777 ${mount_point}
  执行「sudo chmod +x /var/root/ramdisk.sh」,加上执行权限。

7.2 再接下来。。。
  创建文件 com.emitial.ramdisk.plist 到 /Library/LaunchDaemons/ 中:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
     <dict>
         <key>Label</key>
         <string>com.emitial.ramdisk</string>
         <key>ProgramArguments</key>
         <array>
             <string>/var/root/ramdisk.sh</string>
         </array>
         <key>RunAtLoad</key>
         <true/>
     </dict>
</plist>
8. Finally
  至此,结束。

fin.

Note:
[1] hdiutil(1) Mac OS X Manual Page
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html
[2] Securing and Optimizing Linux: RedHat Edition -A Hands on Guide
http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec73.html

Bibliography:
[1] hdiutil(1) Mac OS X Manual Page
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-385631-1-1.html 上篇帖子: 分布式文件管理系统MooseFS在centOS 7中的安装 下篇帖子: 分布式文件系统之MooseFS----介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表