Linux存储术语和概念简介

介绍

Linux具有强大的系统和工具来管理硬件设备,包括存储驱动器。在本文中,我们将在高层次上介绍Linux如何表示这些设备以及如何将原始存储转化为服务器上可用空间。

什么是块存储?

块存储是Linux内核称为块设备的东西。块设备是一种可以用来存储数据的硬件,如传统的旋转硬盘驱动器(HDD)、固态硬盘(SSD)、闪存等。它被称为块设备,因为内核通过引用固定大小的块或空间块与硬件进行交互。换句话说,块存储就是您在计算机上想到的常规磁盘存储。一旦设置好,它就充当当前文件系统树的扩展,您应该能够对每个驱动器进行可互换的写入或读取信息。

什么是磁盘分区?

磁盘分区是将存储驱动器分割成较小可用单元的一种方法。分区是存储驱动器的一部分,可以像驱动器本身一样处理。

分区允许您将可用空间分割并将每个分区用于不同的目的。这使用户更灵活,可以将单个磁盘划分为多个操作系统、交换空间或专用文件系统的可能性。

虽然可以在没有分区的情况下格式化和使用磁盘,但操作系统通常期望找到分区表,即使只有一个分区写入磁盘。通常建议对新驱动器进行分区以获得更大的灵活性。

MBR与GPT

在对磁盘进行分区时,重要的是要知道将使用什么分区格式。这通常取决于选择MBR(主引导记录)和GPT(GUID分区表)之间。

MBR已有30多年的历史。由于年龄的原因,它有一些严重的局限性。例如,它不能用于超过2TB大小的磁盘,并且最多只能有四个主分区。

GPT 是一种更现代的分区方案,解决了MBR固有的一些问题。运行GPT的系统可以在每个磁盘上拥有更多的分区。这通常仅受操作系统本身施加的限制限制。此外,GPT不存在磁盘大小限制,并且分区表信息可以在多个位置获得,以防止损坏。GPT还可以为与仅支持MBR的工具兼容性而编写“保护性MBR”。

在大多数情况下,除非您的操作系统阻止您使用它,否则GPT是更好的选择。

格式化和文件系统

虽然Linux内核可以识别原始磁盘,但必须对其进行格式化才能使用。格式化是将文件系统写入磁盘并为文件操作做准备的过程。 文件系统是结构化数据并控制如何从底层磁盘写入和检索信息的系统。如果没有文件系统,您将无法对存储设备进行任何标准文件系统操作。

有许多不同的文件系统格式,每种都有不同的权衡,包括操作系统支持。它们都向用户呈现出相似的磁盘表示,但它们支持的功能和平台可能非常不同。

一些用于Linux的更受欢迎的文件系统包括:

  • Ext4:最流行的默认文件系统是Ext4,它是Ext2和Ext3的继承者。Ext4文件系统是日志型的,向后兼容传统系统,稳定且具备成熟的支持和工具。如果您没有特殊需求,它是一个不错的选择。
  • XFS:XFS专注于性能和大型数据文件。它格式化速度快,在处理大文件和使用大型磁盘时具有良好的吞吐特性。它还具有实时快照功能。XFS使用元数据日志记录,而不是同时记录元数据和数据。这带来了快速的性能,但在突发断电的情况下可能导致数据损坏。
  • Btrfs:Btrfs是一种现代的、功能丰富的写时复制文件系统。这种架构允许在文件系统层面集成一些卷管理功能,包括快照和克隆。它默认用于一些消费者和商用NAS(网络附加存储)硬件,并且在专用的多磁盘阵列中很受欢迎。
  • ZFS:ZFS是另一种写时复制的文件系统和卷管理器,具有强大且成熟的功能集。它与Btrfs直接竞争,具有数据完整性功能,可以处理大型文件系统,具有快照和克隆等典型卷功能,并可以将卷组织成RAID和类似RAID的阵列,用于冗余和性能目的。由于许可证问题,ZFS的历史颇有争议,但考虑到商业支持,它与Btrfs的受欢迎程度相差无几。

此外,Windows 主要使用 *NTFS* 和 ExFAT,而 macOS 主要使用 HFS+APFS。通常可以在不同平台上读取这些文件系统格式,并有时可能需要额外的兼容工具来进行写入。

Linux 如何管理存储设备

/dev 中的设备文件

在 Linux 中,几乎所有东西都是通过文件在文件系统层次结构中表示的。这包括像存储驱动器这样的硬件,在系统上表示为 /dev 目录中的文件。通常,表示存储设备的文件以 sdhd 开头,后跟一个字母。例如,在服务器上,第一个驱动器通常是类似于 /dev/sda 的内容。

这些驱动器上的分区也在 /dev 中有相应的文件,通过在驱动器名称的末尾附加分区号来表示。例如,前面示例中驱动器上的第一个分区将是 /dev/sda1

虽然/dev/sd*/dev/hd*设备文件代表了引用驱动器和分区的传统方式,但仅使用这些值存在重要缺陷。Linux内核在每次启动时决定哪个设备获得哪个名称,因此这可能导致混乱的情况,使您的设备更改设备节点。

为解决这个问题,/dev/disk目录包含与系统上标识磁盘和分区的不同、更持久的方式相对应的子目录。这些子目录包含在启动时创建回到正确的/dev/[sh]da*文件的符号链接。这些链接根据目录的标识特征命名(例如,在/dev/disk/by-partlabel目录中按分区标签)。这些链接将始终指向正确的设备,因此它们可以用作存储空间的静态标识符。

