Oops, forgot a step - need to tell the MDS about the new pool before step 2:

`ceph mds add_data_pool <name>`

You may also need to mark the pool as used by cephfs:

`ceph osd pool application enable {pool-name} cephfs`

On Wed, May 15, 2019 at 3:15 PM Elise Burke <elise.n...@gmail.com> wrote:

> I came across that and tried it - the short answer is no, you can't do
> that - using cache tier. The longer answer as to why I'm less sure about,
> but iirc it has to do with copying / editing the OMAP object properties.
>
> The good news, however, is that you can 'fake it' using File Layouts -
> http://docs.ceph.com/docs/mimic/cephfs/file-layouts/
>
> In my case I was moving around / upgrading disks and wanted to change from
> unreplicated (well, r=1) to erasure coding (in my case, rs4.1). I was able
> to do this keeping the following in mind:
>
> 1. The original pool, cephfs_data, must remain as a replicated pool. I'm
> unsure why, IIRC some metadata can't be kept in erasure coded pools.
> 2. The metadata pool, cephfs_metadata, must also remain as a replicated
> pool.
> 3. Your new pool (the destination pool) can be created however you like.
> 4. This procedure involves rolling unavailability on a per-file basis.
>
> This is from memory; I should do a better writeup elsewhere, but what I
> did was this:
>
> 1. Create your new pool. `ceph osd pool create  cephfs_data_ec_rs4.1 8 8
> erasure rs4.1`
> 2. Set the xattr for the root directory to use the new pool: `setfattr -n
> ceph.file.layout.pool -v cephfs_data_ec_rs4.1 /cephfs_mountpoint/`
>
> At this stage all new files will be written to the new pool. Unfortunately
> you can't change the layout of a file with data, so copying the files back
> into their own place is required. You can hack up a bash script to do this,
> or write a converter program. Here's the most relevant bit, per file, which
> copies the file first and then renames the new file to the old file:
>
> func doConvert(filename string) error {
>         poolRewriteName, previousPoolName, err :=
> newNearbyTempFiles(filename)
>         if err != nil {
>                 return err
>         }
>         err = SetCephFSFileLayoutPool(poolRewriteName, []byte(*toPool))
>         if err != nil {
>                 os.Remove(poolRewriteName)
>                 os.Remove(previousPoolName)
>                 return err
>         }
>
>         err = CopyFilePermissions(filename, poolRewriteName)
>         if err != nil {
>                 os.Remove(poolRewriteName)
>                 os.Remove(previousPoolName)
>                 return err
>         }
>
>         //log.Printf("Copying %s to %s\n", filename, poolRewriteName)
>         err = CopyFile(filename, poolRewriteName)
>         if err != nil {
>                 os.Remove(poolRewriteName)
>                 os.Remove(previousPoolName)
>                 return err
>         }
>
>         //log.Printf("Moving %s to %s\n", filename, previousPoolName)
>         err = MoveFile(filename, previousPoolName)
>         if err != nil {
>                 os.Remove(poolRewriteName)
>                 os.Remove(previousPoolName)
>                 return err
>         }
>
>         //log.Printf("Moving %s to %s\n", poolRewriteName, filename)
>         err = MoveFile(poolRewriteName, filename)
>         os.Remove(poolRewriteName)
>         os.Remove(previousPoolName)
>         return err
> }
>
>
>
> On Wed, May 15, 2019 at 10:31 AM Lars Täuber <taeu...@bbaw.de> wrote:
>
>> Hi,
>>
>> is there a way to migrate a cephfs to a new data pool like it is for rbd
>> on nautilus?
>> https://ceph.com/geen-categorie/ceph-pool-migration/
>>
>> Thanks
>> Lars
>> _______________________________________________
>> ceph-users mailing list
>> ceph-users@lists.ceph.com
>> http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com
>>
>
_______________________________________________
ceph-users mailing list
ceph-users@lists.ceph.com
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com

Reply via email to