Contents

Linux文件系统简介

1. 概述

文件系统描述了我们的数据。对于文件系统,我们有文件夹、访问控制和命名文件。没有它们,我们的磁盘将只是一堆比特。我们不知道任何东西存储在哪里、事情从哪里开始或结束,或者任何外部信息(元数据)。

文件系统的首要任务是保护我们的数据安全。我们希望我们的数据能够快速访问、易于管理,最重要的是,它必须正确无误并且位于我们放置它的地方。从统计数据来看 ,存储硬件故障(硬盘驱动器崩溃)太常见了 。这意味着如果我们的数据对我们有价值,我们需要更深入地研究存储管理。

忽略文件系统并使用默认值很容易。在今天的 Linux 中,这意味着 ext4 或 XFS 文件系统。但我们还有其他更高级的选项:brtfsZFS 。这些“下一代”文件系统让我们可以更灵活、更安全地使用更大的存储空间。

在这篇文章中,我们将研究一些我们从默认文件系统中得到的东西,以及下一代文件系统提供的东西。

2. 默认值:ext4 和 XFS

随着时间的推移,这两个文件系统已经发展到可以满足非常相似的需求。它们是快速可靠的日志文件系统。自 2009 年发布 Karmic Koala 以来,Ubuntu 默认使用 ext4。2010 年的 Red Hat Enterprise Linux 6.0 也使用了 ext4。RHEL 7.0 于 2014 年迁移到 XFS。

文件系统是我们稳定系统的基本组成部分,内核和分发维护者在采用更改时行动缓慢而谨慎

如果我们今天安装 Ubuntu 或 Debian,我们的存储将使用 ext4。如果我们安装 Red Hat Enterprise Linux 或 SuSE,我们将获得 XFS。

2.1. 昨天的高科技:期刊、范围和有限校验和

自从引入 Linux 以来,这两个文件系统在功能对等方面变得越来越接近。XFS 开始时更先进,并且继续运行良好。然而,ext4 现在成功地增加了 XFS 曾经独树一帜的许多功能:

  • 日志 :文件系统“日志”将所有更改的重复日志写入文件系统。如果对文件系统的写入中断(断电),系统会检查日志并“回放”以最大程度地减少数据丢失和文件损坏。(以前,文件系统的正确性依赖于fsck等“检查器”工具。)
  • 范围 :传统上,文件系统会逐块维护其内容的“映射”。默认块通常为 4,096 字节,因此随着存储量的增加,我们可以想象这些映射变得有多大。相反,XFS 和 ext4 将数据块映射到称为“范围”的更大块中。具体来说,extent map 是两个数字:起始块地址和 extent 的长度(以块为单位)。这适用于大容量和大文件,无需跟踪每个块的文件成员资格。
  • 校验和 :我们如何知道我们的数据没有损坏?一种方法是计算校验和——一个较短的“幻数”,它会在我们较大的数据发生变化时发生变化。我们过去常常通过运行检查和修复程序来做到这一点:发音困难的fsck 。XFS 和 ext4 现在计算元数据及其日志文件的校验和。这很有用,尽管远不如 btrfs 和 ZFS 的逐块校验和完整。

尽管 ext4 和 XFS 的功能都很出色,但它们都不适合当今一些更复杂的存储挑战。

2.2. ext 文件系统

“扩展文件系统”仍然是 Linux 使用最流行的文件系统。从 1992 年的 ext 开始,文件系统在 1993 年迅速转移到 ext2,在 2001 年增加了一个带有 ext3 的日志,并在 2008 年对 ext4 进行了面向未来的调整。

ext4 文件系统延续了其前身的哲学:快速并在出现故障时修复它。但是,ext3 和 ext4 添加了数据安全功能,例如日志和有限的校验和。

ext4 还使更大的卷和文件成为可能(从 ext3 的最大 16 TB 开始)。它对范围 的采用进一步有助于处理更大的文件,例如媒体和一些数据库。

但 ext4 也适用于许多较小文件的集合。它取消了 ext3 先前对子目录的限制(ext3 的上限为 32,000 个,这是公认的慷慨)。

ext 文件系统系列作为 Linux 的默认文件系统持续了这么久是有原因的:它是经过充分测试的主力,优先考虑速度和“足够好”的数据验证。

2.3. XFS:90 年代的“Big Iron”

