Manage Block Storage volumes with the Linode API
The Linode API lets you create, delete, attach, detach, clone, and resize Block Storage volumes.
Before you begin
You need a Personal Access Token for the Linode API to complete the steps in this guide. See Manage personal access tokens for more information.
Store the token as a temporary shell variable to simplify repeated requests. Replace <Access Token>
in this example with your token:
export TOKEN=<token-string>
Create a Block Storage volume
Create a new Block Storage volume by making a POST request to the /volumes
endpoint. You can also automatically attach the new volume to an existing Compute Instance by passing the Compute Instance's ID when creating the volume.
-
List the Compute Instances on your account:
curl -H "Authorization: Bearer $token" \ https://api.linode.com/v4/linode/instances
Choose a Compute Instance from the returned list and copy its
id
andregion
values. -
Create a volume in the same region as the target Compute Instance. Use the ID of the target Compute Instance and adjust the size (in GB), region, set encryption to
enabled
ordisabled
, and label to the desired values:curl -H "Content-Type: application/json" \ -H "Authorization: Bearer $token" \ -X POST -d '{ "label": "my-volume", "region": "us-east", "size": 100, "linode_id": 1234567, "encryption": enabled }' \ https://api.linode.com/v4/volumes
The volume and Compute Instance must be in the same region.
-
Examine the response JSON object and copy the values in the
id
andfilesystem_path
fields:{ "linode_id":1234567, "label":"my-volume", "size":100, "updated":"2018-05-07T14:59:48", "created":"2018-05-07T14:59:48", "encryption": "enabled", "id":6830, "status":"creating", "region":"us-east", "filesystem_path":"/dev/disk/by-id/scsi-0Linode_Volume_my-volume" }
-
Query the volume using the
/volumes/$volume_id
endpoint to make sure it was successfully created:curl -H "Authorization: Bearer $token" \ https://api.linode.com/v4/volumes/$volume_id
If the
status
field in the response isactive
, your volume is ready to use.
Mount the volume
The API can't directly mount the new volume after it is attached. SSH into the Compute Instance and mount it manually:
-
Create a filesystem on the volume:
mkfs.ext4 $volume_path
-
Create a mountpoint:
mkdir /mnt/my-volume
-
Mount the volume:
mount $volume_path /mnt/my-volume
-
To automatically mount the volume every time your Compute Instance boots, add the following line to your
/etc/fstab
file:$volume_path /mnt/my-volume defaults 0 2
Attach and detach the volume
If you did not specify a Compute Instance when creating the volume, or would like to attach it to a different Compute Instance, use the /attach
and /detach
endpoints:
-
Detach the volume. Replace
$volume_id
with the volume ID from the previous section:curl -H "Authorization: Bearer $token" \ -X POST \ https://api.linode.com/v4/volumes/$volume_id/detach
-
Attach the volume to the new target Compute Instance:
curl -H "Authorization: Bearer $token" \ -H "Content-Type: application/json" \ -X POST -d \ '{ "linode_id": $linode-id }' \ https://api.linode.com/v4/volumes/$volume_id/attach
If a Compute Instance is not running and has more than one configuration profile, include a
config_id
parameter in the POST request to specify which profile to use. If you do not specify a profile, the first profile will be used by default.
Clone a volume
To copy all of the data in a Block Storage volume to a new volume:
curl -H "Authorization: Bearer $token" \
-X POST -d '{
"label": "new-volume"
}' \
https://api.linode.com/v4/volumes/$volume_id/clone
Delete a volume
Remove a volume from your account with a DELETE request. If the volume is attached to a Compute Instance, you will have to detach it before it can be deleted:
curl -H "Authorization: Bearer $token" \
-X DELETE \
https://api.linode.com/v4/volumes/$volume_id
Resize a volume
If you need additional space, you can increase the size of a volume through the API. It is not possible to reduce the size of a volume.
Pass the desired size (in gigabytes) using the size
parameter:
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer $token" \
-X POST -d '{
"size": 200
}' \
https://api.linode.com/v4/volumes/$volume_id/resize
After resizing the volume, you also need to resize the file system to accommodate the additional space. For instructions, see the last few steps on the Resize a volume guide.
Updated 27 days ago