Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How get uuid of a device/partition in linux programatically?

Tags:

c++

c

linux

uuid

I am very much new to Linux programming.

My questions are:

  • Is there any way to read the UUID of a device or partition in Linux programmatically?
  • Is there any C/C++ API for user-space applications?

I found some commands sudo vol_id --uuid /dev/sda1, sudo blkid and ls -l /dev/disk/by-uuid/. But all of them are commands which need to run in a terminal. But I need to achieve this from a C/C++ program.

Can some one help me with this problem. (FYI: I need to read UUID of the root filesystem ("/") where Linux has been installed.)

Thank you in advance.

like image 948
user502814 Avatar asked Mar 13 '11 07:03

user502814


People also ask

How do I find the UUID of a partition?

Use the blkid command to see the UUID of all partitions. List the contents of the /dev/disk/by-uuid/ directory. Retrieve partition UUIDs with the udevadm command. The hwinfo command can also be used to retrieve the information, assuming that the program has already been installed on your system.

Does resizing partition change UUID?

Instead, you're supposed to delete a partition and create a new one with adjusted size. This does not destroy the data (partition layout is stored separately), but will generate a new UUID for the new partition.


1 Answers

The general approach would be:

  • find out what device your / is on by parsing /etc/mtab for example
  • go through the /dev/disks/by-uuid directory (using opendir/readdir/closedir) and find which one points to that device.

See the readlink function for getting the target of a symbolic link. You'll find plenty of code examples for parsing text files on this site or with your favorite search engine.

like image 148
Mat Avatar answered Nov 09 '22 13:11

Mat