Silicon Graphics, Inc. 于 1993 年为其 IRIX Unix 操作系统创建了 XFS。SGI 以突破计算机图形制作的极限而闻名。他们依靠自己定制的高端和高度并行的硬件来实现这一目标。

因此,SGI 需要一个能够使用多个 CPU 和驱动器控制器可靠地处理大型文件的文件系统。可靠性意味着保留日志以避免文件损坏。处理大文件意味着使 XFS 成为 64 位(回到 64 位很酷之前)。允许多个 CPU 读取和写入这些巨型文件意味着 XFS 的开发人员需要取消在访问期间在 i 节点周围放置锁的标准做法。

我们可以想象允许可能有数百个 CPU 内核同时访问的额外复杂性!但是设计这种细粒度的软件系统为其高度并行的硬件带来了回报。就像 macOS 和 iOS 适合 Apple 硬件一样,XFS 适合 SGI 的生态系统。

XFS 于 2001 年移植到 Linux 并进入内核。现在它在几乎每个 Linux 发行版上都可用且可靠。

如果我们正在构建一个具有大存储需求、大文件和多线程 I/O 的系统,我们应该考虑 XFS。但是对于更小更轻的负载,ext4 可能更适合我们。

我们的系统会处理媒体文件或大数据吗?如果是这样,我们应该研究 XFS 或下一代文件系统之一。

我们会运行微服务吗?如果是这样的话,我们可能想坚持使用 ext4。

2.4. 试一试

最后!让我们动手吧!体验不同文件系统的最简单方法是全新安装 Linux。但如果我们想在现有系统上进行试验,那也是一种选择。

ext4 文件系统已经无处不在。让我们看看*/sbin*目录:

$ ls -l /sbin/mkfs.ext*
lrwxrwxrwx 1 root root 6 Feb 21 23:30 /sbin/mkfs.ext2 -> mke2fs
lrwxrwxrwx 1 root root 6 Feb 21 23:30 /sbin/mkfs.ext3 -> mke2fs
lrwxrwxrwx 1 root root 6 Feb 21 23:30 /sbin/mkfs.ext4 -> mke2fs

这些链接方便地运行二进制*mke2fs * ,尽管我们也可以直接运行它并使用*-t*选项指定文件系统类型。

首先,我们将仔细检查我们是否不小心破坏了我们想要保留的文件系统。我们可以使用lsblk 查看可用的块设备,并使用df 比较已安装的设备。 然后,就像将mkfs程序指向设备一样简单:

$ sudo /sbin/mkfs.ex4 /dev/sdc

然后我们创建一个目录作为挂载点并运行mount 。如果我们希望每次重启时都挂载新文件系统,我们将在fstab 中添加一行。

如果我们想用 XFS 做到这一点,我们可能必须先安装 userland 工具。(对文件系统的支持已经内置到大多数内核中。我们只需要让我们创建和操作它的程序。)

在 Debian 和 Ubuntu 上,我们使用apt 安装 xfsprogs 包:

$ sudo apt install xfsprogs

然后运行匹配的命令用 XFS 初始化我们的块设备:

$ sudo /sbin/mkfs.xfs /dev/sdc

安装后,我们可以进行试验,看看它如何满足我们的需求!

2.5. RAID 和逻辑卷管理器

尽管对RAID 和逻辑卷选项的详细检查需要单独的文章来讨论,但我们需要了解它们如何与文件系统交互。

RAID 和逻辑卷管理器做不同的事情,但都允许我们将多个物理磁盘视为一个抽象卷

我们不是直接在块设备上创建我们的文件系统,而是将磁盘添加到一个集合中,然后将该集合视为具有一个文件系统的一个设备。

例如,我们可能有两个磁盘(物理卷,在 LVM2 的术语中)加入一个虚拟卷:

$ lsblk -f -e7 -o NAME,FSTYPE,FSVER,FSAVAIL,MOUNTPOINT
NAME                   FSTYPE      FSVER    FSAVAIL MOUNTPOINT
sda                                                 
├─sda1                 ext2        1.0        63.9M /boot
├─sda2                                              
└─sda5                 LVM2_member LVM2 001         
  ├─salvage--vg-root   ext4        1.0       388.7G /
  ├─salvage--vg-swap_1 swap        1                [SWAP]
  └─salvage--vg-home   ext4        1.0       274.2G /home
sdb                    LVM2_member LVM2 001         
└─salvage--vg-root     ext4        1.0       388.7G /

