%% # 纲要 > 主干纲要、Hint/线索/路标 # Q&A #### 已明确 #### 待明确 > 当下仍存有的疑惑 **❓<font color="#c0504d"> 有什么问题?</font>** # Buffer ## 闪念 > sudden idea ## 候选资料 > Read it later %% # Linux 目录结构 Linux 文件系统采用**层次化**的 **==树状目录==结构**: 只包含一个 **==单目录==结构**,最顶层的目录为 "**根目录**" `/`,所有文件和目录都是从根目录开始。 ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-59633CA37AB165AA9FEE805DBA61AB9D.png|676]] ## Linux 目录说明 Linux 各个发行版的 **目录结构** 遵循 **文件系统层级标准** (Filesystem Hierarchy Standard,FHS)。 该标准定义了**常见目录的命名及用途,指导各类文件的保存路径**。 ![image-20230922101050575|533](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-FF59F6642E888A7C128425D2F0CCA858.png) > [!example] Ubuntu 20.04 LTS 下的根目录: > > ![image-20230922094705415|523](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-F3F1BE2754ACE5C85F8B34F9AC41AC63.png) > > <br> ### 目录说明总览 ⭐ | 目录名 | 说明 | | ------------- | ------------------------------------------------------------------------------------------------------------------------- | | `/` | 根目录 | | `/bin` 目录 | 存放 "**==用户命令== 的二进制可执行文件"**,<br>包括 `ls`、`cp`、`mkdir`、`mv`、`rm` 、`cat` 等命令工具 | | `/sbin` 目录 | 存放 "**==系统管理命令== 的二进制可执行文件**",<br>包括 `ifconfig`、`modprobe`、`hwclock`、`reboot`、`shutdown` 等需要 root 用户权限的命令 | | `/boot` 目录 | 存放 "**==启动引导文件==**",如内核镜像文件`vmlinuz`、启动配置文件 `grub.conf` | | `/etc` 目录 | 存放 "**==系统配置文件==**" 和 "**==启动脚本==**",例如网络配置文件、系统服务配置文件。 | | `/usr` 目录 | 存放 "**==用户级==应用程序和文件**",其中包含 `/usr/bin`、`/usr/sbin`、`/usr/lib` 等子目录。 | | `/dev` 目录 | 存放 "**==设备文件==**",即计算机硬件设计对应的文件,如硬盘 `/dev/sda`、终端设备`/dev/tty`、CPU 等 | | `/lib` 目录 | 存放 "**系统和应用程序依赖的==共享库文件==**" 以及内核模块文件。<br>此外还有 `/lib32` 和 `/lib64` 目录,分别表示用于 32 位 / 64位系统的库文件。 | | `/home` 目录 | 存放 "**每个用户的主目录**"",例如 `/home/yht`,其中存放用户数据和配置文件。 | | `/root` 目录 | `root` 用户的主目录 | | `/media` 目录 | 用作**可移动设备**的**挂载点目录**,例如光驱、U 盘、移动硬盘等 USB 设备。 | | `/mnt` 目录 | 用作**固定存储设备**的**挂载点目录**,例如挂载其他固态硬盘。 | | `/proc` 目录 | **虚拟文件系统** `proc` 的挂载目录,为**系统内存的映射**,存放**系统==运行时==信息**,如系统内核、进程、内存等信息。<br>常用于查看和调试系统信息,例如`/proc/cpuinfo`、`/proc/meminfo`。 | | `/sys` 目录 | **虚拟文件系统 `sysfs`** 的挂载目录,存放**系统==硬件==信息**,主要用于管理和查询设备信息。 | | `/opt` 目录 | 用于**安装第三方软件包**的目录 | | `/run` 目录 | 存放 "**系统运行时数据**",例如进程 ID 文件(PID files),套接字文件。 | | `/srv` 目录 | 存放 "**由系统提供的服务相关的数据**",如Web服务器的数据(如/www) | | `/tmp` 目录 | 存放 "**临时文件**",系统和用户程序在此目录下创建的临时文件通常**在系统重启时被清除** | | `/var` 目录 | 存放 "**经常变化的数据文件**",如**日志文件**(`/var/log`)、邮件(`/var/mail`)、打印机队列和临时文件 | | `/lost+found` | 存放 "系统异常关机时**仅完成部分写入**的损坏文件" | > [!NOTE] **`/bin`, `/sbin`,`/lib` 目录** 已作为符号链接! > 较新的 Linux 发行版中(CentOS7. x,Ubuntu 20.04 起等), > **`/bin`, `/sbin`,`/lib` 目录** 已分别作为 **`/usr/bin`, `/usr/sbin`,`/usr/lib` 目录**的==**符号链接**==。 > > 这个变化旨在**简化文件系统的布局**。 > > 符号链接使得**系统在不同的阶段都可以访问到基本命令**。 > - 在系统引导时,`/bin` 可能是唯一可用的目录,因此系统启动和修复所需的基本命令会位于 `/bin`。 > - 当系统引导完成并且 `/usr` 目录挂载成功后,`/usr/bin` 中的命令也可用。 <br> ### `/usr` 目录 > `/usr` 含义:`unix systerm resource`,其下许多子目录名与根路径下的子目录名一致。 `/usr` 目录用于存放 "**用户级别的应用程序和文件**",类似于 Windows 上的 `%ProgramFiles%` 目录。 其子目录包括: - `/usr/bin`:存放**用户命令**的二进制文件。 - 例如 `ls`、`cp`、`mkdir`、`mv`、`rm` 、`cat` 等命令工具 - `/usr/sbin`:存放**系统管理命令**的二进制文件。 - 例如 `ifconfig`、`modprobe`、`hwclock`、`reboot`、`shutdown` 等命令工具 - `/usr/lib`:存放**系统和程序运行所依赖的系统级库文件**。 - `/usr/share`:存放**共享数据**,如文档和配置文件。 - `/usr/local`:用作 **==第三方应用程序==的系统级安装目录**,包括下列子目录: - `/usr/local/bin` - `/usr/local/sbin` - `/usr/local/lib` - `/usr/local/include` - `/usr/local/src` ![image-20230922111159213|615](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-8D0EC48D8FAB003BCA1353BB661C68D4.png) ### `/var` 目录 ![image-20230922111348403|650](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-7560BC83A338021FF0F4B1CE39326CB8.png) ### `/boot` 目录 存放 "**系统启动引导程序**" 相关文件的目录。 ### `/dev` 目录 > "dev" 取自 "device driver",即设备驱动程序。 Linux 系统中一切都是文件,会将**计算机硬件设备**映射成相应的"**设备文件**" 来进行管理。 `/dev` 目录下存放的即是 "**设备文件**"。 每个硬件设备都有对应的设备文件,系统内核中的 udev 设备管理器会自动对硬件设备文件的名称进行规范命令。 #### 设备文件名说明 每种**外围设备**都有相对应的**设备文件名与代号**,系统内核中的 **udev 设备管理器** 会自动对硬件设备文件的名称进行**规范命名**。 ![image-20230922104917412|608](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-B14655B2D2983D3134412E299A614FDC.png) ![image-20230922105033962|605](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-46200F52CA135AE0303DBEFB008BE1B8.png) > [!example] 示例: > > ![image-20230922112147519|767](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-401FD78DE831F72F78B157FAF765F50B.png) > > 注:`tmpfs` 为临时文件系统,在内存中创建,当系统重启或崩溃时,其中内容将被抹除。 > <br> ### `/proc`与 `/sys` 目录 这两个目录是 "伪文件系统" 的挂载目录: - `/proc` 目录为**伪文件系统** `proc` 的挂载目录; - `/sys` 目录为**伪文件系统** `sysfs` 的挂载目录; <br> ### `/tmp` 目录 ##### 临时文件 Linux 系统中有两个临时文件目录,专供用于存放临时文件: - **`/tmp` 目录**:**最常用的临时文件存储目录**,系统中的任何用户都有权限操作 `/tmp` 目录。 - 大多数 Linux 系统发行版都配置为,**系统在启动时会自动删除 `/tmp` 目录中的所有文件**。 - `/var/tmp` 目录:与 `/tmp` 类似,但存储在此目录中的文件**通常在系统重启时保留**。 临时文件的用途: - 临时数据存储:程序可能需要临时存储数据,这些数据在任务完成后不再需要。 - 缓存:加速程序和服务的响应时间。 - 进程间通信:用作不同进程间的通信媒介。 - 会话管理:存储关于用户会话的临时信息。 ### `/lost+found` 目录 ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-56FDB90EFC2E968AC5C05C45FA09B399.png|552]] <br> ## 目录使用说明 目录使用建议: - 第三方软件的**安装目录**: `/usr/local` 路径下。 - 第三方软件的**可执行文件**:放在`/usr/local/bin` 下; - 第三方软件**自身的库文件**:放在 `/usr/local/lib` 下; - 第三方软件的**源码文件**:放在 `/usr/local/src` 下; - 第三方软件**安装包存放的目录**: `/opt`,放的是 "安装包" 。 > [!quote] > ![image-20230922152155450|443](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-70A43DBFA611A2452D62170A79FC18B1.png) > > ![image-20230922152358783|727](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-18A5BF4006939B5991D1FA0C8CDEA99A.png) > ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-8F8B38C76750E949315811F8921965BE.png|653]] <br><br> <br> # Linux 文件系统 <br> ## 物理存储设备与文件系统的关系 **物理存储设备**(硬盘、USB 闪存等)提供了**实际存储空间**,而**文件系统**是**在存储空间之上创建的一个逻辑结构,用于管理和组织数据**。 **每个物理存储设备都需要具有自己的==文件系统==**,由此才能**提供存储、访问数据等功能**: 对于一个**全新的物理存储设备**,需要对其进行 **==分区==**、**==格式化==**(即**在分区中创建文件系统**),再**将其文件系统==挂载==到 Linux 主目录树上**后才能**通过==挂载点==访问其内容**。 **一个物理存储设备可以被分成==多个分区==,每个分区都包含一个独立的文件系统**。 <br> # 文件系统与目录树的关系 Linux 只有一个**从根目录开始**的树形目录结构,对应一个 **==主文件系统==**(**系统盘**上的文件系统)。 在**主文件系统中的目录树**上,可以在其中某个目录**挂载其他的 "==物理存储设备或分区==" 中的文件系统**,这一目录即称之为 "**挂载点**"。 当一个设备的文件系统被挂载之后,其**文件系统中的内容将显示在==挂载点==目录**中,就像是**存放在了挂载点目录下一样**,可被直接访问。 - 「**挂载**(mount)」:指将**一个物理存储设备或分区中的文件系统** 与**主文件系统目录树中的一个目录(称之为==挂载点==)** 相连接; - 「**挂载点**(mount point)」:**主文件系统中的一个目录**,连接了**其他存储设备或分区中的文件系统** - 「**卸载**(unmount)」:将挂载的文件系统从挂载点断开,称之为卸载文件系统。 > [!example] > 例如,一块硬盘作为**系统盘**挂载到根目录`/` ,而**另一块硬盘则可以挂载到`/home`**。 > 这样,`/home` 目录下的所有文件实际上则是存储在第二块硬盘中。 > [!NOTE] Linux 下的文件路径本身,并没有提供任何有关文件究竟存放在哪个物理磁盘中的信息。 <br><br> ## 文件系统的自动挂载 在开机自检之后,一个称为 「**引导加载程序**」的程序接管计算机,从**引导设备**中读取数据,从而**将操作系统加载到内存**中。 在**引导设备**的数据中有**初始的 Unix 文件系统**,称为**根文件系统**。 **根文件系统**会**自动挂载**,其中存放着**启动 Unix 所需的全部程序和数据文件**。 一旦挂载了根文件系统,内核也启动完毕,就会**自动挂载其他设备文件系统**。 这些额外的文件系统的信息存放于配置文件 `/etc/fstab` 中。 因此,要持久化地挂载一个文件系统,就需要在 `/etc/fstab` 中声明挂载信息: ![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#自动挂载文件系统(持久化挂载)|磁盘管理相关命令]] <br><br> ## 文件系统检查与修复 每种文件系统各自都有相应的恢复命令。 Linux 系统提供了 `fsck` 文件系统检查工具,用于检查和修复文件系统一致性与完整性。 `fsck`会扫描文件系统的完整性和结构一致性,检查错误,比如丢失的文件、损坏的块、不一致的目录项等。如果找到错误,`fsck`会尝试修复这些问题。这可能包括修复文件系统表、恢复丢失的文件等。 ![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#检查和修复文件系统|磁盘管理相关命令]] # 物理存储设备的使用 ## 分区、格式化、挂载 对于一个**全新的物理存储设备**,需要对其进行 **==分区==**、**==格式化==**(即**在分区中创建文件系统**),再**将其文件系统==挂载==到 Linux 主目录树上**后才能**通过==挂载点==访问其内容**。 整体步骤如下: - **识别新硬盘**:使用 `lsblk` 或 `sudo fdisk -l`查看硬盘对应的**设备文件标识符**。 - **创建分区**(可选):使用 `fdisk`、`gdisk`、`parted` 等工具在硬盘上创建/划分分区(例如`/dev/sda1`)。 - **格式化分区**:即在分区上创建文件系统 - 需使用各个文件系统专门的格式化工具,如 `mkfs.ext4` 创建 ext4 文件系统。 - 如果未进行分区,则直接在整个硬盘上格式化/创建文件系统,即文件系统将覆盖整个硬盘。 - **挂载文件系统**: 将分区上的文件系统挂载到 Linux 系统主目录上的指定路径(挂载点) - 临时挂载:使用 `mount` 命令将分区**临时挂载**到指定路径。 - **自动挂载**(持久性挂载):编辑 `/etc/fstab` 文件并添加挂载信息. #### 示例一:**为新硬盘创建分区、格式化、挂载到指定目录** ```shell # 1. 查看新硬盘对应的设备文件标识符 lsblk # 2. 创建分区: 对`/dev/sda`分区, 得到`/dev/sda1`等 sudo parted /dev/sda # 3. 格式化分区, 在分区上创建文件系统 sudo mkfs.ext4 /dev/sda1 # 4. 挂载文件系统 mkdir /my_data mount -t ext4 /dev/sda1 /my_data # 临时挂载 # 5. 检查是否成功挂载(df命令只显示已挂载的文件系统) df -h ``` #### 示例二:**自动挂载文件系统(持久化挂载)** ![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#自动挂载文件系统(持久化挂载)|磁盘管理相关命令]] #### 示例三:挂载 U 盘 - (1)插入 U 盘后,查看 U 盘的设备文件名 - 命令:`lsblk` 或 `sudo fdisk -l` 。 ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-862808B31AD8195EF38606DFA15D41C0.png|450]] - (2)将 U 盘挂载到 `/media` 路径下 - 命令:`sudo mount /dev/sdb1 /media`(直接挂载到`/media`,或者`/media/xxx`) ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-EC178933C58F7AC8E8BB1EAD4477AD6F.png|499]] - (3)进入挂载目录 `cd /media`,即意味着**进入到 U 盘中** - (4)取消挂载,退出 U 盘:`umount /media`。 <br><br> ## 磁盘分区管理 创建、删除、组织和管理磁盘分区的工具: - **fdisk**: 支持传统的 MBR 分区表(Master Boot Record),这是早期的分区方案,最大支持 2TB 的磁盘,且一个磁盘最多只能有四个主分区。 - 示例:`sudo fdisk /dev/sda` - **gdisk**:支持新一代的**GUID 分区表**(GUID partition table,**GPT**),是 "GPT fdisk"的简称。GPT 不受 MBR 的 2TB 限制,且一个磁盘可以有多达 128 个主分区。 - 示例:`sudo gdisk /dev/sda` - **GNU Parted**(通常简称 `parted`): - 示例:`sudo parted` 进入交互式模式,可执行`print` 、`resizepart`、`mklabel` 、`mkpart` 等命令。 - **GNOME Partition Editor**(`gparted`):Parted 的图形界面版本 ##### GNU Parted > 参见:[vmware:ubuntu虚拟机如何扩容?\_vmware虚拟机下ubuntu磁盘扩容-CSDN博客](https://blog.csdn.net/qq_34160841/article/details/113058756) ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-EADDE8EEB299E4BEAE1664BFF18400D4.png|494]] - 支持多种分区表类型,包括 MBR 和 GPT 等。 - 可以直接在多种文件系统上操作,包括创建、检查、调整和删除文件系统。 - **能够调整现有分区的大小而不丢失数据**(fdisk 和 gdisk 不能调整现有分区,只能先删除现有分区再重新创建) - 脚本化操作:支持脚本化命令,使其适用于自动化任务。 <br> ## 格式化(创建文件系统) > 新硬盘设备或新创建的分区上没有搭载任何文件系统,必须在其上进行**格式化**,**即创建一个文件系统**。 每个文件系统创建时都会生成一个**唯一标识符** **UUID**(Universally Unique Identifier)。 每种文件系统都有其专门的格式化工具,如下所示: ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-D86CAC4CC24BE9353D87286FF8489DF2.png|516]] Linux 系统上并没有默认安装所有的文件系统格式化工具。 可使用 `type` 命令查看某个工具是否可用: ![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-A86A60656ACF6A686B1B32DED9A9976D.png]] 如上,Ubuntu 上没有默认安装 xfs 系统的格式化工具。 %% # 存储设备文件 Linux 系统中,有多种不同类型的存储设备,每种类型的设备或技术都有其特定的用途,如`disk`和`part`用于基本的存储任务,`loop`用于特殊的挂载场景,而`lvm`提供了高级的存储管理功能。 #### 1) 物理硬盘 disk 物理硬盘,包括**HDD** (传统机械硬盘) 和 **SSD** (固态硬盘)。 在 Linux 中,物理磁盘对应的**设备文件**通常表示为 `/dev/sda`, `/dev/sdb` 等。 其中,`sd` 表示**SATA 或 SCSI 接口硬盘**,字母 `a`、`b` 等标识**不同的硬盘**。 对于 **NVMe 接口** 的 SSD,通常是`/dev/nvme0n1`, `/dev/nvme1n1` 等。 - `/dev/nvmeNn#`,其中数字"`N`" 标识不同磁盘,数字 `#` 为分配给该磁盘的**名称空间编号**(从 1 开始)。 #### 2) 分区 Partitions **一个物理硬盘**可以被分成**多个分区**,每个分区表现为独立的区域,并**可以有不同的文件系统**。 在 Linux 中,分区对应的设备文件通常表示为 `/dev/sda1`, `/dev/sda2` 等。 其中,`sda` 为物理磁盘的标识,**数字`1` ,`2` 等标识该磁盘下的各个分区**。 对于 **NVMe 接口** 的 SSD,通常是`/dev/nvme0n1p1`, `/dev/nvme0n1p2` 等。 #### 3) Loop 设备 Loop 设备是一种特殊的设备,它允许**普通文件**在文件系统中表现得像**块设备**。 通常用于挂载镜像文件(如 ISO 文件)。例如,通过 loop 设备将一个 ISO 映像文件挂载到一个目录中,此后对该目录访问就像**使用物理磁盘一样使用一个文件**。 在 Linux 中,loop 设备的设备文件名通常为 `/dev/loop0`,`/dev/loop1` 等。 #### 4) 逻辑卷管理 LVM 逻辑卷管理(Logical Volume Management,LVM)是一种高级的磁盘存储管理技术,在物理硬盘和分区之上提供了一个抽象层,允许更灵活的磁盘空间管理。 ###### LVM 的几个关键概念 - **物理卷(Physical Volumes, PVs)**:LVM 系统的基本构建块,通常是**实际的硬盘或其分区**。 - **卷组(Volume Groups, VGs)**:一组一个或多个物理卷组成的**存储池**,可被视为**一个大的虚拟磁盘**。 - **逻辑卷(Logical Volumes, LVs)**:在卷组内创建的**虚拟分区**。逻辑卷**可以被格式化并挂载使用**,就像物理磁盘或其分区一样。 ###### LVM 的基本思想 将多个**物理卷** (物理硬盘或其分区) 合并成一个**卷组** (大的虚拟磁盘),再在卷组内创建**逻辑卷**(虚拟分区),使其作为存储设备使用。 ###### LVM 的使用步骤 首次设置逻辑卷的步骤如下。 (1) 创建物理卷。 (2) 创建卷组。 (3) 创建逻辑卷。 (4) 格式化逻辑卷。 (5) 挂载逻辑卷。 ###### LVM 的优点及作用 - **灵活性**: - 允许创建、调整、移动或删除逻辑卷而不需要关机,因此可在不中断系统服务的情况下**动态调整逻辑卷的大小**。 - 多个物理设备合并为一个大的卷组,可以**按需分配存储空间**。 - **易于管理**:在需要处理多个磁盘和大量存储空间时,简化磁盘管理 - **快照功能**:支持创建逻辑卷的快照,对于备份和恢复非常有用。 ###### 常用场景 - **服务器和数据中心**,需要**灵活地管理大量磁盘空间**。 - 在需要频繁更改存储配置的环境中,如云计算环境。 - 在需要高级数据管理功能(如快照、数据复制和分布式存储)的系统中。 ###### 管理命令 - `pvcreate`, `pvdisplay`, `pvremove`:用于管理物理卷。 - `vgcreate`, `vgdisplay`, `vgextend`, `vgreduce`:用于管理卷组。 - `lvcreate`, `lvextend`, `lvreduce`, `lvremove`:用于管理逻辑卷。 ###### 设备文件形式 在 Linux 中,逻辑卷在 `/dev` 目录下**通常有自己的命名规则**,如 - - `/dev/mapper/vgname-lvname` - 或 `/dev/vgname/lvname` 其中 `vgname` 是自定义的**卷组名**,`lvname` 是 **逻辑卷名**。 #### 5) RAID 阵列 RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列) 是**将多个物理硬盘组合为一个逻辑单元**的技术。 RAID 旨在提高数据可靠性、容错能力或提升性能。 RAID 可以通过软件(软 RAID)或专用硬件(硬 RAID)来实现,不同的 RAID 级别(如 RAID 0, 1, 5, 6 等)提供了不同的性能和冗余特性。 RAID 阵列**可以分为多个分区或由 LVM 管理**。 ###### RAID 的作用 1. **数据冗余**: RAID 通过**冗余数据存储**(即在多个磁盘上存储相同的数据或数据的校验信息)来**提高容错能力**。如果一个磁盘发生故障,系统仍然能够从其他磁盘中恢复丢失的数据。 2. **性能提升**: 某些 RAID 级别可以通过并行读写操作来提高性能。例如,RAID 0 通过将数据分布在多个磁盘上来提高读写速度 ###### 常见的 RAID 级别 - **RAID 0**(条带化):将数据分布在两个或多个磁盘上,没有冗余,提供高性能但不提供容错能力。 - **RAID 1**(镜像):数据在两个或多个磁盘上完全复制,提供容错能力,但存储效率为 50%。 - **RAID 5**(带奇偶校验的条带化):将数据和奇偶校验信息分布在三个或更多磁盘上。如果一个磁盘失败,数据可以从剩余磁盘的数据和奇偶校验信息中重建。 - **RAID 6**(双奇偶校验):类似于 RAID 5,但有两套奇偶校验信息,可以容忍两个磁盘同时失败。 - **RAID 10**(镜像+条带化):结合了 RAID 0 的性能和 RAID 1 的冗余特性,通常需要四个或更多磁盘。 ###### 软硬件实现 - **软件 RAID**:由操作系统内的软件控制,不需要专用的硬件。Linux 内核支持软件 RAID,并提供了`mdadm`这样的工具来管理软 RAID。 - **硬件 RAID**:由专用的 RAID 控制器卡控制。硬件 RAID 通常提供更好的性能和额外的功能,如电池备份的写缓存。 #### 6) 网络存储 NAS, SAN 网络附加存储(NAS)和存储区域网络(SAN)是**通过网络连接的存储解决方案**。 网络存储通常**由多个硬盘组成,可以配置为 RAID,也可以被划分为多个分区或由 LVM 管理**。 网络存储提供**远程存储服务**,通常用于企业和大型组织的数据中。 网络存储设备的表示依赖于具体的连接方式和协议。例如,使用 iSCSI 连接的 SAN 设备可能显示为 `/dev/sdX` 类似的设备。 %% <br><br> # 参考资料 [Linux文件系统与目录结构](https://www.cnblogs.com/ddz-linux/p/10458383.html) %% ![image-20230922105924334](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-4EF1FBD7347136463DB6C05DDD6931B4.png) > ![image-20230922095410631](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-37AE3661992CC8C4AA468C74522CD021.png) > > ![image-20230922095437407](_attachment/02-开发笔记/11-Linux/Linux%20目录树与文件系统挂载.assets/IMG-Linux%20目录树与文件系统挂载-6EE85FE0BC0A09A964F0D86702064A23.png) %% # Footnotes [^1]: