知识准备

硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。

硬盘接口分为:IDE、SATA、SCSI、SAS、光纤通道

磁盘在linux系统中的表示:

  • /dev/fd[0-1] #软盘驱动器
  • /dev/sr0或/dev/cdrom(后者是前者的软链接) #光盘CD/DVD ROM
  • /dev/hdXY #IDE硬盘
  • /dev/sdXY #SATA/SCSI/SAS/USB硬盘/U盘
  • /dev/md0 #第一个磁盘阵列设备
  • /dev/sr0 #第一个SCSI磁带设备

磁盘分区

MBR分区

是传统的分区机制,使用BIOS引导的PC设备

分类:主分区(primary)+【扩展分区extended 逻辑分区logical】

支持的分区数量:4个主分区或三个主分区+1个扩展分区(逻辑分区:IDE接口的最多63个;SCSI接口的最多15个)

GPT分区

GUID Partition Table,全局唯一标识分区表

优点:

  • 在默认情况下,GPT最多可支持128个分区。

  • 支持大于2.2TB的总容量及大于2.2TB分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)

  • GPT分区表自带备份

  • 向后兼容MBR.GPT分区表上包含保护性的MBR区域。

文件系统

文件系统——操作系统中负责管理和存储文件信息的软件系统称为文件管理系统,简称文件系统。

linux常用文件系统

xfs:一种扩展性强、高性能的全64位日志文件系统,也是RHEL7默认的文件系统,可以支持上百万太字节的存储空间。

ext4:一种针对ext3系统的扩展日志式文件系统,是专门为Linux开发的原始的扩展文件系统,支持文件的连续写入,减少文件碎片,提高磁盘的读写性能。

swap:使用交换分区来提供虚拟内存,大小一般是物理内存的2倍,由操作系统自行管理。

RAMFS:内存文件系统,速度很快

iso9660:大部分光盘所采用的文件系统。

NFS:网络文件系统,主要用于远程文件共享

NTFS:windows操作系统采用的文件系统

……….

挂载与逻辑卷

所谓“挂载”就是把一个目录当成进入点,将磁盘分区的数据放置在该目录下,从而通过该目录访问分区中的数据,那个点被称为“挂载点”。

Linux逻辑卷(LVM)

在LVM中,舍弃了传统的以“分区”为磁盘的管理单元,改为“卷”为其管理单元,其思想是:物理磁盘空间分解——物理卷——汇聚卷组——转化——逻辑卷,逻辑卷空间可以来自多个物理磁盘,更为重要的是逻辑卷的空间大小能够保持现有数据不变的情况下进行动态调整。

配置详情

指令

df -T //只可以查看已经挂载的分区和文件系统

parted -l //列出所有设备的分区信息

blkid //输出分区或分区类型

lsblk -f //查看所有设备的文件系统类型

partprobe 【设备名】 //获取新的分区表

mount -a //重新读取/etc/fstab文件

fdisk管理MBR分区

创建分区

​ 命令:fdisk 设备名

指令:

gdisk管理GPT分区

创建分区

​ 命令:gdisk 设备名

指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
b 将GPT数据备份到一个文件
c 更改分区名称
d 删除一个分区
i 显示分区详细信息
l 列出已知分区类型。此处8200是Linux swap,8300是Linux filesystem(对应fdisk的82和83)。还有一个8e00是Linux LVM
n 增加一个新的分区
o 创建一个新的空白的GPT分区表
p 显示当前磁盘的分区表
q 退出gdisk程序,不保存任何修改
r 恢复和转换选项(仅限专家)
s 排序分区
t 改变分区的类型
v 验证磁盘分区表
w 将分区表写入裁判并退出(保存并退出)
x 额外功能(仅限专家)
? 显示帮助信息

文件系统格式化分区

定义:

磁盘分区后,也就是分区上创建所需要的文件系统。对硬盘分区格式化会“冲掉”分区内原有数据,不可恢复。

格式:

mkfs|mkfs.xfs|mkfs.ext4 [选项] 分区的设备名

常用选项:

  • -t #文件系统类型,当命令为mkfs时,指定创建格式,mkfs.xfs则不需要该选项。
  • -c #建立文件系统前先检查坏块
  • -V #输出建立文件系统的详细信息
  • -f #mkfs.xfs加上选项f强行格式化

例如:mkfs -t xfs /dev/sdb5 或mkfs.xfs /dev/sdb5

挂载与卸载

