如果我只知道设备名称为“\.\PhysicalDrive0”且没有文件系统或卷标,如何从 Windows 中的 block 设备或原始磁盘获取大小?
我尝试了以下方法:
fd = os.open(r"\.\PhysicalDrive0", os.O_RDONLY)
os.lseek(fd, 0, os.SEEK_END)
它在 Linux 上运行良好,但在 Windows 上总是返回“OSError: [Errno 22] Invalid argument”。
我还尝试了 ctypes.windll.kernel32.GetDiskFreeSpaceExW(),但它似乎只适用于具有文件系统和分配的卷标的磁盘。
对原始磁盘或 block 设备执行此操作的正确方法是什么?
提前致谢。
最佳答案
使用 wmi
模块
import wmi
c = wmi.WMI()
[drive] = c.Win32_DiskDrive(Index=0)
print("The disk has %s bytes" % drive.size)
print("Or %s GB" % int(int(drive.size) / 1024**3))
磁盘有 320070320640 字节
或 298 GB
此代码在 WMI 接口(interface)中查询索引等于 0
的 Win32_DiskDrive
对象(因此只有一个结果,结果是 PHYSICALDRIVE0
)。 drive
对象有一个名为 size
的属性,它是一个包含驱动器大小(以字节为单位)的字符串。
关于python - 如何使用 Python 在 Windows 中获取原始磁盘或 block 设备大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374551/