Re: What is the current status of defragmentation?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Adam,  I routinely defrag my filesystems and here is how I do it:

find /home -type d -mtime -3 -o -type f -mtime -3 | egrep -v "Cache|cache" | while read file; do /usr/sbin/btrfs filesystem defrag -f -v "${file}"; done

The above is what I use to defrag my data (non-OS) files. I use a while loop because it relieves pressure on the system by guaranteeing that each file and directory are processed one at a time. I use "-mtime -3" because I run this script daily via anacron and I see no reason to defragment user files over and over again. I specifically filter out "cache" directories because they take forever to defragment and are refragmented in no time anyway and they are simply low priority for me in terms of performance. I may revisit that policy again sometime in the future, but for now I have been skipping them.

The following is what I use for system files:


find / -type d -mtime -3 -o -type f | while read file; do /usr/sbin/btrfs filesystem defrag -f -v "${file}"; done

This is very similar to what I use for user files except I go back only for 3 days on directories (meta data), but run defrag on every file in the system every day just in case. This approach has worked very well for me, but your mileage may vary (no guarantees). Also, in the case of the system files noted above, I defrag daily and ALWAYS OFFLINE, because at this point as I understand things, btrfs cannot defragment files when they are currently in use. I get around this issue by doing system (/) defrags only offline.

That's how I do it.

- George



On 07/17/2013 03:18 PM, Adam Ryczkowski wrote:
Today I booted my linux-mint 14 into the latest 3.10.1 kernel to
defragment the root btrfs filesystem on my ASUS N56VZ laptop with hybrid
Seagate Momentus XT disk. I did something like

    find / -exec btrfs filesystem defrag {}

To my amazement it didn't really made a lot of I/O (the HDD LED wasn't
blinking). Confident that at the beginning the defragmentation is
CPU-bound (like it sometimes is for instance in case of O&O Defrag on
Windows world), I let it go on, and I switched myself to my other
chores. After a few minutes my system froze. I was barely able to switch
to text terminal and login, but I couldn't reach bash prompt; it looked
like the OS couln't perform any I/O on the disk. At the end, the system
responded to SysRq REISUB combination though; Unfortunately I can't
reproduce exactly what I typed in, because the command was not logged to
the bash history...).

It clearly showed me, that defragmenting the filesystem is not that
trivial, as it is for ext4. So I have quesions:

* Is the defragmentation of the whole filesystem supported at all? I
can't find a single reference that it is, and a syntax of btrfs-progs
suggest that it isn't. If supported, under what conditions? Like what %
of free space should be available?

* How to check the level of defragmentation, and what are the reasonable
threshold values, that should indicate the desktop filesystem needs
defragmenting? I know, that everyone's millage my vary; I just want to
know some values as a point-of-reference.

* What is the recommended command, that would efficiently defragment the
whole file system, preferably with some sort of progress indication?
Does this command

find / -type f -o -type d -print0 | xargs --null --no-run-if-empty btrfs
filesystem defragment -cv

look like a reasonable idiom for defragmenting the whole filesystem?

Thank you for your help,

Adam Ryczkowski

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux