中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] »
作者:
标题: 一个磁盘分区链表管理工具 上一主题 | 下一主题
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『楼 主』:  一个磁盘分区链表管理工具

Hard Disk Partition Infomation Tools for DOS 1.0?
Copyright by WangRuiLin, Compile Date: 2006-10-24
E-mail: best_wrl@yahoo.com.cn & tswrl1115@163.com

Syntax:
  DPIT [Disk] [/L|/S|/C|/R] [FileName]
    Disk: 0-First Hard Disk, 1-Second Hard Disk, ...
    /L: List Disk Partition Info on Screen.
    /S: Save Disk Partition Info to File.
    /C: Compare Disk Partition Info with File.
    /R: Restroe Disk Partition Info from File.
    FileName: Disk Partition Infomation File.


磁盘分区信息管理工具,该工具可对整个分区链表进行
保存,由于磁盘分区表是一个由主引导纪录开始(也就
是通常所说的MBR)的链表,一旦链表的某一个中间环
节出现问题,则之后的分区将丢失,该工具可以备份整
个分区链表,一旦链表被破坏时,可以进行恢复。

参数说明:
Disk: 指明磁盘
      0-第一硬盘, 1-第二硬盘, 等等

/L: 显示磁盘分区信息(不需要文件名)
/S: 保存分区链表到文件,文件名由FileName指定
/C: 比较磁盘分区链表和保存在文件FileName中的磁盘链表是否一致
/R: 将保存在文件FileName中的磁盘链表信息恢复到磁盘
   (警告:如果你在备份磁盘链表后,改变过磁盘分区信息,
           请不要恢复,否则会引起数据丢失)
FileName: 文件名

例子:
DPIT 0 /l
显示第一硬盘的分区信息

DPIT 0 /S pt0.bin
保存第一硬盘的分区链表到文件pt0.bin

DPIT 0 /c pt0.bin
将第一硬盘的分区链表和保存在文件pt0.bin中的分区链表信息进行比较

DPIT 0 /R pt0.bin
由文件pt0.bin恢复第一硬盘的分区链表

该工具可配合 Diskrw 使用对磁盘任何位置进行读写
Diskrw 在这里:http://www.cn-dos.net/forum/view ... ghlight=%2B19951001

2006.11.1更新:
1 加入了对隐含分区的支持
2 可以同时保存分区链表和DBR信息
  dpit 0 /s disk0pt.bin /dbr disk0dbr.bin
  将分区链表保存到disk0pt.bin,将DBR信息保存到disk0dbr.bin。
3 查找算法优化

2006.11.16
程序中发现了一个BUG,网友weilong888提出的,现已修正。
请重新下载。
2006.11.17
bug fixed.
http://www.cn-dos.net/forum/viewthread.php?tid=24419&fpage=1

[ Last edited by 19951001 on 2006-11-18 at 03:53 AM ]

2006-10-25 04:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 2 楼』:  

程序限制:
1   最多处理10块硬盘,编号0-9
2   每块硬盘最多能够处理10个分区

tip:
1   如果你的机器上装有多块硬盘,可以使用命令:
     DPIT    /ALL      /L
    显示所有硬盘的分区信息
2  可以保存所有分区的 DBR 信息(不是分区表信息),DBR是分区的引导记录(一般情况位于分区偏移地址 0x3F 的位置)
    使用命令:
    DPIT  0  /S  db0.bin /DBR
    将第一硬盘的所有 DBR 信息保存到文件 db0.bin

[ Last edited by 19951001 on 2006-10-27 at 10:59 PM ]

2006-10-25 05:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cchessbd
高级用户





积分 525
发帖 222
注册 2006-8-28
状态 离线
『第 3 楼』:  

"如果你在备份磁盘链表后,改变过磁盘分区信息,请不要恢复,否则会引起数据丢失"---这个是说保存了分区信息?

DPIT  0  /S  db0.bin 保存了前面十个分区的引导记录?(每分区保存几个扇区?)
假如FAT32、NTFS、EXT2 是怎么保存的呢? 我不是很懂,麻烦楼主解释下。谢谢

2006-10-26 11:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 4 楼』:  

"如果你在备份磁盘链表后,改变过磁盘分区信息,请不要恢复,否则会引起数据丢失“ 这句话是说,如果你使用此程序保存了分区链表后,你又重新对硬盘进行过分区,这时当然不能用以前保存的来恢复了。

