Hi all,
since I use RAID10 (half a year now), I see that Unallocated: numbers
in btrfs fi/de us are not what I expect and probably more is not
fully correct.
I once made a simple change to the code (see patch below) but the I
got unsure how people would like to interpret the output of the tools
commands. At least the Unallocated: numbers seemed correct with the
patch.
It is clear that for a filesystem with multiple raid profiles, like
raid5+single+raid1 for example, the size calculations need quite some
changes, but most people just use one profile per datatype I think. So
just some focus on raid10 here.
Questions:
1) via btrfs command 'filesystem usage', you probably want see how
files (or extents) occupy a filesystem, e.g. "How much space do I have
left for storing more files?". Is this correct?
2) via btrfs command 'device usage', you probably want see how chunks
occupy a device, e.g. "When do I need to buy and add a new disk?". Is
this correct?
I created some test raid10 fs, so that one can easily create extreme
situations like emtpy and full fs and then compare output of:
'fi sh'
'fi df'
'fi us'
'de us'
for default btrfs-progs (opensuse tumbleweed) and patched version from git.
The output for 'fi sh' and 'fi df' is the same for both default and
patched btrfs-progs, but might also raise some questions.
# uname -r
4.4.3-1-default
# btrfs --version
btrfs-progs v4.4.1+20160229
Patch against btrfs-progs git tag v4.4.1
diff --git a/cmds-fi-usage.c b/cmds-fi-usage.c
index 33bf403..ddc2f2c 100644
--- a/cmds-fi-usage.c
+++ b/cmds-fi-usage.c
@@ -608,7 +608,7 @@ static u64 calc_chunk_size(struct chunk_info *ci)
else if (ci->type & BTRFS_BLOCK_GROUP_RAID6)
return ci->size / (ci->num_stripes -2);
else if (ci->type & BTRFS_BLOCK_GROUP_RAID10)
- return ci->size / ci->num_stripes;
+ return ci->size / (ci->num_stripes /2);
return ci->size;
}
=> patched binary
/net/src/btrfs-progs/btrfs
# for i in 0 1 2 3 ; do dd if=/dev/zero of=disk$i.img bs=1G count=10 ; done
# losetup -D
# for i in 0 1 2 3 ; do losetup -f disk$i.img ; done
# mkfs.btrfs -L raid10sizes -m raid10 -d raid10 /dev/loop0 /dev/loop1
/dev/loop2 /dev/loop3
# mount -o noatime LABEL=raid10sizes /local/raid10sizes
=> so filesystem is empty
# btrfs fi sh /local/raid10sizes
Label: 'raid10sizes' uuid: 87e036be-b440-48ec-8c2a-b7c1eeca5036
Total devices 4 FS bytes used 1.12MiB
devid 1 size 10.00GiB used 2.01GiB path /dev/loop0
devid 2 size 10.00GiB used 2.01GiB path /dev/loop1
devid 3 size 10.00GiB used 2.01GiB path /dev/loop2
devid 4 size 10.00GiB used 2.01GiB path /dev/loop3
# btrfs fi df /local/raid10sizes
Data, RAID10: total=2.00GiB, used=1.00MiB
System, RAID10: total=16.00MiB, used=16.00KiB
Metadata, RAID10: total=2.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
# btrfs fi us /local/raid10sizes
Overall:
Device size: 40.00GiB
Device allocated: 8.03GiB
Device unallocated: 31.97GiB
Device missing: 0.00B
Used: 2.25MiB
Free (estimated): 17.98GiB (min: 17.98GiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 16.00MiB (used: 0.00B)
Data,RAID10: Size:2.00GiB, Used:1.00MiB
/dev/loop0 512.00MiB
/dev/loop1 512.00MiB
/dev/loop2 512.00MiB
/dev/loop3 512.00MiB
Metadata,RAID10: Size:2.00GiB, Used:112.00KiB
/dev/loop0 512.00MiB
/dev/loop1 512.00MiB
/dev/loop2 512.00MiB
/dev/loop3 512.00MiB
System,RAID10: Size:16.00MiB, Used:16.00KiB
/dev/loop0 4.00MiB
/dev/loop1 4.00MiB
/dev/loop2 4.00MiB
/dev/loop3 4.00MiB
Unallocated:
/dev/loop0 9.00GiB
/dev/loop1 9.00GiB
/dev/loop2 9.00GiB
/dev/loop3 9.00GiB
# btrfs de us /local/raid10sizes
/dev/loop0, ID: 1
Device size: 10.00GiB
Data,RAID10: 512.00MiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 9.00GiB
/dev/loop1, ID: 2
Device size: 10.00GiB
Data,RAID10: 512.00MiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 9.00GiB
/dev/loop2, ID: 3
Device size: 10.00GiB
Data,RAID10: 512.00MiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 9.00GiB
/dev/loop3, ID: 4
Device size: 10.00GiB
Data,RAID10: 512.00MiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 9.00GiB
# /net/src/btrfs-progs/btrfs fi sh /local/raid10sizes
Label: 'raid10sizes' uuid: 87e036be-b440-48ec-8c2a-b7c1eeca5036
Total devices 4 FS bytes used 1.12MiB
devid 1 size 10.00GiB used 2.01GiB path /dev/loop0
devid 2 size 10.00GiB used 2.01GiB path /dev/loop1
devid 3 size 10.00GiB used 2.01GiB path /dev/loop2
devid 4 size 10.00GiB used 2.01GiB path /dev/loop3
# /net/src/btrfs-progs/btrfs fi df /local/raid10sizes
Data, RAID10: total=2.00GiB, used=1.00MiB
System, RAID10: total=16.00MiB, used=16.00KiB
Metadata, RAID10: total=2.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B
# /net/src/btrfs-progs/btrfs fi us /local/raid10sizes
Overall:
Device size: 40.00GiB
Device allocated: 8.03GiB
Device unallocated: 31.97GiB
Device missing: 0.00B
Used: 2.25MiB
Free (estimated): 17.98GiB (min: 17.98GiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 16.00MiB (used: 0.00B)
Data,RAID10: Size:2.00GiB, Used:1.00MiB
/dev/loop0 1.00GiB
/dev/loop1 1.00GiB
/dev/loop2 1.00GiB
/dev/loop3 1.00GiB
Metadata,RAID10: Size:2.00GiB, Used:112.00KiB
/dev/loop0 1.00GiB
/dev/loop1 1.00GiB
/dev/loop2 1.00GiB
/dev/loop3 1.00GiB
System,RAID10: Size:16.00MiB, Used:16.00KiB
/dev/loop0 8.00MiB
/dev/loop1 8.00MiB
/dev/loop2 8.00MiB
/dev/loop3 8.00MiB
Unallocated:
/dev/loop0 7.99GiB
/dev/loop1 7.99GiB
/dev/loop2 7.99GiB
/dev/loop3 7.99GiB
# /net/src/btrfs-progs/btrfs de us /local/raid10sizes
/dev/loop0, ID: 1
Device size: 10.00GiB
Data,RAID10: 1.00GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 7.99GiB
/dev/loop1, ID: 2
Device size: 10.00GiB
Data,RAID10: 1.00GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 7.99GiB
/dev/loop2, ID: 3
Device size: 10.00GiB
Data,RAID10: 1.00GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 7.99GiB
/dev/loop3, ID: 4
Device size: 10.00GiB
Data,RAID10: 1.00GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 7.99GiB
=> filling filesystem
# dd if=/dev/zero of=/local/raid10sizes/dumpfile
dd: writing to '/local/raid10sizes/dumpfile': No space left on device
37634786+0 records in
37634785+0 records out
19269009920 bytes (19 GB, 18 GiB) copied, 175,848 s, 110 MB/s
# btrfs fi sh /local/raid10sizes
Label: 'raid10sizes' uuid: 87e036be-b440-48ec-8c2a-b7c1eeca5036
Total devices 4 FS bytes used 18.01GiB
devid 1 size 10.00GiB used 10.00GiB path /dev/loop0
devid 2 size 10.00GiB used 10.00GiB path /dev/loop1
devid 3 size 10.00GiB used 10.00GiB path /dev/loop2
devid 4 size 10.00GiB used 10.00GiB path /dev/loop3
# btrfs fi df /local/raid10sizes
Data, RAID10: total=17.98GiB, used=17.98GiB
System, RAID10: total=16.00MiB, used=16.00KiB
Metadata, RAID10: total=2.00GiB, used=27.36MiB
GlobalReserve, single: total=16.00MiB, used=0.00B
# btrfs fi us /local/raid10sizes
Overall:
Device size: 40.00GiB
Device allocated: 40.00GiB
Device unallocated: 4.00MiB
Device missing: 0.00B
Used: 36.02GiB
Free (estimated): 4.00KiB (min: 4.00KiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 16.00MiB (used: 0.00B)
Data,RAID10: Size:17.98GiB, Used:17.98GiB
/dev/loop0 4.50GiB
/dev/loop1 4.50GiB
/dev/loop2 4.50GiB
/dev/loop3 4.50GiB
Metadata,RAID10: Size:2.00GiB, Used:27.36MiB
/dev/loop0 512.00MiB
/dev/loop1 512.00MiB
/dev/loop2 512.00MiB
/dev/loop3 512.00MiB
System,RAID10: Size:16.00MiB, Used:16.00KiB
/dev/loop0 4.00MiB
/dev/loop1 4.00MiB
/dev/loop2 4.00MiB
/dev/loop3 4.00MiB
Unallocated:
/dev/loop0 5.00GiB
/dev/loop1 5.00GiB
/dev/loop2 5.00GiB
/dev/loop3 5.00GiB
# btrfs de us /local/raid10sizes
/dev/loop0, ID: 1
Device size: 10.00GiB
Data,RAID10: 4.50GiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 5.00GiB
/dev/loop1, ID: 2
Device size: 10.00GiB
Data,RAID10: 4.50GiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 5.00GiB
/dev/loop2, ID: 3
Device size: 10.00GiB
Data,RAID10: 4.50GiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 5.00GiB
/dev/loop3, ID: 4
Device size: 10.00GiB
Data,RAID10: 4.50GiB
Metadata,RAID10: 512.00MiB
System,RAID10: 4.00MiB
Unallocated: 5.00GiB
# /net/src/btrfs-progs/btrfs fi sh /local/raid10sizes
Label: 'raid10sizes' uuid: 87e036be-b440-48ec-8c2a-b7c1eeca5036
Total devices 4 FS bytes used 18.01GiB
devid 1 size 10.00GiB used 10.00GiB path /dev/loop0
devid 2 size 10.00GiB used 10.00GiB path /dev/loop1
devid 3 size 10.00GiB used 10.00GiB path /dev/loop2
devid 4 size 10.00GiB used 10.00GiB path /dev/loop3
# /net/src/btrfs-progs/btrfs fi df /local/raid10sizes
Data, RAID10: total=17.98GiB, used=17.98GiB
System, RAID10: total=16.00MiB, used=16.00KiB
Metadata, RAID10: total=2.00GiB, used=27.36MiB
GlobalReserve, single: total=16.00MiB, used=0.00B
# /net/src/btrfs-progs/btrfs fi us /local/raid10sizes
Overall:
Device size: 40.00GiB
Device allocated: 40.00GiB
Device unallocated: 4.00MiB
Device missing: 0.00B
Used: 36.02GiB
Free (estimated): 4.00KiB (min: 4.00KiB)
Data ratio: 2.00
Metadata ratio: 2.00
Global reserve: 16.00MiB (used: 0.00B)
Data,RAID10: Size:17.98GiB, Used:17.98GiB
/dev/loop0 8.99GiB
/dev/loop1 8.99GiB
/dev/loop2 8.99GiB
/dev/loop3 8.99GiB
Metadata,RAID10: Size:2.00GiB, Used:27.36MiB
/dev/loop0 1.00GiB
/dev/loop1 1.00GiB
/dev/loop2 1.00GiB
/dev/loop3 1.00GiB
System,RAID10: Size:16.00MiB, Used:16.00KiB
/dev/loop0 8.00MiB
/dev/loop1 8.00MiB
/dev/loop2 8.00MiB
/dev/loop3 8.00MiB
Unallocated:
/dev/loop0 1.00MiB
/dev/loop1 1.00MiB
/dev/loop2 1.00MiB
/dev/loop3 1.00MiB
# /net/src/btrfs-progs/btrfs de us /local/raid10sizes
/dev/loop0, ID: 1
Device size: 10.00GiB
Data,RAID10: 8.99GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 1.00MiB
/dev/loop1, ID: 2
Device size: 10.00GiB
Data,RAID10: 8.99GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 1.00MiB
/dev/loop2, ID: 3
Device size: 10.00GiB
Data,RAID10: 8.99GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 1.00MiB
/dev/loop3, ID: 4
Device size: 10.00GiB
Data,RAID10: 8.99GiB
Metadata,RAID10: 1.00GiB
System,RAID10: 8.00MiB
Unallocated: 1.00MiB
--
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