[Mac] 在 OS X Yosemite 上建立 RAM disk 給 P2P 軟體暫存用

[Mac] 在 OS X Yosemite 上建立 RAM disk 給 P2P 軟體暫存用

很久沒用 P2P 軟體來抓東西了,

一個原因是 I/O 太重,對硬碟蠻傷的…

不過偶爾還是會想要用 P2P 抓個東西,有什麼好方法呢?

(最近是在 Mac 上裝了 uTorrent,還不錯用)

 

一個方法是建立 RAM disk,把下載下來的東西儲存在 RAM disk 裡面,

等抓完了之後,再複製到硬碟上面~

當然這方法有個風險,要是電腦突然當機或是重開了,RAM disk 裡的東西就沒了…

 

參考資料:How to Create a 4GB/s RAM Disk in Mac OS X

 

1. 建立 RAM disk

要在 Yosemite 上建立 RAM disk 相當的簡單,在 terminal 裡執行下面的指令就行了:

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

這邊的 2 代表的是 2GB,想要調整的話可以設成 4 代表 4GB。

執行後結果如下:

testuser@localhost ~ $ diskutil erasevolume HFS+ RamDisk $(hdiutil attach -nomount ram://$((2*1024*2048)))
Started erase on disk3
Unmounting disk
Erasing
Initialized /dev/rdisk3 as a 2 GB case-insensitive HFS Plus volume
Mounting disk
Finished erase on disk3 RamDisk

 

這邊事實上是兩個動作,

先用 hdiutil attach 建立一個 RAM 的 device (本例中是回傳了 /dev/disk2),

再用 diskutil 將這裝置掛載到 /Volumes/RamDisk 這個目錄~

因此如果執行 hdiutil info 的話,可以看到這個裝置:

testuser@localhost ~ $ hdiutil info
framework       : 389.1
driver          : 10.10v389.1
================================================
image-path      : ram://4194304
shadow-path     : <none>
icon-path       : /System/Library/PrivateFrameworks/DiskImages.framework/Resources/CDiskImage.icns
image-type      : read/write
system-image    : false
blockcount      : 4194304
blocksize       : 512
writeable       : TRUE
autodiskmount   : false
removable       : TRUE
image-encrypted : false
mounting user   : testuser
mounting mode   : <unknown>
process ID      : 4281
/dev/disk2      /Volumes/RamDisk

 

而執行 mount 也可以看到 /dev/disk2 被掛載到 /Volumes/RamDisk:

testuser@localhost ~ $ mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk2 on /Volumes/RamDisk (hfs, local, nodev, nosuid, noowners, mounted by testuser)

  

2. 設定 P2P 軟體的暫存目錄

RAM disk 掛載好之後,開啟 P2P 軟體將暫存目錄設定到 RamDisk 這個裝置,

下例是開啟 uTorrent > Preferences > Directories,

將 Put downloading files in 設定成 RamDisk 這個裝置:

Screen Shot 2015-01-08 at 下午4.22.38  

 

3. 關閉 RAM disk 

當 P2P 下載完成後,就可以關掉這個 RAM disk~

可以去 Finder 那邊找到 RamDisk 這個裝置卸載,或是執行下面的指令:

hdiutil detach /Volumes/RamDisk

 

這邊要特別注意,不能用 umount /Volumes/RamDisk 這個指令卸載,

因為 umount 並不會移掉 hdiutil attach 建立出來的 device (如本例中的 /dev/disk2),

這會導致反覆 mount/unmount 之後,就無法再 mount 了…

這時候就得用 hdiutil info 將所有的 device 列出來,一個個用 hdiutil detach 卸載了~

 

為了簡化上面的流程,我寫了一個簡單的 shell script,

只要執行 mount_ramdisk.sh 就會建立一個 2GB 的 RAM disk,

執行 mount_ramdisk.sh 4 就會建立一個 4GB 的 RAM disk,

執行 mount_ramdisk.sh -u 就可以卸載掉 RAM disk: 

#!/bin/sh
RAM_DISK_GB=2
RAM_DISK_NAME=RamDisk
MOUNTED_RAM_DISK_FOLDER="/Volumes/${RAM_DISK_NAME}"
# Unmount RAM disk
if [ "$1" = "-u" ]; then
    if [ -e "${MOUNTED_RAM_DISK_FOLDER}" ]; then
hdiutil detach "${MOUNTED_RAM_DISK_FOLDER}"
else
echo "RAM disk is not mounted yet."
fi
exit
fi
# Get RAM disk size from parameter
if [ "$1" != "" ]; then
RAM_DISK_GB="$1"
fi
if [ -e "${MOUNTED_RAM_DISK_FOLDER}" ]; then
echo "RAM disk is already mounted on ${MOUNTED_RAM_DISK_FOLDER}."
else
diskutil erasevolume HFS+ "${RAM_DISK_NAME}" $(hdiutil attach -nomount ram://$((RAM_DISK_GB*1024*2048)))
fi

 

希望這樣用之後,硬碟可以活久一點囉~:P

 

(本頁面已被瀏覽過 489 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料