# File Systems (简体中文)

相关文章

- 分区

翻译状态： 本文是英文页面 File_Systems 的翻译，最后翻译时间：2014-01-29，点击这里可以查看翻译后英文页面的改动。

根据 Wikipedia:

  文件系统是数据组织方式，定义数据在磁盘上的保存、读取和更新方法。不同的文件系统可以根据存储设备的不同进行优化，提高效率。

Arch Linux支持许多文件系统类型，我们可以为每个磁盘分区设置不同的文件系统。每种文件系统有自己的优缺点和独有特性。以下内容是关于Arch Linux支持的文件系统类型的概述，左侧的链接地址指向Wikipedia以提供更丰富的信息。

磁盘需要首先分区，然后再在格式化成指定文件系统。

## 文件系统类型

- Btrfs - 也被称作"Better FS", 是一种具备与Sun/Oracle的ZFS相近特性的新文件系统。特性包括快照，多磁盘条带化，多盘镜像（不需要mdadm即可组成软RAID），数据校验，增量备份，以及能同时提升性能并节省空间的透明压缩功能（目前支持zlib和LZO）。截止2011年1月，Btrfs虽然已经合并到主干内核中，但仍被标记为实验性质。Btrfs被认为是 GNU/Linux 文件系统的未来，并被所有主流发行版的安装程序设置为root分区文件系统选项。
- exFAT - Microsoft file system optimized for flash drives。和 NTFS 不同，exFAT 不能通过将磁盘空间标记为“已分配”就为文件预分配磁盘空间。和 FAT 一样，exFAT在创建一个已知长度的文件时，需要完整的执行与文件体积相等的物理写入。
- ext2 - Second Extended Filesystem。古老、可靠的 GNU/Linux 文件系统。非常稳定，一个缺点是不支持日志记录或隔离。不支持日志会导致在突然断电或当机时可能导致数据丢失。因为文件系统检查的时间很长，不适合用于根 (`/`) 和 `/home` 分区。ext2 可以容易地转换成 ext3。
- ext3 - Third Extended Filesystem。基于 ext2 系统, 并添加了日志记录功能。 ext3 向前兼容 ext2 ，非常成熟稳定。
- ext4 - Fourth Extended Filesystem。一种新的文件系统，向前兼容 ext2 和 ext3 ，最大支持 1EB (1,048,576 TB) 分区，支持单个 16TB 的文件。子目录最大个数支持 64,000， ext3 只支持 32,000。支持在线碎片处理。
- F2FS - Flash-Friendly File System。由Samsung的Kim Jaegeuk（韩文：김재극）为Linux编写的适用于Flash设备的文件系统。F2FS的设计初衷是为了针对NAND闪存设备（包括SSD，eMMC和SD卡）的特性打造一个新的文件系统。这些设备目前在从移动设备到服务器的范畴内被广泛使用。
- JFS - IBM 的日志文件系统（ Journaled File System ）。这是第一个支持日志的文件系统。它在 IBM AIX® 操作系统中开发了多年，然后被移植到GNU/Linux上。JFS 效率非常高并且 CPU 资源占用率比 GNU/Linux 上的其他任何一个文件系统都要低。并且在格式化、挂载和磁盘检测的时候都非常快，在各方面的表现都非常突出,尤其是与 deadline I/O 调度器结合。不如ext系列或者ReiserFS那样广泛支持，但非常成熟稳定。
- NILFS2 - New Implementation of a Log-structured File System。由 NTT 开发。该文件系统将所有数据以连续的类似日志的结构储存，新数据只添加不改写。这种设计减少了寻址时间，相对传统的 Linux 文件系统能防止在崩溃发生后的数据丢失。
- NTFS - Windows使用的文件系统。 NTFS 相比 FAT 和 HPFS（High Performance File System）在技术作了若干改进，例如，支持元数据，并且使用了高级数据结构，以便于改善性能、可靠性和磁盘空间利用率，并提供了若干附加扩展功能，如访问控制列表和文件系统日志。
- Reiser4 - ReiserFS 的继任者。由 Namesys 开发， DARPA 和 Linspire 赞助。使用 B*-tree 辅以 Dancing Tree，这样的机制使得稀疏的节点通常不会被合并，除非因为内存压力触发刷盘或对应的事务已经完成。这样的机制同时也保证了 Reiser4 在创建文件和目录的时候不需要浪费时间和Fixed Block（Such a system also allows Reiser4 to create files and directories without having to waste time and space through fixed blocks）。
- ReiserFS - Hans Reiser主持开发的高性能日志文件系统 ReiserFS(v3)。使用一种非常独特有趣的数据存储检索方法。ReiserFS 效率非常高, 特别在处理很多小文件的时候更是如此。ReiserFS 格式化的时候很快，但在挂载的时候相对比较慢。性能稳定。 ReiserFS 现在的开发并不活跃(最新的版本是Reiser4)。通常是 `/var` 目录的好选择。
- Swap - swap 分区使用的文件系统。
- VFAT - Virtual File Allocation Table（虚拟文件分配表）。这种文件系统技术简单，受各种系统广泛支持。这种格式常用于固态存储卡，便于系统间文件交换。VFAT支持长文件名。
- XFS - 由 Silicon Graphics 开发的历史悠久的日志文件系统，最初是为 IRIX 操作系统开发，后来移植到 GNU/Linux。在处理大文件的时候能够提供高吞吐能力，格式化和挂载都非常快。对比测试显示 XFS 在处理数量较多的小文件时比较慢。 XFS 非常稳定，支持在线碎片整理。
- ZFS - 由 Sun Microsystems 设计开发的文件系统和卷管理器综合体。ZFS的特性包括数据错误保护，支持大容量存储（文件系统大小和单个文件大小支持16 EB，单个文件系统支持248个文件，zpool最大支持128 ZB），集成文件系统和卷管理，快照，写时拷贝，持续的完整性检查和自动修复，RAID-Z，原生 NFSV4 ACLs。