在这里,sda5分区和sdb驱动器都是物理驱动器(使用pvdisplay 检查)收集到单个卷组(使用vgdisplay 检查)并分配到文件系统所在的逻辑卷(使用lvdisplay 检查)。

请注意根安装点 ( salvage–vg-root ) 如何使用来自两个不同物理驱动器(sda5sdb)的空间?现代 Linux 多年来一直使用lvm 这样做,允许我们使用所有可用空间或留出一些空间作为实时镜像副本。

我们还可以添加新的物理磁盘并调整我们的卷和文件系统的大小。灵活方便!

我们选择如何传播我们的数据既有风险也有回报。如果一个磁盘坏了,我们会丢失数据吗?如果我们使用 10 个磁盘和两个 die 怎么样?

这些都是长期数据存储的重要问题,但 RAID 和 LVM 的“旧方法”解决方案对它们的回答截然不同。ZFS 和 btrfs 为这些问题带来了更集成的方法,我们将在本文后面看到。

3. 下一代文件系统:什么和为什么

老式且久经考验的文件系统具有所有这些强大的功能!为什么我们还需要更多东西?

事实上,一些用例可以通过传统和可信的解决方案得到很好的服务。

但是更新的文件系统解决并整合了存储问题。ZFS 结合了 RAID 控制器、卷管理器和文件系统。但它还有更多作用,重新思考文件系统的挂载和共享方式。btrfs 实现了几个类似的功能目标,同时避免了必须修改我们关于存储的基本假设。

3.1. 新热点:写时复制、错误检测、快照和复制

btrfs 和 ZFS 都强调了与以前的文件系统相比的三个特殊设计和功能变化。

**写时复制 (COW) 的工作原理是从不覆盖就地数据。**我们不再需要担心文件或文件系统进入不一致状态。在较旧的文件系统中,当出现问题(断电、由于硬件错误、宇宙射线导致的位翻转)时,我们可能正在保存文件,并且该文件现在可能已损坏。

相反,使用 COW 文件系统,内存中的数据更改将写入磁盘的新区域。完成后,任何引用该文件的内容都会更改为指向磁盘上的新文件位置。

例如,目录条目保存其中所有文件的列表及其块地址。一旦新副本完成——而不是之前——目录条目将更改为引用新的块地址。元数据更改通过类似的过程进行。

COW 的另一个关键要素是,如果文件没有更改,则不需要复制它。相反,“浅拷贝”的工作方式有点像符号链接,仅在实际发生变化时才复制数据。

**错误检测现在由文件系统逐块完成。**在糟糕的过去,我们必须运行fsck来修复任何可能的数据错误。使用ext4或者XFS,还是要等journal回放。旧式 RAID 需要很长时间才能重建,因为它必须检查所有其他磁盘。

但更糟糕的是:我们现在知道,随着驱动器变得越来越大,越来越多的静默数据损坏 错误未被发现。有了**块级校验和,**我们就可以依靠文件系统来修复这些错误。

例如,ZFS 可能有一个文件分布在多个驱动器上,它的各个块被镜像和复制。如果这些块中的一个被损坏,它的校验和就会改变。

ZFS 计算该校验和及其镜像块的校验和。它将这些与上次更新块时存储的校验和进行比较。如果文件是好的,这些应该都是相同的。但如果一个是坏的,我们知道它被破坏了。然后,ZFS 可以使用具有已知良好校验和的块自动“修复”损坏的块。

**卷当前状态的快照允许回滚和复制。**我们了解写时复制如何意味着我们可以拥有影响较小的“浅”副本,这些副本仅在添加或更改数据时占用新空间。这允许我们——类似于我们在进行有风险的更改之前拍摄虚拟机快照的方式——拍摄我们计算机状态的快照。

我们还可以使用发送接收命令来传输快照和两个快照之间的差异。这些命令存在于 btrfs 和 ZFS 上。(甚至还有云复制服务 !)

4. 一个更好/更好的文件系统

btrfs,或“ B-Tree ”文件系统,试图以一种更简单的方式(并且许可问题更少)将 ZFS 的许多进步带到 Linux。它自 2009 年以来一直在 Linux 内核中,但仍在积极开发中。

在大型数据中心得到了一些采用  ,但并不享有 ZFS 坚如磐石的稳定性的声誉。

4.1. btrfs 实践

体验 btrfs 的最简单方法之一是全新安装 Fedora 33 或更高版本。我们很容易轻松进入 btrfs,而无需了解其更复杂的功能。下面是 Fedora 安装的样子:

$ lsblk -f -o NAME,FSTYPE,LABEL,MOUNTPOINT
NAME   FSTYPE LABEL                 MOUNTPOINT
sr0                                 
zram0                               [SWAP]
vda                                 
├─vda1 ext4                         /boot
└─vda2 btrfs  fedora_localhost-live /home

我们看到 ext4 继续存在于 Fedora 的引导分区选择中。 如果我们想在 Ubuntu 或 Debian 上试验它,我们需要一些额外的工具。就像我们对 XFS 所做的一样,我们将使用apt安装它们:

$ sudo apt install btrfs-progs

从那里,我们可以使用mkfs.btrfs创建新卷和btrfs 设备添加来扩展卷:

$ sudo mkfs.btrfs -L media -d raid1 /dev/vdb /dev/vdc
btrfs-progs v5.13 
See http://btrfs.wiki.kernel.org for more information.
Label:              media
UUID:               0ec28d06-b5a1-46f3-b628-30d04aeaaef3
Node size:          16384
Sector size:        4096
Filesystem size:    20.00GiB
Block group profiles:
  Data:             RAID1             1.00GiB
  Metadata:         RAID1           256.00MiB
  System:           RAID1             8.00MiB
SSD detected:       no
Zoned device:       no
Incompat features:  extref, skinny-metadata
Runtime features:   
Checksum:           crc32c
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1    10.00GiB  /dev/vdb
    2    10.00GiB  /dev/vdc

这个输出提供了很多细节和一些新术语,比如“扇区大小”。我们不会在这里深入探讨这些内容,但它们是有趣的起点。

与 ZFS 不同,我们必须挂载新的 btrfs 卷。通过mount命令或在fstab中使用它的一种简单方法是通过其标签引用它

# ls /dev/disk/by-label/
fedora_localhost-live  media
# mkdir /big-media; mount /dev/disk/by-label/media /big-media

4.2. 高级功能和风险

简而言之,btrfs 可以用作简单的文件系统,也可以用作 RAID 控制器和文件系统。然而,其开发人员警告不要在生产中使用 RAID5。

当我们习惯它时,我们可以使用btrfs 命令探索更复杂的功能,例如:

Oracle Linux 记录了其中一些命令和更大的问题

btrfs 是一个不断变化的文件系统,对其使用的任何认真投资都必须经常参考其常见问题解答

5. ZFS:我们的一体化存储解决方案

ZFS 起源于 2005 年的 OpenSolaris。它很快被 Solaris 10 和开源 BSD 操作系统采用,并在 2014 年的 FreeBSD 10 中得到正式支持。

ZFS 使我们能够像逻辑卷管理器一样集中我们的存储。它像 RAID 一样提供数据和硬件冗余(尽管它更像是一个时髦而智能的JBOD )。 让我们试试看。

5.1. ZFS 实践

由于许可问题,ZFS 与 Linux 的历史更加复杂。**目前在 Linux 上使用 ZFS 最直接的方法是使用 Ubuntu。**我们可以安装zfsutils-linux 包。或者,Canonical 默认将其捆绑在安装程序映像中。

这是一个“高级功能”,但我们既可以安装到 ZFS 也可以从 ZFS 引导。在这里,我们正在安装到一个虚拟测试系统上:

/uploads/filesystems/1.png

我们选择“使用ZFS”后,其他一切都是透明的。消除复杂性并让我们得到有用的东西的方法,Canonical!

5.2. ZFS 池

试验我们的虚拟 Ubuntu ZFS 安装,我们看到这些块设备:

$ lsblk -e7 -f -o NAME,FSTYPE,LABEL,FSUSE%,MOUNTPOINT
NAME   FSTYPE     LABEL FSUSE% MOUNTPOINT
sr0                            
vda                            
├─vda1                         
├─vda2 vfat                 3% /boot/efi
├─vda3 swap                    [SWAP]
├─vda4 zfs_member bpool        
└─vda5 zfs_member rpool 

那么什么是bpoolrpool 呢?我们可以使用zpool 命令检查:

$ zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
bpool  1.12G   148M  1004M        -         -     0%    12%  1.00x    ONLINE  -
rpool    22G  3.52G  18.5G        -         -     3%    16%  1.00x    ONLINE  -

