Skip to content

Latest commit

 

History

History
535 lines (313 loc) · 39.5 KB

File metadata and controls

535 lines (313 loc) · 39.5 KB

六、使用磁盘和文件系统

在本章中,您将学习如何管理磁盘和文件系统,了解 Linux 下的存储,学习如何使用Logical Volume Management(LVM)系统,以及如何挂载和分区硬盘。 您将学习如何对磁盘进行分区和格式化,以及如何创建逻辑卷,并且您将对文件系统类型有更深的理解。 在本章中,我们将涵盖以下主要主题:

  • 理解 Linux 中的设备
  • 理解 Linux 中的文件系统类型
  • 理解磁盘和分区
  • Linux 下的逻辑卷管理

技术要求

具有磁盘、分区和文件系统的基本知识。 不需要其他特殊的技术要求,只需要在您的系统上安装一个可以工作的 Linux。 在本章的练习中,我们将主要使用 CentOS。

本章的代码可通过以下链接获得:https://github.com/PacktPublishing/Mastering-Linux-Administration

了解 Linux 中的设备

正如本书中已经多次提到的,Linux 中的一切都是一个文件。 这也包括设备。 设备文件是 UNIX 和 Linux 操作系统中的特殊文件。 这些特殊的文件基本上是设备驱动程序的接口,它们作为常规文件存在于文件系统中。

Linux 抽象层

现在正是讨论 Linux 系统抽象层以及设备如何适应的最佳时机。 Linux 系统通常被组织在三个主要级别上:硬件级别内核级别用户空间级别

硬件级别包含您的机器的硬件组件,如内存(RAM)、中央处理单元(CPU)以及包括磁盘、网络接口、端口和控制器在内的设备。 内存被分为两个独立的区域,称为内核空间用户空间

内核是 Linux 操作系统的“心脏”。 内核驻留在内存(RAM)中并管理所有硬件组件。 它是 Linux 系统上的软件和硬件之间的接口。 用户空间级别是执行用户进程的级别。 正如第 5 章,与进程、守护进程和信号一起工作所述,进程是一个程序的运行实例。

这一切是如何运作的? 内存,被称为 RAM,由用于临时存储信息的细胞组成。 这些单元被执行的不同程序访问,并作为 CPU 和存储之间的中介。 为了保证无缝的执行过程,访问内存的速度是非常高的。 管理用户空间中的用户进程是内核的工作。 内核确保所有进程之间不会相互干扰。 内核空间通常只由内核访问,但有时用户进程需要访问这个空间。 这是通过系统调用完成的。 基本上,一个系统调用的方式通过一个活跃的用户进程请求内核服务进程在内核空间,等什么输入/输出(I / O)请求【显示】内部或外部设备。 所有这些请求都在通过 RAM 向 CPU 和 CPU 之间传输数据,以便完成任务。

下图显示了 Linux 抽象层。 基本上,有三个不同的层,分布在三个主要的层:硬件层**,它包括所有的硬件组件,包括 CPU、RAM、控制器、硬盘驱动器、ssd、监视器和外设; 内核级,包含数百万行代码,大部分用 C 语言编写,也包含设备驱动程序; 以及用户级别,这是所有应用、服务和守护进程以及 GUI 和 shell 运行的地方:**

Figure 6.1 – Linux abstraction layers

图 6.1 - Linux 抽象层

在这个宏大的计划中,设备在哪里? 如上图所示,设备由内核管理。 总之,内核负责管理进程、系统调用、内存和设备。 在处理设备时,内核管理设备驱动程序,设备驱动程序是硬件组件和软件之间的接口。 所有设备只能在内核模式下访问,以实现更安全、更精简的操作。

在下一节中,我们将向您介绍 Linux 中的命名约定以及如何管理设备文件。

设备文件及命名约定

在了解了这些抽象层的工作方式之后,您可能想知道 Linux 是如何管理设备的。 这是在udev(称为用户空间/dev)的帮助下完成的,它是内核的一个设备管理器。 它与设备节点一起工作,这些节点是作为驱动程序接口的特殊文件(也称为设备文件)。

udev作为一个守护进程运行,它侦听内核正在发送的用户空间调用,因此可以知道使用了哪些类型的设备以及如何使用这些设备。 这个守护进程被称为udevd,它的配置目前在/etc/udev/udev.conf下可用。 每个 Linux 发行版都有一组默认的规则来管理udevd。 这些规则通常存储在/etc/udev/rules.d/目录下,如下截图所示:

Figure 6.2 – The udevd configuration files and rules location

图 6.2 - udevd 配置文件和规则位置

简单地说一下,内核使用netlink套接字发送事件调用。 netlink 套接字是一个用于进程间通信的接口,用于用户空间进程和内核空间进程。

