问题标签 [disk-partitioning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
101602 浏览

linux - 如何找出目录或文件所在的挂载/分区?(Linux 服务器)

是否有 Linux 命令可以轻松找出目录或文件所在的分区/挂载?

(这可能是一个 RTM 问题,我为提出这个问题感到内疚,但不知何故,我目前在 google 上找不到一个好的答案..)

0 投票
0 回答
3416 浏览

usb - 使用 WMI 和 WMQ 从 SERVICE 类型 USBSTOR 的 Win32_PnPEntity 获取逻辑磁盘和分区信息

我正在检测我们的专有 USB 设备何时连接到 PC。当我们检测到这一点时,我们会得到相关的Win32_PnPEntity。我们希望将此Win32_PnPEntity用作以下信息的来源:
- USB 描述符 VID、PID、REV、固件版本。
- 逻辑磁盘驱动器卷和分区信息以获取驱动器号信息。

我遇到的问题是试图弄清楚如何使用 WMI 和 WMQ 从Win32_PnPEntity获取逻辑磁盘和分区信息。Win32_PnPEntity属于服务类型USBSTOR (我认为是USB 存储?)

以下是我目前经历的过程的描述:

我使用事件观察器监听Win32_USBControllerDevice以检测 USB 设备何时与 PC 连接或分离。我使用以下查询来限制事件发生的内容:

“SELECT * FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA
'Win32_USBControllerDevice' AND
TargetInstance.__RELPATH LIKE '%DeviceId=%VID_1111%'”

当此事件发生时,我拉出“ Win32_USBControllerDevice.Dependent ”属性并拉出“ DeviceId ”值。然后,我将这个“ DeviceId ”值与Win32_PNPEntity类一起使用来获取关联的实例。

这就是事情对我来说变得棘手的地方......

我需要找到与Win32_PnPEntity实例相关的Win32_DiskDrive 。我需要这个实例来获取卷信息,这样我就可以获得每个分区分配的驱动器号。但我不知道如何到达它。

我经历了这个过程,因为Win32_PnPEntity提供了 VID、PID 以限制事件侦听和搜索……但它也提供了我需要的固件版本。所以从这一点开始,我想获得Win32_PnPEntityWin32_DiskDrive

任何输入将不胜感激。

--- 更好地描述问题的额外信息:

到目前为止我的工作步骤如下:
- 收听“
Win32_USBControllerDevice”的“__InstanceModificaitionEvent” - 从“__InstanceModificaitionEvent”的“TargetInstnace”获取“Win32_PnPEntity” - 从“Win32_PnPEntity”
获取“DeviceId” ' 其中包含PID、VID信息。

我现在遇到的问题是试图找到 'Win32_LogicalDisk' AND/OR 'Win32_DiskDrive' AND/OR 'Win32_DiskPartition' 或其他一些 ASSOCIATOR 或 REFERENCES 链接到已为“Mass Storge”实例分配的 USB 设备所连接的驱动器号.

下面的“图表”描述了我能想到这个问题的最佳方式:

我想要做的是弄清楚如何从 USB 设备的“Win32_PnPEntity”表示到“Win32_DiskDrive”表示。

以下是我在连接设备时运行的 powershell 脚本。它为我提供了属于 USB 设备的所有实例。我知道它们属于一个设备,因为我只连接了其中一个设备,并且通过我们对 USB 描述符的自定义编辑,我知道会发生什么。


PS C:\Users\USER.DOMAIN> gwmi Win32_PNPEntity |? { ($_.DeviceId -match 'VEN_MYCOMPANY&') -or ($_.DeviceId -match 'VID_XXXX')}

__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="USB\VID_XXXX&PID_0001\YYYY"
__PROPERTY_COUNT : 24
__DERIVATION : {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : BYDEFAULT
__NAMESPACE : root\cimv2
__PATH : \BYDEFAULT\ root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_XXXX&PID_0001\YYYY"
可用性:
标题:USB 大容量存储设备
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000}
CompatibleID : {USB\Class_08&SubClass_06&Prot_50, USB\Class_08&SubClass_06, USB\Class_08} ConfigManagerErrorCode
: 0
ConfigManagerUserConfig : False
CreationClassName : Win32_PnPEntity
Description _X USB Mass Storage Device ErrorCleared : ErrorDescription : HardwareID : {USB\VID_XXXX&PID_0001&REV_0001, USB\VID_XXXX&PID_0001} 安装 日期 : LastErrorCode : 制造商 : 兼容的 USB 存储设备







名称:USB 大容量存储设备
PNPDeviceID:USB\VID_XXXX&PID_0001\YYYY
PowerManagementCapabilities:
PowerManagementSupported:
服务:USBSTOR
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:BYDEFAULT

__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#"
__PROPERTY_COUNT : 24
__DERIVATION : {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement }
__SERVER : BYDEFAULT
__NAMESPACE : root\cimv2
__path:\ bydefault \ root \ cimv2: win32_pnpentity.deviceid =“
wpdbusenumroot \ umb \ umb \ umb \ 2&37c186b&0&storage#卷#dabf3de3f69a} CompatibleID : {wpdbusenum\fs} ConfigManagerErrorCode : 10 ConfigManagerUserConfig : False CreationClassName : Win32_PnPEntity Description : MYCOMPANY - Storage DeviceID : WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0# 错误清除:









ErrorDescription :
HardwareID :
InstallDate :
LastErrorCode :
Manufacturer : MYCOMPANY
Name : ZZZZ
PNPDeviceID : WPDBUSENUMROOT\UMB\2&37C186B&0&STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#
PowerManagementCapabilities :
PowerManagementSupported :
Service : WUDFRd
Status : Error
StatusInfo :
SystemCreationClassName : Win32_ComputerSystem
系统名称:默认

__GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}"
__PROPERTY_COUNT : 24
__DERIVATION :{CIM_LogicalDevice,CIM_LogicalElement,CIM_ManagedSystemElement}
__SERVER:BYDEFAULT
__NAMESPACE:root\cimv2
__PATH : \BYDEFAULT\root\cimv2:Win32_PnPEntity.DeviceID="STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}"类
可用性 :{
标题:
71a27cdd-812a-11d0-bec7-08002be2092f}
CompatibleID:
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_PnPEntity
描述:通用卷
DeviceID:STORAGE\VOLUME_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_50#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
错误已清除:
错误描述:
HardwareID:{STORAGE\Volume}
InstallDate:
LastErrorCode:
制造商:Microsoft
名称:通用卷
PNPDeviceID:STORAGE\VOLUME_??_USBSTOR#DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678#YYYY&0#{53F56307-B6BF-11D0-94F2-0mentCapSupportedPowerCapabilities
:管理
EFB8B9 }
服务:volsnap
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:BYDEFAULT

