Hi,
Every now and then someone asks if it's possible to convert a pool to a
different type (replicated vs erasure / change the amount of pg's /
etc), but this is not supported. The advised approach is usually to just
create a new pool and somehow copy all data manually to this new pool,
removing the old pool afterwards. This is both unpractical and very time
consuming.
Recently I saw someone on this list suggest that the cache tiering
feature may actually be used to achieve some form of online converting
of pool types. Today I ran some tests and I would like to share my results.
I started out with a pool test-A, created an rbd image in the pool,
mapped it, created a filesystem in the rbd image, mounted the fs and
placed some test files in the fs. Just to have some objects in the
test-A pool.
I then added a test-B pool and transferred the data using cache tiering
as follows:
Step 0: We have a test-A pool and it contains data, some of which is in use.
# rados -p test-A df
test-A - 9941 11 0
0 0 324 2404 57 4717
Step 1: Create new pool test-B
# ceph osd pool create test-B 32
pool 'test-B' created
Step 2: Make pool test-A a cache pool for test-B.
# ceph osd tier add test-B test-A --force-nonempty
# ceph osd tier cache-mode test-A forward
Step 3: Move data from test-A to test-B (this potentially takes long)
# rados -p test-A cache-flush-evict-all
This step will move all data except the objects that are in active use,
so we are left with some remaining data on test-A pool.
Step 4: Move also the remaining data. This is the only step that doesn't
work "online".
Step 4a: Disconnect all clients
# rbd unmap /dev/rbd/test-A/test-rbd (in my case)
Stab 4b: Move remaining objects
# rados -p test-A cache-flush-evict-all
# rados -p test-A ls (should now be empty)
Step 5: Remove test-A as cache pool
# ceph osd tier remove test-B test-A
Step 6: Clients are allowed to connect with test-B pool (we are back in
"online" mode)
# rbd map test-B/test-rbd (in my case)
Step 7: Remove the now empty pool test-A
# ceph osd pool delete test-A test-A --yes-i-really-really-mean-it
This worked smoothly. In my first try I actually used more steps, by creatig
_______________________________________________
ceph-users mailing list
[email protected]
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com