使用Ramdisk加速你的Mac

Yourtion發表於2015-07-09

還記得之前在Windows上使用過Ramdisk來將32位系統不能識別的記憶體轉成磁碟,存放臨時檔案什麼的。突發奇想在Mac是不是也能用記憶體來放Cache呢?雖然有SSD,但是考慮到壽命問題,加上速度,記憶體盤也還是很有優勢的。

找了一下,最簡單的方法是下載一個APP,或者執行下面的指令碼:

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

但是這樣並不夠優雅,很容易不小心就把RamDisk給Eject了,有尋思了一番,決定採用指令碼形式,而且是建立隱藏的RamDisk,同時支援登出自動備份~事不宜遲,馬上動手。

建立RamDisk指令碼

/etc/下建立Ramdisk目錄,用來存放相關檔案

initramdisk.sh

建立/etc/Ramdisk/initramdisk.sh

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.sh

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

在終端下執行:

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的東西也可以如法炮製。

原文連結:http://blog.yourtion.com/mac-use-ramdisk-accelerate.html

相關文章