Difference between revisions of "Btrfs (简体中文)"

From ArchWiki
Jump to: navigation, search
(update translation)
(Btrfs 特性: Add Limitation.)
Line 35: Line 35:
 
  # rm /ext2_saved/*
 
  # rm /ext2_saved/*
 
  # btrfs subvolume delete /ext2_saved
 
  # btrfs subvolume delete /ext2_saved
 +
 +
== 局限性 ==
 +
 +
使用前请了解如下局限。
 +
 +
=== 加密===
 +
 +
Btrfs 目前还没有内建的加密支持,但可以在运行{{ic|mkfs.btrfs}}前加密分区,参阅[[Dm-crypt with LUKS]].
 +
 +
(如果已经创建了文件系统,可以使用[[EncFS]]或[[TrueCrypt]],但是这样会无法使用 btrfs 的一些功能。)
 +
 +
=== 交换文件 ===
 +
 +
Btrfs 不支持交换文件,因为 Btrfs 因为潜在的文件系统损坏风险,没有加入交换文件需要的功能,参阅[https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F 这里]. 交换文件可以挂载到 loop 设备中,但是性能比较差。{{AUR|systemd-loop-swapfile}}提供了需要的服务文件。
 +
 +
=== GRUB2 和 core.img ===
 +
 +
[[GRUB|Grub 2]]可以启动Btrfs分区,但是因为模块比较大, grub-install 安装的 core.img 文件超过了 MBR 与第一个分区见的空间大小。可以通过使用GPT或在第一个分区前空出1-2M的空间避免此问题。
  
 
== Btrfs 特性 ==
 
== Btrfs 特性 ==

Revision as of 04:50, 3 May 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary end Btrfs 是一个 Linux 中的新的写时复制(copy-on-write (COW))的文件系统,目的是实现高级功能的同时着重与容错功能,修复功能以及易于管理。目前由Oracle, Red Hat, 富士通, Intel, SUSE以及其他组织共同开发,在 GPL 许可证下发行,同时向任何人公开贡献代码。

安装

Btrfs 已经包含在默认的内核中,安装系统时会默认安装btrfs-progs工具。GRUB 2, mkinitcpio 和 Syslinux 已经支持 Btrfs,不需要额外配置。

文件系统创建

可以新建或者从已有文件系统转化为 Btrfs.

格式化新文件系统

格式化分区:

# mkfs.btrfs /dev/<partition>

用户可选择多个设备来创建RAID。支持的RAID级别有 RAID 0、RAID 1和RAID 10。默认情况下,元数据使用镜像,而数据被 strip.

从安装 CD 启动,然后转化分区:

# btrfs-convert /dev/<partition>

挂载转换后的分区并修改/etc/fstab文件,指定分区类型(type 为 btrfs,fs_passno [最后一列] 修改为0,Btrfs在启动时并不进行磁盘检查). chroot 到系统并重建 GRUB 条目(如果对此过程不熟悉,参考Install from Existing LinuxGRUB)。

在确认一切正常之后,如果你想永久改变, 删除已保存的镜像,删除启用镜像的子卷,再让驱动器回收空间。

# rm /ext2_saved/*
# btrfs subvolume delete /ext2_saved

局限性

使用前请了解如下局限。

加密

Btrfs 目前还没有内建的加密支持,但可以在运行mkfs.btrfs前加密分区,参阅Dm-crypt with LUKS.

(如果已经创建了文件系统,可以使用EncFSTrueCrypt,但是这样会无法使用 btrfs 的一些功能。)

交换文件

Btrfs 不支持交换文件,因为 Btrfs 因为潜在的文件系统损坏风险,没有加入交换文件需要的功能,参阅这里. 交换文件可以挂载到 loop 设备中,但是性能比较差。systemd-loop-swapfileAUR提供了需要的服务文件。

GRUB2 和 core.img

Grub 2可以启动Btrfs分区,但是因为模块比较大, grub-install 安装的 core.img 文件超过了 MBR 与第一个分区见的空间大小。可以通过使用GPT或在第一个分区前空出1-2M的空间避免此问题。

Btrfs 特性

写时复制 (Copy-On-Write (CoW))

CoW(写时复制)具有许多优点,但是对大文件的随机小写入有一定的负面性能影响。可以使用 recomended 为数据库文件和虚拟磁盘文件禁用CoW。 你可以在挂载时使用”nodatacow“选项来禁用整个块的CoW特性。这将禁用整个文件系统的CoW特性。 为单文件或目录禁用CoW特性,请使用下面的命令:

# chattr +C [文件/目录的地址(path)]

注意,chattr的man手册写着:在btrfs上,'C' 标志应该被设置在新建的或者是空白的文件/目录,如果被设置在已有数据的文件,当块分配给该文件时,文件将不确定是否完全稳定。如果'C' 标志被设置给一个目录,将不会影响目前的目录,但在该目录创建的新文件将具有No_COW属性。

多设备文件系统和RAID特性

多设备文件系统

当创建btrfs文件系统时,你可以将任意个分区或磁盘设备传给mkfs.btrfs。创建的文件系统将跨这些设备。你可以按这种办法"合并"多个分区或设备来得到一个大btrfs文件系。

也可从现存的btrfs文件系统中增加或移除设备(务必小心)。

多设备btrfs文件系统(也称为一个btrfs卷)需要运行

 # btrfs device scan

才能被识别。这就是 btrfs mkinitcpio hook 或 /etc/rc.conf 的 USEBTRFS 变量的用途。

RAID特性

创建跨多设备文件系统时,你也可指定加入文件系统的设备使用RAID0、RAID1或RAID10。

子卷

子卷是btrfs的特性之一。子卷实质上是一个保存文件和目录的命名的B树。它们的inode保存在树根之树中,可以为非根用户和组所有。子卷可选设定块配额。子卷内的所有块和文件区段都有引用计数以便做快照。和虚拟机存储的动态扩展相似,其只按需使用设备空间,消除了许多半满的分区。用户也可用不同的挂载选项挂载子卷,得到更灵活的安全性。

创建子卷:

# btrfs subvolume create [<dest>/]

为提高灵活性,把系统安装到专用的子卷,在内核启动参数中使用:

rootflags=subvol=<whatever you called the subvol>

它使得系统可以回滚。

如果用在根分区,建议在/etc/mkinitcpio.conf的modules数组里加上crc32c,在 HOOKS 里加上 btrfs

快照

创建快照:

# btrfs subvolume snapshot <source> [<dest>/]<name>

快照不是递归包含的,这意味着子卷内的子卷在快照里是空目录。

碎片整理

Btrfs支持在线碎片整理。要整理根目录的元数据,只需运行:

# btrfs filesystem defragment /

不会整理整个文件系统。查看更多信息,参考btrfs wiki上的this page

压缩

Btrfs支持透明压缩,这意味着分区里的每个文件都被自动压缩。这不单减小了文件的大小,还提高了性能,特别是在使用lzo算法时。用compress=gzipcompress=lzo挂载选项打开压缩功能。只有在加入挂载选项后创建或修改的文件会被压缩,所以要充分利用压缩特性,最好安装时就启用压缩功能。在准备硬盘时,切换到另一个终端(Template:Keypress),运行如下命令:

# mount -o remount,compress=lzo /dev/sdXY /mnt/target

安装完成后,将compress=lzo加入到/etc/fstab的根文件系统挂载选项中。

Resources