【Linux】【磁盘管理】学习笔记

文章目录

  • [1. 磁盘和磁盘分区](#1. 磁盘和磁盘分区)
    • [1.1 磁盘](#1.1 磁盘)
    • [1.2 分区](#1.2 分区)
      • [1.2.1 分区架构](#1.2.1 分区架构)
      • [1.2.2 分区表MBR vs GPT](#1.2.2 分区表MBR vs GPT)
    • [1.3 逻辑卷管理器LVM](#1.3 逻辑卷管理器LVM)
    • [1.4 磁盘的操作](#1.4 磁盘的操作)
      • [1.4.1 磁盘分区](#1.4.1 磁盘分区)
      • [1.4.2 磁盘格式化(创建文件系统)](#1.4.2 磁盘格式化(创建文件系统))
      • [1.4.3 文件系统校验](#1.4.3 文件系统校验)
      • [1.4.4 文件系统的挂载与解挂载](#1.4.4 文件系统的挂载与解挂载)
  • [2. 磁盘配额Quota](#2. 磁盘配额Quota)
  • [3. 软件磁盘阵列Software RAID](#3. 软件磁盘阵列Software RAID)
  • 参考内容

1. 磁盘和磁盘分区

1.1 磁盘

Linux中的所有数据均是以文件的形态来呈现的,磁盘也不例外。Linux中,所有的设备都被当做文件对待,每个设备都有一个设备文件名。Linux所有的设备都被抽象为文件,保存在/dev目录下。

磁盘设备文件通常分为:SATA与USB设备文件名为/dev/sd[a-p];虚拟机的磁盘文件名通常为/dev/vd[a-p];若使用了软件磁盘阵列,文件名为/dev/md[0-128]

以第一块磁盘为例,分区的文件名为/dev/sda[1-128]

1.2 分区

一个磁盘可以分成多个分区(个数有限制),用户可以将每一个分区感知为一个独立的磁盘使用。分区必须挂载在一个目录上才能进行操作。

Linux的目录(目录其实也是文件)和文件以目录树的结构进行管理,不同的目录对应的分区可能是不同的。比如:分区1挂载在根目录下;分区2挂载在/home目录下,因而不同目录下的数据也就存放在了不同的分区中。

1.2.1 分区架构

图源: https://www.cnblogs.com/lijiaman/p/12885649.html

  • 磁盘:在系统中呈现为一个个文件:/dev/sda
  • 分区:一块磁盘的一部分,逻辑上可以理解为Windows中的C盘、D盘;物理分区又称为主分区,又可以分成多个逻辑分区。
  • 物理卷:物理卷在逻辑卷管理中位于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
  • 卷组:物理卷的集合成为卷组。一个卷组至少要包含一个物理卷;卷组建立之后可以动态将物理卷添加到卷组中;一个逻辑卷管理系统中可以有一个或多个卷组
  • 逻辑卷:从卷组中划出来的一块逻辑磁盘。

1.2.2 分区表MBR vs GPT

MBR分区表

MBR:master boot record,主引导记录。

早期Linux为了兼容Windows的磁盘,使用的是支持Windows的MBR的方式来处理启动引导程序和分区表。启动引导程序记录区和分区表通常放在磁盘的第一个扇区:

  • 主引导记录:可以安装启动引导程序的地方,446B
  • 分区表:记录整块磁盘分区状态,64B。因为只有64B,所以最多只能有4组记录区,每组记录区记录了该区段的起始与结束的柱面号。

分区表示例:64B的分区表记录了分区P1~P4的柱面号范围

  • 硬盘默认的分区表只能写入4组分区信息
  • 分区的最小单位通常为柱面
  • 这四组分区信息成为主要分区或扩展分区
  • 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据处理

扩展分区:使用额外的扇区来记录分区信息。

如图所示,继续划分出了5个分区L1~L5,它们被称为逻辑分区。逻辑分区由扩展分区划分而来,逻辑分区能使用的柱面范围就是扩展分区所设置的范围(在图中对应101-400)

MBR中:

  • 主要分区与扩展分区最多能有4个(硬盘限制)
  • 扩展分区最多能有1个(操作系统限制)
  • 逻辑分区是由扩展分区持续划分出来的分区
  • 能够被格式化后作为数据存取的分区是主要分区和逻辑分区,扩展分区无法格式化
  • 逻辑分区的个数依操作系统而不同
  • 逻辑分区设备文件名的号码,一定从5开始,因为前四个号码是保留给主要分区或扩展分区使用的
GPT分区表

GPT:GUID partition table。

MBR分区表限制了操作系统最大能使用2.2TB容量的磁盘,若磁盘容量大于2TB时,系统会自动使用GPT分区方式来处理磁盘分区。

GPT使用逻辑区块地址LBA(logical block address)来记录分区信息,GPT使用34个LBA区块来记录分区信息。(整个磁盘的最后34个LBA用来作为备份):

  • LBA0:MBR兼容区块
  • LBA1:GPT表头记录。记录了分区表位置和大小,以及记录了备份用的GPT分区放置的位置
  • LBA2-33:实际记录分区信息的地方。从LBA2区块开始,每个LBA都可以记录4组分区信息

GPT分区没有主要分区、扩展分区和逻辑分区的概念,每个分区都可以拿来格式化使用。

1.3 逻辑卷管理器LVM

LVM:logical volume manager。LVM可以弹性调整文件系统的容量;可以整合多个物理分区;可以在LVM管理的磁盘中新增或删除其他物理分区。

1.3.1 几个概念

  • 物理卷PV:physical volume
    • 实际的分区需要调整系统标识符为8e(LVM的标识符),然后通过pvcreate命令将其转成LVM最底层的物理卷PV,之后才能使用这些PV。通过gdisk调整系统标识符system ID。
  • 卷组VG:volume group
    • VG就相当于LVM整合成的大磁盘
  • 物理扩展块PE:physical extent
    • PE是整个LVM最小的数据存储单位,文件数据都是通过写入PE来完成写入的
    • PE就类似于文件系统中block
  • 逻辑卷LV:logical volume
    • LV就是最后可以被格式化使用的类似分区的东西了

架构图可见1.2.1

1.3.2 LVM 操作实践

操作命令

使用LVM进行管理时大致可分为:disk阶段;PV阶段;VG阶段;LV阶段;文件系统阶段

  • disk阶段
    使用gdisk或fdisk命令得到分区
  • PV阶段
    相关命令:
c 复制代码
pvcreate : 将物理分区建立为PV
pvscan   : 查找目前系统里面任何具有PV的磁盘
pvdisplay : 显示出目前系统上的PV状态
pvremove : 将PV属性删除 
  • VG阶段
    相关命令:
c 复制代码
vgcreate : 建立VG的命令
    vgcreate [-s N[mgt]] VG名称 PV名称
    -s : 后面跟PE大小(size),单位可以是m、g、t(大小写均可)
vgscan : 查找系统上是否有VG存在
vgdisplay : 显示目前系统上的VG状态
vgextend : 在VG内添加额外的PV
vgreduce : 在VG内删除PV
vgchange : 设置VG是否启动(active)    
vgremove : 删除一个VG

注:PV的名称实际上是分区的设备文件名;而VG的名称可以自己取。

  • LV阶段
    将VG划分为一个个LV。
    相关命令:
c 复制代码
lvcreate : 建立LV
    lvcreate [-L N[mgt]] [-n LV名称] VG名称
    -L : 后面接容量,单位可以是m、g、t,最小的单位是PE,这个数量必须是PE的整数倍
    -l : 后面接PE的个数,而不是容量
lvscan : 查询系统上的LV
lvdisplay : 显示系统上的LV状态
lvextend : 在LV中增加容量
lvreduce : 在LV中减少容量
lvremove : 删除一个LV
lvresize : 调整LV的容量大小
  • 文件系统阶段
    创建文件系统并进行挂载
扩大LV容量

LVM可以弹性调整文件系统容量,这是LVM的一大特色。使用LVM调整文件系统容量的大致流程:

  1. VG阶段需要有剩余容量,若VG容量不足可以添加硬盘,然后将该硬盘通过pvcreate、vgextend命令增加到该VG
  2. LV阶段产生更多的可用容量,利用lvresize命令将剩余的可用容量加入到所需增加的LV设备内
  3. 文件系统阶段放大容量,不同文件系统使用不同的命令进行容量放大,例如xfs文件系统的放大使用命令xfs_growfs
LVM的删除

如果LVM正在使用系统的物理分区,如果没有关闭LVM就直接将分区删除或转为其他用途,系统会发生很大问题。LVM的删除流程:

  1. 卸载系统上的LVM文件系统(umount)
  2. lvremove删除LV
  3. vgchange -a n , 清除对应的VG的Active标志
  4. vgremove删除VG
  5. pvremove删除PV
  6. 使用fdisk将ID修改回来

1.4 磁盘的操作

若想在系统中添加一块磁盘,需执行的操作:分区->格式化(以建立文件系统)->校验(可选)->挂载

1.4.1 磁盘分区

lsblk

lsblk [-dfimpt] [device]:列出存储设备信息

bash 复制代码
-d : 仅列出磁盘本身,不会列出该磁盘的分区数据
-f : 同时列出该磁盘内的文件系统名称
-i : 使用ASCII的字符输出
-m : 同时输出该设备在/dev下的权限信息
-p : 列出该设备的完整文件名
-t : 列出该磁盘设备的详细数据,包括磁盘阵列机制、预读写的数据量大小等
  • NAME:设备文件名
  • MAJ:MIN :内核识别的设备都是通过这两个代码实现,分别是主设备代码和次设备代码
  • RM:是否为可卸载设备
  • SIZE:容量
  • RO:是否为只读设备
  • TYPE:disk磁盘、part分区、rom只读存储器等
  • MOUNTPOINT:挂载点
blkid

blkid:列出设备的uuid等参数

parted

parted <device_name> print:列出磁盘的分区表类型和分区信息

gdisk/fdisk

MBR分区表请使用fdisk分区;GPT分区表请使用gdisk分区。

只有root才有权限执行gdisk、fdisk命令

gdisk
bash 复制代码
gdisk [设备名称]
e.g.: gdisk /dev/sda
# 输入?即可看到所有的操作命令

分区表信息各个字段含义:

  • Number:分区编号。例如1号指的是/dev/sda1
  • Start:每个分区的开始扇区号码位置
  • End:每个分区的结束扇区号码位置
  • Size:分区的容量
  • Code:分区内的可能的文件系统类型
  • Name:文件系统名称
fdisk
bash 复制代码
fdisk [设备名称]
e.g.: fdisk /dev/sda
# 输入m即可看到所有的操作命令
partprobe

partprobe [-s]:更新Linux内核的分区表信息

bash 复制代码
partprobe [-s]
# cat /proc/partitions 查看内核的分区记录

1.4.2 磁盘格式化(创建文件系统)

使用mkfs命令,它会去调用正确的文件系统格式化工具软件。

以创建xfs文件系统为例:

bash 复制代码
mkfs.xfs [-b size] [-d params] [-i params] [-l params] [-L label] [-f] [-r params] 设备名称

1.4.3 文件系统校验

注:执行修复命令时,被检查的硬盘分区不能挂载到系统上。

对于xfs文件系统:

bash 复制代码
xfs_repair [-fnd] 设备名称
-f : 后面的设备是个文件而不是实体设备
-n : 只检查而不修改文件系统的任何数据
-d : 通常用在单人维护模式下,针对根目录进行检查与修复

对于ext4文件系统:

bash 复制代码
fsck.ext4 [-pf] [-b 超级区块] 设备名称
-p : 文件系统在修复时,若有需要回复y的操作,自动回复y
-f : 强制检查
-D : 针对文件系统下的目录进行最佳化配置
-b : 后边跟超级区块的位置,若超级区块损坏,可使用该参数利用文件系统内的备份的超级区块来尝试恢复

1.4.4 文件系统的挂载与解挂载

bash 复制代码
mount
-a : 依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上
-t : 指定要挂载的文件系统类型
-o : 后面跟一些挂载时额外加上的参数

挂载测试:

  • /etc/filesystems:系统指定的测试挂载文件系统类型的优先级
  • /proc/filesystems:Linux系统已经加载的文件系统类型
  • /lib/modules/$(uname -r)/kernel/fs/:Linux支持的文件系统的驱动程序

2. 磁盘配额Quota

可以使用磁盘配额来让磁盘容量使用较为公平,磁盘配额Quota一般使用的场景有:网站服务器、邮件服务器、文件服务器。一般可以限制的有:限制某一用户组/某一用户/某一个目录的最大磁盘配额。

磁盘配额的使用限制:

  • ext文件系统仅能针对整个文件系统来限制,无法针对某个单一的目录来限制磁盘配额。
  • 内核必须支持磁盘配额。
  • 只对一般身份用户有效,例如root用户就不能设置磁盘配额,因为整个系统所有的数据几乎都是它的。
  • 若启用了SELinux,那么不是所有的目录都能设置磁盘配额

3. 软件磁盘阵列Software RAID

RAID:Redundant Arrays of Inexpensive Disks,独立冗余磁盘阵列。RAID可以通过技术将多个小磁盘整合成一个较大的磁盘设备。

参考内容

相关推荐
Once_day4 分钟前
Linux之rsyslog(4)属性配置
linux·服务器
waving-black8 分钟前
Linux中自定义服务开机自启nginx
linux·服务器·nginx
Lenyiin8 分钟前
《 Linux 修炼全景指南: 六 》软件包管理器
linux·运维·服务器
NiKo_W12 分钟前
Linux 重定向与Cookie
linux·运维·服务器·前端·网络·线程·协议
ytttr87316 分钟前
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
linux·kubernetes·centos
HLJ洛神千羽16 分钟前
Linux下程序设计综合实验报告——图书管理系统(黑龙江大学)
linux·运维·服务器
Arvin6271 小时前
Ubuntu 22.04 Docker 安装指南
linux·ubuntu·docker
Arvin6271 小时前
Jenkins Jobs 备份与恢复
linux·运维·服务器
小旺不正经2 小时前
Linux介绍及常用命令
linux·运维·数据库
icy、泡芙2 小时前
移远 5G RG255AA-CN 调试
linux·单片机·5g