可能存在/dev/disk下面的以下一个或多个子目录:

  • by-label:大多数文件系统都有一个标签机制,允许为磁盘或分区分配任意用户指定的名称。该目录包含以这些用户提供的标签命名的链接。
  • by-uuid:UUID(通用唯一标识符)是一长串唯一的字母和数字,可用作存储资源的ID。这些通常不太易读,但几乎总是唯一的,即使跨系统也是如此。因此,使用UUID引用可能在系统之间迁移的存储可能是个好主意,因为命名冲突的可能性较小。
  • by-partlabelby-partuuid:GPT 表格提供了它们自己的一组标签和 UUID,也可以用于识别。这与前两个目录的方式非常相似,但使用了 GPT 特定的标识符。
  • by-id:该目录包含由硬件自身的序列号和它们连接的硬件生成的链接。这并不完全持久,因为设备连接到系统的方式可能会改变其 by-id 名称。
  • by-path:与 by-id 类似,该目录依赖于存储设备与系统本身的连接。这里的链接是使用系统对用于访问设备的硬件的解释构建的。这与 by-id 具有相同的缺点,因为连接设备到不同端口可能会改变这个值。

通常,by-labelby-uuid 是持久标识特定设备的最佳选项。

注意: DigitalOcean 块存储卷控制设备序列号报告给操作系统。这使得在此平台上可靠地持久化 by-id 分类成为可能。这是指 DigitalOcean 卷的首选方法,因为在第一次引导时既持久又可预测。

挂载块设备

在Linux和其他类Unix操作系统中,整个系统,无论涉及多少物理设备,都由单个统一的文件树表示。当要使用驱动器或分区上的文件系统时,必须将其连接到现有的树中。挂载是将格式化的分区或驱动器附加到Linux文件系统中的目录的过程。然后可以从该目录访问驱动器的内容。

驱动器几乎总是挂载在专用的空目录上 – 在非空目录上挂载意味着直到取消挂载驱动器之前,该目录的常规内容将无法访问)。可以设置许多不同的挂载选项来更改已挂载设备的行为。例如,可以以只读模式挂载驱动器,以确保其内容不会被更改。

文件系统层次结构标准建议使用/mnt或其下的子目录来临时挂载文件系统。它不提出在哪里挂载更持久的存储的建议,因此您可以选择任何方案。在许多情况下,/mnt/mnt子目录也用于更持久的存储。

使用/etc/fstab使挂载永久

Linux系统使用一个名为/etc/fstab(文件系统表)的文件来确定在启动过程中要挂载哪些文件系统。在这个文件中没有条目的文件系统将不会自动挂载,除非由其他软件脚本化。

每行/etc/fstab文件代表应该挂载的不同文件系统。这一行指定了块设备、要连接到的挂载点、驱动器的格式和挂载选项,以及一些其他信息。

更复杂的存储管理

虽然许多用例可以通过这些核心功能实现,但还有更复杂的管理范式可用于将多个磁盘组合在一起,特别是RAID

什么是RAID?

RAID代表冗余独立磁盘阵列。RAID是一种存储管理和虚拟化技术,允许您将驱动器组合在一起,并以单个单元的方式管理它们,具有额外的功能。

特定RAID阵列的特性取决于其RAID级别,该级别定义了阵列中的磁盘之间的关系。一些常见的级别包括:

  • RAID 0:此级别表示驱动器条带化。这意味着当数据写入阵列时,它会被分割并线性分布在集合中的各个磁盘上。这提供了性能提升,因为可以同时向多个磁盘写入或从中读取。缺点是,由于没有一个磁盘包含有关内容的足够信息以进行重建,因此单个驱动器故障可能会导致整个阵列中的所有数据丢失。由于这个原因,通常不在生产中使用RAID 0,尽管它可以作为比较的参考点。
  • RAID 1:RAID 1表示镜像驱动器。写入RAID 1阵列的任何内容都会写入多个磁盘。其主要优势是数据冗余,这使得数据可以在镜像的任一侧丢失硬盘的情况下存活。由于多个驱动器将包含相同的数据,因此可用容量至少减少一半。
  • RAID 5:RAID 5将数据条带化到多个驱动器,类似于RAID 0。然而,该级别还实现了跨驱动器的分布式奇偶校验。这意味着如果某个驱动器故障,剩余驱动器可以使用它们之间共享的奇偶校验信息重建阵列。通常,这足以重建一个磁盘,这意味着阵列可以在任何一个磁盘损失的情况下存活。RAID 5通过一个磁盘的容量减少了阵列中的可用空间。
  • RAID 6:RAID 6具有与RAID 5相同的特性,但提供了双奇偶校验。这意味着RAID 6阵列可以承受任意2个驱动器的丢失。阵列的容量再次受到奇偶校验量的影响,这意味着可用容量会减少两个磁盘空间的价值。
  • RAID 10:RAID 10是级别1和级别0的组合。首先,创建两组镜像阵列。然后,数据被分布式地跨越它们。这创建了一个具有一些冗余特性的阵列,同时提供良好的性能。然而,这需要相当多的驱动器,总容量仍然不到组合磁盘空间的一半。

接下来去哪里?

如果您有一个希望在Linux系统中使用的新存储设备,本文将指导您完成分区、格式化和挂载新文件系统的过程。这对于大多数情况下主要关注增加额外容量的用户来说应该是足够的。要了解如何执行存储管理任务,请查看Linux中存储设备的基本管理任务如何执行

Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-storage-terminology-and-concepts-in-linux