Skip to contentSkip to conversation

btrfs defrag problem

DISCUSSION ching 4 participants 8 messages Oct 30, 2012 – Nov 6, 2012 Btrfs file system

lore
Share & tools
lore

ching

author
#0 lore raw

Hi all,

I try to defrag my btrfs root partition (run by root privilege)

find / -type f -o -type d -print0 | xargs --null --no-run-if-empty btrfs filesystem defragment -t $((32*1024*1024))

1. This kind of error messages is prompted:

failed to open /bin/bash
open:: Text file busy
total 1 failures
failed to open /lib64/ld-2.15.so
open:: Text file busy
total 1 failures
failed to open /sbin/agetty
open:: Text file busy
failed to open /sbin/btrfs
open:: Text file busy
failed to open /sbin/dhclient
open:: Text file busy
failed to open /sbin/init
open:: Text file busy
failed to open /sbin/udevd

It seems that locked files cannot be defragged, is it expected behaviour?

2. Btrfs Wiki mentions that defrag directory will defrag metadata, is symlink/hardlink considered as metadata?

P.S. inline data is already disabled by "max_inline=0"

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

Thank you.

ching

#1 lore raw
Quoted 25 lines · ching

Hi all,

I try to defrag my btrfs root partition (run by root privilege)

find / -type f -o -type d -print0 | xargs --null --no-run-if-empty btrfs filesystem defragment -t $((32*1024*1024))

1. This kind of error messages is prompted:

failed to open /bin/bash
open:: Text file busy
total 1 failures
failed to open /lib64/ld-2.15.so
open:: Text file busy
total 1 failures
failed to open /sbin/agetty
open:: Text file busy
failed to open /sbin/btrfs
open:: Text file busy
failed to open /sbin/dhclient
open:: Text file busy
failed to open /sbin/init
open:: Text file busy
failed to open /sbin/udevd

Quoted 1 line

It seems that locked files cannot be defragged, is it expected behaviour?

I can't reproduce that behaviour here, although maybe you're running an older kernel with some bug that's since been fixed?

Quoted 3 lines

2. Btrfs Wiki mentions that defrag directory will defrag metadata, is symlink/hardlink considered as metadata?

P.S. inline data is already disabled by "max_inline=0"

Well, that's a silly thing to do, causing every small file to take up a separate 4kb block rather than its size * 2, and requiring extra seeks to read/write them (i.e., if you have a million 10 byte files, they'll now take up 4GB instead of 20MB).

Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

If you're asking if you can defrag an unmounted btrfs, not at this time. It's possible in principle, nobody has cared enough to implement it yet.

author
#2 lore raw
Quoted 26 lines · cwillu
Quoted 25 lines · ching

Hi all,

I try to defrag my btrfs root partition (run by root privilege)

find / -type f -o -type d -print0 | xargs --null --no-run-if-empty btrfs filesystem defragment -t $((32*1024*1024))

1. This kind of error messages is prompted:

failed to open /bin/bash
open:: Text file busy
total 1 failures
failed to open /lib64/ld-2.15.so
open:: Text file busy
total 1 failures
failed to open /sbin/agetty
open:: Text file busy
failed to open /sbin/btrfs
open:: Text file busy
failed to open /sbin/dhclient
open:: Text file busy
failed to open /sbin/init
open:: Text file busy
failed to open /sbin/udevd

Quoted 3 lines
Quoted 1 line

It seems that locked files cannot be defragged, is it expected behaviour?

I can't reproduce that behaviour here, although maybe you're running an older kernel with some bug that's since been fixed?

I am running Gentoo with Kernel 3.6.3 x64, btrfs-progs git version

my root is mounted with noatime,space_cache,inode_cache,metadata_ratio=15,max_inline=0,ssd_spread

Quoted 7 lines
Quoted 3 lines

2. Btrfs Wiki mentions that defrag directory will defrag metadata, is symlink/hardlink considered as metadata?

P.S. inline data is already disabled by "max_inline=0"

Well, that's a silly thing to do, causing every small file to take up a separate 4kb block rather than its size * 2, and requiring extra seeks to read/write them (i.e., if you have a million 10 byte files, they'll now take up 4GB instead of 20MB).

