如何通过程序删除磁盘的设备节点

Posted

技术标签:

【中文标题】如何通过程序删除磁盘的设备节点【英文标题】:How to delete a device node of disk by program 【发布时间】:2019-08-20 05:13:41 【问题描述】:

我正在开发从 Windows 系统中删除指定磁盘的 Windows 程序。 “移除”的动作并不意味着“物理地”拔掉硬盘。 这意味着程序从操作系统管理的设备节点中删除了一个磁盘。 我所说的“磁盘”是由 disk.sys(PhysicalDrive0, PhysicalDrive1..) 管理的磁盘

顺便说一下,在普通的Linux系统上,可以通过如下命令来完成。

echo 1 > /sys/block/sde/device/delete

我想通过程序在 Windows 上做同样的事情。

一旦我尝试通过在 DeviceManager 中删除磁盘来做到这一点。 实际上这种方法可以删除USB磁盘,但这种方法无法在不重新启动操作系统的情况下删除SATA磁盘。 我想在不重新启动的情况下执行此操作。

有什么办法吗?

【问题讨论】:

【参考方案1】:

我相信WMI 可能会对您有所帮助:

wmic logicaldisk delete (check with /? how to use it)

为了知道你现在有哪些,首先启动以下:

wmic logicaldisk list brief

【讨论】:

感谢您的帮助!我不知道。但是wmic logicaldisk 似乎管理卷(C:,D:) 和wmic diskdrive 似乎对应于我说的“磁盘”。所以我尝试执行这个命令。 wmic diskdrive where DeviceID="\\\\.\\PHYSICALDRIVE2" delete 但是没有正常完成(发生错误) 虽然在我的环境中错误信息不是英文,但表示该操作不被提供者支持。 一般WMIC 命令从命令提示符启动。您是否以管理员身份启动了命令提示符?

以上是关于如何通过程序删除磁盘的设备节点的主要内容,如果未能解决你的问题,请参考以下文章

换种思路解决日志占用磁盘空间问题

如何从正在运行的 Hadoop 集群中删除磁盘?

Jackrabbit Oak 删除节点不会释放磁盘空间

设备节点如何与设备驱动关联

udev删除dev下节点之前节点就已经没了?

如何通过 ioctl 调用或其他方式确定 SCSI 设备(例如 /etc/sda)是不是为磁盘?