[lxc-devel] [lxd/master] LXD storage api: Implement storage volume renaming

brauner on Github lxc-bot at linuxcontainers.org
Fri Oct 13 11:49:00 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 381 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20171013/0b30533e/attachment.bin>
-------------- next part --------------
From 370ea64b590a2563676d94debb6f40e99685b92a Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 12:34:20 +0200
Subject: [PATCH 1/7] api endpoint: add storagePoolVolumeTypePost()

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxd/storage_volumes.go       | 79 +++++++++++++++++++++++++++++++++++++++++---
 lxd/storage_volumes_utils.go |  4 +++
 2 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/lxd/storage_volumes.go b/lxd/storage_volumes.go
index ea960dd3d..c37947e3f 100644
--- a/lxd/storage_volumes.go
+++ b/lxd/storage_volumes.go
@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"net/http"
+	"os"
 	"strconv"
 
 	"github.com/gorilla/mux"
@@ -51,7 +52,9 @@ func storagePoolVolumesGet(d *Daemon, r *http.Request) Response {
 		} else {
 			volumeUsedBy, err := storagePoolVolumeUsedByGet(d.State(), volume.Name, volume.Type)
 			if err != nil {
-				return InternalError(err)
+				if !os.IsNotExist(err) {
+					return InternalError(err)
+				}
 			}
 			volume.UsedBy = volumeUsedBy
 		}
@@ -123,7 +126,9 @@ func storagePoolVolumesTypeGet(d *Daemon, r *http.Request) Response {
 
 			volumeUsedBy, err := storagePoolVolumeUsedByGet(d.State(), vol.Name, vol.Type)
 			if err != nil {
-				return SmartError(err)
+				if !os.IsNotExist(err) {
+					return InternalError(err)
+				}
 			}
 			vol.UsedBy = volumeUsedBy
 
@@ -187,6 +192,66 @@ func storagePoolVolumesTypePost(d *Daemon, r *http.Request) Response {
 
 var storagePoolVolumesTypeCmd = Command{name: "storage-pools/{name}/volumes/{type}", get: storagePoolVolumesTypeGet, post: storagePoolVolumesTypePost}
 
+// /1.0/storage-pools/{name}/volumes/{type}/{name}
+// Rename a storage volume of a given volume type in a given storage pool.
+func storagePoolVolumeTypePost(d *Daemon, r *http.Request) Response {
+	// Get the name of the storage volume.
+	volumeName := mux.Vars(r)["name"]
+
+	// Get the name of the storage pool the volume is supposed to be
+	// attached to.
+	poolName := mux.Vars(r)["pool"]
+
+	// Get the name of the volume type.
+	volumeTypeName := mux.Vars(r)["type"]
+
+	req := api.StorageVolumesPost{}
+
+	// Parse the request.
+	err := json.NewDecoder(r.Body).Decode(&req)
+	if err != nil {
+		return BadRequest(err)
+	}
+
+	// Sanity checks.
+	if req.Name == "" {
+		return BadRequest(fmt.Errorf("No name provided"))
+	}
+
+	// We currently only allow to create storage volumes of type
+	// storagePoolVolumeTypeCustom. So check, that nothing else was
+	// requested.
+	if volumeTypeName != storagePoolVolumeTypeNameCustom {
+		return BadRequest(fmt.Errorf("Currently not allowed to create storage volumes of type %s", volumeTypeName))
+	}
+
+	// Retrieve ID of the storage pool (and check if the storage pool
+	// exists).
+	poolID, err := db.StoragePoolGetID(d.db, poolName)
+	if err != nil {
+		return SmartError(err)
+	}
+
+	// Check that the name isn't already in use.
+	_, err = db.StoragePoolVolumeGetTypeID(d.State().DB, req.Name,
+		storagePoolVolumeTypeCustom, poolID)
+	if err == nil || err != nil && err != db.NoSuchObjectError {
+		return Conflict
+	}
+
+	s, err := storagePoolVolumeInit(d.State(), poolName, volumeName, storagePoolVolumeTypeCustom)
+	if err != nil {
+		return SmartError(err)
+	}
+
+	err = s.StoragePoolVolumeRename(req.Name)
+	if err != nil {
+		return InternalError(err)
+	}
+
+	return EmptySyncResponse
+}
+
 // /1.0/storage-pools/{pool}/volumes/{type}/{name}
 // Get storage volume of a given volume type on a given storage pool.
 func storagePoolVolumeTypeGet(d *Daemon, r *http.Request) Response {
@@ -225,7 +290,9 @@ func storagePoolVolumeTypeGet(d *Daemon, r *http.Request) Response {
 
 	volumeUsedBy, err := storagePoolVolumeUsedByGet(d.State(), volume.Name, volume.Type)
 	if err != nil {
-		return SmartError(err)
+		if !os.IsNotExist(err) {
+			return InternalError(err)
+		}
 	}
 	volume.UsedBy = volumeUsedBy
 
@@ -400,7 +467,9 @@ func storagePoolVolumeTypeDelete(d *Daemon, r *http.Request) Response {
 
 	volumeUsedBy, err := storagePoolVolumeUsedByGet(d.State(), volumeName, volumeTypeName)
 	if err != nil {
-		return SmartError(err)
+		if !os.IsNotExist(err) {
+			return InternalError(err)
+		}
 	}
 
 	if len(volumeUsedBy) > 0 {
@@ -437,4 +506,4 @@ func storagePoolVolumeTypeDelete(d *Daemon, r *http.Request) Response {
 	return EmptySyncResponse
 }
 
-var storagePoolVolumeTypeCmd = Command{name: "storage-pools/{pool}/volumes/{type}/{name:.*}", get: storagePoolVolumeTypeGet, put: storagePoolVolumeTypePut, patch: storagePoolVolumeTypePatch, delete: storagePoolVolumeTypeDelete}
+var storagePoolVolumeTypeCmd = Command{name: "storage-pools/{pool}/volumes/{type}/{name:.*}", post: storagePoolVolumeTypePost, get: storagePoolVolumeTypeGet, put: storagePoolVolumeTypePut, patch: storagePoolVolumeTypePatch, delete: storagePoolVolumeTypeDelete}
diff --git a/lxd/storage_volumes_utils.go b/lxd/storage_volumes_utils.go
index a4c599a60..9be5b2438 100644
--- a/lxd/storage_volumes_utils.go
+++ b/lxd/storage_volumes_utils.go
@@ -200,6 +200,10 @@ func storagePoolVolumeUsedByContainersGet(s *state.State, volumeName string,
 		}
 	}
 
+	if len(ctsUsingVolume) == 0 {
+		return []string{}, os.ErrNotExist
+	}
+
 	return ctsUsingVolume, nil
 }
 

From 56dd4e0f3acef2e426642738463b77ada97f084b Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 13:35:51 +0200
Subject: [PATCH 2/7] storage: add custom volume rename infrastructure

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxd/storage.go               |  5 +++-
 lxd/storage_btrfs.go         | 33 ++++++++++++++++++++++++
 lxd/storage_ceph.go          | 61 ++++++++++++++++++++++++++++++++++++++++++++
 lxd/storage_dir.go           | 33 ++++++++++++++++++++++++
 lxd/storage_lvm.go           | 33 ++++++++++++++++++++++++
 lxd/storage_mock.go          |  4 +++
 lxd/storage_volumes_utils.go |  3 ++-
 lxd/storage_zfs.go           | 29 +++++++++++++++++++++
 8 files changed, 199 insertions(+), 2 deletions(-)

diff --git a/lxd/storage.go b/lxd/storage.go
index 78e2a8c80..c60f805fe 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -155,6 +155,7 @@ type storage interface {
 	StoragePoolVolumeMount() (bool, error)
 	StoragePoolVolumeUmount() (bool, error)
 	StoragePoolVolumeUpdate(writable *api.StorageVolumePut, changedConfig []string) error
+	StoragePoolVolumeRename(newName string) error
 	GetStoragePoolVolumeWritable() api.StorageVolumePut
 	SetStoragePoolVolumeWritable(writable *api.StorageVolumePut)
 
@@ -432,7 +433,9 @@ func storagePoolVolumeAttachInit(s *state.State, poolName string, volumeName str
 		volumeUsedBy, err := storagePoolVolumeUsedByContainersGet(s,
 			volumeName, volumeTypeName)
 		if err != nil {
-			return nil, err
+			if !os.IsNotExist(err) {
+				return nil, err
+			}
 		}
 
 		if len(volumeUsedBy) > 1 {
diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index ecc23b854..da34483d7 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -645,6 +645,39 @@ func (s *storageBtrfs) StoragePoolVolumeUpdate(writable *api.StorageVolumePut, c
 	return nil
 }
 
+func (s *storageBtrfs) StoragePoolVolumeRename(newName string) error {
+	logger.Infof(`Renaming BTRFS storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	_, err := s.StoragePoolMount()
+	if err != nil {
+		return err
+	}
+
+	_, err = storagePoolVolumeUsedByContainersGet(s.s, s.volume.Name, storagePoolVolumeTypeNameCustom)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return err
+		}
+	} else {
+		return fmt.Errorf(`BTRFS storage volume "%s" on storage pool "%s" is attached to containers`,
+			s.volume.Name, s.pool.Name)
+	}
+
+	oldPath := getStoragePoolVolumeMountPoint(s.pool.Name, s.volume.Name)
+	newPath := getStoragePoolVolumeMountPoint(s.pool.Name, newName)
+	err = os.Rename(oldPath, newPath)
+	if err != nil {
+		return err
+	}
+
+	logger.Infof(`Renamed BTRFS storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	return db.StoragePoolVolumeRename(s.s.DB, s.volume.Name, newName,
+		storagePoolVolumeTypeCustom, s.poolID)
+}
+
 func (s *storageBtrfs) GetStoragePoolVolumeWritable() api.StorageVolumePut {
 	return s.volume.Writable()
 }
diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index 219ffbe2d..8a5b8156c 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -705,6 +705,67 @@ func (s *storageCeph) StoragePoolVolumeUpdate(writable *api.StorageVolumePut, ch
 	return nil
 }
 
+func (s *storageCeph) StoragePoolVolumeRename(newName string) error {
+	logger.Infof(`Renaming CEPH storage volume on OSD storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	_, err := s.StoragePoolVolumeUmount()
+	if err != nil {
+		return err
+	}
+
+	_, err = storagePoolVolumeUsedByContainersGet(s.s, s.volume.Name, storagePoolVolumeTypeNameCustom)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return err
+		}
+	} else {
+		return fmt.Errorf(`RBD storage volume "%s" on CEPH OSD storage pool "%s" is attached to containers`,
+			s.volume.Name, s.pool.Name)
+	}
+
+	// unmap
+	err = cephRBDVolumeUnmap(s.ClusterName, s.OSDPoolName,
+		s.volume.Name, storagePoolVolumeTypeNameCustom,
+		s.UserName, true)
+	if err != nil {
+		logger.Errorf(`Failed to unmap RBD storage volume for `+`container "%s" on storage pool "%s": %s`,
+			s.volume.Name, s.pool.Name, err)
+		return err
+	}
+	logger.Debugf(`Unmapped RBD storage volume for container "%s" on storage pool "%s"`,
+		s.volume.Name, s.pool.Name)
+
+	err = cephRBDVolumeRename(s.ClusterName, s.OSDPoolName,
+		storagePoolVolumeTypeNameCustom, s.volume.Name,
+		newName, s.UserName)
+	if err != nil {
+		logger.Errorf(`Failed to rename RBD storage volume for container "%s" on storage pool "%s": %s`,
+			s.volume.Name, s.pool.Name, err)
+		return err
+	}
+	logger.Debugf(`Renamed RBD storage volume for container "%s" on storage pool "%s"`,
+		s.volume.Name, s.pool.Name)
+
+	// map
+	_, err = cephRBDVolumeMap(s.ClusterName, s.OSDPoolName,
+		newName, storagePoolVolumeTypeNameCustom,
+		s.UserName)
+	if err != nil {
+		logger.Errorf(`Failed to map RBD storage volume for container "%s" on storage pool "%s": %s`,
+			newName, s.pool.Name, err)
+		return err
+	}
+	logger.Debugf(`Mapped RBD storage volume for container "%s" on storage pool "%s"`,
+		newName, s.pool.Name)
+
+	logger.Infof(`Renamed CEPH storage volume on OSD storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	return db.StoragePoolVolumeRename(s.s.DB, s.volume.Name, newName,
+		storagePoolVolumeTypeCustom, s.poolID)
+}
+
 func (s *storageCeph) StoragePoolUpdate(writable *api.StoragePoolPut, changedConfig []string) error {
 	logger.Infof(`Updating CEPH storage pool "%s"`, s.pool.Name)
 
diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index 487cc8991..c6082dcf3 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -386,6 +386,39 @@ func (s *storageDir) StoragePoolVolumeUpdate(writable *api.StorageVolumePut, cha
 	return nil
 }
 
+func (s *storageDir) StoragePoolVolumeRename(newName string) error {
+	logger.Infof(`Renaming DIR storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	_, err := s.StoragePoolMount()
+	if err != nil {
+		return err
+	}
+
+	_, err = storagePoolVolumeUsedByContainersGet(s.s, s.volume.Name, storagePoolVolumeTypeNameCustom)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return err
+		}
+	} else {
+		return fmt.Errorf(`DIR storage volume "%s" on storage pool "%s" is attached to containers`,
+			s.volume.Name, s.pool.Name)
+	}
+
+	oldPath := getStoragePoolVolumeMountPoint(s.pool.Name, s.volume.Name)
+	newPath := getStoragePoolVolumeMountPoint(s.pool.Name, newName)
+	err = os.Rename(oldPath, newPath)
+	if err != nil {
+		return err
+	}
+
+	logger.Infof(`Renamed DIR storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	return db.StoragePoolVolumeRename(s.s.DB, s.volume.Name, newName,
+		storagePoolVolumeTypeCustom, s.poolID)
+}
+
 func (s *storageDir) ContainerStorageReady(name string) bool {
 	containerMntPoint := getContainerMountPoint(s.pool.Name, name)
 	ok, _ := shared.PathIsEmpty(containerMntPoint)
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 90498b5b1..2e1624233 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -826,6 +826,39 @@ func (s *storageLvm) StoragePoolVolumeUpdate(writable *api.StorageVolumePut,
 	return nil
 }
 
+func (s *storageLvm) StoragePoolVolumeRename(newName string) error {
+	logger.Infof(`Renaming LVM storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	_, err := s.StoragePoolVolumeUmount()
+	if err != nil {
+		return err
+	}
+
+	_, err = storagePoolVolumeUsedByContainersGet(s.s, s.volume.Name, storagePoolVolumeTypeNameCustom)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return err
+		}
+	} else {
+		return fmt.Errorf(`LVM storage volume "%s" on storage pool "%s" is attached to containers`,
+			s.volume.Name, s.pool.Name)
+	}
+
+	err = s.renameLVByPath(s.volume.Name, newName,
+		storagePoolVolumeAPIEndpointCustom)
+	if err != nil {
+		return fmt.Errorf(`Failed to rename logical volume from "%s" to "%s": %s`,
+			s.volume.Name, newName, err)
+	}
+
+	logger.Infof(`Renamed ZFS storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	return db.StoragePoolVolumeRename(s.s.DB, s.volume.Name, newName,
+		storagePoolVolumeTypeCustom, s.poolID)
+}
+
 func (s *storageLvm) ContainerStorageReady(name string) bool {
 	containerLvmName := containerNameToLVName(name)
 	poolName := s.getOnDiskPoolName()
diff --git a/lxd/storage_mock.go b/lxd/storage_mock.go
index a1f2e3dc7..aacf7cdc0 100644
--- a/lxd/storage_mock.go
+++ b/lxd/storage_mock.go
@@ -100,6 +100,10 @@ func (s *storageMock) StoragePoolVolumeUpdate(writable *api.StorageVolumePut, ch
 	return nil
 }
 
+func (s *storageMock) StoragePoolVolumeRename(newName string) error {
+	return nil
+}
+
 func (s *storageMock) StoragePoolUpdate(writable *api.StoragePoolPut, changedConfig []string) error {
 	return nil
 }
diff --git a/lxd/storage_volumes_utils.go b/lxd/storage_volumes_utils.go
index 9be5b2438..1c4d4adb3 100644
--- a/lxd/storage_volumes_utils.go
+++ b/lxd/storage_volumes_utils.go
@@ -3,6 +3,7 @@ package main
 import (
 	"database/sql"
 	"fmt"
+	"os"
 	"path/filepath"
 	"strings"
 
@@ -244,7 +245,7 @@ func storagePoolVolumeUsedByGet(s *state.State, volumeName string, volumeTypeNam
 	}
 
 	if len(volumeUsedBy) == 0 && len(profiles) == 0 {
-		return []string{}, err
+		return []string{}, os.ErrNotExist
 	}
 
 	for _, pName := range profiles {
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index f8ee486c3..511666824 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -602,6 +602,35 @@ func (s *storageZfs) StoragePoolVolumeUpdate(writable *api.StorageVolumePut, cha
 	return nil
 }
 
+func (s *storageZfs) StoragePoolVolumeRename(newName string) error {
+	logger.Infof(`Renaming ZFS storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	_, err := storagePoolVolumeUsedByContainersGet(s.s, s.volume.Name, storagePoolVolumeTypeNameCustom)
+	if err != nil {
+		if os.IsNotExist(err) {
+			return err
+		}
+	} else {
+		return fmt.Errorf(`ZFS storage volume "%s" on storage pool "%s" is attached to containers`,
+			s.volume.Name, s.pool.Name)
+	}
+
+	oldPath := fmt.Sprintf("custom/%s", s.volume.Name)
+	newPath := fmt.Sprintf("custom/%s", newName)
+	poolName := s.getOnDiskPoolName()
+	err = zfsPoolVolumeRename(poolName, oldPath, newPath)
+	if err != nil {
+		return err
+	}
+
+	logger.Infof(`Renamed ZFS storage volume on storage pool "%s" from "%s" to "%s`,
+		s.pool.Name, s.volume.Name, newName)
+
+	return db.StoragePoolVolumeRename(s.s.DB, s.volume.Name, newName,
+		storagePoolVolumeTypeCustom, s.poolID)
+}
+
 // Things we don't need to care about
 func (s *storageZfs) ContainerMount(c container) (bool, error) {
 	name := c.Name()

From 3dce007af58db50f4c6c3f39e417b2cd6b9e5786 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 11:31:24 +0200
Subject: [PATCH 3/7] client: add RenameStoragePoolVolume()

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 client/interfaces.go          |  1 +
 client/lxd_storage_volumes.go | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/client/interfaces.go b/client/interfaces.go
index 51e274a3e..03dcbef0f 100644
--- a/client/interfaces.go
+++ b/client/interfaces.go
@@ -152,6 +152,7 @@ type ContainerServer interface {
 	CreateStoragePoolVolume(pool string, volume api.StorageVolumesPost) (err error)
 	UpdateStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumePut, ETag string) (err error)
 	DeleteStoragePoolVolume(pool string, volType string, name string) (err error)
+	RenameStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumesPost) (err error)
 
 	// Internal functions (for internal use)
 	RawQuery(method string, path string, data interface{}, queryETag string) (resp *api.Response, ETag string, err error)
diff --git a/client/lxd_storage_volumes.go b/client/lxd_storage_volumes.go
index 47ae4e6e9..cd2d30218 100644
--- a/client/lxd_storage_volumes.go
+++ b/client/lxd_storage_volumes.go
@@ -91,3 +91,18 @@ func (r *ProtocolLXD) DeleteStoragePoolVolume(pool string, volType string, name
 
 	return nil
 }
+
+// RenameStoragePoolVolume renames a storage volume
+func (r *ProtocolLXD) RenameStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumesPost) error {
+	if !r.HasExtension("storage_api_volume_rename") {
+		return fmt.Errorf("The server is missing the required \"storage_api_volume_rename\" API extension")
+	}
+
+	// Send the request
+	_, _, err := r.query("POST", fmt.Sprintf("/storage-pools/%s/volumes/%s/%s", pool, volume.Type, name), volume, "")
+	if err != nil {
+		return err
+	}
+
+	return nil
+}

From 2af596360863187d0528b8e1dd9b7ca88d49ddb9 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Wed, 11 Oct 2017 16:16:18 +0200
Subject: [PATCH 4/7] doc: add storage_api_volume_rename extension

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 doc/api-extensions.md | 3 +++
 lxd/api_1.0.go        | 1 +
 2 files changed, 4 insertions(+)

diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 04695ed6d..b5b66e42b 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -346,3 +346,6 @@ This adds support for querying an LXD daemon for the system resources it has
 ## kernel\_limits
 This adds support for setting process limits such as maximum number of open
 files for the container via `nofile`. The format is `limits.kernel.[limit name]`.
+
+## storage\_api\_volume\_rename
+This adds support for renaming custom storage volumes.
diff --git a/lxd/api_1.0.go b/lxd/api_1.0.go
index d05dc407d..7445d1422 100644
--- a/lxd/api_1.0.go
+++ b/lxd/api_1.0.go
@@ -130,6 +130,7 @@ func api10Get(d *Daemon, r *http.Request) Response {
 			"storage_block_filesystem_btrfs",
 			"resources",
 			"kernel_limits",
+			"storage_api_volume_rename",
 		},
 		APIStatus:  "stable",
 		APIVersion: version.APIVersion,

From 5cd32d6c86a4de1413b068341ed6caaffe68172f Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 13:45:06 +0200
Subject: [PATCH 5/7] tests: add storage volume rename tests

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 test/suites/storage.sh             | 8 ++++++++
 test/suites/storage_driver_ceph.sh | 2 ++
 2 files changed, 10 insertions(+)

diff --git a/test/suites/storage.sh b/test/suites/storage.sh
index f3728de13..2d4a981ad 100644
--- a/test/suites/storage.sh
+++ b/test/suites/storage.sh
@@ -270,6 +270,8 @@ test_storage() {
       lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool2" custom/c4pool2 c4pool2 testDevice /opt
       ! lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool2" custom/c4pool2 c4pool2 testDevice2 /opt
       lxc storage volume detach "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2 c4pool2
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2 c4pool2-renamed
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2-renamed c4pool2
     fi
 
     if [ "$lxd_backend" = "btrfs" ]; then
@@ -314,6 +316,8 @@ test_storage() {
       lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool4" custom/c8pool4 c8pool4 testDevice /opt
       ! lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool4" custom/c8pool4 c8pool4 testDevice2 /opt
       lxc storage volume detach "lxdtest-$(basename "${LXD_DIR}")-pool4" c8pool4 c8pool4 testDevice
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c8pool4 c8pool4-renamed
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c8pool4-renamed c8pool4
     fi
 
     lxc init testimage c9pool5 -s "lxdtest-$(basename "${LXD_DIR}")-pool5"
@@ -337,6 +341,8 @@ test_storage() {
     lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool5" custom/c11pool5 c11pool5 testDevice /opt
     ! lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool5" custom/c11pool5 c11pool5 testDevice2 /opt
     lxc storage volume detach "lxdtest-$(basename "${LXD_DIR}")-pool5" c11pool5 c11pool5 testDevice
+    lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c11pool5 c11pool5-renamed
+    lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c11pool5-renamed c11pool5
 
     if [ "$lxd_backend" = "lvm" ]; then
       lxc init testimage c10pool6 -s "lxdtest-$(basename "${LXD_DIR}")-pool6"
@@ -547,6 +553,8 @@ test_storage() {
       lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool9" custom/c18pool9 c18pool9 testDevice /opt
       ! lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool9" custom/c18pool9 c18pool9 testDevice2 /opt
       lxc storage volume detach "lxdtest-$(basename "${LXD_DIR}")-pool9" c18pool9 c18pool9 testDevice
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c18pool9 c18pool9-renamed
+      lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c18pool9-renamed c18pool9
     fi
 
     if [ "$lxd_backend" = "zfs" ]; then
diff --git a/test/suites/storage_driver_ceph.sh b/test/suites/storage_driver_ceph.sh
index 1bc216f34..2c28a7e88 100644
--- a/test/suites/storage_driver_ceph.sh
+++ b/test/suites/storage_driver_ceph.sh
@@ -110,6 +110,8 @@ test_storage_driver_ceph() {
     lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool2" custom/c4pool2 c4pool2 testDevice /opt
     ! lxc storage volume attach "lxdtest-$(basename "${LXD_DIR}")-pool2" custom/c4pool2 c4pool2 testDevice2 /opt
     lxc storage volume detach "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2 c4pool2
+    lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2 c4pool2-renamed
+    lxc storage volume rename "lxdtest-$(basename "${LXD_DIR}")-pool2" c4pool2-renamed c4pool2
 
     lxc delete -f c1pool1
     lxc delete -f c3pool1

From 836648b1f5dd4f07fdbaf24760a3ced02f741cf3 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 13:35:39 +0200
Subject: [PATCH 6/7] lxc: implement lxc storage volume rename

Closes #2865.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxc/storage.go | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/lxc/storage.go b/lxc/storage.go
index 05a0706d9..a55575d21 100644
--- a/lxc/storage.go
+++ b/lxc/storage.go
@@ -101,6 +101,9 @@ lxc storage volume show [<remote>:]<pool> <volume>
 lxc storage volume create [<remote>:]<pool> <volume> [key=value]...
     Create a storage volume on a storage pool.
 
+lxc storage volume rename [<remote>:]<pool> <old name> <new name>
+    Rename a storage volume on a storage pool.
+
 lxc storage volume get [<remote>:]<pool> <volume> <key>
     Get storage volume configuration on a storage pool.
 
@@ -239,6 +242,13 @@ func (c *storageCmd) run(conf *config.Config, args []string) error {
 			}
 			pool := sub
 			return c.doStoragePoolVolumesList(conf, remote, pool, args)
+		case "rename":
+			if len(args) != 5 {
+				return errArgs
+			}
+			pool := sub
+			volume := args[3]
+			return c.doStoragePoolVolumeRename(client, pool, volume, args)
 		case "set":
 			if len(args) < 4 {
 				return errArgs
@@ -984,3 +994,23 @@ func (c *storageCmd) doStoragePoolVolumeEdit(client lxd.ContainerServer, pool st
 	}
 	return nil
 }
+
+func (c *storageCmd) doStoragePoolVolumeRename(client lxd.ContainerServer, pool string, volume string, args []string) error {
+	// Parse the input
+	volName, volType := c.parseVolume(volume)
+
+	// Create the storage volume entry
+	vol := api.StorageVolumesPost{}
+	vol.Name = args[4]
+	vol.Type = volType
+	vol.Config = map[string]string{}
+
+	err := client.RenameStoragePoolVolume(pool, volType, volName, vol)
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf(i18n.G(`Renamed storage volume from "%s" to "%s"`)+"\n", volName, vol.Name)
+
+	return nil
+}

From d270f96c524587d45024038d2bac5f7c8a1f72e4 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 13 Oct 2017 13:36:18 +0200
Subject: [PATCH 7/7] lxc: make i18n

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 po/de.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/el.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/fr.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/id.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/it.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/ja.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/lxd.pot    | 68 ++++++++++++++++++++++++++++++-------------------------
 po/nl.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/ru.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/sr.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/sv.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/tr.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/zh.po      | 72 +++++++++++++++++++++++++++++++++--------------------------
 po/zh_Hans.po | 72 +++++++++++++++++++++++++++++++++--------------------------
 14 files changed, 558 insertions(+), 446 deletions(-)

diff --git a/po/de.po b/po/de.po
index 16801b069..446b62cb1 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-02-14 17:11+0000\n"
 "Last-Translator: Tim Rose <tim at netlope.de>\n"
 "Language-Team: German <https://hosted.weblate.org/projects/linux-containers/"
@@ -279,7 +279,7 @@ msgstr "'/' ist kein gültiges Zeichen im Namen eines Sicherungspunktes\n"
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -323,7 +323,7 @@ msgstr "Architektur: %s\n"
 msgid "Auto update: %s"
 msgstr "automatisches Update: %s"
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, fuzzy, c-format
 msgid "Bad property: %s"
 msgstr "Ungültige Abbild Eigenschaft: %s\n"
@@ -381,7 +381,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -407,8 +407,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, fuzzy, c-format
 msgid "Config parsing error: %s"
 msgstr "YAML Analyse Fehler %v\n"
@@ -472,12 +472,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -500,7 +500,7 @@ msgstr "Gerät %s wurde von %s entfernt\n"
 msgid "Device already exists: %s"
 msgstr "entfernte Instanz %s existiert bereits"
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -565,7 +565,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -574,7 +574,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -676,11 +676,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, fuzzy, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr "Abbild mit Fingerabdruck %s importiert\n"
@@ -784,7 +784,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr "Fehlende Zusammenfassung."
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -798,7 +798,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr "Herunterfahren des Containers erzwingen."
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -808,7 +808,7 @@ msgid "Must supply container name for: "
 msgstr "der Name des Ursprung Containers muss angegeben werden"
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -854,7 +854,7 @@ msgstr "Kein Zertifikat zum hinzufügen bereitgestellt"
 msgid "No device found for this network"
 msgstr "Kein Zertifikat für diese Verbindung"
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 #, fuzzy
 msgid "No device found for this storage volume."
 msgstr "Kein Zertifikat für diese Verbindung"
@@ -863,7 +863,7 @@ msgstr "Kein Zertifikat für diese Verbindung"
 msgid "No fingerprint specified."
 msgstr "Kein Fingerabdruck angegeben."
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -871,7 +871,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -939,12 +939,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -1046,6 +1046,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -1072,7 +1077,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -1133,7 +1138,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1188,12 +1193,12 @@ msgstr "Anhalten des Containers fehlgeschlagen!"
 msgid "Stopping the container failed: %s"
 msgstr "Anhalten des Containers fehlgeschlagen!"
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, fuzzy, c-format
 msgid "Storage pool %s created"
 msgstr "Profil %s erstellt\n"
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, fuzzy, c-format
 msgid "Storage pool %s deleted"
 msgstr "Profil %s gelöscht\n"
@@ -1203,12 +1208,12 @@ msgstr "Profil %s gelöscht\n"
 msgid "Storage pool name"
 msgstr "Profilname kann nicht geändert werden"
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, fuzzy, c-format
 msgid "Storage volume %s created"
 msgstr "Profil %s erstellt\n"
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, fuzzy, c-format
 msgid "Storage volume %s deleted"
 msgstr "Profil %s gelöscht\n"
@@ -1226,7 +1231,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1264,7 +1269,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 #, fuzzy
 msgid "The specified device doesn't exist"
 msgstr "entfernte Instanz %s existiert nicht"
@@ -1317,7 +1322,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1343,7 +1348,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -2245,6 +2250,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/el.po b/po/el.po
index af58f36ee..8f5a66f67 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-02-14 08:00+0000\n"
 "Last-Translator: Simos Xenitellis <simos.65 at gmail.com>\n"
 "Language-Team: Greek <https://hosted.weblate.org/projects/linux-containers/"
@@ -174,7 +174,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -217,7 +217,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -271,7 +271,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -296,8 +296,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -359,12 +359,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -387,7 +387,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -450,7 +450,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -459,7 +459,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -557,11 +557,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -664,7 +664,7 @@ msgstr "  Χρήση μνήμης:"
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -676,7 +676,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -685,7 +685,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -729,7 +729,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -737,7 +737,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -745,7 +745,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -810,12 +810,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -914,6 +914,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -939,7 +944,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -999,7 +1004,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1052,12 +1057,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1066,12 +1071,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1088,7 +1093,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1124,7 +1129,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1173,7 +1178,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1199,7 +1204,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1946,6 +1951,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/fr.po b/po/fr.po
index e65cf08dc..fc949793c 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-06-07 15:24+0000\n"
 "Last-Translator: Stéphane Graber <stgraber at stgraber.org>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/linux-containers/"
@@ -269,7 +269,7 @@ msgstr "'/' n'est pas autorisé dans le nom d'un instantané"
 msgid "(none)"
 msgstr "(aucun)"
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr "ALIAS"
 
@@ -313,7 +313,7 @@ msgstr "Architecture : %s"
 msgid "Auto update: %s"
 msgstr "Mise à jour auto. : %s"
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -369,7 +369,7 @@ msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 "Impossible de désaffecter la clé '%s', elle n'est pas définie actuellement."
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr "Impossible de fournir le nom du conteneur à lister"
 
@@ -394,8 +394,8 @@ msgstr "Commandes:"
 msgid "Config key/value to apply to the new container"
 msgstr "Clé/valeur de configuration à appliquer au nouveau conteneur"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr "Erreur lors de la lecture de la configuration : %s"
@@ -458,12 +458,12 @@ msgstr "Création de %s"
 msgid "Creating the container"
 msgstr "Création du conteneur"
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr "DESCRIPTION"
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr "PILOTE"
 
@@ -486,7 +486,7 @@ msgstr "Périphérique %s retiré de %s"
 msgid "Device already exists: %s"
 msgstr "le serveur distant %s existe déjà"
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -549,7 +549,7 @@ msgstr "Expire : %s"
 msgid "Expires: never"
 msgstr "N'expire jamais"
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, fuzzy, c-format
 msgid "Exporting the image: %s"
 msgstr "Import de l'image : %s"
@@ -559,7 +559,7 @@ msgstr "Import de l'image : %s"
 msgid "FILENAME"
 msgstr "NOM"
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr "EMPREINTE"
 
@@ -663,12 +663,12 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr "Image copiée avec succès !"
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 #, fuzzy
 msgid "Image exported successfully!"
 msgstr "Image copiée avec succès !"
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr "Image importée avec l'empreinte : %s"
@@ -772,7 +772,7 @@ msgstr "  Mémoire utilisée :"
 msgid "Missing summary."
 msgstr "Résumé manquant."
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr "Plus d'un périphérique correspond, spécifier le nom du périphérique."
 
@@ -786,7 +786,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr "Forcer le conteneur à s'arrêter"
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -795,7 +795,7 @@ msgid "Must supply container name for: "
 msgstr "Vous devez fournir le nom d'un conteneur pour : "
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr "NOM"
 
@@ -839,7 +839,7 @@ msgstr "Un certificat à ajouter n'a pas été fourni"
 msgid "No device found for this network"
 msgstr "Aucun périphérique existant pour ce réseau"
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 #, fuzzy
 msgid "No device found for this storage volume."
 msgstr "Aucun périphérique existant pour ce réseau"
@@ -848,7 +848,7 @@ msgstr "Aucun périphérique existant pour ce réseau"
 msgid "No fingerprint specified."
 msgstr "Aucune empreinte n'a été indiquée."
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr "Seul les volumes \"personnalisés\" peuvent être attaché aux conteneurs"
 
@@ -856,7 +856,7 @@ msgstr "Seul les volumes \"personnalisés\" peuvent être attaché aux conteneur
 msgid "Only https URLs are supported for simplestreams"
 msgstr "Seules les URLs https sont supportées par simplestreams"
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr "Seul https:// est supporté par l'import d'images distantes."
 
@@ -922,12 +922,12 @@ msgstr "Permission refusée, êtes-vous dans le groupe lxd ?"
 msgid "Pid: %d"
 msgstr "Pid : %d"
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr "Appuyer sur Entrée pour ouvrir à nouveau l'éditeur"
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr "Appuyer sur Entrée pour lancer à nouveau l'éditeur"
 
@@ -1027,6 +1027,11 @@ msgstr "Serveur distant : %s"
 msgid "Remove %s (yes/no): "
 msgstr "Supprimer %s (oui/non) : "
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr "Requérir une confirmation de l'utilisateur"
@@ -1053,7 +1058,7 @@ msgstr "TAILLE"
 msgid "SNAPSHOTS"
 msgstr "INSTANTANÉS"
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr "SOURCE"
 
@@ -1114,7 +1119,7 @@ msgstr "Afficher la configuration étendue"
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1169,12 +1174,12 @@ msgstr "L'arrêt du conteneur a échoué !"
 msgid "Stopping the container failed: %s"
 msgstr "L'arrêt du conteneur a échoué !"
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, fuzzy, c-format
 msgid "Storage pool %s created"
 msgstr "Le réseau %s a été créé"
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, fuzzy, c-format
 msgid "Storage pool %s deleted"
 msgstr "Le réseau %s a été supprimé"
@@ -1183,12 +1188,12 @@ msgstr "Le réseau %s a été supprimé"
 msgid "Storage pool name"
 msgstr "Nom de l'ensemble de stockage"
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, fuzzy, c-format
 msgid "Storage volume %s created"
 msgstr "Profil %s créé"
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, fuzzy, c-format
 msgid "Storage volume %s deleted"
 msgstr "Profil %s supprimé"
@@ -1205,7 +1210,7 @@ msgstr "Swap (courant)"
 msgid "Swap (peak)"
 msgstr "Swap (pointe)"
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr "TYPE"
 
@@ -1247,7 +1252,7 @@ msgstr "L'image locale '%s' n'a pas été trouvée, essayer '%s:' à la place."
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr "Le pendant de `lxc pause` est `lxc start`."
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr "Le périphérique indiqué n'existe pas"
 
@@ -1302,7 +1307,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr "Transfert de l'image : %s"
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr "Transfert de l'image : %s"
@@ -1328,7 +1333,7 @@ msgstr "DATE DE PUBLICATION"
 msgid "URL"
 msgstr "URL"
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr "UTILISÉ PAR"
 
@@ -2524,6 +2529,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/id.po b/po/id.po
index 7443ae458..d6bf2fe3b 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/it.po b/po/it.po
index 559103d90..674162388 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-08-18 14:22+0000\n"
 "Last-Translator: Alberto Donato <alberto.donato at gmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/linux-containers/"
@@ -195,7 +195,7 @@ msgstr "'/' non è permesso nel nome di uno snapshot"
 msgid "(none)"
 msgstr "(nessuno)"
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr "ALIAS"
 
@@ -238,7 +238,7 @@ msgstr "Architettura: %s"
 msgid "Auto update: %s"
 msgstr "Aggiornamento automatico: %s"
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr "Proprietà errata: %s"
@@ -291,7 +291,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -316,8 +316,8 @@ msgstr "Comandi:"
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -379,12 +379,12 @@ msgstr "Creazione di %s in corso"
 msgid "Creating the container"
 msgstr "Creazione del container in corso"
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr "DESCRIZIONE"
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr "DRIVER"
 
@@ -407,7 +407,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr "La periferica esiste già: %s"
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr "Import da directory non disponibile su questa piattaforma"
 
@@ -469,7 +469,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -478,7 +478,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -576,11 +576,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -682,7 +682,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -703,7 +703,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -746,7 +746,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -754,7 +754,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -762,7 +762,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -827,12 +827,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -931,6 +931,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -956,7 +961,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -1016,7 +1021,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1069,12 +1074,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1083,12 +1088,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1105,7 +1110,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1141,7 +1146,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1190,7 +1195,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1216,7 +1221,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1963,6 +1968,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/ja.po b/po/ja.po
index d0ec9807d..3a65d3ecb 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-09-28 20:29+0000\n"
 "Last-Translator: KATOH Yasufumi <karma at jazz.email.ne.jp>\n"
 "Language-Team: Japanese <https://hosted.weblate.org/projects/linux-"
@@ -175,7 +175,7 @@ msgstr "'/' はスナップショットの名前には使用できません"
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -218,7 +218,7 @@ msgstr "アーキテクチャ: %s"
 msgid "Auto update: %s"
 msgstr "自動更新: %s"
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr "不正なイメージプロパティ形式: %s"
@@ -273,7 +273,7 @@ msgstr "キー '%s' が設定されていないので削除できません"
 msgid "Can't unset key '%s', it's not currently set."
 msgstr "キー '%s' が指定されていないので削除できません。"
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr "コンテナ名を取得できません"
 
@@ -298,8 +298,8 @@ msgstr "コマンド:"
 msgid "Config key/value to apply to the new container"
 msgstr "新しいコンテナに適用するキー/値の設定"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr "設定の構文エラー: %s"
@@ -361,12 +361,12 @@ msgstr "%s を作成中"
 msgid "Creating the container"
 msgstr "コンテナを作成中"
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -389,7 +389,7 @@ msgstr "デバイス %s が %s から削除されました"
 msgid "Device already exists: %s"
 msgstr "デバイスは既に存在します: %s"
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr "このプラットフォーム上ではディレクトリのインポートは利用できません"
 
@@ -451,7 +451,7 @@ msgstr "失効日時: %s"
 msgid "Expires: never"
 msgstr "失効日時: 失効しない"
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr "イメージのエクスポート中: %s"
@@ -460,7 +460,7 @@ msgstr "イメージのエクスポート中: %s"
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -559,11 +559,11 @@ msgstr "イメージは更新済みです。"
 msgid "Image copied successfully!"
 msgstr "イメージのコピーが成功しました!"
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr "イメージのエクスポートが成功しました!"
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr "イメージは以下のフィンガープリントでインポートされました: %s"
@@ -665,7 +665,7 @@ msgstr "メモリ消費量:"
 msgid "Missing summary."
 msgstr "サマリーはありません。"
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr "複数のデバイスとマッチします。デバイス名を指定してください。"
 
@@ -679,7 +679,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr "コンテナを移動します (スナップショットは移動しません)"
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr "ディレクトリからのインポートは root で実行する必要があります"
 
@@ -688,7 +688,7 @@ msgid "Must supply container name for: "
 msgstr "コンテナ名を指定する必要があります: "
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -731,7 +731,7 @@ msgstr "追加すべき証明書が提供されていません"
 msgid "No device found for this network"
 msgstr "このネットワークに対するデバイスがありません"
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr "このストレージボリュームに対するデバイスがありません。"
 
@@ -739,7 +739,7 @@ msgstr "このストレージボリュームに対するデバイスがありま
 msgid "No fingerprint specified."
 msgstr "フィンガープリントが指定されていません。"
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr "\"カスタム\" のボリュームのみがコンテナにアタッチできます。"
 
@@ -747,7 +747,7 @@ msgstr "\"カスタム\" のボリュームのみがコンテナにアタッチ
 msgid "Only https URLs are supported for simplestreams"
 msgstr "simplestreams は https の URL のみサポートします"
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr "リモートイメージのインポートは https:// のみをサポートします。"
 
@@ -812,12 +812,12 @@ msgstr "アクセスが拒否されました。lxd グループに所属して
 msgid "Pid: %d"
 msgstr "Pid: %d"
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr "再度エディタを開くためには Enter キーを押します"
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr "再度エディタを起動するには Enter キーを押します"
 
@@ -916,6 +916,11 @@ msgstr "リモート名: %s"
 msgid "Remove %s (yes/no): "
 msgstr "%s を消去しますか (yes/no): "
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr "ユーザの確認を要求する"
@@ -941,7 +946,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -1001,7 +1006,7 @@ msgstr "拡張した設定を表示する"
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1054,12 +1059,12 @@ msgstr "コンテナの停止に失敗しました!"
 msgid "Stopping the container failed: %s"
 msgstr "コンテナの停止に失敗しました: %s"
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr "ストレージプール %s を作成しました"
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr "ストレージプール %s を削除しました"
@@ -1068,12 +1073,12 @@ msgstr "ストレージプール %s を削除しました"
 msgid "Storage pool name"
 msgstr "ストレージプール名"
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr "ストレージボリューム %s を作成しました"
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr "ストレージボリューム %s を削除しました"
@@ -1090,7 +1095,7 @@ msgstr "Swap (現在値)"
 msgid "Swap (peak)"
 msgstr "Swap (ピーク)"
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1129,7 +1134,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr "\"lxc pause\" の反対のコマンドは \"lxc start\" です。"
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr "指定したデバイスが存在しません"
 
@@ -1188,7 +1193,7 @@ msgstr "転送モード。pull, push, relay のいずれか(デフォルトはpu
 msgid "Transferring container: %s"
 msgstr "コンテナを転送中: %s"
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr "イメージを転送中: %s"
@@ -1214,7 +1219,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -2553,6 +2558,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/lxd.pot b/po/lxd.pot
index 4643b3b67..75c71d749 100644
--- a/po/lxd.pot
+++ b/po/lxd.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: lxd\n"
         "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-        "POT-Creation-Date: 2017-10-09 23:44-0400\n"
+        "POT-Creation-Date: 2017-10-13 13:36+0200\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
         "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -164,7 +164,7 @@ msgstr  ""
 msgid   "(none)"
 msgstr  ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid   "ALIAS"
 msgstr  ""
 
@@ -207,7 +207,7 @@ msgstr  ""
 msgid   "Auto update: %s"
 msgstr  ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid   "Bad property: %s"
 msgstr  ""
@@ -260,7 +260,7 @@ msgstr  ""
 msgid   "Can't unset key '%s', it's not currently set."
 msgstr  ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid   "Cannot provide container name to list"
 msgstr  ""
 
@@ -285,7 +285,7 @@ msgstr  ""
 msgid   "Config key/value to apply to the new container"
 msgstr  ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169 lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171 lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid   "Config parsing error: %s"
 msgstr  ""
@@ -347,11 +347,11 @@ msgstr  ""
 msgid   "Creating the container"
 msgstr  ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507 lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507 lxc/storage.go:682 lxc/storage.go:793
 msgid   "DESCRIPTION"
 msgstr  ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid   "DRIVER"
 msgstr  ""
 
@@ -374,7 +374,7 @@ msgstr  ""
 msgid   "Device already exists: %s"
 msgstr  ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid   "Directory import is not available on this platform"
 msgstr  ""
 
@@ -436,7 +436,7 @@ msgstr  ""
 msgid   "Expires: never"
 msgstr  ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid   "Exporting the image: %s"
 msgstr  ""
@@ -445,7 +445,7 @@ msgstr  ""
 msgid   "FILENAME"
 msgstr  ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid   "FINGERPRINT"
 msgstr  ""
 
@@ -543,11 +543,11 @@ msgstr  ""
 msgid   "Image copied successfully!"
 msgstr  ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid   "Image exported successfully!"
 msgstr  ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid   "Image imported with fingerprint: %s"
 msgstr  ""
@@ -649,7 +649,7 @@ msgstr  ""
 msgid   "Missing summary."
 msgstr  ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid   "More than one device matches, specify the device name."
 msgstr  ""
 
@@ -661,7 +661,7 @@ msgstr  ""
 msgid   "Move the container without its snapshots"
 msgstr  ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid   "Must run as root to import from directory"
 msgstr  ""
 
@@ -669,7 +669,7 @@ msgstr  ""
 msgid   "Must supply container name for: "
 msgstr  ""
 
-#: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381 lxc/storage.go:671 lxc/storage.go:782
+#: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381 lxc/storage.go:681 lxc/storage.go:792
 msgid   "NAME"
 msgstr  ""
 
@@ -712,7 +712,7 @@ msgstr  ""
 msgid   "No device found for this network"
 msgstr  ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid   "No device found for this storage volume."
 msgstr  ""
 
@@ -720,7 +720,7 @@ msgstr  ""
 msgid   "No fingerprint specified."
 msgstr  ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid   "Only \"custom\" volumes can be attached to containers."
 msgstr  ""
 
@@ -728,7 +728,7 @@ msgstr  ""
 msgid   "Only https URLs are supported for simplestreams"
 msgstr  ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid   "Only https:// is supported for remote image import."
 msgstr  ""
 
@@ -793,11 +793,11 @@ msgstr  ""
 msgid   "Pid: %d"
 msgstr  ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid   "Press enter to open the editor again"
 msgstr  ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382 lxc/image.go:1170
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382 lxc/image.go:1172
 msgid   "Press enter to start the editor again"
 msgstr  ""
 
@@ -896,6 +896,11 @@ msgstr  ""
 msgid   "Remove %s (yes/no): "
 msgstr  ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid   "Renamed storage volume from \"%s\" to \"%s\""
+msgstr  ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid   "Require user confirmation"
 msgstr  ""
@@ -921,7 +926,7 @@ msgstr  ""
 msgid   "SNAPSHOTS"
 msgstr  ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid   "SOURCE"
 msgstr  ""
 
@@ -981,7 +986,7 @@ msgstr  ""
 msgid   "Show the resources available to the server"
 msgstr  ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid   "Show the resources available to the storage pool"
 msgstr  ""
 
@@ -1034,12 +1039,12 @@ msgstr  ""
 msgid   "Stopping the container failed: %s"
 msgstr  ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid   "Storage pool %s created"
 msgstr  ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid   "Storage pool %s deleted"
 msgstr  ""
@@ -1048,12 +1053,12 @@ msgstr  ""
 msgid   "Storage pool name"
 msgstr  ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid   "Storage volume %s created"
 msgstr  ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid   "Storage volume %s deleted"
 msgstr  ""
@@ -1070,7 +1075,7 @@ msgstr  ""
 msgid   "Swap (peak)"
 msgstr  ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid   "TYPE"
 msgstr  ""
 
@@ -1103,7 +1108,7 @@ msgstr  ""
 msgid   "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr  ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid   "The specified device doesn't exist"
 msgstr  ""
 
@@ -1151,7 +1156,7 @@ msgstr  ""
 msgid   "Transferring container: %s"
 msgstr  ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid   "Transferring image: %s"
 msgstr  ""
@@ -1177,7 +1182,7 @@ msgstr  ""
 msgid   "URL"
 msgstr  ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid   "USED BY"
 msgstr  ""
 
@@ -1851,6 +1856,9 @@ msgid   "Usage: lxc storage <subcommand> [options]\n"
         "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
         "    Create a storage volume on a storage pool.\n"
         "\n"
+        "lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+        "    Rename a storage volume on a storage pool.\n"
+        "\n"
         "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
         "    Get storage volume configuration on a storage pool.\n"
         "\n"
diff --git a/po/nl.po b/po/nl.po
index 95d4cf0d3..ee283cddf 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/ru.po b/po/ru.po
index de5544f9f..4da58df08 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: 2017-09-05 16:48+0000\n"
 "Last-Translator: Ilya Yakimavets <ilya.yakimavets at backend.expert>\n"
 "Language-Team: Russian <https://hosted.weblate.org/projects/linux-containers/"
@@ -256,7 +256,7 @@ msgstr "Нельзя использовать '/' в имени снимка"
 msgid "(none)"
 msgstr "(пусто)"
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr "ПСЕВДОНИМ"
 
@@ -300,7 +300,7 @@ msgstr "Архитектура: %s"
 msgid "Auto update: %s"
 msgstr "Авто-обновление: %s"
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -354,7 +354,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr "Невозможно добавить имя контейнера в список"
 
@@ -379,8 +379,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -442,12 +442,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -470,7 +470,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -533,7 +533,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, fuzzy, c-format
 msgid "Exporting the image: %s"
 msgstr "Копирование образа: %s"
@@ -542,7 +542,7 @@ msgstr "Копирование образа: %s"
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -640,11 +640,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -747,7 +747,7 @@ msgstr " Использование памяти:"
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -759,7 +759,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -768,7 +768,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -812,7 +812,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -820,7 +820,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -828,7 +828,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -893,12 +893,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -997,6 +997,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -1022,7 +1027,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -1082,7 +1087,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1135,12 +1140,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr "Невозможно добавить имя контейнера в список"
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1149,12 +1154,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1171,7 +1176,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1207,7 +1212,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1256,7 +1261,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1282,7 +1287,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -2037,6 +2042,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/sr.po b/po/sr.po
index 2723acf02..dd15cc1ad 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/sv.po b/po/sv.po
index 7c407883f..66bee0ebe 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/tr.po b/po/tr.po
index 0f6c133fe..ace65d6c0 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/zh.po b/po/zh.po
index 6e1010f17..4c3d1a42d 100644
--- a/po/zh.po
+++ b/po/zh.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"
diff --git a/po/zh_Hans.po b/po/zh_Hans.po
index 5c59ce812..c138e2ffd 100644
--- a/po/zh_Hans.po
+++ b/po/zh_Hans.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-10-09 23:44-0400\n"
+"POT-Creation-Date: 2017-10-13 13:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -171,7 +171,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:227 lxc/image.go:1114
+#: lxc/image.go:227 lxc/image.go:1116
 msgid "ALIAS"
 msgstr ""
 
@@ -214,7 +214,7 @@ msgstr ""
 msgid "Auto update: %s"
 msgstr ""
 
-#: lxc/image.go:686
+#: lxc/image.go:687
 #, c-format
 msgid "Bad property: %s"
 msgstr ""
@@ -267,7 +267,7 @@ msgstr ""
 msgid "Can't unset key '%s', it's not currently set."
 msgstr ""
 
-#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:643
+#: lxc/network.go:468 lxc/profile.go:528 lxc/storage.go:653
 msgid "Cannot provide container name to list"
 msgstr ""
 
@@ -292,8 +292,8 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1169
-#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:594 lxc/storage.go:969
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1171
+#: lxc/network.go:418 lxc/profile.go:267 lxc/storage.go:604 lxc/storage.go:979
 #, c-format
 msgid "Config parsing error: %s"
 msgstr ""
@@ -355,12 +355,12 @@ msgstr ""
 msgid "Creating the container"
 msgstr ""
 
-#: lxc/image.go:231 lxc/image.go:1116 lxc/list.go:463 lxc/network.go:507
-#: lxc/storage.go:672 lxc/storage.go:783
+#: lxc/image.go:231 lxc/image.go:1118 lxc/list.go:463 lxc/network.go:507
+#: lxc/storage.go:682 lxc/storage.go:793
 msgid "DESCRIPTION"
 msgstr ""
 
-#: lxc/storage.go:673
+#: lxc/storage.go:683
 msgid "DRIVER"
 msgstr ""
 
@@ -383,7 +383,7 @@ msgstr ""
 msgid "Device already exists: %s"
 msgstr ""
 
-#: lxc/image.go:1268
+#: lxc/image.go:1270
 msgid "Directory import is not available on this platform"
 msgstr ""
 
@@ -445,7 +445,7 @@ msgstr ""
 msgid "Expires: never"
 msgstr ""
 
-#: lxc/image.go:900
+#: lxc/image.go:902
 #, c-format
 msgid "Exporting the image: %s"
 msgstr ""
@@ -454,7 +454,7 @@ msgstr ""
 msgid "FILENAME"
 msgstr ""
 
-#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1115
+#: lxc/config.go:399 lxc/image.go:229 lxc/image.go:1117
 msgid "FINGERPRINT"
 msgstr ""
 
@@ -552,11 +552,11 @@ msgstr ""
 msgid "Image copied successfully!"
 msgstr ""
 
-#: lxc/image.go:960
+#: lxc/image.go:962
 msgid "Image exported successfully!"
 msgstr ""
 
-#: lxc/image.go:757
+#: lxc/image.go:758
 #, c-format
 msgid "Image imported with fingerprint: %s"
 msgstr ""
@@ -658,7 +658,7 @@ msgstr ""
 msgid "Missing summary."
 msgstr ""
 
-#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:392 lxc/storage.go:512
+#: lxc/network.go:276 lxc/network.go:329 lxc/storage.go:402 lxc/storage.go:522
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
@@ -670,7 +670,7 @@ msgstr ""
 msgid "Move the container without its snapshots"
 msgstr ""
 
-#: lxc/image.go:1270
+#: lxc/image.go:1272
 msgid "Must run as root to import from directory"
 msgstr ""
 
@@ -679,7 +679,7 @@ msgid "Must supply container name for: "
 msgstr ""
 
 #: lxc/list.go:465 lxc/network.go:504 lxc/profile.go:555 lxc/remote.go:381
-#: lxc/storage.go:671 lxc/storage.go:782
+#: lxc/storage.go:681 lxc/storage.go:792
 msgid "NAME"
 msgstr ""
 
@@ -722,7 +722,7 @@ msgstr ""
 msgid "No device found for this network"
 msgstr ""
 
-#: lxc/storage.go:401 lxc/storage.go:521
+#: lxc/storage.go:411 lxc/storage.go:531
 msgid "No device found for this storage volume."
 msgstr ""
 
@@ -730,7 +730,7 @@ msgstr ""
 msgid "No fingerprint specified."
 msgstr ""
 
-#: lxc/storage.go:345 lxc/storage.go:438
+#: lxc/storage.go:355 lxc/storage.go:448
 msgid "Only \"custom\" volumes can be attached to containers."
 msgstr ""
 
@@ -738,7 +738,7 @@ msgstr ""
 msgid "Only https URLs are supported for simplestreams"
 msgstr ""
 
-#: lxc/image.go:667
+#: lxc/image.go:668
 msgid "Only https:// is supported for remote image import."
 msgstr ""
 
@@ -803,12 +803,12 @@ msgstr ""
 msgid "Pid: %d"
 msgstr ""
 
-#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:595 lxc/storage.go:970
+#: lxc/network.go:419 lxc/profile.go:268 lxc/storage.go:605 lxc/storage.go:980
 msgid "Press enter to open the editor again"
 msgstr ""
 
 #: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
-#: lxc/image.go:1170
+#: lxc/image.go:1172
 msgid "Press enter to start the editor again"
 msgstr ""
 
@@ -907,6 +907,11 @@ msgstr ""
 msgid "Remove %s (yes/no): "
 msgstr ""
 
+#: lxc/storage.go:1013
+#, c-format
+msgid "Renamed storage volume from \"%s\" to \"%s\""
+msgstr ""
+
 #: lxc/delete.go:36 lxc/delete.go:37
 msgid "Require user confirmation"
 msgstr ""
@@ -932,7 +937,7 @@ msgstr ""
 msgid "SNAPSHOTS"
 msgstr ""
 
-#: lxc/storage.go:674
+#: lxc/storage.go:684
 msgid "SOURCE"
 msgstr ""
 
@@ -992,7 +997,7 @@ msgstr ""
 msgid "Show the resources available to the server"
 msgstr ""
 
-#: lxc/storage.go:148
+#: lxc/storage.go:151
 msgid "Show the resources available to the storage pool"
 msgstr ""
 
@@ -1045,12 +1050,12 @@ msgstr ""
 msgid "Stopping the container failed: %s"
 msgstr ""
 
-#: lxc/storage.go:486
+#: lxc/storage.go:496
 #, c-format
 msgid "Storage pool %s created"
 msgstr ""
 
-#: lxc/storage.go:545
+#: lxc/storage.go:555
 #, c-format
 msgid "Storage pool %s deleted"
 msgstr ""
@@ -1059,12 +1064,12 @@ msgstr ""
 msgid "Storage pool name"
 msgstr ""
 
-#: lxc/storage.go:816
+#: lxc/storage.go:826
 #, c-format
 msgid "Storage volume %s created"
 msgstr ""
 
-#: lxc/storage.go:831
+#: lxc/storage.go:841
 #, c-format
 msgid "Storage volume %s deleted"
 msgstr ""
@@ -1081,7 +1086,7 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
-#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:781
+#: lxc/list.go:470 lxc/network.go:505 lxc/storage.go:791
 msgid "TYPE"
 msgstr ""
 
@@ -1117,7 +1122,7 @@ msgstr ""
 msgid "The opposite of \"lxc pause\" is \"lxc start\"."
 msgstr ""
 
-#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:406 lxc/storage.go:526
+#: lxc/network.go:290 lxc/network.go:343 lxc/storage.go:416 lxc/storage.go:536
 msgid "The specified device doesn't exist"
 msgstr ""
 
@@ -1166,7 +1171,7 @@ msgstr ""
 msgid "Transferring container: %s"
 msgstr ""
 
-#: lxc/image.go:696
+#: lxc/image.go:697
 #, c-format
 msgid "Transferring image: %s"
 msgstr ""
@@ -1192,7 +1197,7 @@ msgstr ""
 msgid "URL"
 msgstr ""
 
-#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:675 lxc/storage.go:784
+#: lxc/network.go:508 lxc/profile.go:556 lxc/storage.go:685 lxc/storage.go:794
 msgid "USED BY"
 msgstr ""
 
@@ -1939,6 +1944,9 @@ msgid ""
 "lxc storage volume create [<remote>:]<pool> <volume> [key=value]...\n"
 "    Create a storage volume on a storage pool.\n"
 "\n"
+"lxc storage volume rename [<remote>:]<pool> <old name> <new name>\n"
+"    Rename a storage volume on a storage pool.\n"
+"\n"
 "lxc storage volume get [<remote>:]<pool> <volume> <key>\n"
 "    Get storage volume configuration on a storage pool.\n"
 "\n"


More information about the lxc-devel mailing list