# flash partition fs overview ## NandFlash [nand flash](https://en.wikipedia.org/wiki/Flash_memory#NAND_memories) 对于NandFlash的认识尝试不做更多理解,只需要了解非易失存储、擦除寿命有限、通常是10K级别,同时写操作需要基于`Page`来。没有办法按照内存的存储基本单位字节来操作,由多个`Page`组成一个`Block` 每个 `Page`保留 一些字节用以 做ECC ( [error correcting code](https://en.wikipedia.org/wiki/Error_correcting_code) )校验。 通常按照如下分布。 ``` 32 pages of 512+16 bytes each for a block size (effective) of 16 KB 64 pages of 2,048+64 bytes each for a block size of 128 KB[42] 64 pages of 4,096+128 bytes each for a block size of 256 KB[43] 128 pages of 4,096+128 bytes each for a block size of 512 KB. ``` NandFlash 支持坏块管理,当上层应用通过逻辑块访问Flash的时候,驱动器控制器会把坏块重映射到好的物理块,基于此实现,FLash的一些块需要用来存储坏块信息。 或者系统会在上电时候读取出所有坏块信息存储到RAM。 绝大部分NAND 出厂就伴随着一些坏块信息,但是通常在出厂前都会进行一个坏块标记处理工序。 ## 分区 [Partitioning](https://wiki.archlinux.org/index.php/partitioning) ### 分区类型 GUIP和MBR。 #### MBR 先说MBR,很熟悉了。早些年折腾系统装机就详细了解过,区分主分区+扩展分区。因为首先分区表文件大小512字节,所以 主分区数量 m ,0 尽管INode的指针数据是唯一的,但是也只是相对该分区的文件系统。 如上绿部分作为INode 元数据,描述文件用户、文件类型、文件接近时间、文件大小等信息。 黄色部分描述文件的有效数据信息,包含数据位置和大小。保留15个数据块,其中12个直接描述文件数据指针,3个间接INode。我们通过可以12个直接数据块指针指定定位到文件数据位置。3个直接数据块其实描述的是iNode数据,我们需要通过这3个间接iNode数据的数据信息再定位到直接数据指针。之所以这样设计,使我们在使用文件系统过程中无可避免产生文件碎片化。 ### 文件系统修复 [Check and Repair Your Filesystem With fsck [Linux]](https://www.maketecheasier.com/check-repair-filesystem-fsck-linux/) 对于文件系统的损坏和损毁(corrupted or damage),我们应该做周期性的文件系统检查。 ### FSDebug [debugfs Command Examples](https://www.cs.montana.edu/courses/309/topics/4-disks/debugfs_example.html) ### Flash 文件系统的选择 [Flash file system](https://en.wikipedia.org/wiki/Flash_file_system) 由于Flash Page擦除的的物理特性。所以在Falsh的文件系统选择上有所有考虑。 https://www.systutorials.com/docs/linux/man/8-debugfs/)