Commit 09ee269d ("devmapper: Add option for specifying the thin pool
blocksize") also switched the default dm-thin-pool blocksize from 64K to
512K. That change unfortunately breaks the activation of dm-thin-pool
devices that were previously created using a 64K blocksize. Here is an
example of the dm-thin-pool activation failure users may experience:
device-mapper: thin: 253:4: pool target (204800 blocks) too small: expected 1638400
device-mapper: table: 253:4: thin-pool: preresume failed, error = -22
The reason for this is docker is passing 512K as the blocksize for a
dm-thin-pool that was previously created using a 64K blocksize. Docker
doesn't record the blocksize the is used when it creates a dm-thin-pool.
Until now it never had a need to do so because the blocksize was always
hardcoded. The dm-thin-pool blocksize must be the same every time a
dm-thin-pool is activated.
As a stop-gap fix, revert to using 64K for the default blocksize.
But we do need a proper fix for this now that 'dm.blocksize' is exposed
as a proper storage option. One possible fix would be to record the
blocksize for each dm-thin-pool that docker creates and to pass that
recorded blocksize down in the dmsetup table load each time the
dm-thin-pool is activated (this would be comparable to what lvm2 does).
Docker-DCO-1.1-Signed-off-by: Mike Snitzer <snitzer@redhat.com> (github: snitm)
| ... | ... |
@@ -129,11 +129,11 @@ Here is the list of supported options: |
| 129 | 129 |
* `dm.blocksize` |
| 130 | 130 |
|
| 131 | 131 |
Specifies a custom blocksize to use for the thin pool. The default |
| 132 |
- blocksize is 512K. |
|
| 132 |
+ blocksize is 64K. |
|
| 133 | 133 |
|
| 134 | 134 |
Example use: |
| 135 | 135 |
|
| 136 |
- ``docker -d --storage-opt dm.blocksize=64K`` |
|
| 136 |
+ ``docker -d --storage-opt dm.blocksize=512K`` |
|
| 137 | 137 |
|
| 138 | 138 |
* `dm.blkdiscard` |
| 139 | 139 |
|
| ... | ... |
@@ -28,7 +28,7 @@ var ( |
| 28 | 28 |
DefaultDataLoopbackSize int64 = 100 * 1024 * 1024 * 1024 |
| 29 | 29 |
DefaultMetaDataLoopbackSize int64 = 2 * 1024 * 1024 * 1024 |
| 30 | 30 |
DefaultBaseFsSize uint64 = 10 * 1024 * 1024 * 1024 |
| 31 |
- DefaultThinpBlockSize uint32 = 1024 // 512K = 1024 512b sectors |
|
| 31 |
+ DefaultThinpBlockSize uint32 = 128 // 64K = 128 512b sectors |
|
| 32 | 32 |
) |
| 33 | 33 |
|
| 34 | 34 |
type DevInfo struct {
|