当前位置:   article > 正文

Python 直接读写硬盘扇区数据_python读写磁盘扇区数据

python读写磁盘扇区数据

可能你会认为, 使用Python读物理硬盘是一件复杂的任务, 需要调用较深的操作系统API。 

目录

基础知识

读取磁盘数据

写入磁盘数据

读写单个磁盘分区

需要注意的是, Python似乎并没有读取磁盘方面的库, 但可以直接用以下的方法。

基础知识

在"此电脑"的图标上右键, 点击"管理", 存储 -> 磁盘管理, 就可以对你电脑的磁盘数据结构一探究竟。

 磁盘、分区、驱动器的区别

1. 磁盘是直接存储数据的设备,例如机械硬盘、固态硬盘、U盘等,可以被划分为多个分区。

2, 分区是磁盘上划分的区域, 一个磁盘被分为多个分区 (如图)。常见的分区格式有NTFS、FAT32等。

3, 驱动器是被系统分配驱动器号(盘符)的分区,拥有驱动器号,如 g:\ 。并不是每个分区都有驱动器号。

读取磁盘数据

  1. disk = open(r"\\.\PhysicalDrive0","rb") # 打开磁盘0,PhysicalDrive不区分大小写
  2. # 读取第一个扇区, 也就是磁盘主引导记录, 1扇区为512字节
  3. print(disk.read(512))

 读取结果如下: 

  1. b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  2. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  3. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  4. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  5. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  6. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  7. *\xc3\xd2+\x00\x00\x00\x00\x02\x00\xee\xff\xff\xff\x01\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
  8. \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa'

前述读取的是0磁盘, 也就是第一个硬盘。需要读取其他硬盘, 只需将"Physicaldrive0"改成对应的数字即可。

注意: 一定要以管理员身份运行Python, 才有权限读写磁盘。(方法是: 在某Python IDE的图标上右键, 在菜单中选择"以管理员身份运行", 即可。期间若出现"允许某程序进行更改"的提示, 请选择"是"。)

写入磁盘数据

写入磁盘数据, 要使用读写模式( rb+ 模式) 打开磁盘。

  1. disk=open(r'\\.\physicaldrive2','rb+')
  2. disk.seek(512) # 偏移量, 这里是第2个扇区
  3. disk.write(b'\x00'*512)
  4. disk.close()

读写单个磁盘分区

读写磁盘分区和读写硬盘大致相同, 但需要将"physicaldrive"改成分区对应的驱动器号。另外, 没有驱动器号的隐藏分区不能通过这种方式读写。

  1. # 打开C盘分区
  2. disk = open(r'\.\C:', 'rb')
  3. # 读取第一个扇区数据
  4. print(disk.read(512))
  5. # 读到的是PBR, 分区引导记录

 写入分区的代码: 

  1. # 以读写模式打开磁盘分区
  2. disk = open(r'\\.\g:', 'rb+')
  3. with open(r"d:\分区PBR备份.txt","wb") as f:
  4. f.write(disk.read(512)) # --备份分区开第1个扇区数据--
  5. disk.seek(0) # 将文件指针移回起始位置
  6. # 写入, 这一步不会影响磁盘数据
  7. disk.write(b'\x00'*512)
  8. # 将数据真正写入磁盘
  9. disk.close()

执行后会发现, 分区G: 被成功破坏。此时, 虽然分区G: 的文件无法被访问, 但原始数据仍然可以用打开分区的方式读取。

还原数据用的代码: 

  1. disk = open(r'\\.\g:', 'rb+')
  2. with open(r"d:\分区PBR备份.txt","rb") as f:
  3. disk.write(f.read())

总结, 前面介绍了Python读写整个物理硬盘, 和单个驱动器的技巧。
读写磁盘原始数据有广泛的用途, 例如分区数据备份, 数据恢复等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/581179
推荐阅读
相关标签
  

闽ICP备14008679号