Linux 中的存储术语和概念简介

简介

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

什么是块存储?

块存储是Linux内核称为块设备的另一个名称。块设备 是一种可用于存储数据的硬件,如传统的旋转硬盘驱动器(HDD)、固态驱动器(SSD)、闪存棒等。之所以称之为块设备,是因为内核通过引用固定大小的块或空间块来与硬件连接。

换句话说,块存储是您认为的计算机上的常规磁盘存储。一旦设置好,它就充当当前文件系统树的扩展,您应该能够互换地向每个驱动器写入信息或从每个驱动器读取信息。

什么是磁盘分区?

磁盘分区是将存储驱动器分解为更小的可用单元的一种方式。分区是存储驱动器的一部分,其处理方式与驱动器本身大致相同。

分区允许您对可用空间进行分段,并将每个分区用于不同的目的。这为用户提供了更大的灵活性,允许他们潜在地为多个操作系统、交换空间或专用文件系统对单个磁盘进行分段。

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

MBR与GPT

对磁盘进行分区时,重要的是要知道将使用什么PARTION_FORMAT_。这通常归结为在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是另一个写时拷贝文件系统和卷管理器,具有健壮和成熟的功能集。它与Btrf直接竞争,具有数据完整性功能,可以处理较大的文件系统大小,具有快照和克隆等典型卷功能,并且可以出于冗余和性能目的将卷组织到RAID和类似于RAID的阵列中。由于许可问题,ZFS有一个有争议的历史,但在考虑到商业支持时,它并不比Btrf受欢迎多少。

此外,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文件系统中的目录的过程。然后可以从该目录访问驱动器的内容。

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

文件系统层次结构Standard建议对临时挂载的文件系统使用/mnt或其下子目录。它没有对在哪里安装更永久的存储空间提出建议,所以你可以选择任何你喜欢的方案。在许多情况下,/mnt/mnt子目录也用于更持久的存储。

使用/etc/fstab永久挂载

Linux系统使用名为/etc/fstab(文件系统表)的文件来确定在引导过程中要挂载哪些文件系统。除非由其他软件编写脚本,否则在此文件中没有条目的文件系统将不会自动挂载。

/etc/fsta文件的每一行代表一个应该挂载的不同文件系统。该行指定块设备、要将其附加到的挂载点、驱动器的格式、挂载选项以及其他一些信息。

更复杂的存储管理

虽然这些核心功能将适应许多用例,但还有更复杂的管理模式可用于将多个磁盘连接在一起,特别是 RAID

什么是RAID?

RAID 代表** r** 冗余** 依赖于** i** n的** d** isk。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系统中使用,本文将指导你完成分区、格式化和挂载新文件系统的过程。这对于您主要关注添加额外容量的大多数用例来说应该足够了。要了解如何执行存储管理任务,请查看How To Perform Basic Administration Tasks for Storage Devices in Linux

Published At
Categories with 技术
comments powered by Disqus