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

From ArchWiki
Jump to: navigation, search
(创建Btrfs分区: Add grub warning.)
(update translation)
Line 9: Line 9:
 
{{Article summary end}}
 
{{Article summary end}}
 
Btrfs 是一个 Linux 中的新的写时复制(copy-on-write (COW))的文件系统,目的是实现高级功能的同时着重与容错功能,修复功能以及易于管理。目前由Oracle, Red Hat, 富士通, Intel, SUSE以及其他组织共同开发,在 GPL 许可证下发行,同时向任何人公开贡献代码。
 
Btrfs 是一个 Linux 中的新的写时复制(copy-on-write (COW))的文件系统,目的是实现高级功能的同时着重与容错功能,修复功能以及易于管理。目前由Oracle, Red Hat, 富士通, Intel, SUSE以及其他组织共同开发,在 GPL 许可证下发行,同时向任何人公开贡献代码。
 
== 近期开发和新闻链接 ==
 
*[http://www.phoronix.com/scan.php?page=news_item&px=MTA0ODU Avi Miller presenting BTRFS] at SCALE 10x.  Jan/2012.
 
*[http://www.phoronix.com/scan.php?page=news_item&px=MTA4Mzc Summary of Chris Mason's talk from LFCS 2012]
 
*在 2012-03-28, {{Pkg|btrfs-progs}} 包含了 btrfsck, 一个可以修复btrfs文件系统错误的工具。
 
*Oracle已将这一版本的 btrfs-progs 打包并向 Oracle Linux 6 的用户发布,并且移植到5版。
 
*Arch Linux 在 core/btrfs-progs 中提供了这个版本 (从版本 0.19.20120328-1 起)。
 
  
 
== 安装 ==
 
== 安装 ==
  
Btrfs 包含在{{pkg|linux}}包中(作为模块)。用户态实用程序在{{pkg|btrfs-progs}}中。
+
Btrfs 已经包含在默认的内核中,安装系统时会默认安装{{pkg|btrfs-progs}}工具。[[GRUB|GRUB 2]], mkinitcpio 和 [[Syslinux]] 已经支持 Btrfs,不需要额外配置。
 +
 
 +
== 文件系统创建 ==
  
为了在系统刚启动时支持多设备(btrfs的类RAID特性),即'''btrfs卷''',比如一个btrfs卷是根文件系统时,你需要打开 ''btrfs'' mkinitcpio hook(在mkinitcpio包中提供)。
+
可以新建或者从已有文件系统转化为 Btrfs.
如果只使用单btrfs分区,就不需要使用这些选项。
+
  
为使用更多选项和特性,用户''可能''想要从[[Arch User Repository|AUR]]安装{{AUR|mkinitcpio-btrfs}}。这个包将安装一个名为 ''btrfs_advanced'' 的 mkinitcpio hook 给需要自动回滚之类功能的用户。
+
=== 格式化新文件系统 ===
 +
格式化分区:
  
== 创建Btrfs分区 ==
+
# mkfs.btrfs /dev/<partition>
{{Warning|[[GRUB|Grub 2]] 可以从 btrfs 分区启动,但是模块比较大,grub-install 安装的 core.img 文件可能超过 MBR 和第一个分区之前的间隔。要解决这个问题,可以使用 GPT 格式或者在第一个分区前预留 2MB 的空间。}}
+
=== 格式化新Btrfs分区 ===
+
  
# mkfs.btrfs [options] dev [dev ...]
+
用户可选择多个设备来创建RAID。支持的RAID级别有 RAID 0、RAID 1和RAID 10。默认情况下,元数据使用镜像,而数据被 strip.
  
用户可选择多个设备来创建RAID。支持的RAID级别有 RAID 0、RAID 1和RAID 10。默认情况下,元数据使用镜像,而数据则条带化。
+
从安装 CD 启动,然后转化分区:
  
=== 将 Ext3/4 转换为 Btrfs ===
+
# btrfs-convert /dev/<partition>
{{警告|[[GRUB Legacy]] 不能将btrfs作为根文件系统启动。用户需要安装[[GRUB]]或[[Syslinux]]。本指南假设用户已知悉这一限制。}}
+
  
# 启动 live CD (如Arch)
+
挂载转换后的分区并修改{{ic|/etc/fstab}}文件,指定分区类型('''type''' 为 btrfs,'''fs_passno''' [最后一列] 修改为0,Btrfs在启动时并不进行磁盘检查).  {{ic|chroot}} 到系统并重建 GRUB 条目(如果对此过程不熟悉,参考[[Install from Existing Linux]]和[[GRUB]])。
# 打开 [remote-core] 和 [remote-testing]
+
# {{ic|modprobe btrfs}}
+
# 安装 btrfs-progs
+
# 运行 {{ic|btrfs-convert}}
+
# 挂载转换后的分区并修改{{ic|/etc/fstab}}文件,指定分区类型为{{ic|auto}}或{{ic|btrfs}}
+
# Chroot到系统并重建 GRUB 条目(如果对此过程不熟悉,参考[[Install from Existing Linux]]和[[GRUB]])。
+
  
在<tt>btrfs-convert</tt>以及确认一切正常之后,如果你想永久改变, 你需要删除已保存的镜像,删除启用镜像的子卷,再让驱动器回收空间。例如,转换<tt>/home</tt>到Btrfs之后:
+
在确认一切正常之后,如果你想永久改变, 删除已保存的镜像,删除启用镜像的子卷,再让驱动器回收空间。
  
  rm /home/ext2_saved/*
+
  # rm /ext2_saved/*
  btrfs subvolume delete /home/ext2_saved
+
  # btrfs subvolume delete /ext2_saved
  
 
== Btrfs 特性 ==
 
== Btrfs 特性 ==

Revision as of 04:43, 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 特性

写时复制 (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