btrfs文件系统

2019-04-13  本文已影响0人  SRE1

btrfs文件系统:CentOS7使用(技术预览版)

Btrfs (读法:B-tree, Butter FS, Better FS),,一种支持写入时复制(COW)的文件系统,运行在Linux作业系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并释出原始码,在2014年8月释出稳定版。目标是取代Linux目前的ext3文件系统,改善ext3的限制,特别是单个文件的大小,总文件系统大小或文件检查和加入ext3未支持的功能。Btrfs也宣称专注在“容错、修复及易于管理”。

核心特性:

文件系统创建:

mkfs.btrfs
-L 'LABEL'

[root@promote ~]# mkfs.btrfs -L mydata /dev/sdb /dev/sdc
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.

Label:              mydata
UUID:               f0dd9cf7-d04f-46a0-bec6-2724271a27db
Node size:          16384
Sector size:        4096
Filesystem size:    40.00GiB
Block group profiles:
  Data:             RAID0             2.00GiB
  Metadata:         RAID1             1.00GiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1    20.00GiB  /dev/sdb
    2    20.00GiB  /dev/sdc
[root@promote ~]# blkid /dev/sdb
/dev/sdb: LABEL="mydata" UUID="f0dd9cf7-d04f-46a0-bec6-2724271a27db" UUID_SUB="df6af4ca-61c6-46fe-9a19-5e1270a40433" TYPE="btrfs" 
[root@promote ~]# blkid /dev/sdc
/dev/sdc: LABEL="mydata" UUID="f0dd9cf7-d04f-46a0-bec6-2724271a27db" UUID_SUB="9793055b-4f35-449a-8b38-032f762ccfbe" TYPE="btrfs" 

-d <type>: raid0, raid1, raid5, raid6, raid10, single
-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup
-O <feature>
-O list-all: 列出支持的所有feature

[root@centos7 ~]# mkfs.btrfs -O list-all
Filesystem features available:
mixed-bg            - mixed data and metadata block groups (0x4, compat=2.6.37, safe=2.6.37)
extref              - increased hardlink limit per file to 65536 (0x40, compat=3.7, safe=3.12, default=3.12)
raid56              - raid56 extended format (0x80, compat=3.9)
skinny-metadata     - reduced-size metadata extent refs (0x100, compat=3.10, safe=3.18, default=3.18)
no-holes            - no explicit hole extents for files (0x200, compat=3.14, safe=4.0)
属性查看:

btrfs filesystem show

[root@promote ~]# btrfs filesystem show
Label: 'mydata'  uuid: f0dd9cf7-d04f-46a0-bec6-2724271a27db
    Total devices 2 FS bytes used 112.00KiB
    devid    1 size 20.00GiB used 2.01GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
[root@promote ~]# btrfs filesystem show /dev/sdb
Label: 'mydata'  uuid: f0dd9cf7-d04f-46a0-bec6-2724271a27db
    Total devices 2 FS bytes used 112.00KiB
    devid    1 size 20.00GiB used 2.01GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
[root@promote ~]# btrfs filesystem label /dev/sdb
mydata

挂载文件系统:

mount -t btrfs /dev/sdb MOUNT_POINT

[root@promote ~]# mkdir /mydata
[root@promote ~]# mount -t btrfs /dev/sdb /mydata
[root@promote ~]# mount
/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/)
透明压缩机制:

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

[root@promote ~]# mount -o compress=lzo /dev/sdb /mydata
[root@promote ~]# cp /etc/rc.d/init.d/functions  /mydata/
[root@promote ~]# cd /mydata/
[root@promote mydata]# ll -l
total 28
-rw-r--r--. 1 root root     0 Apr 14 09:58 a.txt
-rw-r--r--. 1 root root 18281 Apr 14 10:02 functions
-rw-r--r--. 1 root root  4335 Apr 14 09:58 grub2.cfg
缩小或增加文件系统

btrfs filesystem resize [+|-] SIZE MOUNT_POINT

[root@promote ~]# btrfs filesystem  resize -10G /mydata
Resize '/mydata' of '-10G'
[root@promote ~]# btrfs filesystem show /mydata/
Label: 'mydata'  uuid: f0dd9cf7-d04f-46a0-bec6-2724271a27db
    Total devices 2 FS bytes used 916.00KiB
    devid    1 size 10.00GiB used 2.01GiB path /dev/sdb
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
[root@promote ~]# df -lh
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/centos_promote-root   50G  1.1G   49G   3% /
devtmpfs                         898M     0  898M   0% /dev
tmpfs                            910M     0  910M   0% /dev/shm
tmpfs                            910M  9.6M  901M   2% /run
tmpfs                            910M     0  910M   0% /sys/fs/cgroup
/dev/sda1                       1014M  146M  869M  15% /boot
/dev/mapper/centos_promote-home   67G   33M   67G   1% /home
tmpfs                            182M     0  182M   0% /run/user/0
/dev/sdb                          30G   18M   18G   1% /mydata
添加设备

btrfs device add DEVICE MOUNT_POINT

[root@promote ~]# btrfs device add /dev/sdd /mydata
[root@promote ~]# df -lh
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/centos_promote-root   50G  1.1G   49G   3% /
devtmpfs                         898M     0  898M   0% /dev
tmpfs                            910M     0  910M   0% /dev/shm
tmpfs                            910M  9.6M  901M   2% /run
tmpfs                            910M     0  910M   0% /sys/fs/cgroup
/dev/sda1                       1014M  146M  869M  15% /boot
/dev/mapper/centos_promote-home   67G   33M   67G   1% /home
tmpfs                            182M     0  182M   0% /run/user/0
/dev/sdb                          55G   18M   51G   1% /mydata
均衡操作

把/mydata中其它的数据,均衡(移动到)到新添加的磁盘中(会占用io资源)

[root@promote ~]# btrfs balance start /mydata

注意:如果数据量过大的时候,这个时间可能就会很久
balance也有暂停(pause),继续(resume),取消(cancel)等操作,可以通过man btrfs-balance去查看下

移除一个物理卷(btrfs会自动把数据先挪走再拆除):
[root@promote ~]# btrfs device delete /dev/sdb /mydata
[root@promote ~]# df -lh
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/centos_promote-root   50G  1.1G   49G   3% /
devtmpfs                         898M     0  898M   0% /dev
tmpfs                            910M     0  910M   0% /dev/shm
tmpfs                            910M  9.6M  901M   2% /run
tmpfs                            910M     0  910M   0% /sys/fs/cgroup
/dev/sda1                       1014M  146M  869M  15% /boot
/dev/mapper/centos_promote-home   67G   33M   67G   1% /home
tmpfs                            182M     0  182M   0% /run/user/0
/dev/sdc                          40G   18M   38G   1% /mydata
[root@promote ~]# btrfs filesystem show /mydata/
Label: 'mydata'  uuid: f0dd9cf7-d04f-46a0-bec6-2724271a27db
    Total devices 2 FS bytes used 916.00KiB
    devid    2 size 20.00GiB used 2.03GiB path /dev/sdc
    devid    3 size 20.00GiB used 2.03GiB path /dev/sdd

修改raid级别

修改数据的组织机制:act on data chunks
btrfs balance -dconvert=raid0 /mydata
修改元数据的组织机制:act on metadata chunks
btrfs balance -mconvert=raid1 /mydata
修改系统的组织机制:act on system chunks
btrfs balance -sconvert=raid5 /mydata

btrfs的子命令:

filesystem
device
balance
subvolume #子卷的管理命令

创建一个子卷cache:
[root@promote ~]#  btrfs subvolume create /mydata/cache
Create subvolume '/mydata/cache'
[root@promote ~]# btrfs subvolume list /mydata
ID 261 gen 50 top level 5 path cache

挂载子卷

[root@promote ~]# umount /mydata
[root@promote ~]# mount -o subvol=cache /dev/sdb /mnt
[root@promote ~]# ls /mnt
messages
[root@promote ~]# btrfs subvolume show /mnt
/mnt
    Name:           cache
    UUID:           027abbea-474f-2c4c-b258-c931b99b47cc
    Parent UUID:        -
    Received UUID:      -
    Creation time:      2019-04-14 10:31:10 +0800
    Subvolume ID:       261
    Generation:         51
    Gen at creation:    49
    Parent ID:      5
    Top level ID:       5
    Flags:          -
    Snapshot(s):

也可以使用subid挂载
mount -o subvolid=268 /dev/sdb /mnt
查看volid:

[root@promote ~]# btrfs subvolume list /mydata
ID 261 gen 50 top level 5 path cache
删除子卷(注意:请先挂在父卷):
[root@promote ~]# btrfs subvolume delete /mydata/cache
Delete subvolume (no-commit): '/mydata/cache'
创建快照(快照卷必须与原卷在同一个卷组中):

trfs subvolume snapshot /mydata/logs /mydata/logs_snapshot

删除快照:

btrfs subvolume dalete /mydata/logs_snapshot

对单个文件创建快照:

cp --reflink file.txt file.txt_snapshot

把其它文件系统转换成btrfs

这里拿ext4做的测试,其它文件系统请一定要事前严格测试下:
创建一个ext4的文件系统

[root@promote ~]# mke2fs -t ext4 /dev/sdd1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

强制检测下:

[root@promote ~]# fsck -f /dev/sdd1
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdd1: 12/327680 files (0.0% non-contiguous), 58463/1310720 blocks

转换(数据没丢):

[root@promote ~]# btrfs-convert /dev/sdd1
create btrfs filesystem:
    blocksize: 4096
    nodesize:  16384
    features:  extref, skinny-metadata (default)
creating ext2 image file
creating btrfs metadatacopy inodes [o] [         0/        12]
conversion complete[root@promote ~]# 

查看有没有生效:

[root@promote ~]# btrfs filesystem show
warning, device 3 is missing
Label: 'mydata'  uuid: f0dd9cf7-d04f-46a0-bec6-2724271a27db
    Total devices 3 FS bytes used 932.00KiB
    devid    2 size 20.00GiB used 2.03GiB path /dev/sdc
    devid    4 size 20.00GiB used 0.00B path /dev/sdb
    *** Some devices missing

Label: none  uuid: 3a407f45-6860-49ed-81bd-8cc1d09238d9
    Total devices 1 FS bytes used 228.76MiB
    devid    1 size 5.00GiB used 485.78MiB path /dev/sdd1

回滚到之前的文件系统(之前是ext4):

[root@promote ~]# umount /mnt
[root@promote ~]# btrfs-convert -r /dev/sdd1
rollback complete

查看:

[root@promote ~]# blkid /dev/sdd1
/dev/sdd1: UUID="555c8c51-c040-443a-98c1-e2010a2158ac" TYPE="ext4" 
上一篇 下一篇

猜你喜欢

热点阅读