最近在Flash disk上面, 又有新的硬體可以選擇, 那就是SATA SSD或USB flash disk. 不過對Linux來說, 這兩各硬體裝置, 他是把他們模擬成SCIS裝置, 所以在Linux下面是把他當作一般的硬碟來使用. 也就是說上面的檔案系統跑的是EXT2/EXT3.
但是EXT2/EXT3並不是設計給Flash而是給一般的硬碟使用. 因為Flash在物理特性上跟硬碟不一樣. 例如, Flash寫入是以Block為單位, 所以相同的資料要儘量放在一起, 以增加寫入的效率. 而硬碟就不需要考慮這樣的事情. 所以在SSD上面用EXT2多少會有點問題, 雖然廠商在controller上面有做一些機制. 但是不見得是最好的.
但是如果想要使用專門設計給Flash用的flie system, 就會遇到一各問題, 目前的flash filesystem都是架構於MTD device, 而SSD則是一般的block device. 所以在Linux Kernel就會有block2mtd的模組, 將block device模擬成MTD device.
1. 在Linux Kernel condifuration加入block2mtd
MTD_BLOCK2MTD = y
2. 將SSD/USB disk 轉成MTD device.
modprobe block2mtd block2mtd=/dev/sda1
3. 這時候我們就可以將JFFS2 Image寫入, 並且mount
dd if=jffs2.img of=/dev/mtd0
mount -t jffs2 /dev/mtdblock0 /mnt
如果想要在開機時, 就直接把SSD當作root filesystem. 可以加入下面的Kernel options
root=/dev/mtdblock0 rootfstype=jffs2 block2mtd.block2mtd=/dev/sda1
參考資料:
block2mtd usage info for Linux 2.6.16
Linux MTD SOP