学习Python开发数据恢复工具(1)

近期,由于业务需要,需要培养几个同事来做数据恢复工具开发。经过多方考虑,最终选择Python语言,一是库多,二学习难度低。本人也是第一次接触Python,和同事一起学习,把学习过程记录,共同分享。

所需Python内容

Python3 环境搭建
Python3 基础语法
Python3 基本数据类型
Python3 解释器
Python3 注释
Python3 运算符
Python3 数字(Number)
Python3 字符串
Python3 列表
Python3 条件控制
Python3 循环语句
Python3 迭代器与生成器

 

RAID0 示意图

数据被分成固定大小的块,本例使用64kb(128扇区)

按顺序写入到N块盘中。

  RAID0示意图
  DISK0 DISK1 DISK2 DISK3
block0 0 1 2 3
block1 4 5 6 7
block2 8 9 10 11
block3 12 13 14 15
block4 16 17 18 19
block5 20 21 22 23
block6 24 25 26 27

RAID0 数据重组工具源码

重组算法:

依次读取块大小(64k)的数据到缓存,然后顺序写到输出文件。

#  RAID0 重组工具源码
import os
print("磁盘阵列重组工具")
# 磁盘数量
diskcnt = input("输入磁盘数量:")
# 文件对象列表
disks = []
# RAID 0 块大小 128 扇区,每次读一个块
bufsize = 512 * 128
# 文件大小
maxsize = 0
# 磁盘读缓存列表
buflist=[]
#  打开文件
for disknum in range(0,int(diskcnt)):
    while True:
        tip = ("输入%d号磁盘路径:") % disknum
        diskpath = input(tip)
        if(os.path.exists(diskpath)):
            try:
                disk = open(diskpath, 'rb')
            except IOError:
                print('Error:没有找到 文件或打开文件失败')
                continue
            disks.append(disk)
            disksize = os.path.getsize(diskpath)
            if(disksize > maxsize):
                maxsize = disksize
            break;
        else:
            print("输入错误,重新输入")
while(True):
    outpath = input("输出文件路径:")
    try:
        outfile = open(outpath,'wb')
    except IOError:
        print('Error:没有找到 文件或读取文件失败')
        continue
    else:
        break
# 循环读取文件
# 此处使用缓存,今后可用配置文件控制读写
for block in range(0,maxsize//bufsize):
    # 清除缓存列表
    buflist.clear()
    #读取放到缓存
    for disk in disks:
         bufread = disk.read(bufsize)
         buflist.append(bufread)
    #缓存写入文件
    for i in range(0,len(buflist)):
        k = (disknum-block)
        outfile.write(buflist[i])
print("完成")

 

你可能感兴趣的:(Python数据恢复技术)