Extending Blockstorage

    Extending Storage Volume

    You may want to extend (grow) your storage volume if you are running low on disk space. This is currently an "Offline" operation which means you will need to unmount and detach your volume from your server. The safest way to do this by powering off the server that your volume is attached to. This is also currently an API only feature for the time being. Also, although a lot of the information below will be easily gatherable thought the Packet Portal, we'll be using the RestAPI for this procedure.


    • We will be using curl and jq in these examples, please ensure these are installed and working properly
    • Ensure you have an API token, this can be generated in the Packet Portal by clicking the very top right drop down, and selecting "API Keys"

    Set your API token to a variable


    Find your project id

    curl \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' | \
        jq '.projects[] | "\(.name)   ---   \(.id)"'

    You will see output similar to:

    "My best project  ---   80013314-9995-404d-b884-46650fce1510"
    "My mediocre project   ---   794d20f6-bb54-4731-8ee0-6eda608de285"
    "My worst project   ---   30fae166-93d2-4272-ba97-1a5b727a88ef"

    The UUID off to the right (after ---) will be your project's id.

    Record your project's id into a variable


    List all volumes in the project selected above

    curl$PROJECTID/storage \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' | \
        jq '.volumes[] | "\(.description)   ---   \(.id)   ---   \(.attachments)"'

    You will see output similar to:

    "My best volume   ---   bea3d0be-37e2-4d61-a6d1-810d1a3d6dcc   ---   [{\"href\":\"/storage/attachments/49afcf99-52a8-4145-b29c-9e77ca9ac999\"}]"
    "My mediocre volume   ---   3ae0102c-8b86-4e7e-be50-295e7ef51db8   ---   []"
    "My worst volume   ---   36d04b29-9326-43a2-95e8-dafc656c075e   ---   [{\"href\":\"/storage/attachments/6369dc29-4930-4806-87fa-27f17b0558ee\"}]

    What we want to do is detach the volume so that the last column looks like [] but currently it most likely has an attachment

    Record volume id and volume attachment to variables


    Notice on the volume attach variable I started with /storage and ended before the \"}]

    Detach the volume from the server

    Make sure the server is powered off at this point (Or you are 100% sure your volume is unmounted properly though the Packet tooling.)

        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json'

    This API call will return zero output if all has been done properly.

    Double check volume attachments

    curl$PROJECTID/storage \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' | \
        jq '.volumes[] | "\(.description)   ---   \(.id)   ---   \(.attachments)"'

    You should now see [] next to the volume we want to resize

    Resize volume

    Set the size of the volume you want to a variable (This must be larger than the current volume size)


    Resize the volume

    curl -X PUT$VOLUMEID \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/json' \
        -d "{\"size\": $SIZE}" | \
        jq .

    That should have outputted all of the volume info with it's new size!

    Record the ID of the server you want to reattach the volume to

    curl$PROJECTID/devices \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' | \
        jq '.devices[] | "\(.hostname)   ---   \(.id)"'

    You should see output similar to:

    "My best server   ---   2ae00ba1-76e3-4666-b7af-6a14c8b535bb"
    "My mediocre server   ---   e5c006d3-793b-4964-8976-58de847812f4"
    "My worst server   ---   46d0aa29-19be-4af9-bdd4-146f8c8030a6"

    Record the server id to a variable


    Reattach your volume

    curl -X POST$VOLUMEID/attachments \
        -H "X-Auth-Token: $TOKEN" \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/json' \
        -d "{\"device_id\": \"$SERVERID\"}" | \
        jq .

    We're all done!

    You can now power your server back online or remount your volume. At this point you will need to resize your filesystem, but that is out of scope for this article.

    Was it helpful?