DPIT  0  /S  pt0.bin 是保存第一硬盘的分区链表,你的第一硬盘的分区链表有几个扇区,就保存几个扇区。

DPIT  0  /S  DB0.bin /DBR 是保存第一硬盘的DBR信息,你的第一硬盘的有几个分区
就保存几个扇区。

因为扇区层次来读取磁盘,对FAT32、NTFS、EXT2 的处理是一致的。

[ Last edited by 19951001 on 2006-10-27 at 11:00 PM ]

2006-10-27 22:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 5 楼』:  

程序更新:(见一楼)

更新内容为:将磁盘分区链表和保存在文件中的信息比较时如果不一致的显示:

如:

Compare Mismatch at:
  Disk: [0x004E327F]:[0x098] [0x61]
  File:  [0x000002A0]             [0xA1]

[0x004E327F]是磁盘的绝对扇区地址(磁盘扇区地址从0开始)
[0x098] 是扇区内的偏移地址
[0x61] 是本字节的内容

[0x000002A0] 是文件内的偏移地址(从0开始)
[0xA1] 是字节的内容

进行比较时只要遇到第一个不同的字节就停止。

2006-10-27 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 6 楼』:  

dpit 0 /s pt0.bin提示DONE,dpit 0 /c pt0.bin提示file size error。

2006-10-28 01:37
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 7 楼』:  

所保存的文件结构是这样的:
4个字节的地址
512字节的扇区内容

文件的最后一个字节是保存的扇区数量
0x01表示一个扇区 0x02表示二个扇区 .....

所以文件的 大小应该是(4 + 512)* N +1
N为最后一个字节内容
如果文件最后一个字节内容为0x03,那么这个文件大小应该是(4 + 512)* 3 +1 = 1549字节

2006-10-28 02:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 8 楼』:  

那我的硬盘有9个分区。怎么只有3.52K是不是应该是(4+512)*9+1=4645B呢?是不是dpit  0 /s pt0.bin 过程就是错的呢?

2006-10-28 04:30
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by weilong888 at 2006-10-28 04:30:
那我的硬盘有9个分区。怎么只有3.52K是不是应该是(4+512)*9+1=4645B呢?是不是dpit  0 /s pt0.bin 过程就是错的呢?

请说明一下你的分区类型?

如果你的 mbr 的分区表中有四个分区,但都是主分区的话,那么保存的文件只有 517 字节,而不是 516×4+1=2065字节。

[ Last edited by 19951001 on 2006-10-28 at 05:34 AM ]

2006-10-28 04:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 10 楼』:  

你有几块硬盘? 如果是一块硬盘有九个分区,你使用命令:
dpit 0 /l
显示一下

我在程序中可以识别的分区如下,你有不在如下类型的分区,程序将忽略,不过并不影响功能只是不对其他类型的分区表所在的扇区读写,因为我接触的目前是这几种,如果你有其他类型的分区,请把你保存的分区链表文件Email给我,我加入分区标志就可以识别了。
                    "DOS FAT12",
                     "Extended",
                     "DOS FAT16",
                     "HPFS/NTFS",
                     "Win95 FAT32",
                     "Win95 FAT16",
                     "Linux Swap",
                     "Linux Native",
                     "Linux Extended",
                     "Win95 Extended LBA"

[ Last edited by 19951001 on 2006-10-28 at 05:03 AM ]

2006-10-28 04:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 11 楼』:  

我的分区前8个是NTFS,最后一个是FAT32。应该是没有问题的。我是从usb-zip进入MSDOS71的。程序也是放在启动u盘的。

2006-10-28 05:15
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by weilong888 at 2006-10-28 05:15:
我的分区前8个是NTFS,最后一个是FAT32。应该是没有问题的。我是从usb-zip进入MSDOS71的。程序也是放在启动u盘的。

保存的分区链表的文件大小应该是:
516×N+1 - (主分区数量-1)×516

N为分区数量

如果你 mbr 中有3个主分区的话,就应该是你所说的文件大小。

[ Last edited by 19951001 on 2006-10-28 at 05:38 AM ]

2006-10-28 05:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 13 楼』:  

使用命令:
dpit 0 /s db0.bin /dbr
这时生成的文件大小应该是
  分区数量×516+1

2006-10-28 05:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 14 楼』:  

我的分区是三个主分区。一个扩展分区再分6个逻辑分区。

2006-10-28 06:23
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 15 楼』:  

我的文件pt0.bin是3613B。按楼主的算法也应该是3613B。应该是显示DONE啊。

2006-10-28 07:29
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: