Skip to contentSkip to conversation

behavior of BTRFS in relation to inodes when moving/copying files between filesystems

DISCUSSION Martin Steigerwald 1 participant 2 messages Oct 13, 2015 – Oct 31, 2015 Btrfs file system

lore
Share & tools
lore
#0 lore raw

Hi!

With BTRFS to XFS/Ext4 the inode number of the target file stays the same in with both cp and mv case (/mnt/zeit is a freshly created XFS in this example):

merkaba:~> ls -li foo /mnt/zeit/moo
6609270 foo

     99  /mnt/zeit/moo
merkaba:~> cp foo /mnt/zeit/moo
merkaba:~> ls -li foo /mnt/zeit/moo
6609270 8 foo
     99  /mnt/zeit/moo
merkaba:~> cp -p foo /mnt/zeit/moo  
merkaba:~> ls -li foo /mnt/zeit/moo
6609270 foo
     99 /mnt/zeit/moo

merkaba:~> mv foo /mnt/zeit/moo
merkaba:~> ls -lid /mnt/zeit/moo
99 -rw-r--r-- 1 root root 6 Okt 13 12:28 /mnt/zeit/moo

With BTRFS as target filesystem however in the mv case I get a new inode:

merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> cp foo /home/moo
merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> cp -p foo /home/moo
merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> mv foo /home/moo
merkaba:~> ls -li /home/moo
16476280 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo

Is this intentional and/or somehow related to the copy on write specifics of the filesystem?

I think even with COW it can just overwrite the existing file instead of removing the old one and creating a new one – but it wouldn´t give much of a benefit unless the target file is nocow.

(Also I thought only certain other utilities had supercow powers, but well BTRFS seems to have them as well :)

Thanks,

Signature · 1 line
Martin
#1 lore raw

Am Dienstag, 13. Oktober 2015, 12:39:12 CET schrieben Sie:

Quoted 42 lines

Hi!

With BTRFS to XFS/Ext4 the inode number of the target file stays the same in with both cp and mv case (/mnt/zeit is a freshly created XFS in this example):

merkaba:~> ls -li foo /mnt/zeit/moo
6609270 foo

     99  /mnt/zeit/moo
merkaba:~> cp foo /mnt/zeit/moo
merkaba:~> ls -li foo /mnt/zeit/moo
6609270 8 foo
     99  /mnt/zeit/moo
merkaba:~> cp -p foo /mnt/zeit/moo  
merkaba:~> ls -li foo /mnt/zeit/moo
6609270 foo
     99 /mnt/zeit/moo

merkaba:~> mv foo /mnt/zeit/moo
merkaba:~> ls -lid /mnt/zeit/moo
99 -rw-r--r-- 1 root root 6 Okt 13 12:28 /mnt/zeit/moo

With BTRFS as target filesystem however in the mv case I get a new inode:

merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> cp foo /home/moo
merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> cp -p foo /home/moo
merkaba:~> ls -li foo /home/moo
6609289 -rw-r--r-- 1 root root 6 Okt 13 12:34 foo
16476276 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo merkaba:~> mv foo /home/moo
merkaba:~> ls -li /home/moo
16476280 -rw-r--r-- 1 root root 6 Okt 13 12:34 /home/moo

Is this intentional and/or somehow related to the copy on write specifics of the filesystem?

Quoted 6 lines

I think even with COW it can just overwrite the existing file instead of removing the old one and creating a new one – but it wouldn´t give much of a benefit unless the target file is nocow.

(Also I thought only certain other utilities had supercow powers, but well BTRFS seems to have them as well :)

Anyone any idea?

Thanks,

Signature · 1 line
Martin