Linux的磁盘/文件管理,以centos7为例

物理磁盘情况

我的磁盘

无论怎样,系统总需要运行在物理存储介质上,不管是硬盘HDD,又或者是SSD,光盘,U盘等;
故而先使用命令观察磁盘情况,一般来说可能返回如下,这里是我的测试虚拟机.

[root@localhost mapper]# lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
fd0                                                                      
sr0                                                                      
vda                                                                      
├─vda1          xfs               1ab80b5b-694e-4690-b121-2e92eebaab98   /boot
└─vda2          LVM2_member       ZZr0Fx-DB7B-9mzt-4Aw4-EAwA-o41M-l0Xp0I 
  ├─centos-root xfs               6b8e940e-baf1-46b9-b86f-03e1b75512be   /
  ├─centos-swap swap              594ff40a-1850-4f92-a30e-093d60815993   [SWAP]
  └─centos-home xfs               9c2a7b1b-054d-45e6-bc34-1f1166edd53e   /home
vdb                                                                      
├─vdb1          xfs               b0cf0f8a-6ad4-458f-941d-084ac6c0892b   /mnt/data
└─vdb2          LVM2_member       TsHzVK-JQI6-Mmp3-f9hi-4Evz-2CEv-meSxI5 
  ├─d2-lv1      xfs               57688a62-a992-4c03-8339-8175719e96c5   
  └─d2-lv2      ext4              8c48bfac-05ed-4818-a27c-5bf5cb22527d   /mnt/data3

简述一下含义

  • fd0 代表软盘驱动器,这个设备没有文件系统。
  • sr0 代表光盘驱动器或 ISO 镜像。这个设备也没有显示文件系统。
  • vda 是系统中的主要磁盘(通常是虚拟机中的磁盘)。它有两个分区:
    • vda1:这是 xfs 文件系统,挂载在 /boot 目录下。/boot 用于存放启动所需的文件,比如内核、引导加 载程序等。
    • vda2:这是一个 LVM 成员分区。它没有文件系统,而是一个 LVM 物理卷(LVM2_member),它是逻辑卷管理的基础
      • centos-root:是根文件系统,挂载到 / 目录,使用 xfs 文件系统。
      • centos-swap:交换分区,提供虚拟内存,使用 swap 类型。
      • centos-home:用户的主数据存储分区,挂载到 /home 目录,使用 xfs 文件系统。
  • vdb:这是另一个磁盘(这里是第二块虚拟磁盘)

使用新硬盘

流程简述

对于一张新的硬盘(非系统盘),centos需要使用一般要以下的步骤

  • 不使用LVM: 硬盘分区->格式化->创建挂载点->挂载磁盘
  • 使用LVM:
    • 使用已存在VG: 创建物理卷->添加到已有卷组
      • 扩展已有逻辑卷
      • 创建逻辑卷->格式化逻辑卷->创建挂载点->挂载逻辑卷->永久挂载
    • 创建新VG: 分区(可选)->创建物理卷->创建卷组->创建逻辑卷->格式化逻辑卷->创建挂载点->挂载逻辑卷->永久挂载

硬盘分区

  • 首先硬盘是一个物理存储介质,如何使用这张硬盘,就如windows一样,可以执行分区,分为C盘,D盘,E盘等. 一张硬盘可以化为多个分区,称之为磁盘分区.
  • 硬盘的0扇区,记录了这张硬盘的分区方式,常见的分区表格式有MBR和GPT.即指示磁盘如何划分空间来使用. 分区之间是相互独立的.
  • 常见的分区表格式
分区表格式最大支持容量最大支持分区数兼容操作系统优点缺点
MBR2TB4个主分区或 3个主分区 + 1个扩展分区Windows, Linux, macOS兼容性广,简单易用,适用于传统 BIOS 启动系统只支持 2TB 以下的磁盘,最多 4 个分区,扩展性差
GPT9.4ZB128个分区Windows, Linux, macOS支持大于 2TB 的磁盘,支持更多分区,灵活的结构需要 UEFI 启动,较老的系统可能不支持
APM2TB15个分区macOS(较老版本)专为苹果设备设计,兼容性好仅限于旧版 Apple 设备,较少支持其他操作系统

