特性:容错 修复 易于管理
btrfs特性-在线磁盘碎片整理
碎片的部分,整理成连续的状态,更好的完成读写操作
写时复制,造成新数据的链接丢失,耗费时间,需要更多的时间,空间。碎片整理,对数据库操作,快照可能弊大于利
具体操作
# 手动磁盘碎片整理。-r 递归。 -v 显示详细进程
btrfs filesystem defragment -r -v /home
# 自动磁盘碎片整理 autodefrag. 如果有数据库 快照虚拟机用不自动磁盘随便整理会好一点noautodefrag
UUID=84db5ce9-a295-485a-bd62-d086f3ff8042 /home btrfs noautodefrag,defaults,subvol=/@/home 0 0
btrfs特性-扩容和收缩特性
对btrfs文件系统进行收缩操作的时候,首先是对btrfs文件系统进行收缩(btrfs filesystem resize -15G /test),稳妥起见我们收缩的空间最好比我们实际收缩的空间多一点,然后使用分区工具对分区重新resize实际的分区大小之后,在将设备挂载到这个目录下。然后将btrfs扩容到最大就可以了。
扩容操作,先卸载设备,resize分区,挂载上去,再扩容就可以了。
# 查看挂载在 /test 目录的 Btrfs 文件系统的空间使用情况. 假如:100G
btrfs filesystem usage /test
# 将 Btrfs 文件系统挂载在 /test 目录下的存储空间减少 15GB
btrfs filesystem resize -15G /test
# 卸载掉/test 挂载的/dev/sda1
umount /test
# 分区软件对分区进行收缩
# 对/dev/sda1进行resize到 需要收缩的空间90G
cfdisk /dev/sda
# 再把btrfs挂载到这个分区
mount /dev/sda1 /test
# 最后再把btrfs文件系统扩展到最大 即所在分区的所有空间
btrfs filesystem resize max /test
# 查看 这时btrfs文件系统为90G
df -h
btrfs filesystem usage /test
btrfs特性-在线添加和删除块设备(及负载均衡)
对整块盘的在线添加和删除
# 首先对整盘格式化为btrfs文件系统
mkfs.btrfs /dev/vdb
# 挂载
mount /dev/vdb /test
# 然后直接把vdc添加到/test 这样就自动对vdc进行格式化为btrfs并与v的吧合并挂载到/test
btrfs device add /dev/vdc /test
# 对挂载到/test上的 两块硬盘进行负载均衡
btrfs balance start /test
# 查看
# 注意下边两个命令似乎只能看到
lsblk
df -h
btrfs filesystem show
# 删除/test 的vdc
btrfs device remove /dev/vdc /test
# 这里的fstab格式要注意
UUID=f7947115-8244-4ecd-af86-87ce80c6fb3a /test btrfs defaults 0 0
btrfs特性-离线文件系统检测
离线状态下的文件系统的修复还有检查,检查用到了check 还有 scrub 这两个命令。
scrub 只能是在线检查,如果要修复还是要离线,所以鸡肋
你情愿去修复他还不如用快照来搞定。
# 离线的检测还有修复 注意要离线
btrfs check --repair /dev/vdd
# 这个命令只能在线检查检测
btrfs scrub start /test
btrfs scrub status /test
btrfs特性-文件系统级磁盘阵列
# 查看当前btrfs文件系统的特性 mkfs.btrfs --help
mkfs.btrfs -O list-all
# 创建磁盘阵列-L 名字 -d 数据的raid. -m 源数据 磁盘的前几个扇区 -f 强制 后边跟块设备
mkfs.btrfs -L date -d raid10 -m raid10 -f /dev/vdb /dev/vdc
# 挂载直接挂载第一个块设备就行
mount /dev/vdb
# 或者直接查询uuid挂载到fstab
btrfs filesystem show
btrfs device scan
vim /etc/fstab
UUID=f7947115-8244-4ecd-af86-87ce80c6fb3a /test btrfs defaults 0 0
如果阵列的一块硬盘坏了,如何替换
# 可以看到 /dev/sdb1 被清空,btrfs分区中的device 1已经丢失,
lsblk -f
btrfs filesystem show
# 先使用 mount -o degraded 指令,从仍然可用的btrfs分区部分挂载目录,降级状态使用。
mount -o degraded /dev/sdc1 /data
# 接下来要做的就是使用 btrfs replace 替换损坏的硬盘,我准备好了一个全新的分区用于替换,注意这里的1代表的是前面损坏missing的device id(千万不要搞错了):
btrfs replace start 1 /dev/sdb1 /data
# 重新负载均衡
btrfs balance start /data