MTD (Memory Technology Device) 是指各種 raw flash,如 NAND, NOR 等。
Linux MTD (Memory Technology Device) 子系統設計用來直接使用記憶體晶片,特別是有 erase-block 的 NAND flash 晶片 (raw flash),寫入之前需要先抹除。erase-block 大小 64 KiB、128 KiB、或更大,有抹除次數限制,一般 NOR Flash 或 SLC NAND Flash 約 100K-1G 次,MLC NAND Flash 約 1K-10K 次,需要 wear-leveling 打散到不同的 erase-block 來延長壽命,適用的檔案系統有 JFFS2、YAFFS、UBIFS 等。MTD 軟體也可以通用在 block 裝置或 RAM,只是不做抹除動作。
比較:block 裝置是傳統硬碟的存取方式,以 512-byte 或 4096-byte 的 block (或稱 sector) 為單位,直接寫入不需要先抹除。block 裝置和 MTD 裝置的分割方式和適用的檔案系統不同。block 裝置分割資訊存在 MBR 或 GPT。Linux 將 數個 sector 合為 page,一般為 4096 bytes,跟 file system 及 buffer cache 的設計有關。適用的檔案系統有 ext2、ext3、等。
Flash 晶片可透過 FTL (Flash Translation Layer) 管理晶片變成 block 裝置,稱為 managed flash,包括 USB flash、SD/MMC card、SSD 等,但裡面的 flash 晶片仍有壞 erase-block 問題,雖然管理晶片會替換壞 erase-block,不適合非常頻繁的寫入。
raw flash 有 NOR 和 NAND 兩種。NOR flash 容量較小,直接定址每個 word 可以隨機存取,約 100K-1G 抹除次數。NAND flash 容量大,儲存空間是切成 erase-block,為減少所需要的位址線再切成更小的 page (大多 512-byte) 作為存取單位,需要處理壞 erase-block。SPI Flash 通常也是 raw flash,只是做成序列界面。
| 抹除 | 存取單位 | |
|---|---|---|
| 硬碟 | 不需要 | block |
| managed flash | 管理晶片自動處理 | block |
| NOR flash | MTD 軟體 | word |
| NAND flash | MTD 軟體 | page |
| RAM | 不需要 | word |
隨時都有可能沒經過 shutdown 程序而直接斷電,仍需要維持資料一致。一般檔案系統都設計用於有 buffer cache 的環境。
MTD 裝置的分割以 erase block 為集合,不用 MBR/GPT,使用 MTD 特定的方法決定位置和大小,開機時可 discovering。
MTD 裝置不能 loop
- erase NAND flash 的 MTD 分割。使用 flash_erase (erase one eraseblock) 或 flash_eraseall。如果分割用 JFFS2 檔案系統,建議用選項 -j 或 --jffs2,會將「clean-marker」寫到 out of band area,掛載時不需要 further 格式化。This is also necessary before you copy a filesystem image to the chip.
- https://openwrt.org/docs/techref/flash.layout
- http://events17.linuxfoundation.org/sites/events/files/slides/An%20Introduction%20to%20SPI-NOR%20Subsystem%20-%20v3_0.pdf
- cat /proc/mtd
- ls -l /dev
- 目前企業型的 SSD 都是 TLC 了,基本上也可以有 MLC 的耐用度,甚至更好,QLC 跟 PLC 比較慘一點,PLC 的寫入速度還可以比硬碟慢了。高速大容量的話至少需要 TLC,如果需要高耐用度的話還是 MLC,長期資料保存的話就是 SLC,QLC 跟 PLC 基本上寫速入速度跟硬碟不相上下甚至更慢。
•Provides char(/dev/mtdX) and block(/dev/mtdblockX) device support
•Abstracts flash specific properties like sector, page and ECC handling
•Wear and bad block handling using UBI
•Handles partitioning of flash storage space
•/proc/mtdlists all devices
沒有留言:
張貼留言