### 文件系统日志

以上除了 ext2 和 FAT16/32（即VFAT）以外的文件系统都支持文件系统日志。文件系统日志通过在数据实际变更前写入日志记录变更来提供故障恢复能力。当出现系统崩溃或掉电故障的时候，这些文件系统能够更快的恢复到可用状态，并且在恢复过程中更不容易出现错误。文件系统日志将会占用文件系统中的一部分空间。

并非所有的文件系统日志技术都相同。只有 ext3 和 ext4 提供 data-mode journaling，同时记录数据本身和元数据。由于对性能影响很大，这个功能默认是禁用的。其它文件系统仅提供记录元数据日志的ordered-mode journaling。尽管都能在系统崩溃后将系统返回正常状态，data-mode journaling 提供了最大程度的数据安全防护，但性能有所降低，因为数据会被写两次(第一次到日志，第二次到磁盘)。可以根据数据的重要性选择文件系统。

### 文件系统支持

- btrfs-progs — Btrfs 支持.

  http://btrfs.wiki.kernel.org/ || btrfs-progs

- dosfstools — VFAT 支持.

  http://www.daniel-baumann.ch/software/dosfstools/ || dosfstools

- exfat-utils — exFAT 支持.

  http://code.google.com/p/exfat/ || exfat-utils

- fuse-exfat — exFAT mount支持.

  http://code.google.com/p/exfat/ || fuse-exfat

- f2fs-tools — F2FS support.

  https://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git || f2fs-tools

- e2fsprogs — ext2, ext3, ext4 支持.

  http://e2fsprogs.sourceforge.net || e2fsprogs

- jfsutils — JFS 支持.

  http://jfs.sourceforge.net || jfsutils

- nilfs-utils — NILFS 支持.

  http://www.nilfs.org/ || nilfs-utils

- ntfs-3g — NTFS 支持.

  http://www.tuxera.com/community/ntfs-3g-download/ || ntfs-3g

- reiser4progs — ReiserFSv4 支持.

  http://sourceforge.net/projects/reiser4/ || reiser4progs

- reiserfsprogs — ReiserFSv3 支持.

  https://www.kernel.org/ || reiserfsprogs

- util-linux — Swap 支持.

  http://www.kernel.org/pub/linux/utils/util-linux/ || util-linux

- xfsprogs — XFS 支持.

  http://oss.sgi.com/projects/xfs/ || xfsprogs

- zfs — ZFS 支持.

  http://zfsonlinux.org/ || zfs-git

- zfs-fuse — 通过FUSE支持ZFS.

  http://zfs-fuse.net/ || zfs-fuse

注意: ZFS文件系统无法使用磁盘工具如 GParted 缩小。

## 格式化

注意: 格式化设备将会清除上面的所有数据，在此之前请确定你已经将需要保留的数据做好备份。

### 准备

在开始前，你需要知道 Linux 给你的设备起了什么名字。硬盘和U盘使用 `/dev/sdx` 这样的名字，其中“x”是一个或多个小写字母。文件系统被命名为 `/dev/sdxY`，其中“Y”是一个数字。

如果你想格式化的设备处于加载（mount）状态，它将会在以下命令的 MOUNTPOINT 列显示结果：

    $ lsblk

如果你想加载（mount）一个设备:

    # mount /dev/sdxY /some/directory

你可以通过 umount 命令后跟挂载点来卸载（unmount）它：

    # umount /some/directory

警告: 在格式化并创建一个新文件系统前，你的设备必须处于卸载状态（unmounted）。

使用你喜欢的工具来修改分区表。例如使用 fdisk 修改 MBR，gdisk 修改 GPT，或者找一个GUI 工具。参看 分区 以获取更多信息。

现在你可以使用命令行工具或图形界面工具（GUI 工具）创建文件系统了。

### 命令行工具

要创建一个文件系统，你需要用到 mkfs。mkfs 其实只是各种 `mkfs.fstype` 工具的一个统一入口：

    # mkfs -t ext4 /dev/partition

需要创建一个swap文件系统，你需要使用 mkswap：

    # mkswap /dev/partition

### GUI 工具

下面是一些用于分区管理的GUI工具：

- Gparted — Partition Magic 的 GTK+ 复制品，GNU Parted 的一个图形界面前端。

  http://gparted.sourceforge.net || gparted

- gnome-disk-utility — GNOME 的分区管理工具

  http://www.gnome.org || gnome-disk-utility

- KDE Partition Manager — KDE 的磁盘、分区、文件系统管理工具

  https://sourceforge.net/projects/partitionman/ || partitionmanager

Category:

- File systems (简体中文)