On 2017-08-31 13:27, Goffredo Baroncelli wrote:
Hi All,


I found a bug in mkfs.btrfs, when it is used the option '-r'. It seems that it 
is not visible the full disk.

$ uname -a
Linux venice.bhome 4.12.8 #268 SMP Thu Aug 17 09:03:26 CEST 2017 x86_64 
GNU/Linux
$ btrfs --version
btrfs-progs v4.12
As far as I understand it, this is intended behavior. Tools that offer equivalent options (genext2fs for example) are designed to generate pre-packaged system images that can then be resized to fit the target device's space. As an example use case, I do full system image updates on some of my systems (that is, I keep per-system configuration to a minimum and replace the entire root filesystem when I update the system) I use this option to generate a base-image, which then gets automatically resized by my update scripts to fill the partition during the update process.

Overall, this could probably stand to be documented better though (I'll look at writing a patch to update the documentation to clarify this when I have some spare time over the weekend).


--- First try without '-r' (/dev/sda is about 80GB)

$ sudo mkfs.btrfs  -f /dev/sda4
btrfs-progs v4.12
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               6f11971d-a945-4f33-8750-c16a7438a15d
Node size:          16384
Sector size:        4096
Filesystem size:    83.73GiB
Block group profiles:
   Data:             single            8.00MiB
   Metadata:         DUP               1.00GiB
   System:           DUP               8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
    ID        SIZE  PATH
     1    83.73GiB  /dev/sda4


All the disk (~80GB) is visible


---- Now try with '-r'

$ sudo mkfs.btrfs  -r /tmp/test/ -f /dev/sda4
btrfs-progs v4.12
See http://btrfs.wiki.kernel.org for more information.

Making image is completed.
Label:              (null)
UUID:               60ea1c38-e5b1-403d-8a25-1cac2258922d
Node size:          16384
Sector size:        4096
Filesystem size:    52.00MiB
Block group profiles:
   Data:             single           29.19MiB
   Metadata:         DUP               5.19MiB
   System:           DUP               4.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
    ID        SIZE  PATH
     1    52.00MiB  /dev/sda4


where /tmp/test contains:
$ ls -l /tmp/test/
total 16392
-rw-r--r-- 1 ghigo ghigo        5 Aug 31 18:26 123
-rw-r--r-- 1 ghigo ghigo 16777216 Aug 31 18:26 123456
-rw-r--r-- 1 ghigo ghigo        5 Aug 31 18:26 456


BTRFS sees only 52MB instead of ~80GB.

Even if I try to mount and umount, the thing doesn't change.

$ sudo mount /dev/sda4 /mnt/other/
$ echo 123 | sudo tee /mnt/other/9999
123
$ sync
$ sudo umount /mnt/other
$ sudo mount /dev/sda4 /mnt/other/

Below an output of "btrfs fi us"

$ sudo btrfs fi us /mnt/other/
Overall:
     Device size:                 52.00MiB
     Device allocated:            52.00MiB
     Device unallocated:                     0.00B
     Device missing:                 0.00B
     Used:                        16.16MiB
     Free (estimated):            13.19MiB      (min: 13.19MiB)
     Data ratio:                              1.00
     Metadata ratio:                  1.00
     Global reserve:              16.00MiB      (used: 0.00B)

Data,single: Size:29.19MiB, Used:16.00MiB
    /dev/sda4     29.19MiB

Metadata,single: Size:18.81MiB, Used:144.00KiB
    /dev/sda4     18.81MiB

System,single: Size:4.00MiB, Used:16.00KiB
    /dev/sda4      4.00MiB

Unallocated:
    /dev/sda4        0.00B



And a balance is impossible

$ sudo btrfs bala start --full-balance /mnt/other/
ERROR: error during balancing '/mnt/other/': No space left on device
There may be more info in syslog - try dmesg | tail

$ dmesg | tail
[ 2034.684649] BTRFS: device fsid 60ea1c38-e5b1-403d-8a25-1cac2258922d devid 1 
transid 7 /dev/sda4
[ 2140.835629] BTRFS info (device sda4): disk space caching is enabled
[ 2140.835632] BTRFS info (device sda4): has skinny extents
[ 2140.835633] BTRFS info (device sda4): flagging fs with big metadata feature
[ 2140.837381] BTRFS info (device sda4): creating UUID tree
[ 2171.646349] BTRFS info (device sda4): disk space caching is enabled
[ 2171.646362] BTRFS info (device sda4): has skinny extents
[ 2273.696914] BTRFS info (device sda4): relocating block group 20512768 flags 
data
[ 2273.721995] BTRFS info (device sda4): relocating block group 9633792 flags 
data
[ 2273.746950] BTRFS info (device sda4): 6 enospc errors during balance


I tried several btrfs-progs version ( I go back until v0.20-rc1: 2012!!!), and the 
behavior is the same: with '-r' the disk is not fully used. So I suppose that it is a 
kernel problem (IIRC the kernel should "complete" the mkfs at the first mount). 
Any idea ?

BR
G.Baroncelli


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

Reply via email to