唔。我们看到bpool是两者中较小的一个。如果我们查找它,我们会发现 Ubuntu 已决定将安装分成“引导”和“根”池。如果我们将这些与 LVM 示例中的分区方法进行比较,我们记得非 ZFS Ubuntu 布局将*/boot保留在专用的 ext2 分区上,而/home/*(root)保留在不同的逻辑卷上。

让我们看看 Ubuntu 如何组织我们的 ZFS 池:

$ zfs list
NAME                                               USED  AVAIL     REFER  MOUNTPOINT
bpool                                              147M   876M       96K  /boot
bpool/BOOT                                         147M   876M       96K  none
bpool/BOOT/ubuntu_70wzaj                           147M   876M     81.7M  /boot
rpool                                             3.52G  17.8G       96K  /
rpool/ROOT                                        3.51G  17.8G       96K  none
rpool/ROOT/ubuntu_70wzaj                          3.51G  17.8G     2.44G  /
rpool/ROOT/ubuntu_70wzaj/srv                        96K  17.8G       96K  /srv
rpool/ROOT/ubuntu_70wzaj/usr                       336K  17.8G       96K  /usr
rpool/ROOT/ubuntu_70wzaj/usr/local                 240K  17.8G      128K  /usr/local
rpool/ROOT/ubuntu_70wzaj/var                       993M  17.8G       96K  /var
rpool/ROOT/ubuntu_70wzaj/var/games                  96K  17.8G       96K  /var/games
rpool/ROOT/ubuntu_70wzaj/var/lib                   983M  17.8G      862M  /var/lib
rpool/ROOT/ubuntu_70wzaj/var/lib/AccountsService   168K  17.8G      104K  /var/lib/AccountsService
rpool/ROOT/ubuntu_70wzaj/var/lib/NetworkManager    404K  17.8G      140K  /var/lib/NetworkManager
rpool/ROOT/ubuntu_70wzaj/var/lib/apt              79.5M  17.8G     79.2M  /var/lib/apt
rpool/ROOT/ubuntu_70wzaj/var/lib/dpkg             40.2M  17.8G     31.2M  /var/lib/dpkg
rpool/ROOT/ubuntu_70wzaj/var/log                  8.41M  17.8G     3.19M  /var/log
rpool/ROOT/ubuntu_70wzaj/var/mail                   96K  17.8G       96K  /var/mail
rpool/ROOT/ubuntu_70wzaj/var/snap                  532K  17.8G      532K  /var/snap
rpool/ROOT/ubuntu_70wzaj/var/spool                 280K  17.8G      112K  /var/spool
rpool/ROOT/ubuntu_70wzaj/var/www                    96K  17.8G       96K  /var/www
rpool/USERDATA                                    4.99M  17.8G       96K  /
rpool/USERDATA/a_40qa3s                           4.73M  17.8G     2.43M  /home/a
rpool/USERDATA/root_40qa3s                         168K  17.8G      112K  /root

哇!Canonical 在rpool中设置了很多子文件系统。因此,我们对存储池的各个部分进行了非常精细的控制。如果我们将一个磁盘或磁盘集添加到*rpool,*我们就可以在任何地方或任何地方使用这个新空间。(将存储添加到现有池中有一些棘手的因素,因此在购买前进行研究。)

我们在这里看到的每个挂载点都可以有自己的设置 ——配额、压缩和 IO 调整更改。更好的是:默认情况下,它们会从父级继承设置。如果我们使用zfs 命令设置*/var*使用自动压缩:

$ sudo zfs set compression=lz4 rpool/ROOT/ubuntu_70wzaj/var

现在,/var下的所有内容也将使用 lz4 压缩。

这在较小的系统上可能无关紧要,但如果我们需要扩大我们的规模,我们会很高兴 ZFS 以这种方式工作。

5.3. 创建我们自己的池

首先,我们只需要一个简单的命令。

那么,在我们这样做之前,我们需要识别我们的磁盘。让我们向虚拟机添加两个小型存储设备。Ubuntu 的bpoolrpool安装在*/dev/vda上,所以这两个将是/dev/vdb/dev/vdc*。

zpool有很多选择。zpool create将驱动器组装成 vdev(虚拟设备)并将 vdev 组装成一个池:

# zpool create mpool /dev/vdb /dev/vdc

或者,它可以创建一个由两个存储设备组成的镜像 vdev:

# zpool create mpool mirror /dev/vdb /dev/vdc

