btrfs的新手指南

btrfs的初学者指南

本指南介绍如何在Linux上使用btrfs文件系统。 它包括创建和安装btrfs文件系统,在线调整btrfs文件系统,添加和删除设备,更改RAID级别,创建子卷和快照,使用压缩等。 btrfs仍然被标记为实验性的,但是所有这些功能使得它成为一个非常有趣和灵活的文件系统,当您查找正确的文件系统时,该文件系统应该被考虑在内。

我不会保证这将为您工作!

1初步说明

我正在使用一个Ubuntu 12.10系统,其中还有四个额外的,未格式化的硬盘驱动器( / dev / sdb/ dev / sdc/ dev / sdd/ dev / sde )。 我将使用这四个硬盘来演示btrfs的用法。

Ubuntu用户注意事项:

因为我们必须使用root权限运行本教程的所有步骤,所以我们可以使用字符串sudo在本教程中添加所有命令,也可以通过键入来成为root

sudo su

2安装btrfs-tools

在开始使用btrfs之前,我们必须安装btrfs-tools包:

apt-get install btrfs-tools

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

btrfs的一个很好的功能是您可以在未格式化的硬盘驱动器上创建btrfs文件系统,也就是说,您不必使用像fdisk这样的工具来分区硬盘。

要在/ dev / sdb/ dev / sdc/ dev / sdd上创建一个btrfs文件系统,我们只需运行:

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

没有任何进一步的交换机,该文件系统使用RAID0作为数据(非冗余),RAID1用于元数据(冗余)。 由于某些原因(例如硬盘驱动器上的故障扇区)丢失数据时,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单个开关( -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

也可以使用RAID10( -m raid10-d raid10 ),但是至少需要四个硬盘。 对于RAID1,您至少需要两个硬盘驱动器,但两个驱动器的大小(这对于btrfs来说是另一件好事)并不重要。

要获取有关文件系统的详细信息,可以使用...

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文件系统的列表,只需将其删除:

btrfs filesystem show
root@server1:~# btrfs filesystem show
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:~#

4安装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
[...]

跑...

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   56K   10G   1% /mnt
root@server1:~#

命令...

btrfs filesystem df /mnt

...为您提供有关数据和元数据的更多详细信息(例如RAID级别):

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:~#

5使用压缩与btrfs

btrfs文件系统可以使用zlib(默认)和lzo压缩,这意味着可压缩文件将以压缩形式存储在硬盘驱动器上,从而节省空间。 zlib具有较高的压缩比,而lzo更快,并且cpu负载较少。 使用压缩,特别是lzo压缩,可以提高生产能力。 请注意,btrfs不会压缩已压缩的应用程序级别的文件(如视频,音乐,图像等)。

您可以如下安装带有lzo压缩的btrfs文件系统:

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

对于zlib压缩,您可以使用...

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

... 要么...

mount -o compress /dev/sdb /mnt

...因为zlib是默认的压缩算法。

/ etc / fstab中 ,如下所示:

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

拯救一个死btrfs文件系统

如果您有一个死btrfs文件系统,您可以尝试使用恢复挂载选项挂载它,该选项将尝试寻找树根的可用副本:

mount -o recovery /dev/sdb /mnt

7在线调整btrfs文件系统的大小

btrfs文件系统可以在线调整大小,即无需卸载分区或重新启动到救援系统。

为了将我们的/ mnt音量减少2GB,我们运行:

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

...我们应该看到它的大小为13GB而不是15GB:

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:~#

要将/ mnt分区增加1GB,请运行:

btrfs filesystem resize +1g /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                   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:~#

8向/从btrfs文件系统添加/删除硬盘驱动器

现在我们要添加/ dev / sde到我们的btrfs文件系统。 当文件系统安装到/ mnt时,我们只需运行:

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已添加,但该设备上没有使用空格。 如果您使用0以外的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

...显示文件系统的缩小大小。

要删除出现故障的硬盘驱动器,请首先卸载文件系统:

umount /mnt

以降级模式安装:

mount -o degraded /dev/sdb /mnt

删除失败的硬盘驱动器。 如果您使用的RAID级别需要一定数量的硬盘驱动器(例如两个用于RAID1,另外四个用于RAID10),则可能需要添加完整的更换驱动器,因为不能低于所需驱动器的最小数量。

如果您必须添加替换驱动器(例如/ dev / sdf),请执行以下操作:

btrfs device add /dev/sdf /mnt

只有当您确保有足够的完整驱动器时,才能运行以下命令来完成更换:

btrfs device delete missing /mnt
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