linux概念之/dev/shm


Linux默認(CentOS)/dev/shm分區的大小是系統物理內存的50%, 雖說使用/dev/shm對文件操作的效率會高很多,
但是目前各發行軟件中卻很少有使用它的(除了前面提到的Oracle), 可以通過ls /dev/shm查看下面是否有文件, 如果沒有就說明當前系統並沒有使用該設備.

默認的Linux發行版中的內核配置都會開啟tmpfs,映射到了/dev/下的shm目錄。可以通過df 命令查看結果.
/dev/shm/是linux下一個非常有用的目錄,因為這個目錄不在硬盤上,而是在內存里。因此在linux下,就不需要大費周折去建ramdisk,直接使用/dev/shm/就可達到很好的優化效果。默認系統就會加載/dev/shm ,它就是所謂的tmpfs,有人說跟ramdisk(虛擬磁盤),但不一樣。象虛擬磁盤一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區來存儲。而且傳統的虛擬磁盤是個塊設備,並需要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可以使用了。
tmpfs有以下優勢:
1。動態文件系統的大小,/dev/shm/需要注意的一個是容量問題,在linux下,它默認最大為內存的一半大小,使用df -h命令可以看到。但它並不會真正的占用這塊內存,如果/dev/shm/下沒有任何文件,它占用的內存實際上就是0字節;如果它最大為1G,里頭放有 100M文件,那剩余的900M仍然可為其它應用程序所使用,但它所占用的100M內存,是絕不會被系統回收重新划分的
2。tmpfs 的另一個主要的好處是它閃電般的速度。因為典型的 tmpfs 文件系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。
3。tmpfs 數據在重新啟動之后不會保留,因為虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。

[root@oracle5A ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   27G  5.3G   20G  22% /
tmpfs                         1.9G  650M  1.3G  34% /dev/shm

默認的最大一半內存大小在某些場合可能不夠用,並且默認的inode數量很低一般都要調高些,這時可以用mount命令來管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的機器上,將最大容量調到1.5G,並且inode數量調到1000000,這意味着大致可存入最多一百萬個小文件。
如果需要永久修改/dev/shm的值,需要修改/etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
mount -o remount /dev/shm

 

 

http://www.cnblogs.com/pied/archive/2013/01/29/2880718.html

http://www.landley.net/writing/

怎樣使用initramfs

工作過程簡述

在2.6kernel啟動時,它把rootfs作為它的第一個文件系統掛載(注意:這里的rootfs是真名!!!不是root filesystem的縮寫)。rootfs是一個特殊的tmpfs,這個不能被刪除或者是unmounted。很多使用2.6內核的系統通常都是掛載 rootfs后什么都不做,然后啟動另一個文件系統作為root filesystem。但是,這個不能掩蓋rootfs存在的事實,你可以“cat /proc/mounts” 來查看,第一個掛載的肯定是rootfs。

[root@210-lvs grub]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=241800k,nr_inodes=60450,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/mapper/VolGroup-lv_root / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=241800k,nr_inodes=60450,mode=755 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0

rootfs被掛載后,kernel立馬就解壓了那個用gzip壓縮的CPIO歸檔文件到rootfs。每個2.6的內核都會執行這一步,但是默認 那個壓縮檔是空的,所以也就沒有往rootfs內添加任何東西。接着kernel會嘗試在rootfs去找尋/init,一旦找到init並執 行,kernel也就完成了啟動工作,然后便是剛剛執行的init程序接管了接下來的工作。如果kernel沒法調用"/init"程序,可能就會回過頭 去,按照便准的做法去解析參數“root=”,試圖找到另一個filesystem然后掛載它。

這里的使用initramfs是指,提供一個/init程序給rootfs使用,我們可以通過兩種途徑實現:使用編譯進內核的cpio.gz檔案, 或者是一個獨立的cpio.gz檔案。以前的initrd就是編譯一個獨立的檔案,很多使用initramfs的方式也是給它提供一個獨立的檔案。

 

總結一下

這四種給rootfs提供內容的方式都有一個共同點:在kernel啟動時,一系列的文件被解壓到rootfs,如果kernel能在其中找到可執行的文件“/init”,kernel就會運行它;這意味着,kernel不會再去理會“root=”是指向哪里的。

此外,一旦initramfs里面的init 進程運行起來,kernel就會認為啟動已經完成。接下來,init將掌控整個宇宙!它擁有霹靂無敵的專門為它預留的Process ID #1,整個系統接下來的所有都將由它來創造!還有,它的地位將是不可剝奪的,嗯哼,PID 1 退出的話,系統會panic的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM