用了很久的一段小东西,因为昨天升级10.9GM之后修改的系统文件被覆盖,今天重做时忘记改文件权限导致一直报错。
* 此方式会修改系统文件,请酌情使用。
2012年的13' MBP,因为Retina超出预算,而选择了低配版。SSD居高不下,自己换装了相对更加实惠的16G内存。想着IntelliJ运行时创建的一大堆缓存文件,再看看那经常连一半都用不到的16G内存,怎么算都觉得浪费,于是便打算把IntelliJ的缓存放到内存里去。
大体思路是:
1. 创建内存磁盘
2. 把缓存文件复制到内存磁盘
3. 修改IntelliJ调用缓存的路径
4. 内存磁盘卸载时把修改后的缓存文件同步回原位置以便下次使用
IntelliJ13的缓存文件位于"主目录/Library/Caches/IntelliJIdea13"(不同版本文件夹不同,看版本号),先把文件夹重命名为"IntellijIdea13_disk"。
编写创建内存磁盘脚本方便以后调用
#>>>> m-cache_idea13
#!/bin/sh
name="IntellijIdea13"
src="/Users/`users`/Library/Caches/${name}_disk"
link="/Users/`users`/Library/Caches/$name"
disk="cache_$name"
dest="/Volumes/$disk/$name"
[[ -e "$dest" ]] && exit 1
diskutil erasevolume HFS+ "$disk" `hdiutil attach -nomount ram://4096000`
cp -Rp "$src" "$dest"
ln -sfh "$dest" "$link"
cp /opt/config/umount.hook.idea13 "/Volumes/$disk/umount.hook"
cp /opt/config/umount.post_hook.idea13 "/Volumes/$disk/umount.post_hook"
#<<<< end m-cache_idea13
在 "/opt/config"目录中创建文件 umount.hook.idea13,该脚本在内存磁盘被卸载之前调用
#>>>> umount.hook.idea13
#!/bin/sh
src="$@/IntellijIdea13/"
dest="/Users/`users`/Library/Caches/IntellijIdea13_disk"
rsync -rptog --delete $src $dest
#<<<< end umount.hook.idea13
在 "/opt/config"目录中创建文件 umount.post_hook.idea13,该脚本在内存磁盘被卸载之后调用
#>>>> umount.post_hook.idea13
#!/bin/sh
src="/Users/`users`/Library/Caches/IntellijIdea13_disk"
dest="/Users/`users`/Library/Caches/IntellijIdea13"
ln -sfh "$src" "$dest"
#<<<< end umount.post_hook.idea13
以上两个脚本会被复制到内存磁盘中在卸载时调用,其实可以只用一个文件,分开只是为了验证一下给卸载磁盘时新增的两个事件是否能够正确运行。
修改系统文件,将 /sbin/umount 文件重命名为 /sbin/umount.orig,如果不知道怎么修改系统文件,那么这篇文章可能不适合你阅读,请不要继续下面的操作
创建新的umount脚本
#>>>> umount
#!/bin/sh
hook_file="$@/umount.hook"
post_hook_file="$@/umount.post_hook"
temp_post_hook=""
if [ -x "$post_hook_file" ]; then
temp_post_hook="/tmp/`basename $@`.$RANDOM.post_hook"
cat "$post_hook_file" > "$temp_post_hook"
chmod a+x "$temp_post_hook"
fi
[[ -x "$hook_file" ]] && "$hook_file" $@
umount.orig "$@"
if [[ "$temp_post_hook" != "" && -x "$temp_post_hook" ]]; then
"$temp_post_hook" $@
rm "$temp_post_hook"
fi
#<<<< end umount
赋予umount脚本 root:wheel 644权限
完成。
执行m-cache_idea13将缓存放入内存磁盘,并且通过任何方式弹出磁盘时,已修改内容会被同步回磁盘缓存。另外为所有加载的磁盘映像增加了回掉脚本,加载磁盘根目录的umount.hook脚本会在卸载前调用,umount.post_hook脚本会磁盘卸载之后调用。
PS. 10.9GM Launchpad双指滑动不畅,测试不给力啊
-= THE END =-