格式化(文件系统(本地文件系统))

  • 首先文件系统是安装在磁盘分区上的,是用来管理和组织存储在磁盘上的文件的一种方式。
  • 它告诉操作系统如何在分区中找到文件,并提供操作文件的方法。换言之,他是对操作系统负责的
  • 将磁盘分区安装文件系统的过程,称之为格式化
  • 不同的操作系统,使用不同的文件系统.当然也有通用的文件系统,例如U盘常用的FAT32,exFat.无论mac或者windows,linux都能正确识别
  • 下面是常见的文件系统
文件系统类型最大文件大小最大分区大小优点缺点操作系统支持
FAT32磁盘文件系统4GB8TB跨平台支持好,兼容性广,简单易用文件大小限制,性能不如现代文件系统Windows、macOS、Linux
exFAT磁盘文件系统16EB128PB支持大文件和大容量,跨平台支持较好安全性差,文件权限管理较弱Windows、macOS、Linux (需安装驱动)
NTFS磁盘文件系统16EB256TB支持大文件、文件权限和加密,性能好跨平台支持较差,macOS 只读,Linux 需安装驱动Windows(默认),macOS(只读),Linux(需安装驱动)
ext4磁盘文件系统16TB1EB支持大文件和大磁盘,性能和稳定性好不支持Windows,macOS无法原生支持Linux
Btrfs磁盘文件系统16EB16EB支持快照、数据压缩、动态块分配,性能好比 ext4 更复杂,稳定性较低Linux(部分发行版如 Fedora 支持)
XFS磁盘文件系统8EB8EB支持大文件和大磁盘,性能优良不支持小文件,较不灵活Linux
ZFS磁盘文件系统16EB256ZB高可靠性,支持数据完整性校验,支持快照不支持Windows,复杂性高Linux(通过ZFS on Linux)、FreeBSD(默认)
F2FS磁盘文件系统16TB16TB专为闪存设计,优化性能和寿命支持的操作系统较少Linux(部分发行版支持)
HFS+磁盘文件系统8EB8EB支持Mac OS文件权限和加密不支持Windows,性能较差macOS(默认)
APFS磁盘文件系统8EB8EB高效,支持加密和快照,优化了 SSD 性能仅支持 macOS 和 iOSmacOS (默认)

创建挂载点;挂载磁盘

  • 对于centos来说,磁盘一般挂载在/mnt下面
# 创建挂载点
mkdir /mnt/data
# 挂载分区
mount /dev/vdb1 /mnt/data
# 查看是否挂载成功:
df -hT
# 使挂载永久生效,注意这边建议使用uuid来挂载,而非设备名,设备名可能会收到加载顺序的影响
vi /etc/fstab
# 设备名挂载
/dev/vdb1  /mnt/data  xfs  defaults  0  0
# uuid挂载
UUID=8c48bfac-05ed-4818-a27c-5bf5cb22527d /mnt/data3 ext4 default 0 0

挂载解释

** 示例挂载情况 **

