【问题标题】:Get HD/Partition serial number获取硬盘/分区序列号
【发布时间】:2015-02-04 20:49:30
【问题描述】:

当使用 Windows 时,我可以通过使用命令获得硬盘分区的(或多或少唯一的)序列号

GetVolumeInformation()

我的问题:Linux 有类似的东西吗?表示只有在有人格式化分区并且可以通过编程方式检索时才会更改的数字?

谢谢!

【问题讨论】:

标签: c++ c linux windows uniqueidentifier


【解决方案1】:

在 linux 中,你可以使用 blkid 命令来获取分区的 UUID:

# blkid /dev/sda1
/dev/sda1: UUID="15677362-cef3-4a53-aca3-3bace1b0d92a" TYPE="ext4"

此信息存储在特定分区类型(如 ext4、xfs)的格式中,并在重新格式化时更改。没有可用于未格式化分区的信息。

如果你需要从代码中调用它,调用 shell 来运行这个命令并不是最漂亮的方法,但它可以工作:

#include <stdio.h>

int main(int argc,char ** argv) {

  /* device you are looking for */   
  char device[]="/dev/sda1";

  /* buffer to hold info */
  char buffer[1024];

  /* format into a single command to be run */
  sprintf(buffer,"/sbin/blkid -o value %s",device);

  /* run the command via popen */
  FILE *f=popen(buffer,"r");

  /* probably should check to make sure f!=null */

  /* read the first line of output */
  fgets(buffer,sizeof(buffer),f);

  /* print the results (note, newline is included in string) */
  fprintf(stdout,"uuid is %s",buffer);

  }

【讨论】:

    【解决方案2】:

    您可以使用udev 获取设备的序列号。 (不过您需要知道设备名称)

    struct udev *context = udev_new();
    struct udev_device *device = udev_device_new_from_syspath(context, "/sys/block/sda");
    const char *id = udev_device_get_property_value(device, "ID_SERIAL");
    // Cleanup
    udev_device_unref(device);
    udev_unref(context);
    

    【讨论】:

      【解决方案3】:

      分区在 linux 中具有(至少)三个标识:

      • 原始设备标识符(想想cat /proc/partitions) - 这不是唯一的序列号
      • 分区的UUID - 可以通过blkid 找到,并存储在分区本身中。你也可以手动解析/dev/.blkid.tab——格式很明显。
      • 磁盘标签 - 也存储在分区中。例如:
      lsblk -o 名称、挂载点、标签、uuid 名称安装点标签 UUID sda ├─sda1 / 315eaf50-adcc-4f0d-b767-f008f3f1c194 ├─sda2 └─sda5 [交换] 1ff31705-f488-44a4-ba5f-e2fe9eff4b96 sr0

      其中,第二个最接近您想要的。要以编程方式阅读,请使用libblkid

      【讨论】:

        猜你喜欢
        • 2011-05-04
        • 2015-01-12
        • 1970-01-01
        • 2016-06-10
        • 2010-12-06
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        • 2010-10-15
        相关资源
        最近更新 更多