GENUS : 2
__CLASS : Win32_PnPEntity
__SUPERCLASS : CIM_LogicalDevice
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_PnPEntity.DeviceID="USBSTOR\DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0"
__PROPERTY_COUNT : 24
__DERIVATION : {CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : BYDEFAULT
__NAMESPACE : root\cimv2
__PATH : \ BYDEFAULT\root\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0"
可用性:
标题:MYCOMPANY ZZZZ - 存储 USB 设备
ClassGuid:{4d36e967-e325-11ce-bfc1-08002be10318}
CompatibleID:{USBSTOR\Disk, USBSTOR\RAW}
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_PnPEntity
描述:磁盘驱动器
Device_ID:USBSTOR_MYCOMPANY&VEN -_STORAGE&REV_5678\YYYY&0
ErrorCleared :
ErrorDescription :
HardwareID : {USBSTOR\DiskMYCOMPANY___ZZZZ_-_Storage5678, USBSTOR\DiskMYCOMPANY___ZZZZ_-存储, USBSTOR\DiskMYCOMPANY
, USBSTOR\MYCOMPANY___ZZZZ_-_Storage5...}
安装日期:
LastErrorCode:
制造商:(标准磁盘驱动器)
名称:MYCOMPANY ZZZZ - 存储 USB 设备
PNPDeviceID:USBSTOR\DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678\YYYY&0
PowerManagementCapabilities:
PowerManagementSupported:
服务:磁盘
状态:OK
StatusInfo:
SystemCreationClassName:Win32_ComputerSystem
SystemName:


上面的结果集显示了很多信息。

结果 1 -“服务类型”为“USBSTOR”。这是我在收听“__InstanceModificaitionEvent”时要使用的 Win32_PnPEntity,因为它为我提供了 VID 和 PID。
结果 2 - 是我不感兴趣的复合设备表示。
结果 3 - 'SERVICE TYPE' 是 'volsnap'。这是体积实体,我对此很感兴趣。
结果 4 -“服务类型”是“磁盘”。这是磁盘实体,我对此感兴趣。

如何获得“结果 1”和“结果 3”和/或“结果 4”之间的关系?

我曾尝试使用“Win32_PnPDevice”关联类,但它似乎并没有让我达到我需要的程度。我是这个 powershell WMI 和 WMQ 环境的新手,所以很可能我没有正确使用“Win32_PnPDevice”。

我运行以下查询来确定相关“Win32_PnPDevice”实体的“SameElement”和“SystemElement”属性上的内容:

gwmi Win32_PNPDevice |%{[wmi] ($ .SameElement )} | 选择 {$ .Name, $.Description, $ .DeviceId, $_.Status}
gwmi Win32_PNPDevice |%{[wmi] ($ .SystemElement )} | 选择 {$ .Name, $.Description, $ .DeviceId, $_.Status}

结果如下:

Win32_PNPDevice.SameElement - {PHYSICALDRIVE1, 磁盘驱动器, PHYSICALDRIVE1, OK} Win32_PNPDevice.SystemElement - {MYCOMPANY ZZZZ - 存储 USB 设备, 磁盘驱动器, USBSTOR_DISK&VEN_MYCOMPANY&PROD_ZZZZ_-_STORAGE&REV_5678_YYYY&0, OK}

Win32_PNPDevice.SameElement - {USB 海量存储设备,USB 海量存储设备,USB_VID_XXXX&PID_0001_YYYY,OK}
Win32_PNPDevice.SystemElement - {USB 海量存储设备,USB 海量存储设备,USB_VID_XXXX&PID_0001_YYYY,OK}

也许我错误地使用了“Win32_PnPDevice”类,但似乎我无法将“Win32_PnPEntity”连接到“Win32_DiskDrive”......

我希望这些额外的信息能更好地描述我的问题。

0 投票
4 回答
10571 浏览

c++ - 获取 Windows 上的分区列表

目标

我正在将一个文件系统移植到 Windows,并且正在为 mounter 可执行文件编写一个更像 Windows 的界面。这个过程的一部分是让用户找到一个分区并选择一个驱动器号。最终,分区的选择必须导致我可以使用 、 或类似打开CreateFile()open()东西fopen()

潜在客户

Windows 似乎围绕着卷的概念展开,这似乎与磁盘不太相似,并且只发生在已经挂载的文件系统上。

我拥有的有希望的潜在客户包括:

但是,这些都以卷或偏移量结尾,而不是/dev/sda1我所追求的特定于分区的样式句柄。

这个问题是在一个非常相似的事情之后,我认为是赏金,直到我观察到 OP 是在物理磁盘名称之后,而不是分区之后。这个答案包含一种暴力破解分区名称的方法,我想避免这种情况(或查看包含可能路径边界的文档)。

问题

我想要:

  • 更正 Windows 中未挂载分区的术语和文档。
  • 可靠地检索所有可用分区的有效且记录在案的方法。
  • 最接近 Linux 中可用的分区文件抽象,其中所有 IO 都绑定到打开的分区的磁盘的适当区域。

更新0

虽然主要目标仍然是打开原始分区,但似乎解决方案可能涉及首先获取每个磁盘驱动器的句柄,然后依次使用该句柄来获取每个分区。需要如何枚举所有磁盘驱动器(即使是那些尚未安装卷的磁盘驱动器)。

0 投票
5 回答
1057 浏览

c# - C# write to ext2 linux partition from Windows

I'm quite new to C# and I need to write a file (grub) on an EXt2 linux partition from windows 7.

What is the good way to do such thing? Do I need to mount the partition with external program?

0 投票
1 回答
2023 浏览

windows - 以编程方式创建可引导的 NTFS/FAT 分区 Windows XP 到 Windows 7

我正在尝试在 Windows 中创建可引导分区。我需要能够从 Windows XP 到 Windows 7 执行此操作。理想情况下,我可以针对 FAT32 和 NTFS 执行此操作,具体取决于设备是小于 32 GB (FAT32) 还是大于 (NTFS)。

在 Vista 和 7 上,我有一个可以使用 diskpart.exe 执行此操作的脚本,但这在 Windows XP 上不起作用,因为在 diskpart.exe 中没有公开创建分区。Windows XP diskpart 的另一个问题是 USB 拇指驱动器通常不被列为驱动器(可能是因为它们是“可移动的”)。

所以我的主要需求是,我可以使用 DeviceIoControl 或其他一些 API 来创建可启动分区,并让这种方法在 Windows XP 到 Windows 7 中都有效吗?如果我绝对必须为 Pre-Vista 和 Vista+ 提供不同的解决方案,那也没关系。

谢谢你。

0 投票
3 回答
1676 浏览

java - 是否可以使用 Java 格式化记忆棒、笔式驱动器或磁盘?

我想创建一个多平台实用程序来格式化/擦除记忆棒、磁盘等。

在Java中可以做到这一点吗?还是我需要为每个操作系统平台调用本机方法?

0 投票
1 回答
861 浏览

windows - 如何在 Windows 中以 Linux 风格 /dev/sdXY 打开分区?

如何在 Windows a la Linux 风格 /dev/sdXY中打开分区?目前我正在打开\\\\.\\PhysicalDrive%d然后调用DeviceIoControl(IOCTL_DISK_GET_DRIVE_LAYOUT, ...)以获取分区布局,并存储包含文件系统的区域的偏移量和大小。在我的代码中,我将设备上的 IO 操作偏移到分区的偏移量。

此外,如何消除明显的同步行为?Windows 上的物理驱动器原始设备上的操作非常缓慢,我希望操作系统在可能的情况下进行缓存。

0 投票
3 回答
2941 浏览

c++ - Linux c++:api 与 /proc 文件?

我正在开发一个应用程序来收集和发送各种系统信息(分区空间/空闲、笔记本电脑电池信息等)。我以直接 c++ api 的形式获取这些信息并没有取得多大成功。尽管它都可以通过 /proc (或类似)中的文件获得。

所以 - 我想知道在我的 c++ 应用程序中读取/解析这些文件是否是获取此信息的适当方式,还是我应该继续尝试发现 API?(注意:我正在使用 statvfs )。

到目前为止,在 Win32 中收集此类信息似乎更容易。似乎很奇怪。

0 投票
3 回答
4980 浏览

delphi - 从 PhysicalDrive 开始映射分区

我想映射 Windows 中所有驱动器的所有分区(那些尚未映射的分区)。我的意思是我想为他们每个人分配驱动器号。我知道您可以使用 FindFirstVolume、FindNextVolume、FindVolumeClose 来做到这一点,但在某些情况下您无法使用它们。我尝试使用 QueryDosDevice,同样的事情。

这个想法是从 \.\PhysicalDrive[n] 开始,找出分区并映射它们。我知道这是可行的,因为我看到了一个可以做到这一点的程序。但我不喜欢它,因为它也映射隐藏分区。

有人知道方法吗...?谢谢你。

0 投票
1 回答
149 浏览

windows-xp - 在 Windows XP 中可以访问哪些分区类型 (00..FE)?

从 PhysicalDrive 开始映射分区时,我使用了一个代码来挂载某种类型的分区 [0, 1, 6, 7, 11, 12, 114]。我想扩展所有可以访问的分区的范围。我发现了这个: http: //www.win.tue.nl/~aeb/partitions/partition_types-1.html 谁能告诉我在没有另一个程序的帮助下可以在 Windows XP 上访问哪个?

谢谢你。