此命令要求 ZFS 创建一个新的存储池。该矿池将被命名为*“mpool”,尽管我们可以随意命名。它将由一个镜像的 vdev 组成,而 vdev 又由vdbvdc*设备组成。

创建mpool后,我们使用zpool status 检查其详细信息:

# zpool status mpool
  pool: mpool
 state: ONLINE
config:
	NAME        STATE     READ WRITE CKSUM
	mpool       ONLINE       0     0     0
	  mirror-0  ONLINE       0     0     0
	    vdb     ONLINE       0     0     0
	    vdc     ONLINE       0     0     0
errors: No known data errors

我们注意到它是自动安装的:

# df /mpool
Filesystem     1K-blocks  Used Available Use% Mounted on
mpool            9650176   128   9650048   1% /mpool

我们可以很容易地更改挂载点,但我们不必触摸*/etc/fstab*。ZFS 将所有挂载点存储为元数据。

5.4. ZFS 子卷

如果我们想组织我们的媒体池怎么办?也许我们希望每个人都使用不同的配额或透明地压缩我们的部分池。 我们通过返回zfs create 命令来做到这一点:

# zfs create mpool/Movies
# zfs create mpool/Television
# zfs list -r mpool
NAME               USED  AVAIL     REFER  MOUNTPOINT
mpool              184K  9.20G       25K  /mpool
mpool/Movies        24K  9.20G       24K  /mpool/Movies
mpool/Television    24K  9.20G       24K  /mpool/Television

如果我们想去掉我们的“练习”池,很简单:

zpool destroy mpool

其他要探索的命令包括使用:

5.5. ZFS 设计

/uploads/filesystems/2.png

该框架向我们展示了 ZFS 如何处理存储。这是我们获得逻辑卷管理器和 RAID 功能的地方:

  1. 存储设备:物理磁盘和/或分区
  2. 虚拟设备:抽象存储、单个磁盘、镜像集合或 RAID-Z 阵列;由存储设备构建
  3. 存储池:我们在运行zpool list 时看到的 zpool 。这是我们的文件和目录所在的地方。

**ZFS 将我们的存储池数据分布到所有池的设备上。**这样,它类似于 Linux 的逻辑卷管理器。如果我们包含镜像或 RAID-Z vdev,我们还将拥有数据冗余,并且能够从磁盘故障中恢复,而无需从完整备份中恢复。

重要的是要注意,在向 zpool 添加更多 vdev 时,很难更改组成 vdev 的设备。我们不能简单地更改我们的硬件配置并让文件系统处理它。与相当顺利地处理这种情况的 btrfs 不同,ZFS 更改可能需要更多计划,有时甚至需要从头开始。 即将推出的功能 draid 有助于克服这种尴尬。

6. 其他文件系统

由于历史原因或兼容性原因,Linux 支持许多文件系统。此外,我们经常希望通过网络共享或访问卷。

6.1. 网络上的某处:NFS 和 SMB

NFS(网络文件系统)起源于 Unix,而 SMB 则普遍用于 Windows 和 macOS。当我们的 Linux 机器访问这些文件系统时,我们不必运行mkfs,但是在挂载它们之后,它们应该像任何本地文件系统一样透明使用。

我们还可以看到NAS ,它只是一个通过 NFS、SMB 或其他网络文件协议共享空间的专用文件服务器机器。

另一方面,SAN 使用 iSCSI 或 FibreChannel 等协议在块级别上通过网络连接存储。从 Linux 的角度来看,它只是另一个像硬盘一样的块设备。它可以被格式化或添加到 ZFS 池中。

6.2. Amazon 的 Elastic Block Store (EBS)

同样,这个主题超出了本文的范围,但请注意,云提供商提供长期存储,可以将其视为块级设备。

AWS EBS 透明地解决了临时云实例的问题。我们可以使用我们在 EBS 上讨论过的任何文件系统。

与云实例一起使用时,下一代文件系统仍然不常见。例如,DigitalOcean 将自动设置块存储以使用 ext4 或 XFS。如果我们愿意自己做,ZFS 或 btrfs 将起作用。

这种采用速度缓慢的原因之一是 ZFS 对内存的高需求。我们可能试图通过使用较小的实例来节省资金。我们必须密切监视这样的环境。

6.3. 进一步感兴趣

一旦我们对文件系统产生了兴趣,就会发现有多少东西需要研究: