• Categories
    Category
    {{ postCtrl.tags }}
    • {{ category.tag_type }}

      • {{tag.tag_name}}
      • View more
  • Categories
    Category
    {{ postCtrl.tags }}
    • {{ category.tag_type }}

      • {{tag.tag_name}}
      • View more
  • News
  • Tutorials
  • Forums
  • Tags
  • Users
Tutorial News Comments FAQ Related Articles

How To Generate Btrfs File System in Linux

{{postValue.id}}

Btrfs File System- Creation and Management in Linux

This article guide us to create and manage the Btrfs File System in linux with video tutuorial. Btrfs file system is a GPL-licensed copy-on-write (COW) developed by multiple companies. In this files can be created in any characters except “ /” and NULL, which has self-healing features and have the capability of spanning multiple volumes.

Features

  • Added convert option to show progress.
  • Ability to link lost files to lost+found. This is a fix for a recent kernel Bug.
  • By default mkfs skinny-metadata feature is available from kernel 3.10.
  • To repair the severely corrupted file-systems with care.
  • Sub volumes for file-system.
  • To see the overview of file-system usage rather than df.
  • Check and defragment online files system.
  • Extend base file storage.

To Install and Create Btrfs Filesystem

Use the following command to install btrfs package.

On Debian based Distro’ s

# sudo apt-get install btrfs-tools -y

On RedHat based Distro’ s

[root@linuxhelp ~]# yum install btrfs-progs -y
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
Resolving Dependencies
-->  Running transaction check
--->  Package btrfs-progs.x86_64 0:3.12-4.el7 will be updated
.
.
.
Running transaction
  Updating   : btrfs-progs-3.19.1-1.el7.x86_64                                                                                          1/2 
  Cleanup    : btrfs-progs-3.12-4.el7.x86_64                                                                                            2/2 
  Verifying  : btrfs-progs-3.19.1-1.el7.x86_64                                                                                          1/2 
  Verifying  : btrfs-progs-3.12-4.el7.x86_64                                                                                            2/2 

Updated:
  btrfs-progs.x86_64 0:3.19.1-1.el7                                                                                                         

Complete!

After installing the btrfs package, enable the Kernel module using the following command.

[root@linuxhelp ~]# modprobe btrfs

Setup logical volumes and create the btrfs file-system. Verify the disk attached to the system before creating it.

[root@linuxhelp ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b5211

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 5122047 2048000 82 Linux swap / Solaris
/dev/sda3 5122048 41943039 18410496 83 Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Use ' fdisk' interface to create partitions on the /dev/sdb disk as follows.

[root@linuxhelp ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disk label with disk identifier 0x8d064c98.

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +2G
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition ' Linux'  to ' Linux LVM' 

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x8d064c98

Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Run the partprobe command to add the disk information to kernel. After that, list the partition as shown below.

[root@linuxhelp ~]# partprobe /dev/sdb
[root@linuxhelp ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b5211

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 5122047 2048000 82 Linux swap / Solaris
/dev/sda3 5122048 41943039 18410496 83 Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x8d064c98

Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 8e Linux LVM

To Setup Logical Volume

Use the pvcreate and vgcreate command to create Physical volume and volume group on /dev/sdb1 disk.

[root@linuxhelp ~]# pvcreate /dev/sdb1
Physical volume " /dev/sdb1"  successfully created
[root@linuxhelp ~]# vgcreate linuxhelp /dev/sdb1
Volume group " linuxhelp"  successfully created

Create the Logical volume in the volume group.

[root@linuxhelp ~]# lvcreate -L 500M -n lv1 /dev/mapper/linuxhelp
Logical volume " lv1"  created
[root@linuxhelp ~]# lvcreate -L 500M -n lv2 /dev/mapper/linuxhelp
Logical volume " lv2"  created

Now list the created Physical volume, Volume group and logical volumes.

[root@linuxhelp ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 linuxhelp lvm2 a-- 2.00g 1.02g
[root@linuxhelp ~]# vgs
VG #PV #LV #SN Attr VSize VFree
linuxhelp 1 2 0 wz--n- 2.00g 1.02g
[root@linuxhelp ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv1 linuxhelp -wi-a----- 500.00m
lv2 linuxhelp -wi-a----- 500.00m

To Create Btrfs Filesystem

Create the file-system for our logical volumes by using below command.

[root@linuxhelp ~]# mkfs.btrfs /dev/mapper/linuxhelp-lv1
SMALL VOLUME: forcing mixed metadata/data groups
btrfs-progs v3.19.1
See http://btrfs.wiki.kernel.org for more information.

Turning ON incompat feature ' mixed-bg' : mixed data and metadata block groups
Turning ON incompat feature ' extref' : increased hardlink limit per file to 65536
Turning ON incompat feature ' skinny-metadata' : reduced-size metadata extent refs
Created a data/metadata chunk of size 8388608
fs created label (null) on /dev/mapper/linuxhelp-lv1
nodesize 4096 leafsize 4096 sectorsize 4096 size 500.00MiB

Next mount the file-system by issuing the following command.

[root@linuxhelp ~]# mount /dev/mapper/linuxhelp-lv1 /mnt

With the help of df command, verify the mount point.

[root@linuxhelp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 3.8G 14G 22% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 494M 140K 494M 1% /dev/shm
tmpfs 494M 7.1M 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 497M 116M 382M 24% /boot
/dev/sr0 3.9G 3.9G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/linuxhelp-lv1 500M 32K 496M 1% /mnt

To Add Devices

Extend the mount point size /mnt/ or we can add the device to mount point, it will extend the size of file-system.

[root@linuxhelp ~]# btrfs device add /dev/mapper/linuxhelp-lv2 /mnt

Verify the mount point size using ‘ df -h‘ command.

[root@linuxhelp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 3.9G 14G 22% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 494M 140K 494M 1% /dev/shm
tmpfs 494M 7.1M 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 497M 116M 382M 24% /boot
/dev/sr0 3.9G 3.9G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/linuxhelp-lv1 1000M 32K 995M 1% /mnt

Check the status of the newly added device(/mnt).

[root@linuxhelp ~]# btrfs device stats /mnt
[/dev/mapper/linuxhelp-lv1].write_io_errs 0
[/dev/mapper/linuxhelp-lv1].read_io_errs 0
[/dev/mapper/linuxhelp-lv1].flush_io_errs 0
[/dev/mapper/linuxhelp-lv1].corruption_errs 0
[/dev/mapper/linuxhelp-lv1].generation_errs 0
[/dev/mapper/linuxhelp-lv2].write_io_errs 0
[/dev/mapper/linuxhelp-lv2].read_io_errs 0
[/dev/mapper/linuxhelp-lv2].flush_io_errs 0
[/dev/mapper/linuxhelp-lv2].corruption_errs 0
[/dev/mapper/linuxhelp-lv2].generation_errs 0

In case to remove the logical volume " linuxhelp-lv2" from mount point, use the following command.

[root@linuxhelp ~]# btrfs device delete /dev/mapper/linuxhelp-lv2 /mnt
[root@linuxhelp ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 3.9G 14G 22% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 494M 140K 494M 1% /dev/shm
tmpfs 494M 7.1M 487M 2% /run
tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 497M 116M 382M 24% /boot
/dev/sr0 3.9G 3.9G 0 100% /run/media/root/CentOS 7 x86_64
/dev/mapper/linuxhelp-lv1 500M 32K 496M 1% /mnt

Additional options in Btrfs

To Check the disk usage of mount point

[root@linuxhelp ~]# btrfs filesystem df /mnt
System, single: total=4.00MiB, used=4.00KiB
Data+Metadata, single: total=8.00MiB, used=28.00KiB
 

To List the btrfs filesystem

[root@linuxhelp ~]# btrfs filesystem show --mounted
Label: none uuid: 9055cf28-7e21-4fcd-9095-8199c2684f35
Total devices 1 FS bytes used 32.00KiB
devid 1 size 500.00MiB used 12.00MiB path /dev/mapper/linuxhelp-lv1
btrfs-progs v3.19.1

To Force a sync for the file-system.

[root@linuxhelp ~]# btrfs filesystem sync /mnt
FSSync ' /mnt' 

To Defragment the files and directory metadata.

[root@linuxhelp ~]# btrfs filesystem defragment -v -r /mnt
btrfs-progs v3.19.1

-r - recursively defragment through directories.
-v - verbose.
-c - to compress the file contents while defragmenting.

To Check btrfs file-system using btrfsck command

[root@linuxhelp ~]# umount /mnt
[root@linuxhelp ~]# btrfsck /dev/mapper/linuxhelp-lv1
Checking filesystem on /dev/mapper/linuxhelp-lv1
UUID: 9055cf28-7e21-4fcd-9095-8199c2684f35
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
found 32768 bytes used err is 0
total csum bytes: 0
total tree bytes: 32768
total fs tree bytes: 8192
total extent tree bytes: 4096
btree space waste bytes: 27300
file data blocks allocated: 0
referenced 0
btrfs-progs v3.19.1

To Create the Btrfs Subvolumes

Create or delete the subvolume by using the following simple commands. Before creating subvolume list, check if any subvolume is existing.

[root@linuxhelp ~]# btrfs subvolume list /mnt/linuxhelp_btrfs1/

Use the below command to create subvolume.

[root@linuxhelp ~]# btrfs subvolume create /mnt/vol1
Create subvolume ' /mnt/vol1' 
[root@linuxhelp ~]# btrfs subvolume create /mnt/vol2
Create subvolume ' /mnt/vol2' 

List and check the newly created subvolumes.

[root@linuxhelp ~]# btrfs subvolume list /mnt
ID 256 gen 10 top level 5 path vol1
ID 257 gen 11 top level 5 path vol2

Navigate to mount point /mnt/linuxhelp_btrfs1/ and then list newly created subvolumes which have created in the above step.

[root@linuxhelp ~]# cd /mnt/vol1

Now copy some of the random files from /etc/ to subvol1.

[root@linuxhelp vol1]# cp /etc/*.conf .
[root@linuxhelp vol1]# ls
asound.conf e2fsck.conf ipsec.conf libuser.conf nfsmount.conf radvd.conf sos.conf vconsole.conf
brltty.conf fprintd.conf kdump.conf locale.conf nsswitch.conf request-key.conf sudo.conf wvdial.conf
chrony.conf fuse.conf krb5.conf logrotate.conf numad.conf resolv.conf sudo-ldap.conf yum.conf
colord.conf hba.conf ksmtuned.conf man_db.conf oddjobd.conf rsyncd.conf sysctl.conf
dnsmasq.conf host.conf ld.so.conf mke2fs.conf pbm2ppa.conf rsyslog.conf updatedb.conf
dracut.conf idmapd.conf libaudit.conf mtools.conf pnm2ppa.conf sestatus.conf usb_modeswitch.conf

To Mount the Subvolume

Use the following command to know the ID of subvolumes.

[root@linuxhelp ~]# btrfs subvolume list /mnt
ID 256 gen 13 top level 5 path vol1
ID 257 gen 11 top level 5 path vol2

Before mounting the subvolumes one by one to the parent volume, unmount the parent volume (/mnt/)

[root@linuxhelp ~]# umount /mnt

Now mount the subvolume using it’ s ID to the parent volume.

[root@linuxhelp ~]# mount -o subvolid=256 /dev/mapper/linuxhelp-lv1 /mnt/

This will mount the subvol1 using it’ s ID to /mnt/ Just list and check the mount point.

Use the following command to make the subvolume as default.

[root@linuxhelp ~]# btrfs subvolume set-default 256 /mnt

List the subvolume by using the following command.

[root@linuxhelp ~]# btrfs subvolume get-default /mnt
ID 256 gen 13 top level 5 path vol1

To Create Snapshots

To create a snapshot of source, use the below command. Here, we are taking snapshot of /mnt/ to the same location.

[root@linuxhelp ~]# btrfs subvolume snapshot /mnt /mnt
Create a snapshot of ' /mnt'  in ' /mnt/mnt' 

To create a snapshot with snap-test use the following command.

[root@linuxhelp ~]# btrfs subvolume snapshot /mnt /mnt/snap-test

Create a snapshot of ' /mnt' in ' /mnt/snap-test' .

[root@linuxhelp ~]# ls /mnt/
asound.conf e2fsck.conf ipsec.conf libuser.conf mtools.conf pnm2ppa.conf sestatus.conf updatedb.conf
brltty.conf fprintd.conf kdump.conf locale.conf nfsmount.conf radvd.conf snap-test usb_modeswitch.conf
chrony.conf fuse.conf krb5.conf logrotate.conf nsswitch.conf request-key.conf sos.conf vconsole.conf
colord.conf hba.conf ksmtuned.conf man_db.conf numad.conf resolv.conf sudo.conf wvdial.conf
dnsmasq.conf host.conf ld.so.conf mke2fs.conf oddjobd.conf rsyncd.conf sudo-ldap.conf yum.conf
dracut.conf idmapd.conf libaudit.conf mnt pbm2ppa.conf rsyslog.conf sysctl.conf

We can read and write any contents in the above snapshots. To create a read-only snapshot use -r option as shown below.

[root@linuxhelp ~]# btrfs subvolume snapshot -r /mnt /mnt/read-only

Create a readonly snapshot of ' /mnt'  in ' /mnt/read-only' 

For Permanent Mounting

Use fstab entry for permanent mounting.

[root@linuxhelp ~]# vim /etc/fstab

Add the following line to fstab.

/dev/mapper/linuxhelp-lv1 /mnt btrfs defaults 0 0

Tags:
matthew
Author: 

Comments ( 0 )

No comments available

Add a comment
{{postCtrl.cmtErrMsg}}

Frequently asked questions ( 5 )

Q

Can we create subvolumes in Btrfs File System?

A

Yes, you can create subvolumes in Btrfs File System.

Q

How to install Btrfs File System in parrot Os?

A

The procedure is almost same like "apt-get install btrfs-progs btrfs-tools"

Q

What is the use of partprobe in Linux system?

A

Partprobe is used for updating the changes in kernel

Q

Is the procedure relies the same as LVM formation on?

A

Since only file system getting changed, remaining all same as LVM

Q

Do I get regular progress on the status for Btrfs File System?

A

In Btrfs File System "convert" option is added to show progress.

Back To Top!
Rank
User
Points

Top Contributers

userNamenaveelansari
135850

Top Contributers

userNameayanbhatti
92510

Top Contributers

userNamehamzaahmed
32150

Top Contributers

1
userNamelinuxhelp
31040

Top Contributers

userNamemuhammadali
24500
Can you help Elijah ?
Remote Desktop Connection Has Stopped Working

When accessing my remote machine server using remote desktop on a windows machine I am getting this error

forum (1)

Networking
  • Routing
  • trunk
  • Netmask
  • Packet Capture
  • domain
  • HTTP Proxy
Server Setup
  • NFS
  • KVM
  • Memory
  • Sendmail
  • WebDAV
  • LXC
Shell Commands
  • Cloud commander
  • Command line archive tools
  • last command
  • Shell
  • terminal
  • Throttle
Desktop Application
  • Linux app
  • Pithos
  • Retrospect
  • Scribe
  • TortoiseHg
  • 4Images
Monitoring Tool
  • Monit
  • Apache Server Monitoring
  • EtherApe 
  • Arpwatch Tool
  • Auditd
  • Barman
Web Application
  • Nutch
  • Amazon VPC
  • FarmWarDeployer
  • Rukovoditel
  • Mirror site
  • Chef
Contact Us | Terms of Use| Privacy Policy| Disclaimer
© 2025 LinuxHelp.com All rights reserved. Linux™ is the registered trademark of Linus Torvalds. This site is not affiliated with linus torvalds in any way.