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