linux下btrfs文件系统|linux下Btrfs文件系统学习

更新时间:2020-01-22    来源:php基础    手机版     字体:

【www.bbyears.com--php基础】

一、基础简介

 

 Btrfs(又名:B-tree, Butter FS, Better FS),GPL授权, Oracle从2007研发,写实复制更新机制 CoW,其主要是为了取代ext2,ext3,ext4,其主要功能有
例如我们现在去修改一个文件A,COW机制是先将目标文件A复制一份为文件B,那么我们修改文件时是修改的复制文件B,相当于对源文件A做了快照,如对文件B修改操作失误,可以有效的恢复源文件A。
    多物理卷支持:btrfs可由多个底层物理卷组成,内建支持RAID(即支持条带、mirror等功能),以联机“添加”、“移除”,“修改”操作
支持b-tree文件功能即支持子卷功能,如在vg中创建lv一样
写时复制更新机制(英译CoW):复制、更新及替换指针,而非“就地”更新机制
数据及源数据校验码机制checksum:我们存储某个文件时,checksum会将数据的源数据和数据的校验码,分别通过文件的属性扩展进行保存,当我们再次读取数据时可以方便的检测数据是否受损,如果文件受损系统可以完成自动修复。
支持子卷sub_volume:可以在一个卷上创建子卷,然后分别挂载使用
快照:支持快照的快照功能即增量快照
透明压缩:即数据自动实现压缩和解压缩,以节约空间,会消耗一定的cpu的

Btrfs特性新文件系统的最重要的特性有:

 

•基于扩展的文件存储
•文件大小上限16EiB
•小文件和索引目录的高效空间利用
•动态索引节点分配
•支持快照可写和快照只读
•子卷(分离内部文件系统的根)
•支持数据和元数据的校验和
•压缩 (gzip和LZO)
•整合的多设备支持
•支持文件条块化、文件镜像和文件条块化+镜像三种部署方案
•高效的增量备份
•后台消除进程支持查找和修复冗余副本上的文件错误
•支持在线文件系统碎片整理和离线文件系统检查
•Btrfs文件系统对RAID 5/RAID 6加强支持

 

二、文件系统创建

 

    命令帮助btrfs --help
 
mkfs.btrfs
-L 'LABEL' 指定卷标
-d : raid0,raid1, raid5, raid6, raid10, single   指明数据存储类型
-m : raid0,raid1, raid5, raid6, raid10, single, dup  指明源数据存储的机制
-O 指明在格式化时使用的特性
-O list-all: 列出支持的所有feature
man btrfs-filesystem查看更多的子命令
mount -t btrfs /dev/sdbMOUNT_POINT 挂载文件系统
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT 透明压缩机制
btrfs filesystem resize ±VALUE  MOUNT_POINT 调整磁盘大小
btrfs devices [subcommand] args 管理磁盘设备
 btrfs-balance subcomand|args 均衡数据
btrfs subvolume [subcommand][args] 创建子卷
btrfs snapshot 创建快照
快照必须要与原卷在同一卷组中,子卷的快照必须要与子卷在同一个父卷中
   btrfs subvolume delete  snapshot-name 删除子快照
 
三、创建应用示例

 

         # fdisk -l 查看存在的分区的磁盘
    # mkfs.btrfs -L"mybtrfs" /dev/sdb /dev/sdc 将sdb、sdc磁盘创建成为一个btrfs系统
        # btrfs filesystem show 查看已经创建的btrfs文件系统
   # blid /dev/sdb 查看UUID是相同的(说明其实属于同一个卷的)
          # mkdir  /mybtrfs 创建挂载点
          # mount  -t btrfs /dev/sda(挂载点是/dev/sda也是可以的)
          # umount /dev/sda 卸载
          # mount -o compress=lzo /dev/sdb /mybtrs重新使用,此时就是自动压缩(透明压缩)
          #btrfs filesystem resize -10G /mybtrfs
                (btrfs filesystem resize调整磁盘大小)
          # btrfs devices add /dev/sdd /mybtrfs 自动磁盘扩展逻辑边界
          # man btrfs-balance start /mytrfs
                  # btrfs-lalance start -mconvert=raid1 /mytrfs 修改元数据的raid级别
                  # btrfs balance status /mytrfs
           # btrfs device delete /dev/sda /mybtrfs 拆除设备,系统会自动移动数据
           # btrfs sublimvolume create /mybtrfs   创建子卷
                   # btrfs subvolume create /mybtrfs/logs 创建logs子卷
                        umount /mybtrfs     
                        mount /dev/sdb   /mybtrfs  可以卸载父卷,只挂着子卷
                        btrfs subvolume list /mybtrfs 显示mybtrs


四、应用实例

 

转换到Btrfs

 

警告:在尝试转换文件系统前,请务必备份数据!虽然此操作很稳定,也很安全,但它仍然可能导致数据丢失,而防止此情况发生的唯一途径就是进行数据备份。

将现存的ext4文件系统转换到btrfs是相当简单而易懂的。你首先需要使用fsck来检查你现存分区上是否存在错误,然后使用btrfs-convert命令进行转换。如果你想要对/dev/sda3分区进行转换,你可以进行以下操作:

    # fsck.ext4 /dev/sda4
    # btrfs-convert /dev/sda4

然后,你就可以使用mount命令将它挂载到你想要的任何位置。

btrfs-convert

btrfs-convert


转换根分区

 

如果你想要对你系统上的根分区进行转换,你首先需要使用Live CD启动。对于Ubuntu,你可以使用Ubuntu安装盘来完成此操作,在启动后第一个屏幕选择“尝试Ubuntu”。对于其它系统,你同样可以使用Live CD镜像,操作类似。

在启动后,打开终端,使用下面的命令来转换文件系统。

    # fsck.ext4 /dev/sda1
    # btrfs-convert /dev/sda1

接下来,chroot到文件系统,这样你就可以修改fstab并重新安装grub了。

    # mount /dev/sda1 /mnt
    # for i in dev dev/pts proc sys ; do mount --bind /$i /mnt/$i ; done
    # chroot /mnt
    # blkid | grep sda1

btrfs-root-convert

btrfs-root-convert

现在来编辑fstab,并根据blkid输出的结果来修改当前“/”文件系统的UUID,并将它的文件系统类型修改为btrfs,修改后的行如下:

    UUID=8e7e80aa-337e-4179-966d-d60128bd3714 / btrfs defaults 0 1

然后,重新安装Grub:

    # grub-install /dev/sda
    # update-grub

现在,你可以把启动光盘丢到一边了,重启机器后,你就可以使用新的文件系统了

本文来源:http://www.bbyears.com/jiaocheng/84754.html