Linux学习之btrfs文件系统

btrfs是Linux系统上一种非常强大的文件系统,全称:B-tree,是Oracle公司基于GPL协定于2007年研发的。那么对于btrfs文件系统我们如何去创建使用它呢。下面我们将以CentOS7系统在实验中研究它。

一、了解btrfs的特性

btrfs文件系统有很多的特性 ,我们这边就它的几个核心的特性说下:

1、多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”、“修改”。

2、写时复制更新机制:复制、更新及替换指针,而非“就地”更新;

3、数据与元数据校验码:checksum

4、支持子卷:可以在btrfs文件系统下创建子卷

5、支持快照

6、透明压缩:指的文件的存储是压缩的形式,而对于用户来说我们并不知道

二、如何创建btrfs文件系统

首先创建btrfs文件系统我们需要多块磁盘,在虚拟机中我们要添加几块磁盘

[[email protected] ~]# fdisk -l

磁盘/dev/sda:128.8 GB,128849018880字节,251658240个扇区

Units=扇区 of 1*512=512 bytes

扇区大小(逻辑/物理):512字节/512字节

I/O 大小(最小/最佳):512字节/512字节

磁盘标签类型:dos

磁盘标识符:0x000abcfd

设备BootStartEndBlocksIdSystem

/dev/sda1  *2048102604751200083Linux

/dev/sda2         10260482516582391253160968eLinux LVM

磁盘/dev/sdc:21.5 GB,21474836480字节,41943040个扇区

Units=扇区 of 1*512=512 bytes

扇区大小(逻辑/物理):512字节/512字节

I/O 大小(最小/最佳):512字节/512字节

磁盘/dev/sdd:21.5 GB,21474836480字节,41943040个扇区

Units=扇区 of 1*512=512 bytes

扇区大小(逻辑/物理):512字节/512字节

I/O 大小(最小/最佳):512字节/512字节

磁盘/dev/sdb:21.5 GB,21474836480字节,41943040个扇区

Units=扇区 of 1*512=512 bytes

扇区大小(逻辑/物理):512字节/512字节

I/O 大小(最小/最佳):512字节/512字节

如上我添加了3块磁盘分别是sdb、sdc和sdd分别给它们的空间是20G

[[email protected] ~]# btrfs <=点击2次TAB键可以看出以下好多命令和btrfs文件系统有关的命令

btrfs             btrfs-debug-tree   btrfs-map-logical  btrfs-zero-log

btrfsck            btrfs-find-root    btrfs-show-super

btrfs-convert      btrfs-image       btrfstune

[[email protected] ~]# btrfs

我们这边只说btrfs文件系统的常用命令:

1、mkfs.btrfs:创建btrfs文件系统

-L “LABEL”:指定卷标

-d  <type> : 指定数据存储的类型,如:raid0,raid1,raid5,raid10,single

-m:指明元数据是指明存放的

-O  <feature>:指明一些选项

-O list-all:列出支持的所有feature

[[email protected] ~]# mkfs.btrfs -L mydata /dev/sdc/dev/sdd  <===把dev下的sdc和sdd两块磁盘创建成一个

Btrfs v3.16.2                          名为mydata的btrfs文件系统

See http://btrfs.wiki.kernel.org for moreinformation.

Turning ON incompatfeature ‘extref‘: increased hardlink limit per file to 65536

adding device /dev/sdd id 2

fs created label mydata on /dev/sdc

nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB

[[email protected] ~]#

2 、查看btrfs是否创建成功使用命令:btrfs filesystem show    如下

[[email protected] ~]# btrfs filesystem show /dev/sdc

Label:‘mydata‘ uuid:179e892a-aa8b-4f25-825d-c0a87d99096d

Total devices 2 FS bytes used 612.00KiB

devid    1 size 15.00GiB used 1.28GiB path /dev/sdc

devid    2 size 20.00GiB used 1.28GiB path /dev/sdd

Btrfs v3.16.2

注:我们创建文件系统的时候指定了两个磁盘,我们这边的路径使用/dev/sdc  和使用/dev/sdd效果是一样的

3  、我们上面对btrfs文件系统创建的卷标为mydata,我们使用命令查看卷标是否是我们创建的mydata

