使用Ramdisk加速你的Mac

还记得以前在Windows上使用过Ramdisk来将32位系统不能识别的内存转成磁盘,存放临时文件什么的。突发奇想在Mac是否是也能用内存来放Cache呢?虽然有SSD,可是考虑到寿命问题,加上速度,内存盘也仍是颇有优点的。html

找了一下,最简单的方法是下载一个APP,或者执行下面的脚本:缓存

bashdiskutil erasevolume HFS+ RamDisk `hdiutil attach -nomount ram://$((2*1024*1024*2))`

可是这样并不够优雅,很容易不当心就把RamDisk给Eject了,有寻思了一番,决定采用脚本形式,并且是建立隐藏的RamDisk,同时支持注销自动备份~事不宜迟,立刻动手。bash

建立RamDisk脚本

/etc/下建立Ramdisk目录,用来存放相关文件app

initramdisk.sh

建立/etc/Ramdisk/initramdisk.shcode

bash#!/bin/sh

# 设置内存盘的名称
DISK_NAME=RamDisk
MOUNT_PATH=/Volumes/$DISK_NAME
# 设置备份文件的保存路径
WORK_PATH=/etc/Ramdisk
BAK_PATH=$WORK_PATH/$DISK_NAME.tar.gz
# 设置分配给内存盘的空间大小(MB)
DISK_SPACE=1024

# 建立Ramdisk
if [ ! -e $MOUNT_PATH ]; then
    dev=`hdid -nomount ram://$(($DISK_SPACE*1024*2)) | cut -d' ' -f1`
    partition=${dev}s1
    rdev=`echo $dev | sed -e 's/disk/rdisk/'`
    rpartition=`echo $partition | sed -e 's/disk/rdisk/'`
    echo y | fdisk -ia hfs $dev
    newfs_hfs -v $DISK_NAME $partition
    hdiutil mount -nobrowse $rdev
    hdiutil mount -nobrowse $rpartition
fi

# 恢复备份
if [ -s $BAK_PATH ]; then
    tar -zxf $BAK_PATH -C $MOUNT_PATH
fi

syncramdisk.sh

建立/etc/Ramdisk/syncramdisk.shhtm

bash#!/bin/sh

# 设置内存盘的名称
DISK_NAME=RamDisk
MOUNT_PATH=/Volumes/$DISK_NAME
# 设置备份文件的保存路径
WORK_PATH=/etc/Ramdisk
BAK_PATH=$WORK_PATH/$DISK_NAME.tar.gz
LISTFILE=$WORK_PATH/list

# 设置最大的cache大小(MB)
MAX_CACHE_SIZE=50

# 备份Ramdisk内容,超过50M的目录直接再也不保存
cd $MOUNT_PATH
declare -a fa
i=0
for file in $(du -s Caches/* | sort -n)
do
  fa[$i]=$file
  let i=i+1
done
size=$((i/2))
echo "file number:"$size
cd $WORK_PATH
echo ".?*">$LISTFILE
for((i=0;i<$size;i++))
do
  if ((${fa[$((i*2))]}<(($MAX_CACHE_SIZE*1024*2)) ));then
    echo "add:"${fa[$((i*2+1))]}
  else
    echo ${fa[$((i*2+1))]}>>$LISTFILE
  fi

done
if [ -e $MOUNT_PATH ] ; then
    cd $MOUNT_PATH
    tar --exclude-from $LISTFILE -czf $BAK_PATH .
fi

设置登陆和注销hook

在终端下执行:blog

bash# 登陆时执行initramdisk.sh
defaults write com.apple.loginwindow LoginHook /etc/Ramdisk/initramdisk.sh

# 注销时执行syncramdisk.sh
defaults write com.apple.loginwindow LogoutHook /etc/Ramdisk/syncramdisk.sh

迁移目录到RamDisk

转移Cache目录

在终端下继续执行:内存

bash# 删除Cahces
rm -rf ~/Library/Caches

# 在RamDisk建立Caches目录并连接
mkdir /Volumes/RamDisk/Caches 
ln -s /Volumes/RamDisk/Caches ~/Library/Caches

转移Chrome缓存

bashmv ~/Library/Application\ Support/Google/Chrome /Volumes/RamDisk/
ln -s /Volumes/RamDisk/Chrome ~/Library/Application\ Support/Google/Chrome

其余须要移到RamDisk的东西也能够如法炮制。get

原文连接:http://blog.yourtion.com/mac-use-ramdisk-accelerate.htmlit

相关文章
相关标签/搜索