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 、加载文件系统

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值