[[email protected] ~]# btrfs filesystem label /dev/sdc

mydata

4、如上我们创建好了btrfs文件系统和查看卷边的命令,那么如何去挂载和使用这个文件系统呢?

[[email protected] ~]# mkdir /mydata        <====创建目录mydata

[[email protected] ~]# mount -t btrfs /dev/sdc /mydata/   <====将之前创建的btrfs文件系统挂载到mydata下

[[email protected] ~]# df -h                <====使用df命令查看是否挂载成功

文件系统容量已用可用已用%挂载点

/dev/mapper/centos-root   50G6.9G44G14%/

devtmpfs                481M0481M0%/dev

tmpfs                   490M80K490M1%/dev/shm

tmpfs                   490M7.1M483M2%/run

tmpfs                   490M0490M0%/sys/fs/cgroup

/dev/mapper/centos-home   68G44M68G1%/home

/dev/sda1                497M126M371M26%/boot

/dev/sdc                  35G1.2M30G1%/mydata   <====这样可以看到我们创建 的btrfs文件系统挂载好了

[[email protected] ~]# cd /mydata/     <======切换到mydata目录下

[[email protected] mydata]# touch a.txt  <=====创建一个文件

[[email protected] mydata]# ll      <=====查看文件,这样我们的btrfs文件系统就可以使用了

总用量0

-rw-r--r--.1 root root 08月2921:08 a.txt

drwxr-xr-x.1 root root 968月2810:56 logs

[[email protected] mydata]#

卸载的话直接使用umount命令加上分区路径就可以了

5、btrfs文件系统还可以实现透明压缩,那么什么是透明压缩呢。就是我们在创建btrfs文件系统时,系统后台会自动压缩而我们这边并没有看到,那么如何实现压缩呢?我们下面演示下

用法:mount-o compress={lzo|zlib} DEVICE MOUNT_POINT

[[email protected] ~]# umount /mydata/      <======先卸载文件系统

[[email protected] ~]# mount -o compress=lzo /dev/sdc /mydata  <======在进行透明压缩挂载

6、实现指定btrfs文件系统的大小调整

[email protected] ~]# btrfs filesystem resize -10G/mydata  <======先对mydata减小10G

Resize‘/mydata‘ of ‘-10G‘

[[email protected] ~]# df -lh  <=====查看文件系统的容量

文件系统容量已用可用已用%挂载点

/dev/mapper/centos-root   50G6.9G44G14%/

devtmpfs                481M0481M0%/dev

tmpfs                   490M80K490M1%/dev/shm

tmpfs                   490M7.1M483M2%/run

tmpfs                   490M0490M0%/sys/fs/cgroup

/dev/mapper/centos-home   68G44M68G1%/home

/dev/sda1                497M126M371M26%/boot

/dev/sdc                  25G1.3M9.5G1%/mydata<==这里我们挂载的容量就减小了

[[email protected] ~]# btrfs filesystem resize +5G/mydata<====然后我们对mydata增加5G

Resize‘/mydata‘ of ‘+5G‘

[[email protected] ~]# df -lh

文件系统容量已用可用已用%挂载点

/dev/mapper/centos-root   50G6.9G44G14%/

devtmpfs                481M0481M0%/dev

tmpfs                   490M80K490M1%/dev/shm

tmpfs                   490M7.1M483M2%/run

tmpfs                   490M0490M0%/sys/fs/cgroup

/dev/mapper/centos-home   68G44M68G1%/home

/dev/sda1                497M126M371M26%/boot

/dev/sdc                  30G1.3M20G1%/mydata<=====这里查看容量就增加了

当然如果我们想增加和减小容量不仅可以使用增加容量的的方法,还可以使用增加货减小物理卷的方法,如:

[[email protected] ~]# btrfs device add /dev/sdb /mydata/<=====将物理磁盘sdb加入到mydata文件系统

[[email protected] ~]# btrfs balance start /mydata<==实现均衡操作(每块设备的数据平摊)

Done, had to relocate 3 out of 3 chunks

[[email protected] ~]# df -lh<=====查看mydata的大小,可以看出大小就增加了

文件系统容量已用可用已用%挂载点

/dev/mapper/centos-root   50G6.9G44G14%/

devtmpfs                481M0481M0%/dev

tmpfs                   490M80K490M1%/dev/shm

tmpfs                   490M7.1M483M2%/run

tmpfs                   490M0490M0%/sys/fs/cgroup

/dev/mapper/centos-home   68G44M68G1%/home

/dev/sda1                497M126M371M26%/boot

/dev/sdc                  50G1.3M40G1%/mydata

[[email protected] ~]# btrfs device delete /dev/sdb /mydata/<=====删除sdb

[[email protected] ~]# df -lh<=====再次查看mydata容量,这里就可以看出减少了

文件系统容量已用可用已用%挂载点

/dev/mapper/centos-root   50G6.9G44G14%/

devtmpfs                481M0481M0%/dev

tmpfs                   490M80K490M1%/dev/shm

tmpfs                   490M7.1M483M2%/run

tmpfs                   490M0490M0%/sys/fs/cgroup

/dev/mapper/centos-home   68G44M68G1%/home

/dev/sda1                497M126M371M26%/boot

/dev/sdc                  30G1.8M20G1%/mydata

7、改变文件系统的数据和元数据RAID的级别

[[email protected] ~]# btrfs balance start -mconvert=raid1 /mydata  指明元数据的为RAID1模式

Done, had to relocate 2 out of 3 chunks

[[email protected] ~]# btrfs balance start -dconvert=raid1 /mydata指明数据位RAID1模式

Done, had to relocate 1 out of 3 chunks

注:我们指定raid1和0时只需要2块物理分区,如果你需要创建成raid5的话至少需要3块物理磁盘

8、在btrfs文件系统的子卷的管理

(1)、子卷的创建

[[email protected] ~]# btrfs subvolume create /mydata/logss  <=====在mydata文件系统下创建logss

Create subvolume ‘/mydata/logss‘

[[email protected] ~]# btrfs subvolume list /mydata/<=====查看mydata所有的子卷,log是我之前创建的

ID 262 gen 108 top level 5 path logs

ID 267 gen 114 top level 5 path logss

注:如果父卷挂载了,那么子卷会自动挂载在文件系统上。当然子卷也单独挂载,前提是要先卸载父卷

(2)、子卷单独挂载

如:我们想要把logss子卷单独挂载,则执行以下操作,

先卸载父卷

[[email protected] ~]# mount -o subvol=logss /dev/sdc /mnt <====将子卷挂载到mnt目录下

[[email protected] ~]# cd /mnt/

[[email protected] mnt]# ll

总用量0

[[email protected] mnt]# cp /etc/fstab /mnt/ <=====拷贝一个文件到mnt下

[[email protected] mnt]# ll /mnt/

总用量4

-rw-r--r--.1 root root 5418月2922:33 fstab

[[email protected] mnt]# cd

[[email protected] ~]# umount /mnt/           <=====卸载子卷

[[email protected] ~]# mount /dev/sdc /mydata/  <=====重新挂载父卷

[[email protected] ~]# cd /mydata/logss/      <=====进到子卷中

[[email protected] logss]# ll                 <=====发现我们之前拷贝的文件还是存在的

总用量4

-rw-r--r--.1 root root 5418月2922:33 fstab

(3)、删除子卷

如何删除子卷,使用命令:btrfs subvolume delete

[email protected] ~]# btrfs subvolume delete /mydata/logss<=====删除子卷logss

Transaction commit: none (default)

Delete subvolume ‘/mydata/logss‘

[[email protected] ~]# ll /mydata/      <=====查看父卷中的内容已经没有logss了

总用量16

-rw-r--r--.1 root root     08月2921:08 a.txt

-rw-r--r--.1 root root 134308月2921:43 functions

drwxr-xr-x.1 root root    968月2810:56 logs

(4)、对子卷创建快照

[[email protected] ~]# btrfs subvolume create /mydata/logss <=====先创建子卷logss

Create subvolume ‘/mydata/logss‘

[[email protected] ~]# btrfs subvolume snapshot /mydata/logss /mydata/logss_snapshot<=====对子卷创建快照,命名为logss——snapshot                                                         Create a snapshot of ‘/mydata/logss‘in‘/mydata/logss_snapshot‘

[[email protected] ~]# btrfs subvolume list /mydata/      <=====查看mydata下又多了一个子卷,这就是我们所创建的快照

ID 262 gen 108 top level 5 path logs

ID 267 gen 124 top level 5 path logss

ID 268 gen 124 top level 5 path logss_snapshot

9、如何将btrfs文件系统转化为ext文件系统

首先需要创建一个新的分区,在新的分区上创建ext4的文件系统,这边我就不做演示了,直接将新分区创建成了ext4文件系统

[[email protected] ~]# mke2fs -t ext4 /dev/sdb1   将sdb1创建成ext4的文件系统

mke2fs 1.42.9(28-Dec-2013)

文件系统标签=

OS type:Linux

块大小=4096(log=2)

分块大小=4096(log=2)

Stride=0 blocks,Stripe width=0 blocks

655360 inodes,2621440 blocks

131072 blocks (5.00%) reserved for the super user

第一个数据块=0

Maximum filesystemblocks=2151677952

80 block groups

32768 blocks per group,32768 fragments per group

8192 inodes per group

Superblockbackups stored on blocks:

32768,98304,163840,229376,294912,819200,884736,1605632

Allocating grouptables:完成

正在写入inode表:完成

Creating journal (32768 blocks):完成

Writing superblocks andfilesystem accounting information:完成

[[email protected] ~]# mount /dev/sdb1 /mnt/     将ext4的文件系统挂载到mnt目录下

[[[email protected] ~]# cp /etc/fstab /mnt/       拷贝etc目录下的fstab到mnt目录下

[[email protected] ~]# ll /mnt/                   查看mnt下的文件

总用量20

-rw-r--r--.1 root root  5418月2923:35 fstab

drwx------.2 root root 163848月2923:33 lost+found

[[email protected] ~]# umount /mnt/               卸载ext4的文件系统

[[email protected] ~]# fsck -f /dev/sdb1          对sdb1分区进行检测

fsck,来自 util-linux 2.23.2

e2fsck 1.42.9(28-Dec-2013)

第一步:检查inode,块,和大小

第二步:检查目录结构

第3步:检查目录连接性

Pass4:Checking referencecounts

第5步:检查簇概要信息

/dev/sdb1:12/655360 files (0.0% non-contiguous),83138/2621440 blocks

[[email protected] ~]# btrfs-convert /dev/sdb1 将sdb1的文件系统转化成btrfs文件系统

creating btrfs metadata.

creating ext2fs image file.

cleaning up system chunk.

conversion complete.                     转化完成

[[email protected] ~]# btrfs filesystem show /dev/sdb1   查看sdb1的属性

Label: none uuid: c8db9d69-3e6a-4c99-835e-6e109b3a0169

Total devices 1 FS bytes used 324.80MiB

devid    1 size 10.00GiB used 10.00GiB path /dev/sdb1

Btrfs v3.16.2

[[email protected] ~]# mount /dev/sdb1 /mnt    挂载btrfs文件系统

[[email protected] ~]# ll /mnt                  查看fstab文件和之前一致

总用量8

drwxr-xr-x.1 root root  108月2923:37 ext2_saved

-rw-r--r--.1 root root 5418月2923:35 fstab

drwx------.1 root root  08月2923:33 lost+found

[[email protected] ~]# umount /mnt/          卸载mnt目录上的文件系统

[[email protected] ~]# btrfs-convert -r /dev/sdb1   将btrfs降级为ext4文件系统

rollback complete.                             提示降级成功

[[email protected] ~]# blkid /dev/sdb1       查看sdb1的信息,为ext4文件系统降级完成

/dev/sdb1: UUID="84965289-5f82-4fe3-b0e7-6160726d7a25" TYPE="ext4"

[[email protected] ~]# btrfs-convert /dev/sdb1  再次升级为btrfs文件系统

creating btrfs metadata.

creating ext2fs image file.

cleaning up system chunk.

conversion complete

[[email protected] ~]# blkid /dev/sdb1

/dev/sdb1: UUID="e582e4e2-a343-4d20-ba0e-dda43a3a90e5" UUID_SUB="95c8bc9b-ae3e-4989-904f-753781a83fab" TYPE="btrfs"

三、小结

上面所述的所有内容,只是我对于学习的总结,其中可能有些说的不足和不对的地方,希望朋友多指点。

时间: 2024-09-30 05:38:33

Linux学习之btrfs文件系统的相关文章

Linux学习笔记——Btrfs文件系统的管理及应用

Btrfs Btrfs(B-tree 文件系统, 通常念成 Butter FS,Better FS 或 B-tree FS),一种支持写入时复制(COW)的文件系统,可以由多个底层物理卷组成.另外该文件系统支持RAID,数据及元数据校验码(checksum),子卷,快照和透明压缩功能. 文件系统创建 创建完磁盘分区后对相应分区进行磁盘格式化   # mkfs.btrfs /dev/sda5    # mkdir /btrfsdisk    # mount -t btrfs /dev/sda5 /

Linux系统管理-(6)-BTRFS文件系统

什么是BTRFS? Btrfs,由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统.目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性.加入目前ext3/4未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小. B

Linux初学之btrfs文件系统及磁盘配额

btrfs Technical Preview, 技术预览版 BtrFS(B-tree文件系统,又称为Butter FS或Better FS),2007由oracle开源后,得到了IBM.intel等厂商的大力支持,其目标计划是替代linux目前的ext3/4,成为下一代linux标准的文件系统. btrfs的特性: 1.可扩展性: 1) ext系列文件系统使用块位图来保存每个块空闲与否的信息(每个块用一个位来表示是否空闲),当容量扩展时,块位图所占的空间会线性的增加,试想一下如果快位图变得很大