手动挂载分区

​ 格式:

mount [-t 文件系统类型] 设备名 挂载点目录

自动挂载分区

手动挂载分区会在系统重启后失效,若要永久挂载分区,则需要通过编辑/etc/fstab文件来实现。

在”/etc/fstab”文件中每一行记录对应一个分区或设备的挂载配置信息,从左到右六个字段(使用空格分隔)

第一个字符:要挂在的设备如/dev/sdb5

第二个字符:文件系统的挂载点目录的位置

第三个字符:文件系统的类型,如xfs、swap等

第四个字符:挂载参数

如:defaults\ro\rw\suid…………

第五个字符:表示是否需要dump的备份功能的标志位,0表示不需要,1表示需要。

第六个字符:设定开机时检查的动作,0表示不进行检查,1表示优先检查,2表示其次检查

例:

/dev/sdb1 /date xfs defaults 0 0

mount -a #重新读取/etc/fstab文件

卸载分区

​ 格式:

umout 【挂载点目录或存储设备名】

交换分区管理

swap交换分区类似于windows系统中的“虚拟内存”,当程序被调入内存,但是该程序又不常被CPU所取用时,这些不常被使用的程序会被放到硬盘的swap交换分区当中,而将速度较快的内存空间释放给真正需要的程序使用,以避免因为物理内存不足造成系统效能低的问题。如果系统没有swap交换分区或不够用时,可扩展swap交换分区。

扩展swap分区有两种:

  • 以磁盘分区的方式扩展
  • 以镜像文件方式扩展

相关指令

partprobe /dev/sdb1 #重新读取分区表

mkswap /dev/sdb1 #格式化交换分区

free -m #显示扩展前已启用的交换分区的大小

swapon [参数 ]

swapon /dev/sdb1 #启动新添加的交换分区/dev/sdb1

常用参数

  • ​ -a 将/etc/fstab文件中所有设置为swap的设备,启动为交换区
  • ​ -h 显示帮助
  • ​ -p 指定交换区的优先顺序
  • ​ -s 显示交换区使用情况

永久挂载

blkid /dev/sdb1 #查看新添加交换分区的UUID

永久挂载,在/etc/fstab文件末尾添加以下一行

uuid=031111............ swap swap defaults 0 0

动态磁盘管理

创建与使用逻辑卷

LVM逻辑卷创建的主要过程是:

物理磁盘分区➡️物理卷➡️卷组➡️逻辑卷➡️格式化逻辑卷➡️挂载逻辑卷到目录➡️设置开机自动挂载

查看系统中是否安装lvm2工具,默认已安装。

[root@Jw2031-122 ~]# rpm -q lvm2
lvm2-2.02.105-14.el7.x86_64

创建查看是否lvm类型分区(分区型号为8e)

以下为转成完成的分区System一栏显示Linux LVM

fdisk /dev/sdb

设备 Boot Start End Blocks Id System

/dev/sdb1 …………………..

/dev/sdb2 104448 309247 102400 8e Linux LVM

/dev/sdb3 ……………………………..

例:

物理卷⤵️

将/dev/sdb2、/dev/sdb5、/dev/sdc1三个Linux分区转换为物理卷使用pvs或pvscan命令查看当前系统中已建立的物理卷。

[root@Jw2031-122 ~]# pvcreate /dev/sdb2 /dev/sdb5 /dev/sdc1

[root@Jw2031-122 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel lvm2 a-- 19.51g 0
/dev/sdb2 lvm2 a-- 100.00m 100.00m
/dev/sdb5 lvm2 a-- 600.00m 600.00m
/dev/sdc1 lvm2 a-- 500.00m 500.00m
[root@Jw2031-122 ~]#

卷组⤵️

将/dev/sdb2、/dev/sdb5整合,创建名为vg01的卷组➡️使用vgs命令扫描当前系统中已创建的卷组➡️使用vgdisplay命令查看卷组vg01的详细信息

[root@Jw2031-122 ~]# vgcreate vg01 /dev/sdb2 /dev/sdb5
Volume group "vg01" successfully created
[root@Jw2031-122 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- 19.51g 0
vg01 2 0 0 wz--n- 692.00m 692.00m
[root@Jw2031-122 ~]# vgdisplay vg01 //查看卷组vg01的详情

逻辑卷⤵️

在卷组vg01上创建一个名为“lv01”的逻辑卷,容量为500MB

[root@Jw2031-122 ~]# lvcreate -n lv01 -L 500MB vg01
Logical volume "lv01" created

[root@Jw2031-122 ~]# lvs #查看逻辑卷
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 17.51g
swap rhel -wi-ao---- 2.00g
lv01 vg01 -wi-a----- 500.00m

格式化逻辑卷⤵️

[root@Jw2031-122 ~]# mkfs -t xfs /dev/vg01/lv01

管理与调整卷

扩展卷组

根据前面的操作,卷组vg01中包含了/dev/sdb1、/dev/sdb2两个物理卷,现添加/dev/sdc1

[root@localhost ~]# vgextend vg01 /dev/sdc1 #将物理卷/dev/sdc1添加到卷组vg01
Volume group "vg01" successfully extended
[root@localhost ~]#
[root@localhost ~]# vgs vg01 #显示扩展后卷组vg01容量
VG #PV #LV #SN Attr VSize VFree
vg01 3 1 0 wz--n- <9.99g <8.99g
[root@localhost ~]#

扩展逻辑卷

当逻辑卷不够用且卷组中还有剩余空间时,可以在线扩展逻辑卷的容量。扩展过程为:

[root@localhost ~]# lvextend -L +1G /dev/vg01/lv01 #将逻辑卷lv01容量添加1GB
Size of logical volume vg01/lv01 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume vg01/lv01 successfully resized.
[root@localhost ~]# lvs /dev/vg01/lv01 #查看扩容后逻辑卷容量
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 2.00g

[root@localhost ~]#

扩容成功后,用df -Th查看逻辑卷的大小还是原先的,说明扩容后还未被挂载点上的文件系统识别。

  • 对于xfs格式的文件系统,可使用“xfs_growfs”命令在不需离线(卸载逻辑卷)的情况下将扩展后的逻辑卷扩展到挂载点上。

  • 对于ext2/3/4格式的文件,可使用“resize2fs”命令扩展后的逻辑卷扩展到挂载点上

缩小逻辑卷

对于ext2/3/4格式的文件系统,不仅可以扩展空间,还可以在离线状态下(卸载逻辑卷)缩小空间。xfs文件系统只能扩展不能缩小空间

例:将现有的2G逻辑卷lv01卸载后转换为ext4格式,缩小1G

[root@localhost ~]# umount /dev/vg01/lv01 #卸载逻辑卷
[root@localhost ~]# mkfs -t ext4 /dev/vg01/lv01 #以ext4文件系统格式逻辑卷

[root@jw2031-122 ~]# e2fsck -f /dev/vg01/lv01 #强制检查并修复逻辑卷

[root@localhost ~]# resize2fs /dev/vg01/lv01 1G #重新定义文件系统的大小为1G

[root@jw2031-122 ~]# lvreduce -L -1G /dev/vg01/lv01 #将逻辑卷lv01空间缩小1G

缩小卷组

pvmove /dev/sdb6 /dev/sdc1 #将/dev/sdb6上的数据迁移到/dev/sdc1

vgreduce vg01 /dev/sdb6 #将物理卷/dev/sdb6从卷组vg01中移除

删除逻辑卷

lvremove /dev/vg01/lv01 #删除逻辑卷

删除卷组

vgremove vg01 #删除卷组vg01

vgs vg01 #查看卷组

磁盘配额管理

xfs_quota命令管理xfs文件系统磁盘配额

quota命令管理ext4文件系统磁盘配额

例:

🙄🙄创建/dev/sdb5分区和/data目录挂载点为例对用户zhang3设置磁盘软限制为100MB、磁盘硬限制为120MB、文件数软限制为3个、文件数硬限制为6个。

步骤1:检查系统中是否安装xfs_quota命令

[root@jw2031-122 ~]# rpm -qf which xfs_quota
xfsprogs-3.2.0-0.10.alpha2.el7.x86_64

步骤2:创建被限制使用磁盘空间大小的用户和密码,创建用户存放文件目录并将该目录所有权限给该用户,保证用户能读写目录中的文件。

[root@jw2031-122 ~]# useradd zhang3
[root@jw2031-122 ~]# passwd zhang3
更改用户 zhang3 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@jw2031-122 ~]# mkdir /data/
[root@jw2031-122 ~]# chown zhang3 /data/ #将目录所有权限赋给用户
[root@jw2031-122 ~]# ll -d /data
drwxr-xr-x. 2 zhang3 root 6 4月 4 15:24 /data
步骤3:支持配额挂载磁盘分区到指定目录

若只限制用户账号而不限制组账号,使用“-o usrquota”选项挂载分区,若事先已挂载则需先卸载

[root@jw2031-122 ~]# mount -o usrquota,grpquota /dev/sdb5 /data
[root@jw2031-122 ~]# mount |grep sdb5
/dev/sdb5 on /data type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[root@jw2031-122 ~]#

步骤4:设置系统启动时以支持配额方式挂载磁盘分区

/etc/fstab下添加⤵

/dev/sdb5 /data xfs defaults,usrquota,grpquota 0 0

步骤5:为zhang3用户和/data目录设置磁盘配额并查看

xfs_quota格式说明⤵

xfs_quota -x -c '子命令' 挂载目录

参数⤵

  • -x #使用专家模式,只有此模式才能设置配额

  • -c ‘子命令’ #以交换式或参数的形式设置要执行的命令,常用子命令如下

  • report #显示配额信息

    • limit #设置配额

    • disable|enable #暂时关闭或启动磁盘配额限制

    • off #完全关闭磁盘配额限制,此时,无法用enable重启配额限制,只能通过卸载后再重新挂载才可恢复配额限制功能

[root@jw2031-122 ~]# xfs_quota -x -c 'limit bsoft=100M bhard=120M isoft=3 ihard=6 -u zhang3' /data
[root@jw2031-122 ~]# xfs_quota -x -c 'report -ubih' /data
User quota on /data (/dev/sdb5)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace

root 0 0 0 00 [------] 3 0 0 00 [------]zhang3 0 100M 120M 00 [------] 0 3 6 00 [------]

步骤6:test!!!切换到zhang3用户,验证磁盘配额限制是否生效

[root@jw2031-122 data]# su zhang3

//下面dd命令是向文件/data/test写入90MB数据,以便验证配额情况

[zhang3@jw2031-122 data]$ dd if=/dev/zero of=/data/test bs=1M count=90 记录了90+0 的读入 记录了90+0 的写出 94371840字节(94 MB)已复制,0.164795 秒,573 MB/秒 [zhang3@jw2031-122 data]$

[zhang3@jw2031-122 data]$ dd if=/dev/zero of=/data/test bs=1M count=110 记录了110+0 的读入 记录了110+0 的写出 #超出软限制但未超出硬限制时仍能成功写入 115343360字节(115 MB)已复制,0.0856177 秒,1.3 GB/秒 [zhang3@jw2031-122 data]$

[zhang3@jw2031-122 data]$ dd if=/dev/zero of=/data/test bs=1M count=130 dd: 写入"/data/test" 出错: 超出磁盘限额 记录了121+0 的读入 记录了120+0 的写出 #写入过程中超出硬限制时被中断,只写入部分内容 125829120字节(126 MB)已复制,0.0643362 秒,2.0 GB/秒 [zhang3@jw2031-122 data]$

步骤7:在root用户与zhang3用户之间切换,关闭或启用磁盘配额限制

[root@jw2031-122 data]# xfs_quota -x -c 'disable' /data #临时关闭磁盘配额限制
[root@jw2031-122 data]# su zhang3
[zhang3@jw2031-122 data] dd if=/dev/zero of=/data/test bs=1M count=130
记录了130+0 的读入
记录了130+0 的写出
136314880字节(136 MB)已复制,0.0763736 秒,1.8 GB/秒 #在配额关闭时超额存储成功
[zhang3@jw2031-122 data] su root
密码:
[root@jw2031-122 data]# xfs_quota -x -c 'enable' /data #重启磁盘配额限制
[root@jw2031-122 data]# su zhang3
[zhang3@jw2031-122 data] dd if=/dev/zero of=/data/test bs=1M count=130
dd: 写入"/data/test" 出错: 超出磁盘限额
记录了121+0 的读入
记录了120+0 的写出
125829120字节(126 MB)已复制,0.0836222 秒,1.5 GB/秒
[zhang3@jw2031-122 data]$ su
密码:
[root@jw2031-122 data]# xfs_quota -x -c 'off' /data #完全关闭磁盘配额功能
[root@jw2031-122 data]# xfs_quota -x -c 'enable' /data
XFS_QUOTAON: 无效的参数 #完全关闭配额后无法用enable重启配额
[root@jw2031-122 data]# umount /data;mount -a #完全关闭配额后只有卸载后重新挂载方能恢复