this is off-topic to my question.

Quoted 5 lines
Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

If you're asking if you can defrag an unmounted btrfs, not at this time. It's possible in principle, nobody has cared enough to implement it yet.

#3 lore raw
In reply to ching
Quoted 2 lines · ching

failed to open /bin/bash
open:: Text file busy

That's not a btrfs problem, you can't directly modify an executable that is being used.

Quoted 6 lines

failed to open /lib64/ld-2.15.so
failed to open /sbin/agetty
failed to open /sbin/btrfs
failed to open /sbin/dhclient
failed to open /sbin/init
failed to open /sbin/udevd

libraries, currently executed progs or daemons

Quoted 1 line

It seems that locked files cannot be defragged, is it expected behaviour?

Yes.

Quoted 2 lines

2. Btrfs Wiki mentions that defrag directory will defrag metadata, is symlink/hardlink considered as metadata? P.S. inline data is already disabled by "max_inline=0"

Both -links are metadata and also stored inside metadata blocks without any chance to move to data blocks, so max_inline does not affect this.

Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

Sorry, I do not understand the question.

david

author
#4 lore raw
Quoted 3 lines
Quoted 2 lines

It seems that locked files cannot be defragged, is it expected behaviour?

Yes.

but i am defragging a file, not modify it.

Quoted 4 lines
Quoted 2 lines

2. Btrfs Wiki mentions that defrag directory will defrag metadata, is symlink/hardlink considered as metadata? P.S. inline data is already disabled by "max_inline=0"

Both -links are metadata and also stored inside metadata blocks without any chance to move to data blocks, so max_inline does not affect this.

thank you for your explanation.

Quoted 3 lines
Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

Sorry, I do not understand the question.

when a device is mounted under a directory, files in the directory is "hidden", and files in the device is "available", right? when a directory is polyinstantied, files in the original directory is "hidden", and files in the polyinstantied directory is "available",

How to get past them and pass those "hidden" files to defrag command?

ching

#5 lore raw
Quoted 7 lines · ching
Quoted 2 lines
Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

Sorry, I do not understand the question.

when a device is mounted under a directory, files in the directory is "hidden", and files in the device is "available", right? when a directory is polyinstantied, files in the original directory is "hidden", and files in the polyinstantied directory is "available",

How to get past them and pass those "hidden" files to defrag command?

I hope I get it right, so unless you have a reference to the directory with hidden files (using your term), there's no way to access them. And this is a more generic question, not related to btrfs itself. The hidden files may also belong to a different filesystem.

david

author
#6 lore raw
Quoted 6 lines · David Sterba
Quoted 5 lines · ching
Quoted 2 lines
Quoted 1 line

3. Is any possible to online defrag a btrfs partition without hindered by mount point/polyinstantied directories?

Sorry, I do not understand the question.

when a device is mounted under a directory, files in the directory is "hidden", and files in the device is "available", right? when a directory is polyinstantied, files in the original directory is "hidden", and files in the polyinstantied directory is "available",

Quoted 8 lines
Quoted 1 line

How to get past them and pass those "hidden" files to defrag command?

I hope I get it right, so unless you have a reference to the directory with hidden files (using your term), there's no way to access them. And this is a more generic question, not related to btrfs itself. The hidden files may also belong to a different filesystem.

david

thank for your explanation

ching

#7 lore raw
In reply to David Sterba

David Sterba wrote (ao):

Quoted 6 lines · ching
Quoted 5 lines

when a device is mounted under a directory, files in the directory is "hidden", and files in the device is "available", right? when a directory is polyinstantied, files in the original directory is "hidden", and files in the polyinstantied directory is "available",

Quoted 7 lines
Quoted 2 lines

How to get past them and pass those "hidden" files to defrag command?

I hope I get it right, so unless you have a reference to the directory with hidden files (using your term), there's no way to access them. And this is a more generic question, not related to btrfs itself. The hidden files may also belong to a different filesystem.

What Ching means (I think), is that if you have directories in /home, and you mount a device onto /home, you cannot see the original directories in /home anymore.

You can still access them though, with a 'mount -o bind':

# mount -o bind / /mnt
# ls /mnt/home

Sander