* Why does btrfs defrag work worse than making a copy of a file? @ 2014-07-15 21:17 Sebastian Ochmann 2014-07-16 7:53 ` Liu Bo 0 siblings, 1 reply; 4+ messages in thread From: Sebastian Ochmann @ 2014-07-15 21:17 UTC (permalink / raw) To: linux-btrfs Hello, I have a VirtualBox hard drive image which is quite fragmented even after very light use; it is 1.6 GB in size and has around 5000 fragments (I'm using "filefrag" to determine the number of fragments). Doing a "btrfs fi defrag -f image.vdi" reduced the number of fragments to 3749. Even doing a "btrfs fi defrag -f -t 1 image.vdi" which should make sure every extent is rewritten (according to the btrfs-progs 3.14.2 manpage) does not yield any better result and seems to return immediately. Copying the file, however, yields a copy which has only 5 fragments (simply doing a cp image.vdi image2.vdi; sync; filefrag image2.vdi). What do I have to do to defrag the file to the minimal number of fragments possible? Am I missing something? Kernel version 3.15.5, btrfs progs 3.14.2, Arch Linux. Best regards, Sebastian ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why does btrfs defrag work worse than making a copy of a file? 2014-07-15 21:17 Why does btrfs defrag work worse than making a copy of a file? Sebastian Ochmann @ 2014-07-16 7:53 ` Liu Bo 2014-07-16 10:50 ` Sebastian Ochmann 0 siblings, 1 reply; 4+ messages in thread From: Liu Bo @ 2014-07-16 7:53 UTC (permalink / raw) To: Sebastian Ochmann; +Cc: linux-btrfs On Tue, Jul 15, 2014 at 11:17:26PM +0200, Sebastian Ochmann wrote: > Hello, > > I have a VirtualBox hard drive image which is quite fragmented even > after very light use; it is 1.6 GB in size and has around 5000 > fragments (I'm using "filefrag" to determine the number of > fragments). Doing a "btrfs fi defrag -f image.vdi" reduced the > number of fragments to 3749. Even doing a "btrfs fi defrag -f -t 1 > image.vdi" which should make sure every extent is rewritten > (according to the btrfs-progs 3.14.2 manpage) does not yield any > better result and seems to return immediately. Copying the file, > however, yields a copy which has only 5 fragments (simply doing a cp > image.vdi image2.vdi; sync; filefrag image2.vdi). > > What do I have to do to defrag the file to the minimal number of > fragments possible? Am I missing something? So usually btrfs thinks of an extent whose size is bigger than 256K as a big enough extent. Another possible reason is that there is something wrong with btrfs_fiemap which gives filefrag' a wrong output. Would you please show us the 'filefrag -v' output? thanks, -liubo > > Kernel version 3.15.5, btrfs progs 3.14.2, Arch Linux. > > Best regards, > Sebastian > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why does btrfs defrag work worse than making a copy of a file? 2014-07-16 7:53 ` Liu Bo @ 2014-07-16 10:50 ` Sebastian Ochmann 2014-07-17 3:36 ` Liu Bo 0 siblings, 1 reply; 4+ messages in thread From: Sebastian Ochmann @ 2014-07-16 10:50 UTC (permalink / raw) To: bo.li.liu; +Cc: linux-btrfs On 16.07.2014 09:53, Liu Bo wrote: > On Tue, Jul 15, 2014 at 11:17:26PM +0200, Sebastian Ochmann wrote: >> Hello, >> >> I have a VirtualBox hard drive image which is quite fragmented even >> after very light use; it is 1.6 GB in size and has around 5000 >> fragments (I'm using "filefrag" to determine the number of >> fragments). Doing a "btrfs fi defrag -f image.vdi" reduced the >> number of fragments to 3749. Even doing a "btrfs fi defrag -f -t 1 >> image.vdi" which should make sure every extent is rewritten >> (according to the btrfs-progs 3.14.2 manpage) does not yield any >> better result and seems to return immediately. Copying the file, >> however, yields a copy which has only 5 fragments (simply doing a cp >> image.vdi image2.vdi; sync; filefrag image2.vdi). >> >> What do I have to do to defrag the file to the minimal number of >> fragments possible? Am I missing something? > > So usually btrfs thinks of an extent whose size is bigger than 256K as a big > enough extent. > > Another possible reason is that there is something wrong with btrfs_fiemap which > gives filefrag' a wrong output. > > Would you please show us the 'filefrag -v' output? Sure, I have pasted the output of "filefrag -v" here: http://pastebin.com/kcZhVhkc However, I think the problem is merely in the documentation (manpage of btrfs-filesystem). The description of the "-t" option is different in two locations and doesn't make sense in general, I think. It is first described as follows: "Any extent bigger than threshold given by -t option, will be considered already defragged. Use 0 to take the kernel default, and use 1 to say every single extent must be rewritten." So I used "-t 1" because I thought it will defrag as much as possible. However when thinking about it, any extent at least 1 byte (or 2 bytes?) in size will be ignored this way, am I correct? Further below, the "-t" option is described as follows: "-t <size> defragment only files at least <size> bytes big" Here, the option suddenly refers to the file size. In any case, doing a "btrfs fi defrag -f -t 10G image.vdi" defragged my file to the 5 extents I also get by simply copying the file. I think the documentation should be updated to reflect what the -t option actually does. Best regards Sebastian > thanks, > -liubo > >> >> Kernel version 3.15.5, btrfs progs 3.14.2, Arch Linux. >> >> Best regards, >> Sebastian >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Why does btrfs defrag work worse than making a copy of a file? 2014-07-16 10:50 ` Sebastian Ochmann @ 2014-07-17 3:36 ` Liu Bo 0 siblings, 0 replies; 4+ messages in thread From: Liu Bo @ 2014-07-17 3:36 UTC (permalink / raw) To: Sebastian Ochmann; +Cc: linux-btrfs On Wed, Jul 16, 2014 at 12:50:30PM +0200, Sebastian Ochmann wrote: > On 16.07.2014 09:53, Liu Bo wrote: > >On Tue, Jul 15, 2014 at 11:17:26PM +0200, Sebastian Ochmann wrote: > >>Hello, > >> > >>I have a VirtualBox hard drive image which is quite fragmented even > >>after very light use; it is 1.6 GB in size and has around 5000 > >>fragments (I'm using "filefrag" to determine the number of > >>fragments). Doing a "btrfs fi defrag -f image.vdi" reduced the > >>number of fragments to 3749. Even doing a "btrfs fi defrag -f -t 1 > >>image.vdi" which should make sure every extent is rewritten > >>(according to the btrfs-progs 3.14.2 manpage) does not yield any > >>better result and seems to return immediately. Copying the file, > >>however, yields a copy which has only 5 fragments (simply doing a cp > >>image.vdi image2.vdi; sync; filefrag image2.vdi). > >> > >>What do I have to do to defrag the file to the minimal number of > >>fragments possible? Am I missing something? > > > >So usually btrfs thinks of an extent whose size is bigger than 256K as a big > >enough extent. > > > >Another possible reason is that there is something wrong with btrfs_fiemap which > >gives filefrag' a wrong output. > > > >Would you please show us the 'filefrag -v' output? > > Sure, I have pasted the output of "filefrag -v" here: > > http://pastebin.com/kcZhVhkc > > However, I think the problem is merely in the documentation (manpage > of btrfs-filesystem). The description of the "-t" option is > different in two locations and doesn't make sense in general, I > think. It is first described as follows: > > "Any extent bigger than threshold given by -t option, will be > considered already defragged. Use 0 to take the kernel default, and > use 1 to say every single extent must be rewritten." > > So I used "-t 1" because I thought it will defrag as much as > possible. However when thinking about it, any extent at least 1 byte > (or 2 bytes?) in size will be ignored this way, am I correct? > > Further below, the "-t" option is described as follows: > > "-t <size> defragment only files at least <size> bytes big" > > Here, the option suddenly refers to the file size. In any case, > doing a "btrfs fi defrag -f -t 10G image.vdi" defragged my file to > the 5 extents I also get by simply copying the file. I think the > documentation should be updated to reflect what the -t option > actually does. Oops, we've deeply made users confused in this old documents, will update it then. thanks, -liubo > > Best regards > Sebastian > > > >thanks, > >-liubo > > > >> > >>Kernel version 3.15.5, btrfs progs 3.14.2, Arch Linux. > >> > >>Best regards, > >>Sebastian > >>-- > >>To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > >>the body of a message to majordomo@vger.kernel.org > >>More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-07-17 3:37 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-15 21:17 Why does btrfs defrag work worse than making a copy of a file? Sebastian Ochmann 2014-07-16 7:53 ` Liu Bo 2014-07-16 10:50 ` Sebastian Ochmann 2014-07-17 3:36 ` Liu Bo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).