Having just done a largish mv from one ZFS filesystem to another ZFS
filesystem in the same zpool, I was somewhat surprised at how long it
took - I was expecting it to be near instant like it would be within the
same filesystem.

Are there optimisations possible here?

Surely it should be possible to just change some block pointers and do
a little bit of accounting?  Or is the amount of work required only really
beneficial for large files (hundreds of MB or GB)?

e.g. mv will currently do this:
...
lstat64("/biscuit/bfu//hda4.dump", 0x08066370)  Err#2 ENOENT
rename("hda4.dump", "/biscuit/bfu//hda4.dump")  Err#18 EXDEV
open64("hda4.dump", O_RDONLY)                   = 3
creat64("/biscuit/bfu//hda4.dump", 0644)        = 4
stat64("/biscuit/bfu//hda4.dump", 0x08066370)   = 0
chmod("/biscuit/bfu//hda4.dump", 0100644)       = 0
fstat64(3, 0x080662E0)                          = 0
mmap64(0x00000000, 8388608, PROT_READ, MAP_SHARED, 3, 0) = 0xFE600000
write(4, "01\0\0\0 {1CDF ?\0\0\0\0".., 8388608) = 8388608
mmap64(0xFE600000, 8388608, PROT_READ, MAP_SHARED|MAP_FIXED, 3, 8388608) 
= 0xFE6
00000
write(4, "11 603\0\f\001\0 .\0 d 1".., 8388608) = 8388608
mmap64(0xFE600000, 8388608, PROT_READ, MAP_SHARED|MAP_FIXED, 3, 
0x01000000) = 0x
FE600000
write(4, "\v998B\t96CBD2 X * ;E7ED".., 8388608) = 8388608
...

There are likely other considerations that need to be considered (such
as encryption being on/off, etc) but if all of the properties are the same
for a given pair of ZFS filesystems between which a file is being moved,
surely it should be possible to take some nice shortcuts?

RFE worthy?

Darren

_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to