如何在Linux上构建和安装btrfs-tools的最新版本

时间:2020-01-09 10:38:56  来源:igfitidea点击:

从Linux内核2.6.29-rc1版本开始,Btrfs已包含在主线内核中。
如何在Linux上下载和构建/编译最新版本的Btrfs? Btrfs包含两个部分,如下所示:

  • btrfs.ko Linux的内核模块(驱动程序)。通常位于/lib/modules/4.2.0/kernel/fs/btrfs/btrfs.ko,并且必须受Linux内核支持。
  • brtfs-tools用户空间实用程序的来源。

Btrfs的主要功能

Btrfs(更好的FS)是一个新文件系统,具有类似于Sun/Oracles出色的ZFS的强大功能。
其中包括快照,多磁盘条带化和镜像(软件RAID),校验和,增量备份以及动态压缩,这些压缩可以显着提高性能并节省空间。

Btrfs似乎是Linux文件系统的未来。
有关更多信息,请参见此处的官方页面。

在本教程中,您将学习如何在基于Debian或Ubuntu Linux的服务器上构建和安装最新版本的用户空间实用程序(brtfs-tools)。

将最新的内核与btrfs一起使用

从Linux内核v2.6.29-rc1开始,Btrfs已包含在主线内核中。
我建议您使用最新的Linux内核版本来充分利用Btrfs。
有关更多信息,请参见如何在Linux操作系统上编译最新版本的Linux内核。

安装所需的软件

执行以下apt-get命令以安装构建工具:

$ sudo apt-get install git install asciidoc xmlto --no-install-recommends
$ sudo apt-get install uuid-dev libattr1-dev zlib1g-dev libacl1-dev e2fslibs-dev libblkid-dev liblzo2-dev

下载brtfs-tools的最新稳定版本

执行以下git命令(在编译并构建brtfs-tools之前无需root):

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git

构建brtfs-tools

执行以下命令,以准备用于编译和验证功能的构建:

$ cd btrfs-progs
$ ./autogen.sh

接下来输入。 /configuremake进行编译。

$ ./configure && make

输出示例:

checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
....
..
....
config.status: creating Documentation/Makefile
config.status: creating version.h
config.status: creating config.h
 
	btrfs-progs v4.2
 
	prefix:            /usr
	exec prefix:       ${prefix}
 
	bindir:            ${exec_prefix}/bin
	libdir:            ${exec_prefix}/lib
	includedir:        ${prefix}/include
 
	compiler:          gcc
	cflags:            -g -O1 -Wall -D_FORTIFY_SOURCE=2
	ldflags:           
 
	documentation:     yes
	backtrace support: yes
	btrfs-convert:     yes
 
	Type 'make' to compile.
 
    [CC]     ctree.o
    [CC]     disk-io.o
    [CC]     radix-tree.o
....
...
    [ASCII]  btrfs-property.xml
    [XMLTO]  btrfs-property.8
    [GZ]     btrfs-property.8.gz
rm btrfs-quota.8 btrfs-balance.xml btrfs-restore.xml btrfs-scrub.8 mkfs.btrfs.8 btrfs-check.8 btrfs-map-logical.8 btrfs-select-super.xml btrfs-scrub.xml mkfs.btrfs.xml btrfs-map-logical.xml btrfs-inspect-device.8 btrfs-image.8 btrfs-convert.8 btrfs-device.xml btrfs-image.xml btrfs-mount.5 btrfs-select-super.8 btrfs-rescue.8 btrfs-check.xml btrfs.8 btrfs-qgroup.8 btrfs-rescue.xml btrfs-mount.xml btrfs-qgroup.xml btrfs-property.8 btrfs-subvolume.8 btrfs-property.xml btrfs-restore.8 btrfstune.8 btrfs-receive.8 btrfs-subvolume.xml btrfs-receive.xml btrfs-find-root.8 btrfs-send.8 btrfs-find-root.xml btrfs-balance.8

安装

首先,确保从系统中删除了较旧的版本:

$ sudo apt-get --purge remove btrfs-tools

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-compiler-gcc-4.8-x86 linux-headers-3.16.0-4-amd64 linux-headers-3.16.0-4-common linux-kbuild-3.16
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  btrfs-tools*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 3,099 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 154332 files and directories currently installed.)
Removing btrfs-tools (3.17-1.1) ...
update-initramfs: deferring update (trigger activated)
Purging configuration files for btrfs-tools (3.17-1.1) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for initramfs-tools (0.120) ...
update-initramfs: Generating /boot/initrd.img-4.2.0
Processing triggers for libc-bin (2.19-18+deb8u1) ...

最后,安装最新版本,执行:

$ sudo make install

输出示例:

[LN]     libbtrfs.so.0
    [LN]     libbtrfs.so
    [LD]     libbtrfs.so.0.1
Making install in Documentation
/usr/bin/install -c -d -m 755 /usr/share/man/man5
/usr/bin/install -c -d -m 755 /usr/share/man/man8
/usr/bin/install -c -m 644 btrfs-mount.5.gz /usr/share/man/man5
# the source file name of btrfs.5 clashes with section 8 page, but we
# want to keep the code generic
/bin/mv /usr/share/man/man5/btrfs-mount.5.gz /usr/share/man/man5/btrfs.5.gz
ln -s -f btrfs-check.8.gz /usr/share/man/man8/btrfsck.8.gz
ln -s -f btrfs-rescue.8.gz /usr/share/man/man8/btrfs-zero-log.8.gz
/usr/bin/install -c -m755 -d /usr/bin
/usr/bin/install -c btrfs mkfs.btrfs btrfs-debug-tree btrfs-map-logical btrfs-image btrfs-zero-log btrfs-find-root btrfstune btrfs-show-super btrfs-select-super btrfs-convert /usr/bin
/usr/bin/install -c fsck.btrfs /usr/bin
# btrfsck is a link to btrfs in the src tree, make it so for installed file as well
ln -s -f btrfs /usr/bin/btrfsck
/usr/bin/install -c -m755 -d /usr/lib
/usr/bin/install -c libbtrfs.so.0.1 libbtrfs.a /usr/lib
cp -a libbtrfs.so.0 libbtrfs.so /usr/lib
/usr/bin/install -c -m755 -d /usr/include/btrfs
/usr/bin/install -c -m644 send-stream.h send-utils.h send.h rbtree.h btrfs-list.h crc32c.h list.h kerncompat.h radix-tree.h extent-cache.h extent_io.h ioctl.h ctree.h btrfsck.h version.h /usr/include/btrfs

验证

要查看版本信息,请执行:

$ btrfs version

输出示例:

btrfs-progs v4.2

这是我的Linux内核版本:

$ uname -mrs

输出示例:

Linux 4.2.0 x86_64