btrfs文件系统

    Btrfs(B-tree,ButterFS ,Better FS通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。ext3/4文件系统之后linux又有了比较强大的文件系统(btrfs文件系统),btrfs文件系统不仅可以将ext3/4系列的升级为btrfs文件系统也可以将其降级为ext3/4的文件系统,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。而且btrfs文件系统还具有快照,内建磁盘阵列(RAID)支持,支持子卷等功能,允许在线调整文件系统大小更为“嚣张”的是btrfs文件系统还支持快照的快照。突破了之前的一些文件系统。

1.1 核心特性

  1>.物理卷支持btrfs可由多个底层物理卷组成支持RAID,以联机“添加移除修改

     2>.写时复制更新机制(Cow复制更新及替换指针,而非就地更新

     3>.数据机元数据校验码:cheecksum

     4>.子卷sub_volume

     5>.快照:支持快照的快照;

     6>.透明压缩:

1.2 文件系统的创建

1.2.1 mkfs.btrfs

     -L ‘LABEL’  : 设置卷标

     -d <type> :raid0; raid1;raid10;raid5;raid6;single   :设置raid级别

     -m <profile> : raid0; raid1;raid10;raid5;raid6;single,dup

     -o <feature>   

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

1.2.3. 挂载文件系统

     mount �Ct btrfs /dev/XX  MOOUNT_POINT

1.2.4 透明压缩机制

     mount �Co compress={lzo|zlib}  DEVICE MOUNT_POINT

1.2.5子命令 filesystem,device,balance,subvolume

btrfs  filesystem 

      show :属性查看

      df : 查看挂载点的可使用空间

      label :  设置器卷标

      resize : 增缩逻辑卷

   btrfs device

         add :添加设备

         delete :删除设备

         raid label :设置raid级别

   btrfs  subvlome 

         Create:  创建子卷

         Delete:  删除子卷

         List:    列出子卷

  btrfs subvolume snapshot   创建快照卷

  btrfs  balance start | status | pause 

 想要更加详细的查看其子命令功能可以使用man命令 

练习:btrfs管理及应用

1>.fidsk -l 显示已新建好的硬盘: 

[root@localhost ~]# fdisk -l
 
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000b3d48
 
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    41943039    20458496   8e  Linux LVM
 
磁盘 /dev/sdc: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 字节
 
 
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
 
 
磁盘 /dev/mapper/centos-root:18.8 GB, 18756927488 字节,36634624 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
 
 
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


2>.创建一个btrfs文件系统且 /dev/sdb 卷标为mydata

[root@localhost ~]# mkfs.btrfs -L mydata /dev/sdb  /dev/sdc
Btrfs v3.16.2
See http://btrfs.wiki.kernel.org for more information.
 
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
adding device /dev/sdc id 2
fs created label mydata on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 40.00GiB


3>.查看创建好的文件系统的详细信息:

[root@localhost ~]# btrfs filesystem show  //(show命令有很多可以man btrfs filesystem show)
Label: 'mydata'  uuid: 07090733-5a24-401d-82bd-04f57f6be555
Total devices 2 FS bytes used 112.00KiB
devid    1 size 20.00GiB used 2.03GiB path /dev/sdb
devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
 
Btrfs v3.16.2


4>.挂载并使用btrfs文件系统:

[root@localhost ~]# mount -t btrfs  /dev/sdb   /mydata
[root@localhost ~]# mount 
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=491916k,nr_inodes=122979,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb on /mydata type btrfs (rw,relatime,seclabel,space_cache)
[root@localhost ~]# cd  /mydata 
[root@localhost mydata]# ls
[root@localhost mydata]# cp  /etc/passwd ./
[root@localhost mydata]# ls
passwd

5>.卸载文件系统

[root@localhost mydata]# cd 
[root@localhost ~]# umount /mydata
[root@localhost ~]# ls /mydata
//卸载完再去/mydata目录下查看发现之前的一些文件已经不存在了


6>.透明制压缩机制的实现

[root@localhost ~]# mount -o compress=lzo /dev/sdb/ /mydata
[root@localhost ~]# cp  /etc/fstab   /mydata
[root@localhost ~]# cd /mydata
[root@localhost mydata]# ls
fstab  passwd


7>.在线联机调整文件系统的大小  (底层设备加载进去才可调整大小)

[root@localhost mydata]# btrfs filesystem resize -5G /mydata    // 将mydata缩减5G    
Resize '/mydata' of '-5G'
[root@localhost mydata]# btrfs filesystem show /mydata      //查看缩减后的文件系统
Label: 'mydata'  uuid: 07090733-5a24-401d-82bd-04f57f6be555
Total devices 2 FS bytes used 896.00KiB
devid    1 size 15.00GiB used 2.03GiB path /dev/sdb
devid    2 size 20.00GiB used 2.01GiB path /dev/sdc
 
Btrfs v3.16.2
[root@localhost mydata]# btrfs filesystem  df /mydata       //查看真实的mydata的可用空间的详细信息
Data, RAID0: total=2.00GiB, used=768.00KiB
Data, single: total=8.00MiB, used=0.00
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00
GlobalReserve, single: total=16.00MiB, used=0.00
[root@localhost mydata]# df -lh                       // df  -lh 不能真实的显示mydata的可用空间
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  2.2G   16G   13% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sdb                  35G  1.0M   28G    1% /mydata
 
// 增加文件系统的大小跟缩减一样,也可使用  max 将其调至为最大,使用df -lh 可查看最大空间使用量


8>.添加新的设备至mydatamydata必须是已经挂载好的)

[root@localhost mydata]# btrfs device add /dev/sdd /mydata
[root@localhost mydata]# df -lh                                     //此时可以看到mydata已经变成了60G
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  2.2G   16G   13% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sdb                  60G  1.0M   56G    1% /mydata
 //虽已自动扩展mydata但是数据却没有扩展进去


9>.将之前已有的的数据做均衡调整

[root@localhost mydata]# btrfs balance status /mydata     //查看均衡状态,此时没有开始做均衡调整,所以查看不到其信息。NOte:mydata数据较少所以start不会显示其信息,只有在数据量比较大的时候才可以显示
No balance found on '/mydata'
[root@localhost mydata]# btrfs balance start /mydata
Done, had to relocate 6 out of 6 chunks
10>.将/dev/sdd从mydata中移除出去
[root@localhost mydata]# btrfs device  delete  /dev/sdd  /mydata
[root@localhost mydata]# df  -lh
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   18G  2.2G   16G   13% /
devtmpfs                 481M     0  481M    0% /dev
tmpfs                    490M     0  490M    0% /dev/shm
tmpfs                    490M  6.7M  484M    2% /run
tmpfs                    490M     0  490M    0% /sys/fs/cgroup
/dev/sda1                497M  120M  378M   25% /boot
/dev/sdb                  40G  832K   40G    1% /mydata
[root@localhost mydata]# btrfs filesystem show /mydata     //查看/dev/sdd是否从mydata中移除成功
Label: 'mydata'  uuid: 07090733-5a24-401d-82bd-04f57f6be555
Total devices 2 FS bytes used 704.00KiB
devid    1 size 20.00GiB used 1.28GiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
 
Btrfs v3.16.2
[root@localhost mydata]# ls
fstab  passwd
[root@localhost mydata]# tail -2 fstab        //移除设备之后还可正常访问mydata里面的信息 
UUID=91ff6050-1678-4250-b52b-9c28a80ee538 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost mydata]# 
 
