QNX4⽂件系统与⽂件系统的恢复
QNX4⽂件系统与⽂件系统的恢复
QNX4 ⽂件系统是QNX Neutrion 默认的操作系统,它使⽤与QNX4 ⽂件系统⼀样的磁盘结构,由fs-qnx4.so 提供,当使⽤devc-* 加载QNX4 ⽂件系统时⾃动加载。它使⽤(extent-based) ,带指纹的位图分配⽅式,有效防⽌了数据丢失,并且更容易恢复。
基于POSIX ⽂件系统
健壮性:所有敏感信息都写在磁盘上
磁盘签名和特殊的key 信息即使在磁盘损坏的时候也能恢复数据
⽀持505 ⽂字的⽂件名
⽀持多线程
客户驱动的优先级
与QNX4 ⼀致的磁盘结构
⼀、QNX 4 disk structure
1 、Partition components
⼀个QNX 4 ⽂件系统可以占据⼀整块磁盘( 如软盘) ,也可以是磁盘上的⼀个分区。QNX 4 ⽂件系统在⽤命令dinit 初始化⽂件系统时创建以下结构:
loader block [ 加载块] :磁盘分区中的第⼀数据块。它包含了给BIOS 加载⽤的引导代码,并从分区中加载OS 镜像。但磁盘中不包含分区是,就是磁盘中的第⼀个物理块。
root block [ 根块] :它是分区中的第⼆个块。它有⼀个⽬录结构,并包含如下⽂件:The root directory of the
filesystem(usuall /) :⽂件系统的根⽬录( 通常是/)
/.indoes
/.boot :通常被引导的OS 镜像就存储在这个⽂件中
/百度数据恢复
.altboot :也可以⽤于存储替代的OS 镜像
bitmap blocks [ 位图块] :⼀组rook block 之后的连续块。它包含了这个分区的⼀个为映像。⼀bit 对应分区中的⼀块( 通常为2M) 。当这个bit 为0 时表⽰这个块没有被使⽤。
root directory [ 跟⽬录] :⼀个普通的⽬录,但是包含如下特性。它包含了如下以下特定⽂件:
①/. 和/.. :⼀个指向跟⽬录的连接
②/.bitmap :⼀个包含分区位图映像的只读⽂件( 同bitmap block) 。
③/.inodes :⼀个inode 对象的集合。第⼀个对象保留⽤于信息区。第⼀位是IamTHE.inodeFILE 。在软盘/RAM 中占⼀块,在磁盘中占16 块。
④/.logfilenames :⼀个可选⽂件,⽤于保存超过48 个字符的⽂件名
⑤/.boot :系统镜像
⑥/.altboot :系统替换镜像
other directories ,files ,free blocks ,etc :其他⽬录、⽂件、空闲块,等
2 、Directories[ ⽬录]
⼀个⽬录是⼀个普通的⽂件,这个⽂件中包含了⼀组⽬录对象。
通常第⼀对象是/. ⽂件,第⼆个是/.. ⽂件等。每个⽬录对象不是对应了⼀个⽂件,就是指向了/.inodes ⽂件中的⼀个对象。
3 、Links
如果⽂件名超过16 个字符,或者它是⼀个指向其他⽂件的链接,他就会被描述为⼀个特殊格式的⽬录对象。
4 、Extent blocks
当⽂件信息需要扩展时使⽤Extent blocks 。
5 、Files
⽂件和扩展⽂件是⼀组由⽬录/inode 对象描述的磁盘块。在Neutrino 中通常为以下结
构:
⼆、File system
1 、Extents
在QNX 4 ⽂件系统中,普通的⽂件和⽬录存储在⼀组连续的磁盘块上。保持这个⽂件的⽬录对象(directory entry) 会跟踪这个扩展块。⽂件系统会⽤⼀个链表保存这个extent 的信息。当⼀个⽂件需要更多空间时,⽂件系统会试图连续扩展磁盘。如果不⾏,就会在其他地⽅分配⼀个新的extent 。⽂件系统会分配⽐要求的空间要⼤得空间,以防⽌多个⽂件同
时写时分配了多个不连续的空间。当⽂件关闭时,多余的空间会被释放。
2 、健壮性
写⽂件时,多数⽂件都会先缓存在内存中,⼀定的延迟后在写⼊磁盘。⽽像⽬录更新、txtent blocks 、bitmap 等会⽴即写⼊磁盘以防⽌⽂件系统的损害。
三、⽂件系统维护⼯具
1 、fdisk
Fdisk 能够创建和维护硬盘上的分区。这个分区信息能够和其他系统共⽤,也可以⽤其他版本的fdisk 来维护。如果分区loader block 损害或丢失,fdisk 能够重新建⼀个。
建议备份所有分区表的信息。
2 、dinit
Dinit 能够创建loader block 、root block 、bitmap block 、root directory 、/.inodes file 、/.longfilename file 。如果磁盘的最初⼏个块坏了,可以使⽤dinit –r 去恢复,然后调⽤chkfsys 。
3 、chkfsys
Chkfsys 是QNX 系统中主要的⽂件系统维护⼯具,它能够:
检查整个分区中的⽬录结构,报告任何问题。如果可能就能够修复。
确定所有的磁盘分配
可以重写/.bitmap ⽂件
只有但root block 可⽤是可能使⽤chkfsys 。如果root block 已经损害可以尝试使⽤dinit 恢复。
4 、dcheck
dcheck 通过读取所有磁盘块来查坏块。当制定-m 参数时,dcheck 会将坏块从bitmap 中删除。当dcheck 发现坏块时,会将其写⼊/.bad_blks ⽂件中。可以多次运⾏dcheck ⽤以增加发现坏块的⼏率。
5 、zap
zap 能够删除⼀个⽂件⽽不释放对应的磁盘。当⼀个directory 已经损坏后两个⽂件同时使⽤了同⼀块磁盘时,可以使⽤zap 。
6 、spatch
当磁盘上的⽂件或⽬录丢失时,通过chkfsys 也知道⼀个关键的⽂件或⽬录没有被恢复,就可以使⽤spatch 来恢复数据。Spatch 能够直接浏览磁盘,以解决问题。使⽤spatch 之前必须理解QNX4 ⽂件系统的磁盘构造。
四、磁盘与⽂件的恢复
1 、使⽤chkfsys
通常chkfsys 需要⽂件系统空闲,并且没有⽂件被打开。Chkfsys 扫描整个磁盘,构建⼀个bitmap 并验证所有⽂件和⽬录的完整性。当扫描结束后会将⽣成的bitmap 与⽂件系统的bitmap 进⾏⽐较,如果⼀致就结束验证;如果不⼀致就会询问是否需要覆盖。在扫描的过程中chkfsys 也可以解决以下问题:
unbusy ⽂件:正在写操作时系统崩溃产⽣的⽂件
确定所有⽂件⼤⼩
2 、何时使⽤chkfsys
建议在⽇常维护过程中使⽤chkfsys 。如每次启动的时候。⽽当系统崩溃、电源中断、异常重启时,运⾏chkfsys 就显得特别重要,它嫩购验证系统是否有⽂件损害。
不建议在运⾏中的系统中执⾏chkfsys ,如果必须执⾏就应该加上-f 参数。
3 、从坏块中恢复数据
电源断电或设备问题都会导致坏块,在⼀些情况下只是读出数据并重新写⼊就有可能短时间内恢复数据,这是可以将数据备份到其他地⽅。这时可以通过spatch 命令去读取这些坏块上的数据,并通常都能够再重新写⼊。同时spatch 也会重写CRC 码让这些块恢复正常。然后就可以将这些⽂件复制到其他地⽅。再⽤zap 命令消除这个损坏的⽂件。
五、⽆法启动时的处理
1 、试图从CDROM 或⽹络启动
2 、试图启动硬盘驱动。
3 、执⾏fdisk
4 、加载⽂件系统

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。