|   |  | 
        
          | 
			  
			    | 茫茫網海中的冷日 發生過的事,不可能遺忘,只是想不起來而已!
 |  
				|  | 恭喜您是本站第 1746549 
										位訪客!
					 登入  | 註冊 |  |  | 
      
      
        
                      | 
 
 
 
 
 
 | 
                      
	| 發表者 | 討論內容 |  
	| 冷日 (冷日)
 | 發表時間:2010/5/29 2:38 |  
	| 
	Webmaster   
		註冊日: 2008/2/19來自: 發表數: 15773 | 
	[轉貼]拿 RAM 當硬碟來用(RAM Disk)臨時想要做個 RAM Disk, 就去翻以前寫的文章, 發現以前的 Blog 寫的真的是很亂, 還是重新整理一下好了.  目前的作法如下: 首先在/dev/shm建個tmp文件夾,然後與實際/tmp綁定mkdir /dev/shm/tmpchmod 1777 /dev/shm/tmpmount --bind /dev/shm/tmp /tmp
 方法2: mkdir /mnt/ramfsvi /etc/fstabnone       /mnt/ramfs      tmpfs      defaults  0 0mount /mnt/ramfs這樣就可以用這個 ramfs 來放一些有的沒有的, 可 man mount, man fstab
 方法3: mount -t tmpfs -o size=200m none /mnt/tmpfs200m 是 200Mb 的意思, 詳情請看 man mount 裡的 tmpfs
 方法4: 設定 /etc/default/tmpfs default shm 大小(系統會自動用此值去當硬碟)設定 /etc/fstab: tmpfs /tmp tmpfs size=100m,mode=1777 0 0 設讓 RAM 掛 100Mb 在 /tmp
 方法5:(我目前都用此方法) 直接設定 vim /etc/fstab 寫入下面那行
tmpfs /tmp tmpfs size=100m,mode=1777 0 0# 設讓 RAM 掛 100Mb 在 /tmp 
其它方法: 可參見下面連結, "有趣的 tmpfs" 中, 有提供很多更好用的方法 參考文件: 原文出處: 拿 RAM 當硬碟來用(RAM Disk) | Tsung's Blog
 |  
	|  |  
| 
 |  
	| 冷日 (冷日)
 | 發表時間:2010/5/29 2:55 |  
	| 
	Webmaster   
		註冊日: 2008/2/19來自: 發表數: 15773 | 
	[轉貼] 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. 執行下列指令建立排除檔案列表
 
 
 
 
 
 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中寫上:
 
 
 
 
 
 如果我們希望排除多個檔案或目錄,例如檔案「EEE」和目錄「Cache」,則在/etc/non-list中寫上:
 
 
 
 
 
 備份的檔案會存在哪裡?檔名是什麼呢?
 
 備份的檔案會存為
 /RAMDISK_bak.tar
 ,
 會在還原後自動刪除
 。
 
 此外,
 為了安全性的考量,/RAMDISK_bak.tar的權限會設為600
 。
 
 
 
 最後,因為這是第一版,所以我並沒有將上面提到的參數設為變數,不過這幾個script並不複雜,相信稍微看一下,就能夠看懂並修改,歡迎大家修改使用,改過後記得再貼出來造福更多人。
 
 
 
 PS: 本篇同步 po 在
 我的blog
 
 
 原文出處:摩托學園討論區 • 檢視主題 - [分享] Linux的RAM Disk(資料不消失版)
 |  
	|  |  
 
 
                     |