型号: PXF0165
QNX支持多种文件系统。多数文件系统都是挂在指定路径下的资源管理器。QNX的文件系统有如下特点:
・文件系统能够动态启动和终了
・多个文件系统可能同时运行
・提供给程序一个与配置和文件系统数无关的、统一的路径空间和接口
・一个点上的文件系统对于其他点时透明的?
一、简介
1、Filesystem的种类
・Image:一个特殊的文件系统,在Image中提供各种模块。Procnto包含了一个Image文件系统和一个RAM文件系统。
・Block:操作块设备的文件系统,如硬盘、CD-ROM等。这包括QNX4,DOS,CD-ROM文件系统。
・Flash:操作Flash memory设备上的字符设备而设计的Nonblock-oriented文件系统。NOR设备用FFS3文件系统、NAND设备用ETFS。
・Network:通过网络提供的远程文件系统。包括NFS和CIFS(SMB)文件系统。
・Virtual:QNX Neutrino提供的一种前段虚拟文件系统,它位于其他资源管理器的前端,解压之前压缩的文件。
2、Filesystems as shared libraries
由于各文件系统有许多类似的地方,QNX Neutrino通过共享库(Shared libraries),实现代码重用的最大化。这也意味着添加一个文件系统的成本要远远低于预期。一旦最初的文件系统开始运行,添加一个新文件系统的成本很低。
多数的文件系统都基于块IO模块(Block IO module[io-blk.so])。这个模块也作为块设备的资源管理器。
io-blk支持内建RAM盘(Builtin RAM disk),可以通过命令行[blk ramdisk=size]创建。Builtin RAM disk比普通方式的效率高。
io-blk为所有子文件系统默认实现了一个缓存。这个缓存试图保存经常访问的快,已提供文件访问的性能。其中读操作是同步的,而写操作是异步的。程序可以将写操作变更为[file-by-file basis],这样就能够在潜在硬件后电源问题的环境下,保证较高的文件完整性。
二、常见文件系统
1、Image filesystem
每个QNX Neutrino都支持的一种只读的文件系统,它用来保存OS Image中的文件。它即可以保存可执行文件,也可以保存数据文件。
2、RAM filesystem
每个QNX Neutrino都支持的一种可读写的随机存储文件系统,它位于[/dev/shmem]。通常用于重启后不需要保存的系统中。
三、Power-Safe filesystem[QNX6 filesystem]
由[fs-qnx6.so]提供的一种可靠文件系统,它能够在电源异常时不丢失或损坏数据。
1、现存文件系统的问题
虽然现存的文件系统是为了设计一个强壮、稳定的系统,但是在灾难性异常(如电源异常)时丢失数据。如:
・每个硬盘上的扇区(sector)都包含一个4byte的正误代码(error-correcting code:ECC),它用来记录硬件的异常代码。当电源异常时,设备如果正在写磁盘,那么磁头会被移动已防止它们在异常中损坏,而留下一个写了一半的扇区。下次你去等这个扇区的时候,就会发生一个读取错误,旧的和新的内容都丢失了。可以通过一个有原子扇区操作的设备,但是通常这种设备都稀少而昂贵。
・一些文件操作会更新多个磁盘上的数据块。如unlink()操作,需要更新bitmap块、目录块和一个索引节点,这也意味着当正在更新时,如果发生电源异常就可能只被更新了一部分,从而导致文件系统的异常状态。虽然有些系统可能通过更新的顺序来降低这种状况发生的几率,但是并不能彻底消除这种异常。
・可以通过[chkfsys]来检查QNX4文件系统的完整性,但是它仅检查文件系统的结构和元数据,而不检查用户数据。并且如果磁盘很大或有很多目录,就会很慢。
・如果磁盘中的第一块损坏就不能加载(mount)到文件系统中。如果想修复的话,就必须对系统
2、Copy-on-write filesystem
Power-Safe filesystem不会覆盖现有的数据,它通过copy-on-write(COW)机制分配一个未使用的块进行操作。只有当所有操作完成时采用这个新块替代现有数据。系统中所有操作都是通过COW来操作的,包括元数据和用户数据。
COW方法的缺点:
・任何改变数据的操作都回引起双倍的数据块被拷贝和修改。
・当取得快照的时候,文件系统必须在提交superblock之前将所有块写入磁盘。
COW方法的优点:
・写入操作时与顺便无关。
・一个新块可以被分配到任何空闲,连续的磁盘上。
四、DOS Filesystem
QNX Neutrino通过fs-dos.so提供了对DOS格式磁盘的透明访问。由于DOS文件系统是一种陈旧而没有效率的系统,除非需要向其他机器传输DOS格式的文件,否则不建议使用。
五、Embedded transaction filesystem(ETFS)
ETFS为了嵌入式的固态存储设备(特别是NAND FLASH)实现的一种高可靠性文件系统。ETFS是个完全基于事务(transaction)的文件系统。每个针对用户数据或元数据的写操作都是基于transaction的,成功后反映数据,否则全部回滚。transaction中不会覆盖现存的数据,一个针对文件或目录的写操作都会写在一个未使用过的区域中。这是如果其中发生错误也不会影响即存的数据。
一些(log-based)文件系统也是不会覆盖现有的数据。但是ETFS做到了极致,它将transaction中的所有事情转化为log。ETFS是构建在对设备上的transactionlog的审查上。这种审查只是发生在启动时,为了加快启动时间牺牲了一定的稳定性,只是针对一部分数据作CRC检查。
事务(transaction)与设备中的位置无关,并且可以以任何顺序操作。可以从设备中读取一个transaction,可以将它们以不同的顺序写道另一个设备中。在大规模数据中,因为坏点可能出现在任何地方,所以这点显得尤其重要。这种机制也能够很好的支持NAND flash内存。NAND flash通过factory-marked的坏点可能出现在任何地方。
1、Inside a transaction
每个都包含一个信息头(Header)和一个数据块(data)。信息头中包括:
必须属性(与设备无关)
・FID:一个唯一的文件ID,来识别这个transaction。
・Offset:文件中数据块的偏移。
・Size:数据块的大小
・Sequence:一个递增的数字,以保证时间顺序
可选属性(与设备相关)
・CRCs:完整性检查数据(支持NAND、NOR、SRAM)
・ECCs:错误纠正(支持NAND)
・Other:预留位
2、Reliability features
ETFS是为了即使电源故障(甚至在flash写操作中)或快擦除下也能正常使用的文件。他支持:
・dynamic wear-leveling:Flash内存只容许固定次数(至少100,000)的擦除周期。ETFS会跟踪每个块的擦写次数。当选择使用一个块的时候,ETFS会试图延续这个擦写周期,这可能戏剧性的增加它的使用寿命。可能是一个过几天就要坏的快,在ETFS下可能还可以正常使用40年(感觉在吹牛!)。
・static wear-leveling:文件系统中通常包含大量的静态文件,它们只会被读取而不会被写入。而被这些文件占据的区域也就不会被擦写。如果一个flash中的多数区域都是这种静态文件,就会导致剩余包含动态数据的分区增加了发生error的几率。ETFS为了解决这种问题会将这些今天文件拷贝到一些过载的(over-worked)区域中。这即可以让那些过载的区域能够休息一下,以能够让那些很少擦写的静态区域补充到过载的擦写区域中。(有点好心办坏事的感觉)
・CRC error detection:每个Tansaction都被循环冗余码(Cyclic redundancy check:CRC)保护中,它能够在启动时快速判断是否是正确的数据,并且能够回滚错误或未完成的数据。CRC能够判断出电源异常时可能发生的多bit异常。
・ECC error correction:当有CRC异常时,ETFS能够通过ECC码去试图纠正、恢复数据。这个适合于NAND Flash内存,它可能会在普通运用时发生单bit的异常。ECC异常通常意味着Flash块可能变得脆弱了,这是ETFS会针对这个块进行刷新(Refresh)操作,将数据拷贝到新的块中,并擦除这个脆弱的块。
・read degradation monitoring with automatic refresh:每一次针对NAND Flash的读取操作都会消弱数据bit。多数设备在丢失数据之前支持的100,000的读取。ECC能够恢复单bit的异常,但是对于大规模的异常却无能为力。ETFS能够跟踪读取次数,并在这个极限值100,000次达到之前去刷新。
・transaction rollback:ETFS启动时会检查所有事务,并回滚或丢弃损坏和不完全的事务。这种回滚是为了处理电源异常而设计,它也支持多次嵌套的异常。ETFS是根据CRC码来判断买个事务的是否正确的。
・atomic file operations:ETFS在设备上实现了一个非常简单的目录结构,它容许在一个flash写操作中作变更。如,移动一个文件或目录到其他目录中,在其他系统需要多步才能完成,而在ETFS只需要一步。
・automatic file defragmentation:Log-based文件系统经常苦于磁盘碎片的困扰,因为每一次更新或写操作都会产生一个新的事务。ETFS通过写缓存(write-buffering)来合并一下小规模的写操作为一个大规模的试图减少因为小事务而长生的磁盘碎片。ETFS也会见时每个文件的碎片登记,并且会在后台作磁盘碎片整理。为了能够及时相应用户的访问,后台的碎片整理总是在用户请求后执行。
六、QNX 4 filesystem
QNX4文件系统是一个由(fs-qnx4.so)提供的高效文件系统,它与QNX4RTOS使用同样的磁盘结构。它通过基于指纹控制结构的位图分配方式去防止数据丢失:
・基于POSIX文件系统
・健壮性:所有敏感信息都写在磁盘上
・磁盘签名和特殊的key信息即使在磁盘损坏的时候也能恢复数据
・支持505文字的文件名
・支持多线程
・客户驱动的优先级
・与QNX4一致的磁盘结构
免责声明/版权申明 Passiontech
所有文章为网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果由您自己承担!
本站仅仅提供一个观摩学习的环境,将不对任何资源负法律责任。所有资源请在下载后24小时内删除。
若无意中侵犯到您的版权利益,请来信联系我们,我们会在收到信息三天内给予处理!