Whoops, I accidently sent my mail before it was finished. Anyway I have some more testing to do, especially with converting between erasure/replicated pools. But it looks promising. Thanks, Erik. On 23-12-14 16:57, Erik Logtenberg wrote: > 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 > ceph-users@xxxxxxxxxxxxxx > http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com > _______________________________________________ ceph-users mailing list ceph-users@xxxxxxxxxxxxxx http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com