Linux学习之探索文件系统

Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file and directory attributes. 通过它,我们可以看见目录的内容.重要的文件和目录属性 ~ ls Applications Downloads Music VirtualBox VMs company Desktop Library Pictures build doc Documen

Linux学习之LVM文件系统

LVM指的是什么?有什么用?如何设置LVM等等...本着学习的目的,那么我们就这些问题来研究下到底什么是LVM,以及LVM的一系列的使用. 一.LVM是什么? LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统大小.此外,LVM的快照功能可以帮助我们快速 备份数据.LVM为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念.作用是使用纯软件的形式来组织一个或多个底层硬解设备组织成一个抽象的逻辑

Linux学习笔记——根文件系统

文件系统结构及根目录介绍: Rootfs :根文件系统 / 分区: [[email protected] /]# ls bin   dev  home  lib64       media  opt   root  selinux  sys  usr boot  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var /bin:二进制可执行文件 ,用户命令,如ls ,rm ,echo ,grep ,awk 等 ,普通用户也有执行权限

Linux学习笔记之 Btrfs文件系统简介及使用

Btrfs相关介绍: Btrfs 是一个 Linux 中的新的写时复制(copy-on-write (COW))的文件系统,目的是实现高级功能的同时着重与容错功能,修复功能以及易于管理.目前由Oracle, Red Hat, 富士通, Intel, SUSE以及其他组织共同开发,在 GPL 许可证下发行,同时向任何人公开代码. Btrfs核心特性: 多物理卷支持:btrfs可由多个底层物理卷组成:支持RAID,以联机"添加"."移除"."修改":

linux学习之路之磁盘管理和文件系统三

ext3文件系统和ext2文件系统的区别? 在某些时候,某个用户在linux系统上写入数据,这时系统正好断电或者系统核心出现错误,写入的数据仅有inode table和datablock而已,可能会导致之前写过的数据没有保存在磁盘上.而当系统重启后,系统可能会对没有保存的数据进行数据恢复.但是,由于系统并不知道是哪个文件不完整,因此会遍历整个文件系统中inode,来查看block是否完整.不过,当某个文件的数据太大时,数据的恢复时间可能会比较长,而这对于服务器来说是不利的.所以在这种情况下,也就

Linux学习笔记:btrfs

btrfs    Technical Preview, 技术预览版    BtrFS(B-tree文件系统,又称为Butter FS或Better FS),2007由oracle开源后,得到了IBM.intel等厂商的大力支持,其目标计划是替代linux目前的ext3/4,成为下一代linux标准的文件系统.    运行在linux上,并遵循GPL协议的强大文件系统.在2014年8月发布了稳定版. btrfs的特性:        1.可扩展性:            1) ext系列文件系统使