Can I programmatically interact with a volume on /dev?

Posted March 7, 2017 2.8k views
Ubuntu 16.04Block Storage

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?


These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Submit an Answer
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?

  • I’m not sure this answered the question? The VOLUME_ID of a volume from the API comes back as something like "id": "9c336365-d7da-11e8-be1e-0b58ac1620ba", which is not the by-uuid entry for that disk. From the cli inside a droplet, can the VOLUME_ID be determined before calling the API?