btrfs 入门使用

本文将从以下几个方面讲述,如何在linux系统中使用btrfs文件系统:
1. 创建和挂载btrfs文件系统
2. 在线改变btrfs文件系统大小
3. 在线增加/删除设备
4. 改变RAID级别
5. 创建子卷和快照
6. 使用压缩和一些其他东西


btrfs文件系统现在还处于实验阶段,但是多种特殊性质使它变得非常有趣和复杂。

准备工作

在实验时,使用ubuntu 12.10操作系统,包含4个没有格式化的添加设备((/dev/sdb, /dev/sdc, /dev/sdd, and /dev/sde)),使用这四个设备展示btrfs文件系统的使用。

NOTE : 由于本文的操作步骤都需要root权限,所以我们需在每条命令前加sudo关键字,或者键入sudo su命令得到root权限。

安装btrfs-tools

在使用btrfs文件系统之前,我们必须安装btrfs-tools:

apt-get install btrfs-tools

创建btrfs文件系统(RAID0,RAID1)

btrfs可以不用如fdisk等的软件进行分区,而直接在没有格式的设备上创建文件系统。

在/dev/sdb,/deb/sdc和/dev/sdd上创建btrfs文件系统:

mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd

没有更多的选项时,文件系统会默认数据为RAID0级,元数据为RAID0级。当数据因为某种原因丢失(如设备上的坏块),btrfs可以使用元数据晋升数据回复。

root@server1:~# mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd
WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
adding device /dev/sdc id 2
adding device /dev/sdd id 3
fs created label (null) on /dev/sdb
nodesize 4096 leafsize 4096 sectorsize 4096 size 15.00GB
Btrfs Btrfs v0.19
root@server1:~#

如果你先在一个设备上使用btrfs文件系统,并且不想有冗余的元数据(注意:这种操作是非常危险的,当数据丢失后,将不能恢复),可以使用 -m single 选项(- m 表示 元数据, - d 表示数据):

mkfs.btrfs -m single /dev/sdb

使用多个设备并且不想使用非冗余元数据时,可以使用 - m raid0 代替 - m single:

mkfs.btrfs -m raid0 /dev/sdb /dev/sdc /dev/sdd

数据冗余而元数据非冗余:

mkfs.btrfs -m raid0 -d raid1 /dev/sdb /dev/sdc /dev/sdd

数据和元数据都冗余(元数据默认为RAID1,所以在这儿,可以不用特地的指定)

mkfs.btrfs -d raid1 /dev/sdb /dev/sdc /dev/sdd

文件系统的详细信息:

btrfs filesystem show /dev/sdb
或
btrfs filesystem show /dev/sdc
或
btrfs filesystem show /dev/sdd

应为可以使用btrfs文件系统的任何一个设备,所以这个命令的效果都是一样的。

root@server1:~# btrfs filesystem show /dev/sdb
failed to read /dev/sr0
Label: none  uuid: 21f33aaa-b2b3-464b-8cf1-0f8cc3689529
    Total devices 3 FS bytes used 28.00KB
    devid    3 size 5.00GB used 1.01GB path /dev/sdd
    devid    2 size 5.00GB used 1.01GB path /dev/sdc
    devid    1 size 5.00GB used 2.02GB path /dev/sdb
    Btrfs Btrfs v0.19
root@server1:~#

得到btrfs文件系统列表,忽略设备即可:

root@server1:~# 
failed to read /dev/sr0
Label: none  uuid: 21f33aaa-b2b3-464b-8cf1-0f8cc3689529
    Total devices 3 FS bytes used 28.00KB
    devid    3 size 5.00GB used 1.01GB path /dev/sdd
    devid    2 size 5.00GB used 1.01GB path /dev/sdc
    devid    1 size 5.00GB used 2.02GB path /dev/sdb
    Btrfs Btrfs v0.19
root@server1:~#

挂载btrfs文件系统

btrfs文件系统可以如下挂载

mount /dev/sdb /mnt
或着
mount /dev/sdc /mnt
或者
mount /dev/sdd /mnt

在系统的/etc/fstab中,将会有如下字样:

vi /etc/fstab
[...]
/dev/sdb /mnt               btrfs   defaults 0       1
[...]

查看挂载信息

root@server1:~# df -h
Filesystem                Size  Used Avail Use% Mounted on
udev                      489M  4.0K  489M   1% /dev
tmpfs                     200M  308K  199M   1% /run
none                      5.0M     0  5.0M   0% /run/lock
none                      498M     0  498M   0% /run/shm
none                      100M     0  100M   0% /run/user
/dev/mapper/server1-root   27G  1.1G   25G   5% /
/dev/sda1                 228M   29M  188M  14% /boot
/dev/sdb                   15G   56K   10G   1% /mnt
root@server1:~#

下面条命令将会得到关于数据和元数据更为详细的信息:

btrfs filesystem df /mnt
root@server1:~# btrfs filesystem df /mnt
Data, RAID1: total=1.00GB, used=0.00
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=1.00GB, used=24.00KB
Metadata: total=8.00MB, used=0.00
root@server1:~#

应用btrfs的数据压缩功能

btrfs文件系统使用zlib(默认)和lzo两种格式进行数据压缩存储。zlib的压缩率更大,lzo更快切消耗更小的cpu资源。使用压缩,尤其时lzo压缩格式,可以提高吞吐量性能。但是需要注意的是,btrfs文件系统不会压缩已经压缩了的应用级文件(如视频,音乐,图片等)

使用lzo进行数据压缩:

mount -o compress=lzo /dev/sdb /mnt

使用zlib进行数据压缩:

mount -o compress=zlib /dev/sdb /mnt

