WINDOWS磁盘分区恢复软件的编写(上)

一、使用到的工具

  1. testdisk -- 需下载

2. diskpart 

  3. devcon -- 需下载

二、目标:run.bat 磁盘序号 (磁盘序号可在磁盘管理器中查看)

三、实现步骤

        1. testdisk 中的磁盘名称形式为/dev/sdX,其中X为[a-z],故需先将磁盘序号转换成testdisk 中磁盘名称的形式。可使用for /f  %%i in ('command') do (set num=%%i)实现,command为转换磁盘序号[0-25]到[a-z]的小程序。


2. 使用testdisk进行恢复。命令:testdisk_win  /debug /log /cmd /dev/sdX partition_i386,analyse,write

注意点:testdisk write分区之后通过管道自动输入Y,网上的方法echo Y|command 有时不能正常使用,最好使用type yes.txt|command,yes.txt中多保存几个Y。

更新1:可用testdisk_win  /debug /log /cmd /dev/sdX partition_i386,analyse,noconfirm,write 替代。


  3. 获取磁盘分区数量。使用diskpart。

echo select disk X > %GET_PART_QUANTITY_SCRIPT%
echo list partition >> %GET_PART_QUANTITY_SCRIPT%
for /f "tokens=1,2 delims= " %%m in ('diskpart /s %GET_PART_QUANTITY_SCRIPT% ^|findstr /r /c:"分区 [0-9]"') do (
set /a PartNum=%%n
)

4. 重新分配卷标。跟第3步类似。


四、疑难问题

        1. XP下需要重启系统。

分析:实际上是重启的磁盘驱动器,使用devcon重启磁盘驱动器即可。根据系统版本(ver | findstr "5.1")特殊处理。

命令:devcon enable "@DISK_ID" devcon disable "@DISK_ID" devcon enable "@DISK_ID", 三个操作之间最好sleep几秒钟。

    这里的难点是获取对应磁盘序号的DISK_ID,通过解析devcon status =DiskDrive输出实现。


2. WIN7下非管理员运行CMD,无法通过管道向testdisk 及 diskpart 传输数据。

分析:本想使用runas解决,后发现WIN7未激活,激活之后CMD默认以管理员打开。


五、 遗留问题

1. 无法按时间一步一步恢复。留待下篇解决。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值