Difference between revisions of "File systems (简体中文)"

From ArchWiki
Jump to: navigation, search
(Update translation.)
Line 21: Line 21:
 
:''文件系统是数据组织方式,定义数据在磁盘上的保存、读取和更新方法。不同的文件系统可以根据存储设备的不同进行优化,提高效率''。
 
:''文件系统是数据组织方式,定义数据在磁盘上的保存、读取和更新方法。不同的文件系统可以根据存储设备的不同进行优化,提高效率''。
  
Arch Linux支持许多文件系统类型,我们可以为每个磁盘分区设置不同的文件系统。每种文件系统有自己的优缺点和独有特性。以下内容是关于Arch Linux支持的文件系统类型的概述,左侧的链接地址指向Wikipedia以提供更丰富的信息。
+
可以为每个磁盘分区设置一个或多个不同的文件系统。每种文件系统有自己的优缺点和独有特性。以下内容是目前所支持文件系统类型的概述。
 
 
磁盘需要首先[[Partitioning (简体中文)|分区]],然后再在格式化成指定文件系统。
 
  
 
== 文件系统类型 ==
 
== 文件系统类型 ==
 
 
参考 [[w:Comparison_of_file_systems]].
+
{{man|5|filesystems}} 包含一个简单介绍,详细比较参考 [[w:Comparison_of_file_systems]]. 内核支持的文件系统可以通过 {{ic|/proc/filesystems}} 查看。
 +
 
 +
{| class="wikitable sortable"
 +
! 文件系统
 +
! 创建命令
 +
! 工具
 +
! [[Archiso]] [https://git.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64]
 +
! 内核文档 [https://www.kernel.org/doc/Documentation/filesystems/]
 +
! 说明
 +
|-
 +
| [[Btrfs]]
 +
| {{man|8|mkfs.btrfs}}
 +
| {{Pkg|btrfs-progs}}
 +
| {{Yes}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/btrfs.txt btrfs.txt]
 +
| [https://btrfs.wiki.kernel.org/index.php/Status 稳定状态]
 +
|-
 +
| [[VFAT]]
 +
| {{man|8|mkfs.fat}}
 +
| {{Pkg|dosfstools}}
 +
| {{Yes}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/vfat.txt vfat.txt]
 +
|
 +
|-
 +
| [[w:exFAT|exFAT]]
 +
| {{man|8|mkexfatfs|}}
 +
| {{Pkg|exfat-utils}}
 +
| {{Yes}}
 +
| N/A (FUSE-based)
 +
|
 +
|-
 +
| [[F2FS]]
 +
| {{man|8|mkfs.f2fs}}
 +
| {{Pkg|f2fs-tools}}
 +
| {{Yes}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/f2fs.txt f2fs.txt]
 +
 
 +
| 基于闪存的设备
 +
|-
 +
| [[ext3]]
 +
| {{man|8|mke2fs}}
 +
| {{Pkg|e2fsprogs}}
 +
| {{Yes}} ({{Grp|base}})
 +
| [https://www.kernel.org/doc/Documentation/filesystems/ext3.txt ext3.txt]
 +
|
 +
|-
 +
| [[ext4]]
 +
| {{man|8|mke2fs}}
 +
| {{Pkg|e2fsprogs}}
 +
| {{Yes}} ({{Grp|base}})
 +
| [https://www.kernel.org/doc/Documentation/filesystems/ext4.txt ext4.txt]
 +
|
 +
|-
 +
| [[w:Hierarchical_File_System|HFS]]
 +
| {{man|8|mkfs.hfsplus|url=}}
 +
| {{AUR|hfsprogs}}
 +
| {{No}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/hfs.txt hfs.txt]
 +
| [[w:macOS|macOS]] 文件系统
 +
|-
 +
| [[JFS]]
 +
| {{man|8|mkfs.jfs}}
 +
| {{Pkg|jfsutils}}
 +
| {{Yes}} ({{Grp|base}})
 +
| [https://www.kernel.org/doc/Documentation/filesystems/jfs.txt jfs.txt]
 +
|
 +
|-
 +
| [[Wikipedia:NILFS|NILFS2]]
 +
| {{man|8|mkfs.nilfs2}}
 +
| {{Pkg|nilfs-utils}}
 +
| {{Yes}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/nilfs2.txt nilfs2.txt]
 +
|
 +
|-
 +
| [[NTFS]]
 +
| {{man|8|mkfs.ntfs}}
 +
| {{Pkg|ntfs-3g}}
 +
| {{Yes}}
 +
| N/A (FUSE-based)
 +
| [[w:Microsoft_Windows|Windows]] 文件系统
 +
|-
 +
| [[Reiser4]]
 +
| {{man|8|mkfs.reiser4|url=}}
 +
| {{AUR|reiser4progs}}
 +
| {{No}}
 +
|
 +
|
 +
|-
 +
| [[w:ReiserFS|ReiserFS]]
 +
| {{man|8|mkfs.reiserfs}}
 +
| {{Pkg|reiserfsprogs}}
 +
| {{Yes}} ({{Grp|base}})
 +
|
 +
|
 +
|-
 +
| [[w:Universal Disk Format|UDF]]
 +
| {{man|8|mkfs.udf}}
 +
| {{Pkg|udftools}}
 +
| {{Y|Optional}}
 +
| [https://www.kernel.org/doc/Documentation/filesystems/udf.txt udf.txt]
 +
|
 +
|-
 +
| [[XFS]]
 +
| {{man|8|mkfs.xfs}}
 +
| {{Pkg|xfsprogs}}
 +
| {{Yes}} ({{Grp|base}})
 +
|
 +
[https://www.kernel.org/doc/Documentation/filesystems/xfs.txt xfs.txt]<br>
 +
[https://www.kernel.org/doc/Documentation/filesystems/xfs-delayed-logging-design.txt xfs-delayed-logging-design.txt]<br>
 +
[https://www.kernel.org/doc/Documentation/filesystems/xfs-self-describing-metadata.txt xfs-self-describing-metadata.txt]
 +
|
 +
|-
 +
| [[ZFS]]
 +
|
 +
| {{AUR|zfs-linux}}
 +
| {{No}}
 +
| N/A ([[w:OpenZFS|OpenZFS]]移植)
 +
|
 +
|}
  
 
* {{App|[[Btrfs]]|基于 B-tree 的文件系统,是"写入时进行复制(CoW)的 Linux 文件系统,支持的高级数据校验,增量备份,以及能同时提升性能并节省空间的透明压缩功能。Btrfs 已经是稳定的文件系统,被认为是 GNU/Linux 文件系统的未来,被所有主流发行版的安装程序设置为 root 分区文件系统选项。[https://btrfs.wiki.kernel.org/index.php/Main_Page#Stability_status]|http://btrfs.wiki.kernel.org/|{{Pkg|btrfs-progs}}}}
 
* {{App|[[Btrfs]]|基于 B-tree 的文件系统,是"写入时进行复制(CoW)的 Linux 文件系统,支持的高级数据校验,增量备份,以及能同时提升性能并节省空间的透明压缩功能。Btrfs 已经是稳定的文件系统,被认为是 GNU/Linux 文件系统的未来,被所有主流发行版的安装程序设置为 root 分区文件系统选项。[https://btrfs.wiki.kernel.org/index.php/Main_Page#Stability_status]|http://btrfs.wiki.kernel.org/|{{Pkg|btrfs-progs}}}}
Line 42: Line 158:
 
* {{App|[[XFS]]|'''由 Silicon Graphics 开发的历史悠久的日志文件系统''',最初是为 IRIX 操作系统开发,后来移植到 GNU/Linux。在处理大文件的时候能够提供高吞吐能力,格式化和挂载都非常快。对比测试显示 XFS 在处理数量较多的小文件时比较慢。 XFS 非常稳定,支持在线碎片整理。|http://oss.sgi.com/projects/xfs/|{{Pkg|xfsprogs}}}}
 
* {{App|[[XFS]]|'''由 Silicon Graphics 开发的历史悠久的日志文件系统''',最初是为 IRIX 操作系统开发,后来移植到 GNU/Linux。在处理大文件的时候能够提供高吞吐能力,格式化和挂载都非常快。对比测试显示 XFS 在处理数量较多的小文件时比较慢。 XFS 非常稳定,支持在线碎片整理。|http://oss.sgi.com/projects/xfs/|{{Pkg|xfsprogs}}}}
 
*  {{App|[[ZFS]]|'''由 Sun Microsystems 设计开发的文件系统和卷管理器综合体'''。ZFS的特性包括数据错误保护,支持大容量存储(文件系统大小和单个文件大小支持16 EB,单个文件系统支持2<sup>48</sup>个文件,zpool最大支持128 ZB),集成文件系统和卷管理,快照,写时拷贝,持续的完整性检查和自动修复,RAID-Z,原生 NFSV4 ACLs。|http://zfsonlinux.org/|{{AUR|zfs-linux}}, {{AUR|zfs-linux-git}}}}
 
*  {{App|[[ZFS]]|'''由 Sun Microsystems 设计开发的文件系统和卷管理器综合体'''。ZFS的特性包括数据错误保护,支持大容量存储(文件系统大小和单个文件大小支持16 EB,单个文件系统支持2<sup>48</sup>个文件,zpool最大支持128 ZB),集成文件系统和卷管理,快照,写时拷贝,持续的完整性检查和自动修复,RAID-Z,原生 NFSV4 ACLs。|http://zfsonlinux.org/|{{AUR|zfs-linux}}, {{AUR|zfs-linux-git}}}}
 +
{{Note|内核中有 NTFS 驱动(参考[https://www.kernel.org/doc/Documentation/filesystems/ntfs.txt ntfs.txt]),但是文件写入支持很有限。}}
  
 
=== 文件系统日志 ===
 
=== 文件系统日志 ===
Line 47: Line 164:
  
 
并非所有的文件系统日志技术都相同。ext3 和 ext4 提供 data-mode journaling,同时记录数据本身和元数据。由于对性能影响很大,这个功能默认是禁用的。其它文件系统仅提供记录元数据日志的ordered-mode journaling。尽管都能在系统崩溃后将系统返回正常状态,data-mode journaling 提供了最大程度的数据安全防护,但性能有所降低,因为数据会被写两次(第一次到日志,第二次到磁盘)。可以根据数据的重要性选择文件系统。
 
并非所有的文件系统日志技术都相同。ext3 和 ext4 提供 data-mode journaling,同时记录数据本身和元数据。由于对性能影响很大,这个功能默认是禁用的。其它文件系统仅提供记录元数据日志的ordered-mode journaling。尽管都能在系统崩溃后将系统返回正常状态,data-mode journaling 提供了最大程度的数据安全防护,但性能有所降低,因为数据会被写两次(第一次到日志,第二次到磁盘)。可以根据数据的重要性选择文件系统。
 +
 +
基于 copy-on-write 的文件系统比如 Btrfs 和 ZFS 不需要用传统的日志保护元数据,因为这些信息不会被原地更新。虽然 Btrfs 还在使用日志树,这个树仅仅是为了加快 fdatasync/fsync 的速度。
  
 
== 基于 FUSE 的文件系统支持 ==
 
== 基于 FUSE 的文件系统支持 ==
Line 68: Line 187:
 
请参考 [[Wikipedia:Filesystem in Userspace#Example uses]] 以获得更多信息。
 
请参考 [[Wikipedia:Filesystem in Userspace#Example uses]] 以获得更多信息。
  
=== Special purpose file systems ===
+
=== 可叠加文件系统 ===
+
 
{{Style|Ambiguous section name, c.f. [https://upload.wikimedia.org/wikipedia/commons/3/30/IO_stack_of_the_Linux_kernel.svg].}}
+
* {{App|aufs|Advanced Multi-layered Unification Filesystem, a FUSE based union filesystem, a complete rewrite of Unionfs, was rejected from Linux mainline and instead OverlayFS was merged into the Linux Kernel.|http://aufs.sourceforge.net|{{AUR|aufs}}}}
+
 
* {{App|[[Wikipedia: cramfs|CramFS]]|'''Compressed ROM filesystem''' is a read only filesystem designed with simplicity and efficiency in mind. Its maximum file size is less 16MB and the maximum file system size is around 272MB.|http://sourceforge.net/projects/cramfs/|{{Pkg|util-linux}}}}
+
* {{App|[[eCryptfs]]|The Enterprise Cryptographic Filesystem is a package of disk encryption software for Linux. It is implemented as a POSIX-compliant filesystem-level encryption layer, aiming to offer functionality similar to that of GnuPG at the operating system level.|http://ecryptfs.org|{{Pkg|ecryptfs-utils}}}}
* {{App|[[eCryptfs]]|'''Enterprise Cryptographic Filesystem''' is a package of disk encryption software for Linux. It is implemented as a POSIX-compliant filesystem-level encryption layer, aiming to offer functionality similar to that of GnuPG at the operating system level.|http://ecryptfs.org|{{Pkg|ecryptfs-utils}}}}
+
 
* {{App|[[Wikipedia: SquashFS|SquashFS]]|'''SquashFS''' is a compressed read only filesystem. SquashFS compresses  files, inodes and directories, and supports block sizes up to 1 MB for greater compression.|http://squashfs.sourceforge.net/|{{Pkg|squashfs-tools}}}}
+
* {{App|mergerfs|a FUSE based union filesystem.|https://github.com/trapexit/mergerfs|{{AUR|mergerfs}}}}
 +
 
 +
* {{App|mhddfs|Multi-HDD FUSE filesystem, a FUSE based union filesystem.|http://mhddfs.uvw.ru|{{AUR|mhddfs}}}}
 +
 
 +
* {{App|[[overlayfs]]|OverlayFS is a filesystem service for Linux which implements a union mount for other file systems.|https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt|{{Pkg|linux}}}}
 +
 
 +
* {{App|Unionfs|Unionfs is a filesystem service for Linux, FreeBSD and NetBSD which implements a union mount for other file systems.|http://unionfs.filesystems.org/}}
 +
 
 +
* {{App|unionfs-fuse|A user space Unionfs implementation.|https://github.com/rpodgorny/unionfs-fuse|{{Pkg|unionfs-fuse}}}}
 +
 
 +
=== Read-only file systems ===
 +
 
 +
* {{App|[[Wikipedia: SquashFS|SquashFS]]|SquashFS is a compressed read only filesystem. SquashFS compresses  files, inodes and directories, and supports block sizes up to 1 MB for greater compression.|http://squashfs.sourceforge.net/|{{Pkg|squashfs-tools}}}}
 +
 
 +
=== Clustered file systems ===
 +
 
 +
* {{App|[[Ceph]]|Unified, distributed storage system designed for excellent performance, reliability and scalability.|https://ceph.com/|{{pkg|ceph}}}}
 +
* {{App|[[Glusterfs]]|Cluster file system capable of scaling to several peta-bytes.|https://www.gluster.org/|{{Pkg|glusterfs}}}}
 +
* {{App|[[IPFS]]|A peer-to-peer hypermedia protocol to make the web faster, safer, and more open. IPFS aims replace HTTP and build a better web for all of us. Uses blocks to store parts of a file, each network node stores only content it is interested, provides deduplication, distribution, scalable system limited only by users. (currently in aplha)|https://ipfs.io/|{{Pkg|go-ipfs}}}}
 +
* {{App|[[Wikipedia: MooseFS|MooseFS]]|MooseFS is a fault tolerant, highly available and high performance scale-out network distributed file system.|https://moosefs.com|{{Pkg|moosefs}}}}
 +
* {{App|[[OpenAFS]]|Open source implementation of the AFS distributed file system|http://www.openafs.org|{{AUR|openafs}}}}
 +
* {{App|[[Wikipedia: OrangeFS|OrangeFS]]|OrangeFS is a scale-out network file system designed for transparently accessing multi-server-based disk storage, in parallel. Has optimized MPI-IO support for parallel and distributed applications. Simplifies the use of parallel storage not only for Linux clients, but also for Windows, Hadoop, and WebDAV. POSIX-compatible. Part of Linux kernel since version 4.6. |http://www.orangefs.org/}}
 +
* {{App|Sheepdog|Distributed object storage system for volume and container services and manages the disks and nodes intelligently.|https://sheepdog.github.io/sheepdog/}}
 +
* {{App|[[Wikipedia:Tahoe-LAFS|Tahoe-LAFS]]|Tahoe Least-Authority Filesystem is a free and open, secure, decentralized, fault-tolerant, peer-to-peer distributed data store and distributed file system.
 +
|https://tahoe-lafs.org/|{{AUR|tahoe-lafs}}}}
 +
 
 +
== 查看现有文件系统 ==
 +
 
 +
To identify existing file systems, you can use [[lsblk]]:
 +
 
 +
{{hc|1=$ lsblk -f|2=
 +
NAME  FSTYPE LABEL    UUID                                MOUNTPOINT
 +
sdb                                                         
 +
└─sdb1 vfat  Transcend 4A3C-A9E9                           
 +
}}
 +
 
 +
An existing file system, if present, will be shown in the {{ic|FSTYPE}} column. If [[mount]]ed, it will appear in the {{ic|MOUNTPOINT}} column.
  
 
== 创建文件系统 ==
 
== 创建文件系统 ==
  
首先,确认系统的安装位置,通常是在一个分区上创建的,不过也可以在逻辑容器如[[LVM]],[[RAID]],或者 [[dm-crypt]] 上创建文件系统。
+
首先,确认系统的安装位置,可以创建在一个分区上、逻辑容器如[[LVM]],[[RAID]],或者 [[dm-crypt]] 上或普通文件上(参考 [[Wikipedia:Loop device]])。这里描述创建在分区上的情况。
 +
 
 +
{{Warning|
 +
* 创建新文件系统之后,之前存放在该分区的数据会丢失且通常无法找回。'''请备份所有要保留的数据'''.
 +
*The purpose of a given partition may restrict the choice of file system. For example, an [[EFI system partition]] must contain a [[FAT32]] ({{ic|mkfs.vfat}}) file system, and the file system containing the {{ic|/boot}} directory must be supported by the [[boot loader]].
 +
}}
  
=== 格式化 ===
+
创建文件系统之前,目标分区必须处于未挂载状态。如果你要格式化的分区包含了一个已挂载的文件系统,在 [[lsblk]] 命令的 ''MOUNTPOINT'' 列中可以看到它。
创建文件系统之前,目标分区必须处于未挂载状态。如果你要格式化的分区包含了一个已挂载的文件系统,在 lsblk 命令的 ''MOUNTPOINT'' 列中可以看到它。
 
  
$ lsblk
+
{{hc|$ lsblk -f|
 +
NAME  FSTYPE  LABEL      UUID                                MOUNTPOINT
 +
sda
 +
├─sda1                      C4DA-2C4D                           
 +
├─sda2 ext4                5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt
 +
└─sda3                      56adc99b-a61e-46af-aab7-a6d07e504652
 +
}}
  
 
你可以使用 ''umount'' 加上分区的挂载点来卸载这个文件系统:
 
你可以使用 ''umount'' 加上分区的挂载点来卸载这个文件系统:
Line 90: Line 255:
  
 
使用一下命令来创建一个 ''fstype'' 文件系统:
 
使用一下命令来创建一个 ''fstype'' 文件系统:
 
{{警告|创建新文件系统之后,之前存放在该分区的数据会丢失且通常无法找回。请对你想要保留的数据做好备份。}}
 
  
 
  # mkfs.''fstype'' /dev/''partition''
 
  # mkfs.''fstype'' /dev/''partition''
Line 98: Line 261:
  
 
  # mkfs -t ext4 /dev/''partition''
 
  # mkfs -t ext4 /dev/''partition''
 +
 +
{{Tip|
 +
* Use the {{ic|-L}} flag of ''mkfs.ext4'' to specify a [[Persistent_block_device_naming#by-label|file system label]]. ''e2label'' can be used to change the label on an existing file system.
 +
* File systems may be ''resized'' after creation, with certain limitations. For example, an [[XFS]] filesystem's size can be increased, but it cannot reduced. See [[w:Comparison_of_file_systems#Resize_capabilities|Resize capabilities]] and the respective file system documentation for details.}}
 +
 +
The new file system can now be mounted to a directory of choice.
 +
 +
== Mount a file system ==
 +
 +
To manually mount filesystem located on a device (e.g., a partition) to a directory, use {{man|8|mount}}. This example mounts {{ic|/dev/sda1}} to {{ic|/mnt}}.
 +
 +
# mount /dev/sda1 /mnt
 +
 +
This attaches the filesystem on {{ic|/dev/sda1}} at the directory {{ic|/mnt}}, making the contents of the filesystem visible. Any data that existed at {{ic|/mnt}} before this action is made invisible until the device is unmounted.
 +
 +
[[fstab]] contains information on how devices should be automatically mounted if present. See the [[fstab]] article for more information on how to modify this behavior.
 +
 +
If a device is specified in {{ic|/etc/fstab}} and only the device or mount point is given on the command line, that information will be used in mounting. For example, if {{ic|/etc/fstab}} contains a line indicating that {{ic|/dev/sda1}} should be mounted to {{ic|/mnt}}, then the following will automatically mount the device to that location:
 +
 +
# mount /dev/sda1
 +
 +
Or
 +
 +
# mount /mnt
 +
 +
''mount'' contains several options, many of which depend on the file system specified.
 +
The options can be changed, either by:
 +
* using flags on the command line with ''mount''
 +
* editing [[fstab]]
 +
* creating [[udev]] rules
 +
* [[Arch Build System|compiling the kernel yourself]]
 +
* or using filesystem-specific mount scripts (located at {{ic|/usr/bin/mount.*}}).
 +
 +
See these related articles and the article of the filesystem of interest for more information.
 +
 +
=== List mounted file systems ===
 +
 +
To list all mounted file systems, use {{man|8|findmnt}}:
 +
 +
$ findmnt
 +
 +
''findmnt'' takes a variety of arguments which can filter the output and show additional information. For example, it can take a device or mount point as an argument to show only information on what is specified:
 +
 +
$ findmnt /dev/sda1
 +
 +
''findmnt'' gathers information from {{ic|/etc/fstab}}, {{ic|/etc/mtab}}, and {{ic|/proc/self/mounts}}.
 +
 +
=== 卸载文件系统 ===
 +
 +
To unmount a file system use {{man|8|umount}}. Either the device containing the file system (e.g., {{ic|/dev/sda1}}) or the mount point (e.g., {{ic|/mnt}}) can be specified:
 +
 +
# umount /dev/sda1
 +
 +
Or
 +
 +
# umount /mnt
 +
 +
== 参阅 ==
 +
 +
* {{man|5|filesystems}}
 +
* [https://www.kernel.org/doc/Documentation/filesystems/ Documentation of file systems supported by linux]
 +
* [[Wikipedia:File systems]]
 +
* [[Wikipedia:Mount (Unix)]]

Revision as of 07:58, 3 September 2018

翻译状态: 本文是英文页面 File_Systems翻译,最后翻译时间:2016-09-01,点击这里可以查看翻译后英文页面的改动。

根据 Wikipedia:

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

可以为每个磁盘分区设置一个或多个不同的文件系统。每种文件系统有自己的优缺点和独有特性。以下内容是目前所支持文件系统类型的概述。

文件系统类型

filesystems(5) 包含一个简单介绍,详细比较参考 w:Comparison_of_file_systems. 内核支持的文件系统可以通过 /proc/filesystems 查看。

文件系统 创建命令 工具 Archiso [1] 内核文档 [2] 说明
Btrfs mkfs.btrfs(8) btrfs-progs Yes btrfs.txt 稳定状态
VFAT mkfs.fat(8) dosfstools Yes vfat.txt
exFAT mkexfatfs(8) exfat-utils Yes N/A (FUSE-based)
F2FS mkfs.f2fs(8) f2fs-tools Yes f2fs.txt 基于闪存的设备
ext3 mke2fs(8) e2fsprogs Yes (base) ext3.txt
ext4 mke2fs(8) e2fsprogs Yes (base) ext4.txt
HFS mkfs.hfsplus(8) hfsprogsAUR No hfs.txt macOS 文件系统
JFS mkfs.jfs(8) jfsutils Yes (base) jfs.txt
NILFS2 mkfs.nilfs2(8) nilfs-utils Yes nilfs2.txt
NTFS mkfs.ntfs(8) ntfs-3g Yes N/A (FUSE-based) Windows 文件系统
Reiser4 mkfs.reiser4(8) reiser4progsAUR No
ReiserFS mkfs.reiserfs(8) reiserfsprogs Yes (base)
UDF mkfs.udf(8) udftools Optional udf.txt
XFS mkfs.xfs(8) xfsprogs Yes (base)

xfs.txt
xfs-delayed-logging-design.txt
xfs-self-describing-metadata.txt

ZFS zfs-linuxAUR No N/A (OpenZFS移植)
  • Btrfs — 基于 B-tree 的文件系统,是"写入时进行复制(CoW)的 Linux 文件系统,支持的高级数据校验,增量备份,以及能同时提升性能并节省空间的透明压缩功能。Btrfs 已经是稳定的文件系统,被认为是 GNU/Linux 文件系统的未来,被所有主流发行版的安装程序设置为 root 分区文件系统选项。[3]
http://btrfs.wiki.kernel.org/ || btrfs-progs
  • VFATVirtual File Allocation Table(虚拟文件分配表)。这种文件系统技术简单,受各种系统广泛支持。这种格式常用于固态存储卡,便于系统间文件交换。VFAT支持长文件名。
https://github.com/dosfstools/dosfstools || dosfstools
  • exFAT为 Flash 磁盘优化的 Microsoft 文件系统。。和 NTFS 一样,exFAT 可以通过将磁盘空间标记为“已分配”就为文件预分配磁盘空间。
https://github.com/relan/exfat || exfat-utils
  • F2FSFlash-Friendly File System。由Samsung的Kim Jaegeuk(韩文:김재극)为Linux编写的适用于Flash设备的文件系统。F2FS的设计初衷是为了针对NAND闪存设备(包括SSD,eMMC和SD卡)的特性打造一个新的文件系统。这些设备目前在从移动设备到服务器的范畴内被广泛使用。
https://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git || f2fs-tools
  • extSecond Extended Filesystem。古老、可靠的 GNU/Linux 文件系统。非常稳定,一个缺点是不支持日志记录或隔离。不支持日志会导致在突然断电或当机时可能导致数据丢失。因为文件系统检查的时间很长,不适合用于根 (/) 和 /home 分区。ext2 可以容易地转换成 ext3Third Extended Filesystem。基于 ext2 系统, 并添加了日志记录功能。 ext3 向前兼容 ext2 ,非常成熟稳定。Fourth Extended Filesystem。一种新的文件系统,向前兼容 ext2 和 ext3 ,最大支持 1EB (1,048,576 TB) 分区,支持单个 16TB 的文件。子目录最大个数支持 64,000, ext3 只支持 32,000。支持在线碎片处理。
http://e2fsprogs.sourceforge.net || e2fsprogs
  • HFSHierarchical File System 是苹果公司开发的专有文件系统,在 Mac OS 系统中使用.
http://www.opensource.apple.com || hfsprogsAUR
  • JFS — IBM 的日志文件系统( Journaled File System )。这是第一个支持日志的文件系统。它在 IBM AIX® 操作系统中开发了多年,然后被移植到GNU/Linux上。JFS 效率非常高并且 CPU 资源占用率比 GNU/Linux 上的其他任何一个文件系统都要低。并且在格式化、挂载和磁盘检测的时候都非常快,在各方面的表现都非常突出,尤其是与 deadline I/O 调度器结合。不如ext系列或者ReiserFS那样广泛支持,但非常成熟稳定。
http://jfs.sourceforge.net || jfsutils
  • NILFS2New Implementation of a Log-structured File System。由 NTT 开发。该文件系统将所有数据以连续的类似日志的结构储存,新数据只添加不改写。这种设计减少了寻址时间,相对传统的 Linux 文件系统能防止在崩溃发生后的数据丢失。
http://nilfs.sourceforge.net/ || nilfs-utils
  • NTFSWindows使用的文件系统。 NTFS 相比 FAT 和 HPFS(High Performance File System)在技术作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率,并提供了若干附加扩展功能,如访问控制列表和文件系统日志。
http://www.tuxera.com/community/ntfs-3g-download/ || ntfs-3g
  • Reiser4ReiserFS 的继任者。由 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)。
https://reiser4.wiki.kernel.org/index.php/Main_Page || reiser4progsAUR
  • ReiserFSHans Reiser主持开发的高性能日志文件系统 ReiserFS(v3)。使用一种非常独特有趣的数据存储检索方法。ReiserFS 效率非常高, 特别在处理很多小文件的时候更是如此。ReiserFS 格式化的时候很快,但在挂载的时候相对比较慢。性能稳定。 ReiserFS 现在的开发并不活跃(最新的版本是Reiser4)。通常是 /var 目录的好选择。
https://reiser4.wiki.kernel.org/index.php/Main_Page || reiserfsprogs
  • XFS由 Silicon Graphics 开发的历史悠久的日志文件系统,最初是为 IRIX 操作系统开发,后来移植到 GNU/Linux。在处理大文件的时候能够提供高吞吐能力,格式化和挂载都非常快。对比测试显示 XFS 在处理数量较多的小文件时比较慢。 XFS 非常稳定,支持在线碎片整理。
http://oss.sgi.com/projects/xfs/ || xfsprogs
  • ZFS由 Sun Microsystems 设计开发的文件系统和卷管理器综合体。ZFS的特性包括数据错误保护,支持大容量存储(文件系统大小和单个文件大小支持16 EB,单个文件系统支持248个文件,zpool最大支持128 ZB),集成文件系统和卷管理,快照,写时拷贝,持续的完整性检查和自动修复,RAID-Z,原生 NFSV4 ACLs。
http://zfsonlinux.org/ || zfs-linuxAUR, zfs-linux-gitAUR
Note: 内核中有 NTFS 驱动(参考ntfs.txt),但是文件写入支持很有限。

文件系统日志

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

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

基于 copy-on-write 的文件系统比如 Btrfs 和 ZFS 不需要用传统的日志保护元数据,因为这些信息不会被原地更新。虽然 Btrfs 还在使用日志树,这个树仅仅是为了加快 fdatasync/fsync 的速度。

基于 FUSE 的文件系统支持

Filesystem in Userspace (FUSE) 是 Unix 类操作系统中一种允许非特权用户在不修改内核代码的前提下创建自己的文件系统的一种机制。文件系统相关的代码会在用户空间运行,FUSE 内核模块仅仅是提供一个通往内核接口的“桥梁”。

一些基于 FUSE 的文件系统如下:

  • acd-fuse — FUSE filesystem driver for Amazon's Cloud Drive.
https://github.com/handyman5/acd_fuse || acdfuse-gitAUR[broken link: archived in aur-mirror]
  • adbfs-git — Android 设备文件系统挂载支持
http://collectskin.com/adbfs/ || adbfs-gitAUR
  • cddfs — 音乐 CD 挂载支持
http://castet.matthieu.free.fr/ || cddfsAUR[broken link: archived in aur-mirror]
  • fuseiso — 以普通用户身份挂载ISO文件系统
http://sourceforge.net/projects/fuseiso/ || fuseiso
  • vdfuse — Mounting VirtualBox disk images (VDI/VMDK/VHD).
https://github.com/muflone/virtualbox-includes || vdfuseAUR
  • wiifuse — 只读挂载 Gamecube 或 Wii DVD 镜像
http://wiibrew.org/wiki/Wiifuse || wiifuseAUR[broken link: archived in aur-mirror]
  • xbfuse-git — 挂载 Xbox (360) ISO 镜像
http://multimedia.cx/xbfuse/ || xbfuse-gitAUR
  • xmlfs — 将 XML 文件以目录树的形式挂载
https://github.com/halhen/xmlfs || xmlfsAUR
http://zfs-fuse.net/ || zfs-fuseAUR[broken link: archived in aur-mirror]
  • EncFS — EncFS is a userspace stackable cryptographic file-system.
https://vgough.github.io/encfs/ || encfs
  • gitfs — gitfs is a FUSE file system that fully integrates with git.
https://www.presslabs.com/gitfs/ || gitfsAUR

请参考 Wikipedia:Filesystem in Userspace#Example uses 以获得更多信息。

可叠加文件系统

  • aufs — Advanced Multi-layered Unification Filesystem, a FUSE based union filesystem, a complete rewrite of Unionfs, was rejected from Linux mainline and instead OverlayFS was merged into the Linux Kernel.
http://aufs.sourceforge.net || aufsAUR
  • eCryptfs — The Enterprise Cryptographic Filesystem is a package of disk encryption software for Linux. It is implemented as a POSIX-compliant filesystem-level encryption layer, aiming to offer functionality similar to that of GnuPG at the operating system level.
http://ecryptfs.org || ecryptfs-utils
  • mergerfs — a FUSE based union filesystem.
https://github.com/trapexit/mergerfs || mergerfsAUR
  • mhddfs — Multi-HDD FUSE filesystem, a FUSE based union filesystem.
http://mhddfs.uvw.ru || mhddfsAUR
  • overlayfs — OverlayFS is a filesystem service for Linux which implements a union mount for other file systems.
https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt || linux
  • Unionfs — Unionfs is a filesystem service for Linux, FreeBSD and NetBSD which implements a union mount for other file systems.
http://unionfs.filesystems.org/ || not packaged? search in AUR
  • unionfs-fuse — A user space Unionfs implementation.
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuse

Read-only file systems

  • SquashFS — SquashFS is a compressed read only filesystem. SquashFS compresses files, inodes and directories, and supports block sizes up to 1 MB for greater compression.
http://squashfs.sourceforge.net/ || squashfs-tools

Clustered file systems

  • Ceph — Unified, distributed storage system designed for excellent performance, reliability and scalability.
https://ceph.com/ || ceph
  • Glusterfs — Cluster file system capable of scaling to several peta-bytes.
https://www.gluster.org/ || glusterfs
  • IPFS — A peer-to-peer hypermedia protocol to make the web faster, safer, and more open. IPFS aims replace HTTP and build a better web for all of us. Uses blocks to store parts of a file, each network node stores only content it is interested, provides deduplication, distribution, scalable system limited only by users. (currently in aplha)
https://ipfs.io/ || go-ipfs
  • MooseFS — MooseFS is a fault tolerant, highly available and high performance scale-out network distributed file system.
https://moosefs.com || moosefs
  • OpenAFS — Open source implementation of the AFS distributed file system
http://www.openafs.org || openafsAUR
  • OrangeFS — OrangeFS is a scale-out network file system designed for transparently accessing multi-server-based disk storage, in parallel. Has optimized MPI-IO support for parallel and distributed applications. Simplifies the use of parallel storage not only for Linux clients, but also for Windows, Hadoop, and WebDAV. POSIX-compatible. Part of Linux kernel since version 4.6.
http://www.orangefs.org/ || not packaged? search in AUR
  • Sheepdog — Distributed object storage system for volume and container services and manages the disks and nodes intelligently.
https://sheepdog.github.io/sheepdog/ || not packaged? search in AUR
  • Tahoe-LAFS — Tahoe Least-Authority Filesystem is a free and open, secure, decentralized, fault-tolerant, peer-to-peer distributed data store and distributed file system.
https://tahoe-lafs.org/ || tahoe-lafsAUR

查看现有文件系统

To identify existing file systems, you can use lsblk:

$ lsblk -f
NAME   FSTYPE LABEL     UUID                                 MOUNTPOINT
sdb                                                          
└─sdb1 vfat   Transcend 4A3C-A9E9

An existing file system, if present, will be shown in the FSTYPE column. If mounted, it will appear in the MOUNTPOINT column.

创建文件系统

首先,确认系统的安装位置,可以创建在一个分区上、逻辑容器如LVMRAID,或者 dm-crypt 上或普通文件上(参考 Wikipedia:Loop device)。这里描述创建在分区上的情况。

Warning:
  • 创建新文件系统之后,之前存放在该分区的数据会丢失且通常无法找回。请备份所有要保留的数据.
  • The purpose of a given partition may restrict the choice of file system. For example, an EFI system partition must contain a FAT32 (mkfs.vfat) file system, and the file system containing the /boot directory must be supported by the boot loader.

创建文件系统之前,目标分区必须处于未挂载状态。如果你要格式化的分区包含了一个已挂载的文件系统,在 lsblk 命令的 MOUNTPOINT 列中可以看到它。

$ lsblk -f
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1                      C4DA-2C4D                            
├─sda2 ext4                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt
└─sda3                      56adc99b-a61e-46af-aab7-a6d07e504652 

你可以使用 umount 加上分区的挂载点来卸载这个文件系统:

# umount /mountpoint

使用一下命令来创建一个 fstype 文件系统:

# mkfs.fstype /dev/partition

此外,你可以使用 mkfs。这是 mkfs.fstype 工具的统一入口。

# mkfs -t ext4 /dev/partition
Tip:
  • Use the -L flag of mkfs.ext4 to specify a file system label. e2label can be used to change the label on an existing file system.
  • File systems may be resized after creation, with certain limitations. For example, an XFS filesystem's size can be increased, but it cannot reduced. See Resize capabilities and the respective file system documentation for details.

The new file system can now be mounted to a directory of choice.

Mount a file system

To manually mount filesystem located on a device (e.g., a partition) to a directory, use mount(8). This example mounts /dev/sda1 to /mnt.

# mount /dev/sda1 /mnt

This attaches the filesystem on /dev/sda1 at the directory /mnt, making the contents of the filesystem visible. Any data that existed at /mnt before this action is made invisible until the device is unmounted.

fstab contains information on how devices should be automatically mounted if present. See the fstab article for more information on how to modify this behavior.

If a device is specified in /etc/fstab and only the device or mount point is given on the command line, that information will be used in mounting. For example, if /etc/fstab contains a line indicating that /dev/sda1 should be mounted to /mnt, then the following will automatically mount the device to that location:

# mount /dev/sda1

Or

# mount /mnt

mount contains several options, many of which depend on the file system specified. The options can be changed, either by:

See these related articles and the article of the filesystem of interest for more information.

List mounted file systems

To list all mounted file systems, use findmnt(8):

$ findmnt

findmnt takes a variety of arguments which can filter the output and show additional information. For example, it can take a device or mount point as an argument to show only information on what is specified:

$ findmnt /dev/sda1

findmnt gathers information from /etc/fstab, /etc/mtab, and /proc/self/mounts.

卸载文件系统

To unmount a file system use umount(8). Either the device containing the file system (e.g., /dev/sda1) or the mount point (e.g., /mnt) can be specified:

# umount /dev/sda1

Or

# umount /mnt

参阅