Can I programmatically interact with a volume on /dev?

March 7, 2017 328 views
Block Storage Ubuntu 16.04

Hi there,

I'm writing a script to automate immutable deployments to droplets. Because these deployments are immutable, a new droplet is created for every deploy and the previous droplet is destroyed. State is stored on a Block Storage volume.

I can see that volumes can be referenced from /dev/by-id, /dev/by-label, /dev/by-path, and /dev/by-uuid. However, the uuids used in the by-uuid folder do not seem to be the same as the Volume ID returned by the DigitalOcean API.

My question is: given a Volume object obtained from the DO API, can I programmatically determine which device in /dev that Volume corresponds to?


1 Answer

Yes. The UUID is not used but the name you supply for the volume is used. For example:

root@sgp1-volume-test:~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root 9 Mar  3 17:31 scsi-0DO_Volume_volume-sgp1-01 -> ../../sda

In this case, the name given to this volume when it was created is the section after Volume_ so this disk was named volume-sgp1-01 when it was created.

  • What if there are two volumes with the same name attached to a given droplet? Is there a way for me to reliably differentiate between them?

Have another answer? Share your knowledge.