茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1672758 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
P1110152.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

小企鵝開談 : [轉貼]拿 RAM 當硬碟來用(RAM Disk)

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]拿 RAM 當硬碟來用(RAM Disk)

臨時想要做個 RAM Disk, 就去翻以前寫的文章, 發現以前的 Blog 寫的真的是很亂, 還是重新整理一下好了.

  1. 目前的作法如下:
    • 首先在/dev/shm建個tmp文件夾,然後與實際/tmp綁定
    • mkdir /dev/shm/tmp
    • chmod 1777 /dev/shm/tmp
    • mount --bind /dev/shm/tmp /tmp
  2. 方法2:
    • mkdir /mnt/ramfs
    • vi /etc/fstab
    • none /mnt/ramfs tmpfs defaults 0 0
    • mount /mnt/ramfs
    • 這樣就可以用這個 ramfs 來放一些有的沒有的, 可 man mount, man fstab
  3. 方法3:
    • mount -t tmpfs -o size=200m none /mnt/tmpfs
    • 200m 是 200Mb 的意思, 詳情請看 man mount 裡的 tmpfs
  4. 方法4:
    • 設定 /etc/default/tmpfs default shm 大小(系統會自動用此值去當硬碟)
    • 設定 /etc/fstab: tmpfs /tmp tmpfs size=100m,mode=1777 0 0 設讓 RAM 掛 100Mb 在 /tmp
  5. 方法5:(我目前都用此方法)
    • 直接設定 vim /etc/fstab 寫入下面那行
    • tmpfs /tmp tmpfs size=100m,mode=1777 0 0
    • # 設讓 RAM 掛 100Mb 在 /tmp

  6. 其它方法: 可參見下面連結, "有趣的 tmpfs" 中, 有提供很多更好用的方法

參考文件:


原文出處: 拿 RAM 當硬碟來用(RAM Disk) | Tsung's Blog
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼] Linux 的 RAM Disk (資料不消失版)


[分享] Linux的RAM Disk(資料不消失版)


RAM Disk是一個非常方便的東西,尤其現在DDR2的RAM很便宜時,善用RAM Disk可以有很大的效能改善。

雖然RAM Disk已經不是什麼新鮮的東西了,但是這次我針對Linux上的RAM Disk Script加入了開/關機備份/還原的功能,應該就很少見了。



我個人認為Linux上的RAM Disk比Windows和FreeBSD來得方便好用,Linux的shm(Share Memory)實在太強大了。

在Windows上,RAM Disk的軟體不少,但多半都是切割一塊RAM當磁碟,FreeBSD上也是(FreeBSD的shm實做了嗎?有消息的回覆一下吧~),但在Linux上,因為Share Memory技術的關係,可以直接把Share Memory bind 到 /tmp,直接當作 RAM Disk 使用,這樣的優點是,系統記憶體和RAM Disk是共用的,RAM Disk不需要額外割一塊出來,舉個例子:

假設RAM有1024MB(1G),我要512MB的RAM Disk

在Windows、FreeBSD上,系統記憶體就只剩下512MB,另外512MB變成一個RAM Disk。

而在Linux上,系統記憶體還是1024MB(1G),假如我在RAM Disk上吃掉了100MB的空間,則系統記憶體會變成924MB,而RAM Disk(Share Memory)的上限是多少?1024MB嗎?

這可以自己設定,系統預設是RAM的一半,以這例子來說,Linux預設的RAM Disk(Share Memory)就是512MB。



RAM Disk速度很快,尤其是拿來compile kernel時特別明顯,可以明顯感受到,花費的時間比較短,這要歸功於Linux Kernel Source Code很大,所以感受得出來。



另一個重要的場合大概就是Eee PC這類輕巧筆電了,輕巧筆電因為「輕巧」、「價格」...等因素,往往硬碟很小,而且硬碟經常速度很慢(EeePC 900、901的第二顆Flash,Aspire one 110的8G Flash),在無法擴充或是擴充價格很誇張時,加大RAM並善用它變得很重要,因此在輕巧筆電上設定RAM Disk,幾乎是「必要的設定」(不論是XP或Linux)。



RAM Disk的致命傷就是重開機資料就消失,稍微搜尋後可以發現,Windows上已經有不少人提供備份、還原的script,搭配XP Pro的系統原則就可以在關機時備份RAM Disk的資料,那Linux呢?就在這裡啦~~



首先,我RAM Disk的建立,是使用
[閒聊]有趣的 tmpfs最後的script版本,並不是寫在/etc/fstab當中。

RAM Disk(tmpfs)的詳細介紹可以參考
Tsung's Blog的拿 RAM 當硬碟來用(RAM Disk),作者把所有的tmpfs建立方法全部敘述了,內容清楚明確,非常值得參考,我使用的屬於方法一。



簡單敘述建立RAM Disk的方法:



1. 把下列script內容編輯,並存檔為
/etc/init.d/mounttmpfs.sh


