fs/btrfs: Introducing btrfs rootfs support.
Subsystems (2)
PATCH 2/2 fs/btrfs: Introducing btrfs rootfs support.
This patch makes it possible to format the rootfs using btrfs. It introduces the option; BR2_TARGET_ROOTFS_BTRFS
When selected, the user is able to specify the filesystem size, label, options, and node and sector sizes.
The new files are based on fs/ext2/{Config.in,ext2.mk}
--- fs/Config.in | 1 + fs/btrfs/Config.in | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ fs/btrfs/btrfs.mk | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 fs/btrfs/Config.in create mode 100644 fs/btrfs/btrfs.mk
fs/Config.in +1 -0
@@ -1,6 +1,7 @@ menu "Filesystem images" source "fs/axfs/Config.in" +source "fs/btrfs/Config.in" source "fs/cloop/Config.in" source "fs/cpio/Config.in" source "fs/cramfs/Config.in"
fs/btrfs/Config.in new file +54 -0
54 lines not on this page · raw message
fs/btrfs/btrfs.mk new file +39 -0
@@ -0,0 +1,39 @@ +################################################################################ +# +# Build the btrfs root filesystem image +# +################################################################################ + +BTRFS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE)) +ifeq ($(BR2_TARGET_ROOTFS_BTRFS)-$(BTRFS_SIZE),y-) +$(error BR2_TARGET_ROOTFS_BTRFS_SIZE cannot be empty) +endif + +BTRFS_SIZE_NODE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE)) +BTRFS_SIZE_SECTOR = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR)) +BTRFS_FEATURES = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_FEATURES)) +# qstrip results in stripping consecutive spaces into a single one. So the +# variable is not qstrip-ed to preserve the integrity of the string value. +BTRFS_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_BTRFS_LABEL)) +# ") + +BTRFS_OPTS = \ + -r '$(TARGET_DIR)' \ + -L '$(BTRFS_LABEL)' \ + $(if $(BTRFS_SIZE_NODE),--nodesize '$(BTRFS_SIZE_NODE)') \ + $(if $(BTRFS_SIZE_SECTOR),--sectorsize '$(BTRFS_SIZE_SECTOR)') \ + $(if $(BTRFS_FEATURES),--features '$(BTRFS_FEATURES)') + +ROOTFS_BTRFS_DEPENDENCIES = host-btrfs-progs + +define ROOTFS_BTRFS_CMD + rm -f $@ + truncate -s $(BTRFS_SIZE) $@ + $(HOST_DIR)/bin/mkfs.btrfs $(BTRFS_OPTS) $@ \ + || { ret=$$?; \ + echo "*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_BTRFS_SIZE)" 1>&2; \ + exit $$ret; \ + } +endef + +$(eval $(rootfs))
Signature · 1 line
2.11.0
PATCH 2/2 fs/btrfs: Introducing btrfs rootfs support.
Robert, All,
On 2018-08-23 21:26 +0100, Robert J. Heywood spake thusly:
Quoted 8 lines
This patch makes it possible to format the rootfs using btrfs. It introduces the option;
BR2_TARGET_ROOTFS_BTRFSWhen selected, the user is able to specify the filesystem size, label, options, and node and sector sizes.
The new files are based onfs/ext2/{Config.in,ext2.mk}Signed-off-by Robert J. Heywood <[email protected]>
[--SNIP--]
Quoted 15 lines
fs/btrfs/Config.in new file +9
-0@@ -0,0 +1,54 @@ +config BR2_TARGET_ROOTFS_BTRFS + bool "btrfs root filesystem" + select BR2_PACKAGE_HOST_BTRFS_PROGS + help + Build a btrfs root filesystem. If you enable this option, you + probably want to enable the btrfs-progs package too. + + +if BR2_TARGET_ROOTFS_BTRFS
fs/btrfs/Config.in line 19
Quoted 10 lines
fs/btrfs/Config.in new file +10
-0+ +config BR2_TARGET_ROOTFS_BTRFS_LABEL + string "filesystem label" + +config BR2_TARGET_ROOTFS_BTRFS_SIZE + string "filesystem size" + default "100M" + help + The size of the filesystem image. If it does not have a + suffix, it is interpreted as power-of-two kilobytes. If it is
This is now wrong, as 'truncate' uses bytes if there is no prefix.
fs/btrfs/Config.in line 22
Quoted 3 lines
fs/btrfs/Config.in new file +3
-0+ suffixed by 'k', 'm', 'g', 't' (either upper-case or + lower-case), then it is interpreted in power-of-two kilobytes, + megabytes, gigabytes, terabytes, etc.
So, maybe just:
The size of the filesystem image, in bytes. Suffix with k, m, g, or t for power-of-two kilo-, mega-, giga-, or terrabytes.
Quoted 9 lines
fs/btrfs/Config.in new file +9
-0+config BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE + string "btree node size" + default 16384 + help + The tree block size in which btrfs stores metadata. This must + be a multiple of the sectorsize, but not larger than 64KiB. + (65536). + If it is suffixed by 'k' (either upper-case or lower-case), + then it is interpreted in power-of-two kilobytes.
fs/btrfs/Config.in line 42
Quoted 10 lines
fs/btrfs/Config.in new file +10
-0+ +config BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR + string "sector size" + default 4096 + help + This value should be set to the page size. The default value of + 4096 is the the most common page size for most systems. + If the sectorsize differs from the page size, the created + filesystem may not be mountable by the kernel. + Therefore it is recommended to leave this value at 4096.
... unless you know that your kernel uses a different page size.
fs/btrfs/Config.in line 43
Quoted 2 lines
fs/btrfs/Config.in new file +2
-0+ If it is suffixed by 'k' (either upper-case or lower-case), + then it is interpreted in power-of-two kilobytes.
I failed to note that in the previous iteration, but: the 'sector size' option is referenced from the 'btree node size' option. So the order should be inversed.
fs/btrfs/Config.in line 51
Quoted 6 lines
fs/btrfs/Config.in new file +6
-0+config BR2_TARGET_ROOTFS_BTRFS_FEATURES + string "Filesystem Features" + help + A comma separated string of features that can be enabled + during creation time. + For a list of available options, use;
Change the trailing semi-colon ';' by a colon ':'.
Otherwise, that's nice. :-)
Regards,
Yann E. MORIN.
Quoted 55 lines
fs/btrfs/Config.in new file +3
-0+ `.../host/bin/mkfs.btrfs -O list-all` + +endif # BR2_TARGET_ROOTFS_BTRFSfs/btrfs/btrfs.mk new file +39
-0@@ -0,0 +1,39 @@ +################################################################################ +# +# Build the btrfs root filesystem image +# +################################################################################ + +BTRFS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE)) +ifeq ($(BR2_TARGET_ROOTFS_BTRFS)-$(BTRFS_SIZE),y-) +$(error BR2_TARGET_ROOTFS_BTRFS_SIZE cannot be empty) +endif + +BTRFS_SIZE_NODE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE)) +BTRFS_SIZE_SECTOR = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR)) +BTRFS_FEATURES = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_FEATURES)) +# qstrip results in stripping consecutive spaces into a single one. So the +# variable is not qstrip-ed to preserve the integrity of the string value. +BTRFS_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_BTRFS_LABEL)) +# ") + +BTRFS_OPTS = \ + -r '$(TARGET_DIR)' \ + -L '$(BTRFS_LABEL)' \ + $(if $(BTRFS_SIZE_NODE),--nodesize '$(BTRFS_SIZE_NODE)') \ + $(if $(BTRFS_SIZE_SECTOR),--sectorsize '$(BTRFS_SIZE_SECTOR)') \ + $(if $(BTRFS_FEATURES),--features '$(BTRFS_FEATURES)') + +ROOTFS_BTRFS_DEPENDENCIES = host-btrfs-progs + +define ROOTFS_BTRFS_CMD + rm -f $@ + truncate -s $(BTRFS_SIZE) $@ + $(HOST_DIR)/bin/mkfs.btrfs $(BTRFS_OPTS) $@ \ + || { ret=$$?; \ + echo "*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_BTRFS_SIZE)" 1>&2; \ + exit $$ret; \ + } +endef + +$(eval $(rootfs))Signature · 6 lines
2.11.0 _______________________________________________ buildroot mailing list buildroot at busybox.net http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'