由于zlib是btrfs文件系统默认的压缩算法,也可以使用:

mount -o compress /dev/sdb /mnt

到现在我们可以看看/etc/fstab文件:

vi /etc/fstab
[...]
/dev/sdb /mnt               btrfs   defaults,compress=lzo 0       1
[...]

“拯救”btrfs文件系统

如果btrfs文件系统”完蛋”了,可以使用recovery mount选项进行从新挂载,此选将会尝试寻找文件系统根的一个可用的备份:

mount -o recovery /dev/sdb /mnt

在线调整btrfs文件系统大小

btrfs文件系统支持在线调整文件系统大小。

使/mnt容量减小2G:

btrfs filesystem resize -2g /mnt
(g=GB,m=MB,比如
btrfs filesystem resize -500m /mnt
)
root@server1:~# btrfs filesystem resize -2g /mnt
Resize '/mnt' of '-2g'
root@server1:~#

瞧一瞧/mnt分区:df -h可以看到/mnt的容量从15G变到了13G

root@server1:~# df -h
Filesystem                Size  Used Avail Use% Mounted on
udev                      489M  4.0K  489M   1% /dev
tmpfs                     200M  308K  199M   1% /run
none                      5.0M     0  5.0M   0% /run/lock
none                      498M     0  498M   0% /run/shm
none                      100M     0  100M   0% /run/user
/dev/mapper/server1-root   27G  1.1G   25G   5% /
/dev/sda1                 228M   29M  188M  14% /boot
/dev/sdb                   13G  312K   10G   1% /mnt
root@server1:~#

我们再增加1GB的容量:

btrfs filesystem resize +1g /mnt
root@server1:~# df -h
Filesystem                Size  Used Avail Use% Mounted on
udev                      489M  4.0K  489M   1% /dev
tmpfs                     200M  308K  199M   1% /run
none                      5.0M     0  5.0M   0% /run/lock
none                      498M     0  498M   0% /run/shm
none                      100M     0  100M   0% /run/user
/dev/mapper/server1-root   27G  1.1G   25G   5% /
/dev/sda1                 228M   29M  188M  14% /boot
/dev/sdb                   14G  312K   10G   1% /mnt
root@server1:~#

将容量加到最大:

btrfs filesystem resize max /mnt
df -h
root@server1:~# df -h
Filesystem                Size  Used Avail Use% Mounted on
udev                      489M  4.0K  489M   1% /dev
tmpfs                     200M  308K  199M   1% /run
none                      5.0M     0  5.0M   0% /run/lock
none                      498M     0  498M   0% /run/shm
none                      100M     0  100M   0% /run/user
/dev/mapper/server1-root   27G  1.1G   25G   5% /
/dev/sda1                 228M   29M  188M  14% /boot
/dev/sdb                   15G  312K   10G   1% /mnt
root@server1:~#

从btrfs文件系统增加/删除设备

将/dev/sde设备增添到已经挂载在/mnt的btrfs文件系统:

btrfs device add /dev/sde /mnt

再来看看文件系统:

btrfs filesystem show /dev/sdb
root@server1:~# btrfs filesystem show /dev/sdb
failed to read /dev/sr0
Label: none  uuid: 21f33aaa-b2b3-464b-8cf1-0f8cc3689529
    Total devices 4 FS bytes used 156.00KB
    devid    4 size 5.00GB used 0.00 path /dev/sde
    devid    3 size 5.00GB used 1.01GB path /dev/sdd
    devid    2 size 5.00GB used 1.01GB path /dev/sdc
    devid    1 size 5.00GB used 2.02GB path /dev/sdb
   Btrfs Btrfs v0.19
root@server1:~#

正如你所看到的,已经加入了/dev/sde,但是并没有空间被使用,如果使用一个非零的RAID级,应该做一个文件系统平衡,以使数据和元数据被分散到四个设备上。

btrfs filesystem balance /mnt(另一种符合语法规则的写法btrfs balance start /mnt)

root@server1:~# btrfs filesystem balance /mnt
Done, had to relocate 5 out of 5 chunks
root@server1:~#

再让我们看下文件系统:

btrfs filesystem show /dev/sdb
root@server1:~# btrfs filesystem show /dev/sdb
failed to read /dev/sr0
Label: none  uuid: 21f33aaa-b2b3-464b-8cf1-0f8cc3689529
    Total devices 4 FS bytes used 28.00KB
    devid    4 size 5.00GB used 512.00MB path /dev/sde
    devid    3 size 5.00GB used 32.00MB path /dev/sdd
    devid    2 size 5.00GB used 512.00MB path /dev/sdc
    devid    1 size 5.00GB used 36.00MB path /dev/sdb
    Btrfs Btrfs v0.19
root@server1:~#

/dev/sde 上已经有数据/元数据

从btrfs文件系统在线删除完好的设备,如/dev/sdc:

btrfs device delete /dev/sdc /mnt(这条命令将会在必要的时候,自动做均衡操作)但是btrfs filesystem show /dev/sdb

依然会列出 /dev/sdc,只是df -h会显示出减小后的文件系统的大小。

移除失败的设备,需先将文件系统卸载,然后degraded模式挂载:

umount /mnt
mount -o degraded /dev/sdb /mnt

Remove the failed hard drive. If you use a RAID level that requires a certain number of hard drives (e.g. two for RAID1 and four for RAID10), you might have to add an intact replacement drive because you cannot go below the minimum number of required drives.

If you have to add a replacement drive (e.g. /dev/sdf), do it as follows:

btrfs device add /dev/sdf /mnt

Only if you are sure you have enough intact drives do you run the following command to complete the replacement:

btrfs device delete missing /mnt

.

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值