#!/bin/sh
  #
  # mounttmpdir Mount /tmp after mounvirtfs exec-ed
  #
  # Version: @(#)mounttmpdir 0.01 24-Dec-2004 antony shen
  # 參考網址:http://moto.debian.org.tw/viewtopic.php?t=4100&highlight=shm
  # 執行指令:update-rc.d mounttmpfs.sh start 37 S .
  #

  # Script needs to be robust and continue when parts fail,
  # so we're not setting the "-e" flag.
  #set -e

  PATH=/lib/init:/bin:/sbin

  if [ -d /dev/shm ]
  then
  if [ ! -d /dev/shm/tmp ]
  then
  echo -n "Mounting tmpfs(/tmp,/var/tmp) under /dev/shm..."

  mkdir /dev/shm/tmp
  mkdir /dev/shm/vtmp
  chmod 1777 /dev/shm/tmp
  chmod 1777 /dev/shm/vtmp
  mount --bind /dev/shm/tmp /tmp
  mount --bind /dev/shm/vtmp /var/tmp

  echo "OK."
  fi
  else
  echo "Failed to find /dev/shm, unable to link /tmp under it!"
  fi       




2. 執行

update-rc.d mounttmpfs.sh start 37 S .       




3. 重新開機



4. 複製個檔案 (
cp /boot/* /tmp/
) 到
/tmp
執行
df
,查看
/dev/shm
的使用空間有沒有變化,有變化就是成功了。



接下來,我們進一步來玩Backup/Restore的部份,如下:



1. 把下列script存檔為
/etc/init.d/backuptmpfs.sh


#!/bin/sh
  #
  # 參考 mounttmpfs.sh 修改而成
  #
  # Version: @(#)backuptmpfs.sh 0.01 2008-08-26 YCFu
  # 執行指令:update-rc.d backuptmpfs.sh stop 1 0 6 .
  #

  # Script needs to be robust and continue when parts fail,
  # so we're not setting the "-e" flag.
  #set -e

  PATH=/lib/init:/bin:/sbin

  if [ -d /dev/shm ]
  then
  if [ -d /dev/shm/tmp ]
  then
  echo -n "Backup tmpfs(/tmp) to /RAMDISK_bak.tar..."

  tar -X /etc/non-list -C /tmp -cf /RAMDISK_bak.tar .
  chmod 600 /RAMDISK_bak.tar

  echo "OK."
  fi
  else
  echo "Backup Fail!"
  fi       




2. 把下列script存檔為
/etc/init.d/restoretmpfs.sh


#!/bin/sh
  #
  # 參考 backuptmpfs.sh 修改而成
  #
  # Version: @(#)backuptmpfs.sh 0.01 2008-08-26 YCFu
  # 執行指令:update-rc.d restoretmpfs.sh start 38 S .
  #

  # Script needs to be robust and continue when parts fail,
  # so we're not setting the "-e" flag.
  #set -e

  PATH=/lib/init:/bin:/sbin

  if [ -f /RAMDISK_bak.tar ]
  then
  echo -n "Restore tmpfs(/tmp) from /RAMDISK_bak.tar..."

  tar -C /tmp -xf /RAMDISK_bak.tar
  rm /RAMDISK_bak.tar

  echo "OK."
  fi
        


3. 執行下列指令:
update-rc.d restoretmpfs.sh start 38 S .
  update-rc.d backuptmpfs.sh stop 1 0 6 .       




4. 執行下列指令建立排除檔案列表

touch /etc/non-list       




5.完成



上述程式說明:

簡單的說,我改了2個script,一個用在關機時備份RAM Disk,一個用在開機時還原RAM Disk。



關機時備份RAM Disk的叫做backuptmpfs.sh,它會在inittab狀態為0和6時執行(放到rc0.d和rc6.d),0和6分別是關機狀態和重新開機狀態。



開機時還原RAM Disk的叫做restoretmpfs.sh,「它必須在 mounttmpfs.sh 之後執行」,它會在開機時,建立RAM Disk之後,將RAM Disk資料還原回去。

為什麼不整合到mounttmpfs.sh之中呢?

我試過了,它似乎會和mount --bind衝突,可能需要delay一點時間吧。



由於RAM Disk中,通常會放置Firefox的暫存目錄,我們不希望所有東西都備份,因此我們要設定個排除檔案名單,將特定的目錄或檔案排除。

排除名單放在
/etc/non-list
,只需要把不要備份的名稱加入即可

以Firefox的暫存目錄來說,Firefox會自動建立暫存目錄/tmp/Cache,我們只需要在/etc/non-list中寫上:

Cache       




如果我們希望排除多個檔案或目錄,例如檔案「EEE」和目錄「Cache」,則在/etc/non-list中寫上:

Cache
  EEE       




備份的檔案會存在哪裡?檔名是什麼呢?

備份的檔案會存為
/RAMDISK_bak.tar

會在還原後自動刪除


此外,
為了安全性的考量,/RAMDISK_bak.tar的權限會設為600




最後,因為這是第一版,所以我並沒有將上面提到的參數設為變數,不過這幾個script並不複雜,相信稍微看一下,就能夠看懂並修改,歡迎大家修改使用,改過後記得再貼出來造福更多人。



PS: 本篇同步 po 在
我的blog


原文出處:摩托學園討論區 • 檢視主題 - [分享] Linux的RAM Disk(資料不消失版)
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|