/dev目录是用户进程和由内核管理的设备之间的接口。 如果您要使用ls -la /dev命令,您将看到内部有许多文件,每个文件具有不同的名称。 如果您要做一个长列表,您将看到不同的文件类型。 一些文件将从字母开始的,但是字母 p【显示】和也可能存在,取决于您的系统。 以这些字母开头的文件是device文件。 以b开头的是块器件,以c开头的是字符器件。 您可以运行以下命令查看在您的/dev目录中有哪些类型的设备文件:****

ls -la /dev

软件只能访问固定大小的块设备。 正如您将在图 6.3中看到的,磁盘设备sdasdb表示为块设备。 块设备有一个固定的大小,可以很容易地被索引。 另一方面,字符设备可以使用数据流访问,因为它们不像块设备那样具有大小。 例如,打印机被表示为字符设备。 在图 6.3中,sg0sg1是 SCSI 通用设备,并且在我们的案例中没有分配到任何磁盘:

Figure 6.3 – Disk drives inside the /dev directory

图 6.3 - /dev 目录下的磁盘驱动器

Linux 使用一种设备名称约定,使整个 Linux 生态系统中的设备管理更容易和一致。 udev使用许多特定的命名方案,默认情况下,这些命名方案为设备分配固定的名称。 这些名称在某种程度上是针对设备类别标准化的。 例如,在命名网络设备时,内核使用从固件、拓扑和位置等源编译的信息。 在基于 Red Hat 的系统(如 CentOS)上,有五种用于命名网络接口的方案,我们鼓励您在 Red Hat 客户门户官方文档网站上访问这些方案。

您还可以检查系统上活动的udev规则。 在 CentOS 8 发行版中,它们被存储在/lib/udev/rules.d/目录下:

当涉及到硬盘驱动器或外部驱动器时,这些约定更加流线型。 下面是一些例子:

  • 为经典的 IDE 驱动器用于 ATA 硬盘:hda(主设备),hdb(奴隶设备在第一频道),hdc(主设备在第二频道),和hdd(奴隶设备在第二频道)
  • 对于 NVMe 驱动:nvme0(第一个设备控制器-字符设备),nvme0n1(第一个命名空间-块设备),nvme0n1p1(第一个命名空间,第一个分区-块设备)
  • 用于 MMC 驱动:mmcblk(用于 SD 卡使用 eMMC 芯片),mmcblk0(第一个设备),以及mmcblk0p1(第一个设备,第一个分区)
  • SCSI 驱动程序用于现代 SATA 或 USB:sd(为大容量存储设备),sda(第一次注册的设备),sdb(第二注册设备),sdc(第三注册设备),等等,sg(通用 SCSI 层-字符设备)

关于本章,我们最感兴趣的设备是大容量存储设备。 那些设备通常是硬盘驱动器(硬盘驱动器)或固态驱动器(SSD),用于在您的计算机内存储数据。 这些驱动器很可能被划分成分区,这些分区具有文件系统提供的特定结构。 我们谈论了一些关于文件系统之前在【病人】这本书第二章,【t16.1】Linux 文件系统,当我们提到 Linux 目录结构,但现在是时候进入更多的细节关于磁盘的工作在一个 Linux 系统。

了解 Linux 中的文件系统类型

在讨论物理介质时,如硬盘驱动器或外部驱动器,我们使用的是而不是来指代目录结构。 这里,我们讨论的是格式化和/或分区时在物理驱动器上创建的结构。 这些结构(取决于它们的类型)被称为文件系统,它们决定在驱动器上存储文件时如何管理。

有几种类型的文件系统,有些是 Linux 生态系统的本地文件系统,而有些则不是,例如特定的 Windows 或 macOS 文件系统。 在本节中,我们将只描述 linux 本地文件系统。

Linux 中使用最广泛的文件系统是Extended文件系统,即ExtExt2Ext3Ext4XFS文件系统、ZFSbtrfs(b -树文件系统的简称)。 每一种方法都有其优缺点,但它们都能够完成它们所设计的工作。 Extended文件系统是 Linux 中使用最广泛的文件系统,而且它们一直都是值得信赖的。 最新的迭代Ext4Ext3相似,但是更好,改进了对更大文件、碎片和性能的支持。 Ext3文件系统使用 32 位寻址,Ext4使用 48 位寻址,因此支持最大 16tb 的文件。 它还支持无限制的子目录,因为Ext3只支持 32k 的子目录。 此外,在Ext4中还添加了对扩展时间戳的支持,为公元 2446 年提供了两个额外的位,并在内核级别上进行了在线碎片整理。

然而,Ext4并不是真正的下一代文件系统,而是一个改进的、可靠的、健壮的、稳定的工作机器,它没有通过数据保护和完整性测试。 其日志记录系统不适合检测和修复数据损坏和退化。 这就是为什么其他文件系统,如XFSZFS,从版本 7(XFS)开始在 Red Hat Enterprise Linux 中使用,从版本 16.04(ZFS)开始在 Ubuntu 中使用。 btrfs的案例有些争议。 它被认为是一种现代的文件系统,但它仍然作为单个磁盘文件系统使用,而不是在多个磁盘卷管理器中使用,这是由于与其他文件系统相比存在许多性能问题。 它在 SUSE Linux Enterprise 和 openSUSE 中使用,Red Hat 不再支持它,从版本 33 开始,它已经被选为 Fedora 中未来的默认文件系统。

Ext4 文件系统特性

文件系统从一开始就是为 Linux 设计的。 尽管它正在被其他文件系统慢慢地取代,但它仍然具有强大的特性。 它提供块大小选择,值在 512 到 4,096 字节之间。 还有一个名为 inode reservation 的特性,它在创建目录时保存一对 inode,以提高创建新文件时的性能。

布局很简单,按小写顺序编写(有关这方面的详细信息,请访问https://www.section.io/engineering-education/what-is-little-endian-and-big-endian/),块组包含 inode 数据,以降低访问时间。 每个文件都预先分配了数据块,以减少碎片。 Ext4还利用了许多增强功能。 其中,我们将把以下几点纳入讨论: 最大文件系统大小 1Exabyte(【显示】EB),能够使用多个块分配,将大文件的最大可能大小获得更好的性能,应用 allocate-on-flush 技术更好的性能,使用方便的fsck命令快速的文件系统检查, 使用checksums进行日志记录和提高可靠性,以及使用改进的时间戳。

XFS 文件系统特性

企业 Linux 开始发生变化,从Ext4转移到其他有能力的文件系统类型。 其中有XFS。 这个文件系统首先由 SGI 创建,并在 IRIX 操作系统中使用。 它最重要的关键设计元素是性能,能够处理大型数据集。 此外,它被设计用于处理并行 I/O 任务,并保证高 I/O 速率。 支持的文件系统最高可达 16eb,对单个文件的支持最高可达 8eb。 XFS具有记录配额信息以及在线维护任务(如碎片整理、放大或恢复)的功能。 还有用于备份和恢复的特定工具,包括xfsdumpxfsrestore

btrfs 文件系统特性

b -树文件系统(btrfs)仍在开发中,但它解决了与现有文件系统相关的问题,包括缺少快照、池化、校验和和多设备跨越。 这些特性在企业 Linux 环境中是必需的。 对文件系统进行快照并维护其自己的内部框架来管理新分区的能力使btrfs成为关键的企业生态系统中一个可行的新成员。

还有其他的文件系统,我们没有讨论,包括reiserFSGlusterFS,NFS(网络文件系统),SMB(Samba CIFS 文件系统),ISO9660为 cd - rom 和 Joliet 扩展,和非 Linux 的,包括FATNTFS,exFAT、【显示】,或 MacOS 扩展等等。 如果您想在中更详细地了解这些内容,请随意进行进一步调查,Wikipedia:https://en.wikipedia.org/wiki/File_system是一个很好的起点。 要查看 Linux 发行版中支持的文件系统列表,运行以下命令:

cat /proc/filesystems

Linux 实现了一个特殊的软件系统,它被设计用来运行文件系统的特定功能。 它被称为虚拟文件系统,充当内核、文件系统类型和硬件之间的桥梁。 因此,当一个应用想要打开一个文件时,这个动作通过虚拟文件系统作为一个抽象层来传递:

Figure 6.4 – The Linux Virtual File System abstraction layer

图 6.4 - Linux 虚拟文件系统抽象层

文件系统的基本功能包括提供名称空间、作为分层目录结构的逻辑基础的元数据结构、磁盘块使用情况、文件大小和访问信息,以及用于逻辑卷和分区的高级数据。 每个文件系统都有一个应用编程接口(API)。 因此,开发人员能够通过创建、移动和删除文件,或者索引、搜索和查找文件的特定算法来访问系统函数,从而调用文件系统对象操作。 此外,每个现代文件系统都提供一种特殊的访问权限方案,用于确定控制用户访问文件的规则。

至此,我们已经介绍了主要的 Linux 文件系统,包括EXT4btrfsXFS。 在下一节中,我们将介绍 Linux 中磁盘和分区管理的基础知识。

了解磁盘和分区

对于任何系统管理员来说,了解磁盘和分区都是一项重要的资产。 从系统安装开始,格式化并对磁盘进行分区是非常重要的。 了解系统上可用的硬件类型是很重要的,因此了解如何使用它是非常必要的。

常用的硬盘类型

磁盘是存储数据的硬件组件。 它有各种各样的类型和使用不同的接口。 主要的磁盘类型是众所周知的旋转硬盘驱动器(或 hdd),ssd,以及非易失性内存表达(NVMe)。 ssd 和 NVMes 使用类似 ram 的技术,与原始旋转硬盘驱动器相比,具有更好的能耗和更高的传输速率。 使用的接口如下:

  • Integrated Drive Electronics(IDE)-这是一个旧的标准,用于消费级硬件,具有较小的传输速率; 现在弃用。
  • 串行高级技术附件(SATA)-替换 ide; 传输速率高达 16gb /s。
  • Small Computer Systems Interface(SCSI)-主要用于企业服务器具有复杂硬件组件的 RAID 配置。
  • 串行附加 SCSI(SAS)-这是一个点对点串行协议接口,具有与 SATA 相似的传输速率,主要用于企业环境中,因为它们的可靠性。
  • 通用串行总线(USB)-用于外部硬盘驱动器和内存驱动器。

每个磁盘都有一个特定的几何形状,由磁头、柱面、磁道和扇区组成。 在 Linux 系统中,为了查看关于磁盘几何形状的信息,有fdisk -l命令。 在我们的测试系统上,我们安装了两个磁盘设备,一个是安装了 CentOS 8 的 SATA SSD,一个是用于存储数据的 SATA HDD。 我们将使用以下命令显示磁盘信息:

sudo fdisk -l

如果不格式化和分区,磁盘就是一大块金属。 这就是为什么在下一节中,我们将教你什么是分区。

磁盘分区

磁盘通常使用分区。 为了理解分区,了解磁盘的几何结构是必要的。 分区是扇区和/或柱面的连续集合,它们可以有几种类型:主分区、扩展分区和逻辑分区。 一个磁盘最多支持 15 个分区。 前四个分区是主分区或扩展分区,接下来的 15 个分区是逻辑分区。 而且,只能有一个扩展分区,但是可以将扩展分区划分为几个逻辑分区,直到达到最大数量。

分区类型

有两种主要的分区类型,主引导记录(MBR)和GUID 分区表(GPT)。 MBR 的使用一直持续到 2010 年左右。 它的限制由主分区的最大数目(4 个)和分区的最大大小(2tb)给出。 MBR 对不同类型的分区使用 16 进制代码,例如 FAT 的分区为0x0c,NTFS 的分区为0x07,Linux 文件系统类型为0x83,Swap 的分区为0x82。 GPT 成为统一的可扩展固件接口的一部分【t16.1】(****UEFI)标准与 MBR 解决一些问题,包括分区限制,解决方法,使用只有一个副本的分区表,等等。 它支持多达 128 个分区和磁盘大小高达 75.6Zettabytes**(ZB)。**

分区表

磁盘的分区表存储在磁盘的 MBR 中。 MBR 是驱动器的前 512 字节。 其中,分区表为 64 字节,存储在记录的前 446 字节之后。 在 MBR 的末尾,有两个字节称为扇区结束标记。 前 446 字节留给通常属于引导加载程序的代码。 在 Linux 中,引导加载程序称为 GRUB。

当引导 Linux 系统时,引导加载程序会寻找活动分区。 单个磁盘上只能有一个活动分区。 找到活动分区后,引导加载程序将加载项。 分区表有 4 个条目,每个条目大小为 16 字节,每个条目都可能属于系统上的一个主分区。 此外,每个条目包含有关cylinder/head/sectors的起始地址、分区类型代码、cylinder/head/sectors的结束地址、起始扇区以及一个分区内扇区的数量的信息。

命名分区

内核在较低的级别与磁盘进行交互。 这是通过存储在/dev目录中的设备节点完成的。 设备节点使用一个简单的命名约定,这有助于知道哪个磁盘是需要注意的。 查看/dev目录的内容,可以在本节前面的图 6.3图 6.4中看到所有可用的磁盘节点,也称为磁盘驱动器。 一个简短的解释总是有用的,所以磁盘和分区识别如下:

  • 第一个硬盘驱动器总是/dev/sda(对于 SCSI 或 SATA 设备)。
  • 第二个硬盘驱动器是/dev/sdb,第三个是/dev/sdc,以此类推。
  • 第一个磁盘的第一个分区是/dev/sda1
  • 第二个磁盘的第一个分区是/dev/sdb1
  • 第二个磁盘的第二个分区是/dev/sdb2,以此类推。

我们指定这在 SCSI 和 SATA 的情况下是正确的,我们需要更详细地解释这一点。 内核根据 SCSI 设备的 ID 号而不是根据硬件总线的位置给出字母指定,例如 a、b 和 c。

分区属性

为了了解分区的属性,可以使用 Linux 内部的两个程序:blkidlsblk。 两者使用相同的内核库,但输出不同。 下面是两个例子,说明这些实用程序如何用于查看分区的关键属性:

Figure 6.5 – The blkid and lsblk output

图 6.5 - blkid 和 lsblk 输出

在前面的屏幕截图中,您可以看到blkid命令显示每个分区和磁盘的 UUID 及其类型。 lsblk命令显示设备名称(节点的名称来自sysfsudev数据库),主要和次要的设备号,设备的可移动的状态(永久01可移动设备),以人类可读的格式,大小只读状态(再次使用0那些不是只读的, 和1为只读)、设备类型和设备的挂载点(在可用的地方)。

分区表的编辑

在 Linux 中,在管理分区表时可以使用几种工具。 最常用的有以下几种:

  • 一个命令行分区编辑器,可能是使用最广泛的一个
  • 一个非交互式的分区编辑器,主要用于脚本
  • parted- GNU (GNU 的递归缩写是而不是 Unix)分区操作软件
  • Gparted-图形界面为parted

其中,我们只详细介绍如何使用fdisk,因为这是 Linux 中使用最广泛的命令行分区编辑器。 它可以在 Ubuntu 和 CentOS 以及许多其他发行版中找到。 要使用fdisk,您必须是根用户。 我们建议您在使用fdisk时要谨慎,因为它可能会损坏您现有的分区和磁盘。 fdisk可以用于特定的磁盘(例如/dev/sdb),可以使用以下命令:

sudo fdisk /dev/sdb

您将注意到在第一次使用fdisk时,会警告您,只有当您决定将更改写入磁盘时,才会对磁盘进行更改。 系统还提示您引入一个命令,并显示选项m以寻求帮助。 我们建议您始终使用帮助菜单,即使您已经知道最常用的命令。

当您键入m时,将显示fdisk可用命令的整个列表。 您将看到管理分区、创建新引导记录、保存更改等选项。 因为列出它们会占用太多的书籍空间,我们鼓励你在自己的系统上测试:

为了查看操作系统所知道的分区,如果您不确定您刚刚完成的操作,您总是可以使用cat命令可视化/proc/partitions文件的内容:

Figure 6.6 – Contents of the /proc/partitions file

图 6.6 - /proc/partitions 文件的内容

因此,我们看到 Linux 如何允许使用标签和 uuid 来命名磁盘驱动器,您可以使用fdisk来管理这一点。 除fdisk外,还使用blkidlsblk等工具查看分区属性。

尽管fdisk是每个主要 Linux 发行版中的默认工具,但是还有一个可能会很有用,叫做parted。 请记住,与fdisk不同,parted将所有修改直接写入磁盘。 在这方面,请小心使用它。 下面,我们将向您展示如何使用parted设置 GPT 分区表。 要启动parted,以sudo或 root 用户运行parted命令:

sudo parted

要列出所有分区,在parted命令行界面中运行print命令:

(parted) print
Error: /dev/sda: unrecognised disk label
Model: ATA ST1000LM048-2E71 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown

现在,我们将向您展示如何为/dev/sda创建一个新的 GPT 分区表。 首先,我们使用 parted 命令行界面中的select命令选择我们想要使用的磁盘:

(parted) select /dev/sda
Using /dev/sda

然后,我们将使用mklabel命令将新的分区表设置为 GPT,并使用另一个print命令检查结果:

(parted) mklabel gpt
(parted) print
Model: ATA ST1000LM048-2E71 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

正如您在前面的输出中看到的,磁盘的新分区表被设置为 GPT。

在某些情况下需要备份和恢复分区表。 由于分区有时可能会出错,因此一个好的备份策略可以帮助您。 为此,您可以使用dd实用程序。 这个程序非常有用和强大,因为它可以克隆磁盘或擦除数据。 下面是一个例子:

Figure 6.7 – Backing up MBR with the dd command

图 6.7 -使用 dd 命令备份 MBR

dd命令具有清晰的语法。 默认情况下,它使用标准输入和标准输出,但是您可以通过使用if选项指定新的input文件和使用of选项指定output文件来更改这些内容。 我们指定了input文件作为我们要备份的磁盘的device文件,并为backup output文件指定了一个名称。 我们还使用bs选项指定块大小,使用count选项指定要读取的块数量。 要恢复引导加载程序,可以使用dd命令如下:

sudo dd if=~/mbr-backup of=/dev/sda bs=512 count=1

分区表编辑器是 Linux 中管理磁盘的重要工具。 如果您不知道如何格式化分区,那么它们的使用是不完整的。 在下一节中,我们将向您展示如何格式化分区。

格式化和检查分区

在分区上格式化文件系统最常用的程序是mkfs。 对分区进行格式化也称为*,使*成为一个文件系统,因此该实用程序的名称为。 它为不同的文件系统提供了特定的工具,所有这些工具都使用相同的前端实用程序。 下面是所有mkfs支持的文件系统的列表:

Figure 6.8 – Details regarding the mkfs utility

图 6.8 -关于 mkfs 实用程序的详细信息

正如我们在开始时所述,我们使用的系统有两个数据驱动器:一个用于操作系统的 SSD (240 GB)和一个用于数据的 HDD (1tb)。 为了将最大的磁盘格式化为具有ext4文件系统,我们将使用mkfs实用程序。 需要执行的命令如下:

  1. 首先,我们将运行fdisk实用程序以确保正确选择了最大的磁盘。 运行如下命令:

    sudo fdisk -l 
  2. Then, check the output with extreme caution and select the correct disk name. If you have several disks on your system, pay attention to each one and choose with caution. In the output, disks will be shown with names like /dev/sda, /dev/sdb and so on.

    重要提示

    在我们的示例中,最大的磁盘也是命令输出显示的第一个磁盘。 这对您来说可能不同,所以在磁盘上使用下一个命令时要注意。

  3. 在仔细选择要使用的磁盘之后,我们将使用mkfs将其格式化为Ext4文件系统。 我们假设磁盘名称为/dev/sda,并使用以下命令:

    sudo mkfs.ext4 /dev/sda

在使用mkfs时,有几个选项可用。 要创建一个Ext4类型分区,您可以使用图 6.16中所示的命令,或者您可以使用文件系统类型后面的-t选项。 您还可以为提供更详细的输出使用-v选项,为创建文件系统时扫描坏扇区使用-c选项。 如果您想要从命令中为分区添加一个名称,还可以使用-L选项。 以创建名称为newpartition的文件系统分区为例:

sudo mkfs -t ext4 -v -c -L newpartition /dev/sdb1

一旦创建了分区,建议检查它是否有错误。 与mkfs类似,还有一个工具叫做fsck。 这是一个实用程序,有时会在异常关闭后或在设置的间隔内自动运行。 它为最常用的文件系统提供了特定的程序,就像mkfs。 下面是在我们的一个分区上运行fsck的输出。 运行后,会显示是否有问题。 在下面的屏幕截图中,输出显示检查分区没有错误:

Figure 6.9 – Using fsck to check a partition

图 6.9 -使用 fsck 检查分区

创建分区之后,需要挂载它们。 每个分区将被安装在现有的文件系统结构中。 安装允许在树结构的任何位置。 每个文件系统都挂载在目录结构中创建的特定目录下。

安装和卸载分区

Linux 中的挂载实用程序称为mount,卸载实用程序称为umount。 要查看是否挂载了某个分区,您可以简单地键入并查看输出。 我们正在输出中寻找/dev/sda,但是它没有显示出来。 这意味着我们的第二个驱动器没有挂载。

要挂载它,我们需要创建一个新目录。 为了简单起见,我们将展示安装和使用分区所需的所有步骤:

  1. 执行fdisk命令创建新的分区表:

    sudo fdisk /dev/sda
  2. fdisk菜单中选择g选项来创建一个新的空 GPT 分区表。

  3. 使用w选项将更改写入磁盘。

  4. 使用Ext4文件系统格式化分区:

    sudo mkfs.ext4 /dev/sda
  5. 创建一个新目录来挂载分区。 在我们的案例中,我们在/mnt目录中创建了一个名为hdd的新目录:

    sudo mkdir /mnt/hdd
  6. 使用以下命令挂载分区:

    sudo mount /dev/sda /mnt/hdd
  7. 从新位置开始使用新分区。

挂载实用程序有许多可用选项。 使用帮助菜单来查看引擎盖下的一切。 现在分区已经挂载,可以开始使用它了。 如果您想卸载它,可以使用umount实用程序。 你可以如下使用它:

sudo umount /dev/sda

卸载文件系统时,如果该分区仍在使用,您可能会收到错误。 正在使用意味着来自该文件系统的某些程序仍然在内存中运行,使用来自该分区的文件。 因此,您首先必须关闭所有正在运行的应用,如果有其他进程使用该文件系统,您也必须杀死它们。 有时候,文件系统繁忙的原因一开始并不清楚,要知道哪些文件正在打开并运行,可以使用lsof命令:

sudo lsof | grep /dev/sda

挂载文件系统只能使它们在系统关闭或重新引导之前可用。 如果希望更改是持久的,则必须相应地编辑/etc/fstab文件。 首先,用你最喜欢的文本编辑器打开文件:

sudo nano /etc/fstab

添加一个类似于下面的新行:

/dev/sda /mnt/sdb ext4 defaults 0 0

/etc/fstab文件是文件系统表的配置文件。 它由控制如何使用文件系统所需的一组规则组成。 这大大减少了可能出现的错误,从而简化了在使用时手动挂载和卸载每个磁盘的需要。 这个表有六列结构,每一列都用一个特定的参数指定。 只有一个正确的顺序,参数工作如下:

  • 设备名称-使用 UUID 或挂载的设备名称。
  • 挂载点-设备当前或将要挂载的目录。
  • 文件系统类型-所使用的文件系统类型。
  • 选项-显示的选项,多个选项之间用逗号分隔。
  • 备份操作—这是文件中最后两位的第一个数字; 0=没有备份,1= dump 实用程序备份。
  • 文件系统检查顺序-这是文件中的最后一个数字; 0= nofsckfilesystem check,其中1用于根文件系统,2用于其他分区。

通过更新/etc/fstab文件,挂载是永久的,不受任何关机或系统重启的影响。 通常,/etc/fstab文件只存储关于内部硬盘驱动器分区和文件系统的信息。 外接硬盘驱动器或 USB 驱动器被内核的硬件抽象层(HAL)自动地挂载在/media下。

到目前为止,您应该已经熟悉了 Linux 中的分区管理,但是还有一种类型的分区我们还没有讨论:交换分区。 在下一节中,我们将介绍 swap 在 Linux 上的工作方式。

交换

Linux 使用健壮的交换实现。 当物理内存不再可用时,通过交换,虚拟内存使用硬盘空间。 这些额外的空间可以用于那些没有使用所有给定内存的程序,或者当内存压力很大时。 交换通常使用一个或多个专用分区来完成,因为 Linux 允许多个交换区域。 建议的交换大小至少是系统上的总 RAM。 要检查系统上实际使用的交换模块,可以将/proc/swaps文件连接起来:

Figure 6.10 – Checking the currently used swap

图 6.10 -检查当前使用的交换模块

您还可以使用 free 命令查看内存使用情况,如下所示:

Figure 6.11 – Memory and swap usage

图 6.11 -内存和交换器的使用情况

如果您的系统上没有设置 swap,您可以将一个分区格式化为 swap 并激活它。 执行的命令如下:

mkswap /dev/sda1
swapon /dev/sda1

操作系统正在内存中缓存文件内容,以尽可能避免使用交换。 内核使用的内存永远不会被交换; 只交换用户空间正在使用的内存。

文件系统和分区是任何磁盘管理任务的基本框架,但是管理员仍然需要克服许多问题,而这可以通过使用逻辑卷来解决。 这就是为什么在下一节中,我们将向您介绍LVM

Linux 逻辑卷管理

有些人可能已经听说过 LVM。 对于那些不知道它是什么的人,我们将在本节中简短地解释它。 想象一下磁盘空间耗尽的情况。 您总是可以将其移动到较大的磁盘上,然后替换较小的磁盘,但这意味着系统将重新启动,并且会出现不必要的停机时间。 作为一种解决方案,您可以考虑 LVM,它提供了更大的灵活性和效率。 通过使用 LVM,您可以向现有的卷组添加更多的物理磁盘,同时还可以继续使用。 这仍然提供了将数据移动到新硬盘驱动器的可能性,但是没有停机时间,所有事情都是在文件系统在线时完成的。

由于我们没有带有 LVM 的系统,我们将向您展示使用系统上的 1tb 驱动器创建新 LVM 卷的必要步骤,并将其创建为 LVM 物理卷:

  1. Create the LVM physical volume with the pvcreate command:

    Figure 6.12 – Using pvcreate to create an LVM physical volume

    图 6.12 -使用 pvcreate 创建 LVM 物理卷

  2. Create a new volume group to add the new physical volume using the vgcreate command:

    Figure 6.13 – Creating a new volume group using vgcreate

    图 6.13 -使用 vgcreate 创建一个新的卷组

  3. You can see the new volume group using the vgdisplay command:

    Figure 6.14 – See details regarding the new volume group using vgdisplay

    图 6.14 -使用 vgdisplay 查看关于新卷组的详细信息

  4. Now, create a logical volume using some space from the volume group, using lvcreate. Use the -n option to add a name for the logical volume, and -L to set the size in a human-readable manner (we created a 5 GB logical volume named projects):

    Figure 6.15 – Creating a logical volume using lvcreate

    图 6.15 -使用 lvcreate 创建逻辑卷

  5. Check to see whether the logical volume exists:

    Figure 6.16 – Checking whether the logical volume exists

    图 6.16 -检查逻辑卷是否存在

  6. The newly created device can only be used if it's formatted using a known filesystem and mounted afterward, in the same way as a regular partition. First, let's format the new volume:

    Figure 6.17 – Formatting the new logical volume as an Ext4 filesystem

    图 6.17 -将新的逻辑卷格式化为 Ext4 文件系统

  7. Now it's time to mount the logical volume. First, create a new directory and mount the logical volume there. Then, check the size using the df command:

    Figure 6.18 – Mounting the logical volume

    图 6.18 -挂载逻辑卷

  8. 迄今实施的所有变革都不是永久性的。 要使其永久,您必须通过在文件中添加以下行来编辑/etc/fstab文件:

    /dev/mapper/newvolume-projects /mnt/projects ext4 defaults 1 2 
  9. 现在可以检查逻辑卷上的可用空间,并根据需要增加它。 使用vgdisplay命令查看以下详细信息:

    sudo vgdisplay newvolume
    …
    VG Size               931.51 GiB
    PE Size               4.00 MiB
    Total PE              238467
    Alloc PE / Size       1280 / 5.00 GiB
    Free  PE / Size       237187 / 926.51 GiB
  10. You can now expand the logical volume by using the lvextend command. We will extend the initial size by 5 GB. Here is an example:

![Figure 6.19 – Extending the logical volume using lvextend](img/B13196_06_19.jpg)

图 6.19 -使用 lvextend 扩展逻辑卷
  1. 现在,使用resize2fs调整文件系统的大小以适应逻辑卷的新大小,并使用df检查大小:

Figure 6.20 – Resizing the logical volume with resize2fs and checking for the size with df

图 6.20 -调整逻辑卷的大小为 resize2fs,并检查大小为 df

在下一节中,我们将讨论一些更高级的 LVM 主题,包括如何获取完整的文件系统快照:

LVM 快照

什么是 LVM 快照? LVM 逻辑卷的冻结实例。 更详细地说,它使用了一种写时复制技术。 该技术监视现有卷的每个块,当块由于新的写入而发生变化时,该块的值就被复制到快照卷中。

快照是持续且即时地创建的,并且在删除之前一直存在。 这样,您就可以从任何快照创建备份。 由于快照由于写时复制技术而不断变化,所以在创建快照时应该首先考虑快照的大小。 如果可能的话,请考虑在快照存在期间将更改多少数据。 一旦快照用完,它将自动被禁用。

要创建一个新的快照,可以使用带-s选项的lvcreate命令。 您还可以使用-L选项指定大小,并使用-n选项为快照添加名称,如下所示:

Figure 6.21 – Creating an LVM snapshot with the lvcreate command

图 6.21 -使用 lvcreate 命令创建 LVM 快照

在前面的命令中,我们将大小设置为 5 GB,并使用名称linux-snap01。 该命令的最后一部分包含我们为其创建快照的卷的目标。 要列出新快照,请使用lvs命令:

Figure 6.22 – Listing the available volumes and the newly created snapshot

图 6.22 -列出可用的卷和新创建的快照

有关逻辑卷的更多信息,请运行lvdisplay命令。 输出将显示关于所有卷的信息,在这些卷中,您将看到前面创建的快照。 下面是输出的摘录:

Figure 6.23 – Information about the snapshot using the lvdisplay command

图 6.23 -使用 lvdisplay 命令查看快照的信息

在创建快照时,我们将其大小设置为 5 GB。 现在,我们希望将其扩展到源文件的大小,即 10gb。 我们将使用lvextend命令:

Figure 6.24 – Extending the snapshot from 5 to 10 GB

图 6.24 -将快照从 5 扩展到 10gb

在前面的输出中命名可能很棘手,这就是为什么我们添加了另一个截图来告诉你为什么我们使用这个名称:

Figure 6.25 – Explaining the name we used

图 6.25 -解释我们使用的名称

正如您可以在前面的屏幕截图中看到的,快照卷使用的名称突出显示。 尽管图 6.30显示我们为快照卷使用了名称linux-snap01,但是如果我们列出/dev/mapper/目录,我们将看到名称newvolume-linux—snap01被替换了。 真正令人困惑的是用于名称的第二个破折号。

要恢复快照,首先需要卸载文件系统。 要卸载,我们将使用umount命令:

sudo umount /mnt/projects/

然后,我们可以继续使用lvconvert命令还原快照。 下面是输出:

Figure 6.26 – Restoring the snapshot using the lvconvert command

图 6.26 -使用 lvconvert 命令恢复快照

快照被合并到源文件中,我们可以使用lvs命令来检查:

Figure 6.27 – Using lvs to verify that the snapshot was merged

图 6.27 -使用 lvs 验证快照已合并

合并后,快照将自动删除。 由于您现在已经了解了如何创建 LVM 卷的快照,所以我们现在已经介绍了 Linux 中 LVM 的所有基础知识。

LVM 比普通磁盘分区更复杂。 它可能会吓到很多人,但它可以在需要的时候展示它的力量。 然而,它也有几个缺点。 它会在灾难恢复场景或硬件故障情况下增加不必要的复杂性。 但撇开这些不谈,它仍然值得我们学习。

总结

管理文件系统和磁盘对于任何 Linux 系统管理员来说都是一项重要的任务。 理解如何在 Linux 中管理设备,以及如何格式化和分区磁盘,是非常重要的。 此外,学习 LVM 非常重要,因为它提供了一种灵活的方式来管理分区。

掌握这些技能将为你完成任何基本的管理任务打下坚实的基础。 在下一章中,我们将向您介绍 Linux 中网络的广阔领域。*****