Note:在移除之时btrfs已经将数据移动到其他设备中,这点要比lvm好的多。


11>.动态修改对应的数据以及元数据的raid级别

[root@localhost mydata]# btrfs balance start -mconvert=raid1 /mydata     //因之前将/dev/sdd移除了所以在此只可用raid0,1
Done, had to relocate 2 out of 3 chunks
12>.在原有的文件系统上创建子卷
[root@localhost mydata]# btrfs subvolume create /mydata/chang
Create subvolume '/mydata/chang'
[root@localhost ~]# btrfs subvolume create /mydata/cc
Create subvolume '/mydata/cc'
[root@localhost ~]# btrfs subvolume list /mydata
ID 263 gen 70 top level 5 path chang
ID 264 gen 71 top level 5 path cc


13>.挂载chang这个子卷

使用名字挂载子卷:
[root@localhost ~]# umount /mydata          //挂载子卷之前先卸载父卷
[root@localhost ~]# mount -o subvol=chang /dev/sdc  /mnt     //挂载设备为任意一设备
[root@localhost ~]# ls /mnt
[root@localhost ~]# cp  /etc/passwd  /mnt
[root@localhost ~]# ls  /mnt
passwd
[root@localhost ~]# btrfs subvolume show /mnt
/mnt
Name: chang
uuid: c8db80cf-3f49-c54c-a9b2-cd16ddb76d70
Parent uuid: -
Creation time: 2015-10-07 02:38:46
Object ID: 263
Generation (Gen): 73
Gen at creation: 70
Parent: 5
Top Level: 5
Flags: -
Snapshot(s):
使用subvolume  id号挂载子卷
[root@localhost ~]# mount -o subvolid=263 /dev/sdc /mnt
 
//单独挂载某一子卷时只可访问子卷中的文件父卷中的文件访问不到


14>.删除子卷

[root@localhost ~]# umount /mnt        //看子卷是否已经挂载,若挂载先卸载
[root@localhost ~]# btrfs subvolume list /mydata
ID 263 gen 75 top level 5 path chang
ID 264 gen 71 top level 5 path cc
[root@localhost ~]# btrfs subvolume delete /mydata/chang   //删除chang这个子卷
Transaction commit: none (default)
Delete subvolume '/mydata/chang'
[root@localhost ~]# btrfs subvolume list /mydata    //可以看得到chang这个子卷已经被删除了
ID 264 gen 71 top level 5 path cc


15>.对子卷创建快照卷

