Skip to contentSkip to conversation

Is there a lightweight copy from one subvolume to another?

DISCUSSION Marc MERLIN 3 participants 4 messages Jan 25, 2014 1 message not in the archive Btrfs file system

lore
Share & tools
lore
#0 lore raw

If I have
/mnt/btrfs1/subvol1
/mnt/btrfs1/subvol2

Can I copy/move data from subvol1 to subvol2 without having to physically copy all the blocks as if it were an entirely different filesystem?

reflink doesn't work for this:
gargamel [mc]# cp -av --reflink=always misc/olympic Video/misc/
misc/olympic' -> Video/misc/olympic'
misc/olympic/file.avi' -> Video/misc/olympic/file.avi'
cp: failed to clone Video/misc/olympic/file.avi' from misc/olympic/file.avi': Invalid cross-device link

Was there another way?

Thanks,
Marc

Signature · 4 lines
"A mouse is a device used to point at the xterm you want to type in" - A.S.R.
Microsoft is to operating systems ....
                                      .... what McDonalds is to gourmet cooking
Home page: http://marc.merlins.org/  

A message that is not in the archive (sent off-list or not yet received): CA+TwyweCeUQ7w5MuRLrfHfmJwDbChX5VodsyW8huQ9YuLOAWQA@mail.gmail.com

#2 lore raw

---------- Forwarded message ----------
From: Maxdamantus <[email protected]>
Date: 25 January 2014 21:49
Subject: Re: Is there a lightweight copy from one subvolume to another?
To: Marc MERLIN <[email protected]>

Due to what I understand is some VFS limitation, you can only reflink-copy between subvolumes under one Linux mountpoint. If /mnt/btrfs1 provides access to all subvolumes, you should be able to copy between them through that path, but you won't be able to copy them across mounts, even --bind ones.

Quoted 26 lines · Marc MERLIN

If I have
/mnt/btrfs1/subvol1
/mnt/btrfs1/subvol2

Can I copy/move data from subvol1 to subvol2 without having to physically copy all the blocks as if it were an entirely different filesystem?

reflink doesn't work for this:
gargamel [mc]# cp -av --reflink=always misc/olympic Video/misc/
misc/olympic' -> Video/misc/olympic'
misc/olympic/file.avi' -> Video/misc/olympic/file.avi'
cp: failed to clone Video/misc/olympic/file.avi' from misc/olympic/file.avi': Invalid cross-device link

Was there another way?

Thanks,
Marc
--
"A mouse is a device used to point at the xterm you want to type in" - A.S.R. Microsoft is to operating systems ....
.... what McDonalds is to gourmet cooking
Home page: http://marc.merlins.org/
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
Quoted 5 lines · Maxdamantus

Due to what I understand is some VFS limitation, you can only reflink-copy between subvolumes under one Linux mountpoint. If /mnt/btrfs1 provides access to all subvolumes, you should be able to copy between them through that path, but you won't be able to copy them across mounts, even --bind ones.

That was exactly my understanding too.

Quoted 4 lines
Quoted 4 lines

gargamel [mc]# cp -av --reflink=always misc/olympic Video/misc/
misc/olympic' -> Video/misc/olympic'
misc/olympic/file.avi' -> Video/misc/olympic/file.avi'
cp: failed to clone Video/misc/olympic/file.avi' from misc/olympic/file.avi': Invalid cross-device link

The test above was done in /mnt/btrfs_pool1 and failed as shown here.

Yet

gargamel:/mnt/btrfs_pool1# btrfs subvolume list .
ID 257 top level 5 path misc
ID 258 top level 5 path Video
ID 259 top level 5 path media
ID 260 top level 5 path Sound
ID 261 top level 5 path zoneminder
ID 262 top level 5 path other

Aah, but it looks like this was my problem:
'Preparing to replace coreutils 8.13-3.2 (using .../coreutils_8.21-1_i386.deb) ...

now cp --reflink works as expected.

Thanks,
Marc

Signature · 4 lines
"A mouse is a device used to point at the xterm you want to type in" - A.S.R.
Microsoft is to operating systems ....
                                      .... what McDonalds is to gourmet cooking
Home page: http://marc.merlins.org/  
#4 lore raw
Quoted 25 lines · Marc MERLIN
Quoted 5 lines · Maxdamantus

Due to what I understand is some VFS limitation, you can only reflink-copy between subvolumes under one Linux mountpoint. If /mnt/btrfs1 provides access to all subvolumes, you should be able to copy between them through that path, but you won't be able to copy them across mounts, even --bind ones.

That was exactly my understanding too.

Quoted 4 lines
Quoted 4 lines

gargamel [mc]# cp -av --reflink=always misc/olympic Video/misc/
misc/olympic' -> Video/misc/olympic'
misc/olympic/file.avi' -> Video/misc/olympic/file.avi'
cp: failed to clone Video/misc/olympic/file.avi' from misc/olympic/file.avi': Invalid cross-device link

The test above was done in /mnt/btrfs_pool1 and failed as shown here.

Yet

gargamel:/mnt/btrfs_pool1# btrfs subvolume list .
ID 257 top level 5 path misc
ID 258 top level 5 path Video
ID 259 top level 5 path media
ID 260 top level 5 path Sound
ID 261 top level 5 path zoneminder
ID 262 top level 5 path other
Quoted 8 lines

Aah, but it looks like this was my problem:
'Preparing to replace coreutils 8.13-3.2 (using .../coreutils_8.21-1_i386.deb) ...

now cp --reflink works as expected.

Thanks,
Marc

If I recall correctly you also need a kernel >= 3.7. Which I assume you have if this is now working.

Ken.