如何获取包含 运行 Windows/Linux 的当前磁盘 number/name?

How to get current disk number/name which contains running Windows/Linux?

假设一台 PC 包含多个存储设备,并且我们有包含 2 个黑盒函数的 C++/Qt 实用程序(我们在这里不考虑它们的实现):

QString get_disk_serial(int drive_number); //for Windows 

QString get_disk_serial(const QString& device); //for Linux. For example, "/dev/sda"

我需要知道(使用 C++)当前会话中使用了哪个磁盘(哪个磁盘号是 active/what 设备名称处于活动状态)。在我的上下文中,活动磁盘是包含分区的磁盘,而分区又包含 运行 操作系统。

我担心你被困在非常微软式的思维方式中。

"The partition with the operating system" 在 Unix 机器上意义不大。您有 /boot 内核映像,/usr 用户空间工具和库,/opt 可选用户空间工具/库,/etc 所有设置...您需要所有这些(好吧,也许 /opt 除外),并且它们 可以 位于单独的分区上。 "the operating system"是哪一个?

并且 Unix 也不要求启动分区 "active"(即在分区 table 中标记为活动分区)。

我经常在(虚拟)服务器上工作,我什至无法看到 内核正在从中启动的分区,或者 /boot 未安装的系统在引导过程之后。然后是 Logical Volume Manager,此时事情变得 真的 有趣...

总而言之,"active partition" 在 MS Windows 之外根本没有意义。 (也许甚至不再存在了。)早在 1985 年,即使是 AmigaOS 也可以轻松地分布在多个卷中......("Please insert volume LIBS: in any drive.")


如果您认为自己知道构成 "the operating system" 的答案,您可以检查挂载 table 以查找文件系统层次结构的特定部分位于哪个设备上。然而,mount 命令的输出格式和挂载 table 的任何文件上引用的位置都是特定于平台的。 (/etc/mtabmount 在 Linux 上的输出是相同的,但是 /etc/filesystemsmount 在 AIX 上的输出完全不同,两者彼此 Linux 版本的东西。)