[root@localhost ~]# cp  /etc/passwd  /mydata/cc
[root@localhost ~]# ls /mydata/cc
passwd
[root@localhost ~]# btrfs subvolume snapshot /mydata/cc /mydata/cc_snap    //快照卷要在原卷的基础上创建
Create a snapshot of '/mydata/cc' in '/mydata/cc_snap'
[root@localhost ~]# btrfs subvolume list /mydata
ID 264 gen 80 top level 5 path cc
ID 265 gen 80 top level 5 path cc_snap
[root@localhost ~]# vim /mydata/cc/passwd 
[root@localhost ~]# tail -2 /mydata/cc/passwd 
 
#hello word
[root@localhost ~]# tail -2 /mydata/cc_snap/passwd 
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@localhost ~]# tail -2 /mydata/cc_snap/passwd 
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@localhost ~]# btrfs subvolume delete /mydata/cc_snap            //删除快照卷
Transaction commit: none (default)
Delete subvolume '/mydata/cc_snap'


16>.对子卷中的某一文件创建快照

[root@localhost cc]# cp  --reflink passwd   passwd_snap
[root@localhost cc]# vim passwd
[root@localhost cc]# tail -2 ./passwd
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost cc]# tail -2 ./passwd_snap 
 
#hello word


17>.etx3/4与btrfs之间的相互转换

[root@localhost ~]# btrfs balance start -dconvert=single /mydata
Done, had to relocate 1 out of 3 chunks
[root@localhost ~]# btrfs balance start -mconvert=raid1 /mydata
Done, had to relocate 2 out of 3 chunks
[root@localhost ~]# btrfs filesystem show /mydata
Label: 'mydata'  uuid: 07090733-5a24-401d-82bd-04f57f6be555
Total devices 2 FS bytes used 528.00KiB
devid    1 size 20.00GiB used 1.28GiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
 
Btrfs v3.16.2
[root@localhost ~]# fdisk /dev/sdd                       
欢迎使用 fdisk (util-linux 2.23.2)。
 
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
 
Device does not contain a recognized partition table
使用磁盘标识符 0x7dd17c41 创建新的 DOS 磁盘标签。
 
命令(输入 m 获取帮助):p
 
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7dd17c41
 
   设备 Boot      Start         End      Blocks   Id  System
 
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+3G
分区 1 已设置为 Linux 类型,大小设为 3 GiB
 
命令(输入 m 获取帮助):p
 
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7dd17c41
 
   设备 Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048     6293503     3145728   83  Linux
 
命令(输入 m 获取帮助):w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#  partx -a  /dev/sdd
partx: /dev/sdd: error adding partition 1
[root@localhost ~]#  partx -a  /dev/sdd
partx: /dev/sdd: error adding partition 1
[root@localhost ~]# mke2fs -t ext4 /dev/sdd1     //格式化/dev/sdd1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
196608 inodes, 786432 blocks
39321 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912
 
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
 
[root@localhost ~]# mount /dev/sdd1 /mnt        //挂载/dev/sdd1
[root@localhost ~]# cp /etc/fstab  /mnt
[root@localhost ~]# cat /mnt/fstab 
 
#
# /etc/fstab
# Created by anaconda on Sun Sep  6 14:16:22 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=91ff6050-1678-4250-b52b-9c28a80ee538 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost ~]# umount /mnt                      //将/dev/sdd1的ext4文件系统转换为btrfs文件系统之前先卸载
[root@localhost ~]# e2fsck -f /dev/sdd1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/sdd1: 12/196608 files (0.0% non-contiguous), 31037/786432 blocks
[root@localhost ~]# btrfs-convert /dev/sdd1                  //将etx4文件系统转换为btrfs文件系统
creating btrfs metadata.
creating ext2fs image file.
cleaning up system chunk.
conversion complete.
[root@localhost ~]# btrfs filesystem show                  //可以看到已经转换成功
Label: 'mydata'  uuid: 07090733-5a24-401d-82bd-04f57f6be555
Total devices 2 FS bytes used 464.00KiB
devid    1 size 20.00GiB used 1.28GiB path /dev/sdb
devid    2 size 20.00GiB used 288.00MiB path /dev/sdc
 
Label: none  uuid: 2ee240cb-5609-486f-994e-cbc72aee2858
Total devices 1 FS bytes used 121.29MiB
devid    1 size 3.00GiB used 3.00GiB path /dev/sdd1
 
Btrfs v3.16.2
[root@localhost ~]# mount /dev/sdd1 /mnt           
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls                           //之前的文件依旧存在(切勿删除ext2_saved)
ext2_saved  fstab  lost+found
[root@localhost mnt]# cd 
[root@localhost ~]# umount /mnt
[root@localhost ~]# btrfs-convert -r  /dev/sdd1       //将btrfs文件系统转换为ext4文件系统
rollback complete.
[root@localhost ~]# blkid /dev/sdd1                //查看是否转换成功
/dev/sdd1: UUID="514efa6d-11a1-4c10-958a-2897c7d494e0" TYPE="ext4"


你可能感兴趣的:(实现透明制压缩,创建子卷,快照卷的创建,btrfs文件系统的创建)