[root@localhost mapper]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  7.8G     0  7.8G    0% /dev
tmpfs                   tmpfs     7.8G     0  7.8G    0% /dev/shm
tmpfs                   tmpfs     7.8G  265M  7.5G    4% /run
tmpfs                   tmpfs     7.8G     0  7.8G    0% /sys/fs/cgroup
tmpfs                   tmpfs     1.6G     0  1.6G    0% /run/user/0
/dev/vda1               xfs      1014M  208M  807M   21% /boot
/dev/mapper/centos-root xfs        50G  7.7G   43G   16% /
/dev/mapper/centos-home xfs        62G  8.0G   54G   13% /home
/dev/vdb1               xfs       5.0G   51M  5.0G    1% /mnt/data
/dev/mapper/d2-lv1      xfs       2.0G   33M  2.0G    2% /mnt/data2
/dev/mapper/d2-lv2      ext4      2.0G  6.0M  1.8G    1% /mnt/data3
overlay                 overlay    50G  7.7G   43G   16% /var/lib/docker/overlay2/2c54c3d6a14b43ea4b8e41821f763c59b6d972070c0909c68d219e621f1ad1db/merged
  • /dev 目录Device(设备文件),存放所有的设备文件,包括硬件设备和虚拟设备。
    • /dev/vda 实际是我的第一块磁盘的接口
    • /dev/sda:表示第一块 SATA 或 SCSI 磁盘设备。
    • /dev/nvme0n1:表示第一块 NVMe 磁盘设备。
  • 挂载
    • 挂载的本质是将一个资源(不管它是磁盘分区、网络路径、内存文件系统还是虚拟设备)映射到一个挂载点(目录)

    • 挂载不一定只限于文件系统。虽然挂载文件系统是最常见的用途,但 Linux 还允许挂载虚拟文件系统、设备文件、网络文件系统等多种类型的资源。

    • 从下面的挂载示例来看,一共是3组,分别是虚拟文件系统,硬盘,docker

      • devtmpfs 是一种特殊的内存文件系统,用于管理设备文件(如 /dev/sda、/dev/tty0 等)。
      • tmpfs 是一种基于内存的文件系统,通常用于存储临时数据。
        • /dev/shm 是共享内存(shared memory)挂载点,供不同进程共享内存使用。适用于 IPC(进程间通信)和某些数据库的高速缓存。
        • /run 是一个用于存储系统运行时状态信息的目录,类似于 /var/run。它会存储一些临时文件,例如系统启动时生成的 PID 文件、lock 文件、系统进程的状态信息等。
        • /sys/fs/cgroup 是控制组(cgroups)的挂载点。cgroup 是 Linux 内核的一个功能,允许限制、监控和隔离进程的资源使用(如 CPU、内存、I/O 等)。
        • /run/user/0 是为当前用户(在这个例子中是 root 用户)提供的临时目录,tmpfs 文件系统会为每个用户创建一个独立的运行时目录。
      • /dev/xx 这里均为硬盘挂载
        • /dev/vda 为第一张磁盘,被切成了2个分区(lsblk可以看)
          • /dev/vda1 为xfs系统的启动引导
          • /dev/vda2 为lvm管理的文件系统,即 /dev/mapper/centos-xx
        • /dev/vdb 为第二张硬盘,也是切成了2个分区
          • /dev/vdb1 为ext4格式的文件系统区域
          • /dev/vdb2 为lvm管理的文件系统,即 /dev/mapper/d2-xx
    • 挂载覆盖机制

      • 如果没有单独指定挂载点,所有的数据都会写入挂载了根目录的磁盘(比如 centos-root),包括 /dev、/home、/var 等目录。

      • 如果你为某个目录(比如 /home)指定了单独的挂载点(比如挂载到一个新的磁盘或分区),那么这个目录及其子目录的数据就会写入新的挂载点所在的磁盘或存储介质。

        • 例如 /run; /dev; /dev/shm; /boot 都被内存文件系统接管了,其实是由内核执行管理,而和磁盘无关了
      • 如果某个目录被挂载了新磁盘或文件系统,那么原来该目录上的内容会暂时被“隐藏”,新的磁盘会成为该目录的存储位置,直到卸载挂载点。需要注意的是,如果挂载点上已经有文件,这些文件在挂载期间是不可见的,挂载卸载之后,原有的数据会重新显现。

      • 这种挂载机制不仅限于物理磁盘,还可以是内存(比如 tmpfs)、网络存储(如 NFS)、甚至是其他虚拟文件系统(如 overlay)等。

LVM(Logical Volume Management)

硬盘到文件系统的层次结构

从硬盘到文件系统的层次结构可以简单概括为:

  • 硬盘的分区方式(如 MBR 或 GPT)定义了硬盘的物理结构。
  • 磁盘管理工具(如 LVM、RAID)用于灵活管理磁盘空间。
  • 文件系统(如 XFS、ext4、NTFS、Btrfs)用于组织和存储文件数据。

在计算机中,从硬盘到文件系统可以分为三层架构,每一层都有其独特的作用和管理方式。以下是硬盘到文件系统的三层解析:

LVM优势:

  • 动态扩展和收缩:可以在不丢失数据的情况下,轻松调整磁盘空间大小。
  • 跨多个磁盘创建卷组:将多个物理磁盘合并为一个逻辑存储池,灵活管理存储空间。
  • 快照功能:支持创建逻辑卷的快照,用于备份和恢复。
  • 灵活的文件系统管理:支持多种文件系统,便于根据需求选择最佳文件系统。
  • 高效利用存储:通过物理扩展(PE)和逻辑卷管理,提高磁盘空间利用率。
  • RAID 支持:LVM 支持软件 RAID 配置,可以在多个磁盘之间配置 RAID,提升性能和冗余性。

重要概念

  • PV(Physical Volume)物理卷:是实际的物理存储设备或分区,LVM 使用 PV 来管理存储空间,如硬盘、分区或RAID设备。
  • VG(Volume Group)卷组:是由一个或多个 PV 组成的存储池,将多个物理卷的空间合并为一个统一的逻辑存储池。
  • LV(Logical Volume)逻辑卷:从 VG 中划分出的存储空间,类似于传统的分区,用户可以在其上格式化文件系统并作为挂载点使用。

实践操作

  • 目标:
    • 将vdb2磁盘分区(5G),构建为LVM.
    • 创建卷组d2
    • 在d2创建xfs的逻辑卷lv1(2G),和ext4的逻辑卷lv2(2G)
    • 将lv1扩展为2.5G
vdb                                                                      
├─vdb1          xfs               b0cf0f8a-6ad4-458f-941d-084ac6c0892b   /mnt/data
└─vdb2          LVM2_member       TsHzVK-JQI6-Mmp3-f9hi-4Evz-2CEv-meSxI5 
  ├─d2-lv1      xfs               57688a62-a992-4c03-8339-8175719e96c5   /mnt/data2
  └─d2-lv2      ext4              8c48bfac-05ed-4818-a27c-5bf5cb22527d   /mnt/data3
  • 命令:
序号功能命令
1创建pvpvcreate /dev/vdb2
2创建卷组d2vgcreate d2 /dev/vdb2
3在d2上创建逻辑卷lv1/lv2lvcreate -L 2G -n lv1 d2
lvcreate -L 2G -n lv2 d2
4格式化lv1/lv2mkfs.xfs /dev/d2/lv1
mkfs.ext4 /dev/d2/lv2
5创建挂载点mkdir /mnt/data2
mkdir /mnt/data3
6挂载逻辑卷mount /dev/d2/lv1 /mnt/data2
mount /dev/d2/lv2 /mnt/data3
7扩展逻辑卷大小+0.5Glvextend -L +0.5G /dev/d2/lv1
8扩展文件系统xfs_growfs /dev/d2/lv1

附录(命令)

功能指令
显示当前目录的文件类型file *
列出所有块设备的信息lsblk -f
分区工具parted /dev/vdb
parted /dev/vdbmklabel gpt
mkpart primary 1MiB 5GiB
mkpart primary 5GiB 9.3GiB
print
quit
格式化分区为xfsmkfs.xfs /dev/vdb1
查看文件系统的使用情况df -hT
查看所有物理卷/卷组/逻辑卷pvdisplay
vgdisplay
lvdisplay
查看物理卷/卷组/逻辑卷信息pvs
vgs
lvs
创建物理卷/卷组/逻辑卷pvcreate /dev/vdb2
vgcreate vg_data /dev/vdb2
lvcreate -L 5G -n lv_data vg_data
扩展/减少逻辑卷大小lvextend -L +0.5G /dev/d2/lv1
lvreduce -L -0.5G /dev/d2/lv1 (不适用于xfs)
扩展文件系统xfs_growfs /dev/d2/lv1 (xfs)
resize2fs /dev/d2/lv1 (ext4)
创建挂载点和挂载mkdir /mnt/data
mount /dev/vdb1 /mnt/data
检查挂载/etc/fstab配置mount -a
获取块设备IDblkid
持久化挂载/dev/d2/lv1 /mnt/data2 xfs defaults 0 0
或者 UUID=8c48bfac-05ed-4818-a27c-5bf5cb22527d /mnt/data3 ext4 defaults 0 0
修复xfs文件系统xfs_repair /dev/d2/lv1
posted @ 2024-12-03 14:12  tomcat4014  阅读(5)  评论(0)    收藏  举报  来源