您现在的位置是:首页 >技术杂谈 >Linux 配置与磁盘管理网站首页技术杂谈
Linux 配置与磁盘管理
目录
物理设备的命名规则
Linux系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等。
如:/dev/sda5这个设备文件名称所包含信息
说明:
/dev:表示硬件设备文件所在的目录,也就是我们添加上面硬件设备到系统上,那么设备将在这个目录下面呈现。
/dev/sda5中的sd:sd表示是SCSI设备,hd表示IDE设备。
/dev/sda5中的/sdn,n以字母a、b、c…表示,表示的是硬盘的顺序号,假设我们现在Linux有两块硬盘,第一个是/dev/sda,第二个就是/dev/sdb。
/dev/sda5中的/sdan,n以数字表示1、2、3…表示分区的顺序号,这个顺序号可以根据fdisk命令来操作。
Linux中硬盘分区部分
首先我们需要搞懂我们创建分区是用来干什么的?
我们创建完分区之后分区是用来建立文件系统的。
查看计算机上的硬盘及分区情况的操作:fdisk -l
fdisk常用方法:
fdisk -l:查看计算机上的硬盘及分区情况
fdisk -d :删除磁盘分区
fdisk 具体硬盘
然后m参数解释:
在讲Linux系统分区之前,首先得介绍一下硬盘分区的知识,具体分区知识如下图所示。
Linux在分区上建立文件系统
然后我们又抛出一个问题:为什么要建立文件系统,建立文件系统后能干嘛?
为了能在硬盘分区上存储和读取文件,我们需要在分区上创建文件系统。 每一个文件系统在Linux中都被解释成由一个根目录为起点的目录树结构,并且Linux将各个文件系统挂载(mount命令)在系统目录树中使用,也就是我们可以在挂载的目录下存放文件,然后文件就存储在该分区上的意思。对于不同的设备,计算机里面有许许多多中文件系统,不同的文件系统存放和搜索文件的方式都有不同。
硬盘分区后,下一步的工作就是建立文件系统。类似于Windows下的格式化硬盘。格式化硬盘就相当于初始化操作。
建立文件系统的命令是mkfs。
查看可建立文件系统的命令是mkfs[Tab][Tab],如
在/dev/sdb1上创建一个xfs类型的文件系统(初始化过程)
mkfs.xfs /dev/sdb1
接下来将分区挂载到对应的目录里面。
挂载
那么什么又是挂载?
Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,硬件设备也都是文件,它们各有自己的一套文件系统。
因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。
我们先来举个例子
我们想通过Linux命令的方式来访问我们的U盘设备,但是我们的U盘设备有自己的一套文件目录结构,而我们Linux本身也有自己的一套文件目录结构。如下图所示:
图中可以看到,目前 Linux 系统文件和U 盘分属两个文件系统,还无法使用命令行找到 U 盘文件(无法找到/dev/sdb1下的文件如/sdb1/a),需要将两个文件系统进行挂载。
所以我们需要在Linux的根目录下面新建一个目录,如/mnt/hardware-u,通过挂载命令将U盘系统文件挂载到此目录中,如下图所示:
挂载完成后,U盘文件系统已经成为Linux文件系统中的一部分了,此时我们访问/mnt/hardware/就相当于访问U盘。
我们知道Linux根目录下面的/dev目录文件负责所有的硬件设备文件,当我们将U盘插入Linux后,系统会给U盘分配一个目录文件,这个就是位于/dev下面,如/dev/sdb1,但是无法通过/dev/sdb1/ 直接访问 U 盘数据,访问这个目录只会提供给我们设备的一些基本信息。所以我们必须进行挂载到Linux目录下面才可以使用。
而如果是建立好的文件系统,也可以用上面的来解释,我们在分区上建立好文件系统,但是这个文件系统比如xfs有自己的一套目录文件系统,Linux也有自己一套目录文件系统,这个时候,我们无法通过/dev/sdn的方式来访问我们在硬件分区上建立的xfs文件系统,所以我们必须将我们硬件分区上建立的xfs文件系统目录与Linux文件系统目录结构合二为一,既挂载,我们才可以在Linux系统中进行访问。
Linux硬盘管理工具
1、df命令
用来查看所有文件系统的使用情况,如容量、已用、可用、挂载点等,参数-h表示容易读取
df -h
2、mount、umount挂载和卸载命令
(1)mount挂载
文件系统所挂载到的目录被称为挂载点(mount point),Linux系统中提供了**/mnt和/media**两个专门的挂载点。
挂载命令:mount 参数 设备 挂载点
参数:
- -t:指定要挂载的文件系统的类型。
- -r:如果不想修改要挂载的文件系统,可以使用该选项以只读方式挂载。
- -w:以可写的方式挂载文件系统。
(2)mount卸载
umount 命令:mount 设备 挂载点
3、文件系统自动挂载
如果要实现每次开机自动挂载文件系统,可以通过编辑/etc/fstab文件来实现。
例如,如果实现每次开机自动将文件系统类型为xfs的分区/dev/sdb1挂载到/sdb1目录下,需要在/etc/fstab文件中添加下面一行。
/dev/sdb1 /sdb1 xfs defaults 0 0
LVM逻辑卷管理器
LVM(Logical Volume Manager)允许用户对硬盘资源进行动态调整。也就是说LVM是管理磁盘的一种方式,核心特点是灵活调整大小,通常是空间不够用,进行扩充。比如说,我们Linux中根空间/root空间不够了,我们如何进行扩充,如果LVM的磁盘管理,那么我们就很容易进行扩充。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,卷组可以把多块硬盘进行卷组合并。这样我们就不用关系物理硬件设备的底层架构和布局就可以实现对硬盘分区的动态调整。
LVM技术架构如图所示:
一般而言,在生产环境中无法精确地预估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;分析并记录用户的行为导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。另外,还存在对较大的硬盘分区进行精简缩容的情况。
可以通过部署LVM来解决上述问题,部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。
物理卷、卷组合逻辑卷的建立
物理卷可以建立在整个物理硬盘上,也可以建立在硬盘分区中。
- 如在整个硬盘上建立物理卷,则不要在该硬盘上建立任何分区。
- 如使用硬盘分区建立物理卷,则需事先对硬盘进行分区并设置该分区为LVM类型。
(1)建立LVM类型的分区
利用fdisk命令在/dev/sdc上建立LVM类型的分区。
① 先建立主分区
②使用t子命令将第1个分区的类型修改为LVM类型。
③最后使用w命令保存对分区的修改,并退出fdisk命令。
(2)建立物理卷
利用pvcreate命令可以在已经创建好的分区上建立物理卷。物理卷直接建立在物理硬盘或者硬盘分区上,所以物理卷的设备文件使用系统中现有的硬盘分区设备文件的名称。
建立物理卷Physical Volume的过程中LVM将底层硬盘空间划分成了一个一个的PE(physical Etend),LVM磁盘管理中PE的默认大小是4M大小,PE是逻辑卷管理的基本单位比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M。(这里的PE好像不能修改)
物理卷的命令:
- 创建物理卷:pvcreate 硬盘/硬盘分区
- 显示系统上的PV信息(粗略):pvscan
- 更加详细得显示系统上的PV信息(细致):pvdisplay
- 删除物理卷:pvremove 硬盘/硬盘分区
(3)建立卷组(可以更改PE,一旦定了就不能改了)
在创建好物理卷后,使用vgcreate命令建立卷组。卷组中可以包含多个物理卷,也可以只有一个物理卷。
卷组的命令:
- 创建卷组:vgcreate 卷组名 物理卷1 物理卷2 …
这里的PE值使用默认的4 MB,如果需要增大可以使用-L选项,但是一旦设定以后不可更改PE的值。 - 显示系统上的VG信息(粗略):vgscan
- 更加详细得显示系统上的VG信息(细致):vgdisplay
- 删除物理卷:vgremove 卷组名
(4)建立逻辑卷
建立好卷组后,可以使用命令lvcreate在已有卷组上建立逻辑卷。逻辑卷设备文件位于其所在的卷组的卷组目录中,该文件是在使用lvcreate命令建立逻辑卷时创建的。
逻辑卷命令:
- 创建逻辑卷:lvcreate
-L选项用于设置逻辑卷大小,如:-L 20M
-n参数用于指定逻辑卷的名称和卷组的名称,如-n 逻辑卷名 物理卷名 - 显示系统上的LV信息(粗略):lvscan
- 更加详细得显示系统上的LV信息(细致):lvdisplay
逻辑卷的使用
虚拟机创建过程:
发现,我们在创建系统的时候,新挂载点是使用LVM分区方案来的
虽然选择了LVM分区方案,但是我们的/boot分区的分区类型仍然是标准分区,因为/boot通常不需要扩大和缩小。/boot文件系统默认是xfs,一般1g就够用了。
swap,交换分区,也就是虚拟内存,对于swap来说,设备类型就是LVM类型了
根分区/和swap是一样的,如图
创建完进入系统:
pvdisplay
vgdisplay
lvdisplay
两个逻辑卷,一个swap,一个root,swap大小是2G,而root大小是27G,加起来就是29G,所以这两个逻辑卷占用了centos卷组的所有空间
使用lsblk命令来查看关系:
现在假设centos中的root逻辑卷空间不够了,我们需要给他增加空间,如果我们这个时候使用命令
lvextend -L -5g /dev/centos/root来给逻辑卷增加新的空间,那么肯定会失败,
因为我们的centos卷组已经没有了空间,而centos卷组的空间又来自于/dev/sda2,这个分区的空间也用完了,那么这个时候我们该怎么做呢?
我们需要创建新的物理硬盘,然后把物理硬盘变成物理卷,将物理卷加入到卷组中,然后把物理卷的空间给centos卷组,然后接下来就可以给centos卷组下的逻辑卷root增加空间了。
添加新硬盘:
变成物理卷
将物理卷添加到centos卷组中,也就是给centos卷组增加新的空间。
vgextend 哪个卷组 使用哪个物理卷来扩展
vgextend centos /dev/sdb
执行命令之后再看一下
然后拓展centos下的root逻辑卷
先使用lsblk来查看
使用:lvextend -L +5g /dev/centos/root
但是这里需要注意:我们使用df -hT来查看文件系统,容量还是之前的27g,貌似之前的修改对他没有用,所以,我们调整完逻辑卷的大小之后,也需要对文件系统的大小进行调整来匹配。
使用命令:xfs_growfs /dev/centos/root
如果是ext4,则xfs_growfs换成resize2fs
再次使用df -hT命令查看:
删除逻辑卷-卷组-物理卷(必须按照逻辑卷→卷组→物理卷的顺序删除)
解除挂载—>逻辑卷→卷组→物理卷的顺序
LVM整体创建流程
物理磁盘(分区需要将分区设置成LVM类型)—>建立物理卷(PV)—>指定物理卷加入卷组(VG)—》卷组中抽调空间,制作逻辑卷(LV)—>格式化,挂载
硬盘配额配置(针对用户或者群组使用的空间)
Linux是一个多用户的操作系统,为了防止某个用户或者群组占用过多的硬盘空间,可以通过硬盘配额(Disk Quota)功能限制用户或者群组对硬盘空间的使用。在Linux系统中可以通过索引节点和硬盘区块来限制用户或者群组对硬盘空间的使用。
①索引节点数(inode):指限制用户和组可以创建的文件数量。
② 硬盘区块(block):指限制用户和组可以使用的硬盘容量。
我们来举个例子:
1、创建用户并添加到myqutogrp组中。
#!/bin/bash
# 使用script来建立实验quota所需的环境
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
useradd -g myquotagrp $username
echo "password"|passwd --stdin $username
done
2、查看文件系统支持
要使用Quota(配额)必须要有文件系统的支持。假设你已经使用了预设支持Quota的核心,那么接下来就是要启动文件系统的支持。不过,先检查一下/home是否是个独立的filesystem呢?这需要使用“df”命令。
从上面的数据来看,
这部主机的/home确实是独立的文件系统,因此可以直接限制/dev/sda2。
如果你的系统的/home并非独立的文件系统,那么可能就得要针对根目录(/)来规范。
使用mount查询一下/home的文件系统是什么。
如果是ext3/ext4/xfs,则支持Quota。
3、编辑配置文件fstab启用硬盘配额
① 编辑配置文件fstab,在/home目录项下加“uquota,grpquota”参数,存盘退出后重启系统。
② 在重启系统后使用mount命令查看,即可发现/home目录已经支持quota硬盘配额技术了:
③ 接下来针对/home目录增加其他人的写入权限,保证用户能够正常写入数据(这里看不懂的可以往下看拓展chmod命令):
4、使用xfs_quota命令设置硬盘配额
这里先说一下软限制和硬限制
软限制:超过这个值会有提示
硬限制:超过这个值之后就不能操作了
xfs_quota命令来设置用户myquota1对/home目录的quota硬盘容量配额。
上面的要求是:(5个用户都能够取得300MB的硬盘使用量(hard),文件数量则不予限制。此外,只要容量使用超过250MB,就予以警告(soft))
具体的配额控制包括:硬盘使用量的软限制和硬限制分别为250MB和300MB,文件数量的软限制和硬限制不作要求。
① 下面配置硬限制和软限制,并打印/home的配额报告。
[root@Server01 ~]# xfs_quota -x -c 'limit bsoft=250m bhard=300m isoft=0 ihard=0 myquota1' /home
[root@Server01 ~]# xfs_quota -x -c report /home
② 其他4个用户的设定可以使用quota复制。
[root@Server01 ~]# edquota -p myquota1 -u myquota2
[root@Server01 ~]# edquota -p myquota1 -u myquota3
[root@Server01 ~]# edquota -p myquota1 -u myquota4
[root@Server01 ~]# edquota -p myquota1 -u myquota5
[root@Server01 ~]# xfs_quota -x -c report /home
③ 更改组的quota配额
配额的单位是Bytes,1GB=1048576Bytes,这就是硬限制数,软件限制设为900000Bytes。如下所示。配置完成后存盘退出。
[root@Server01 ~]# edquota -g myquotagrp //组的配置貌似是固定的
Disk quotas for group myquotagroup (gid 3007):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 60 900000 1048576
④ 最后,将宽限时间改成14天。配置完成后存盘退出。
[root@Server01 ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be:days,hours,minutes,or seconds
Filesystem Block grace period Inode grace period
/dev/sda2 14days 7days
#原本是7days,我们将他给改为14days!
使用repquota命令查看文件系统的配额报表
[root@Server01 ~]# repquota /dev/nvme0n1p2
** Report for user quotas on device /dev/nvme0n1p2
Block grace time: 14days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 0 0 0 3 0 0
......
myquota1 -- 12 256000 307200 7 0 0
myquota2 -- 12 256000 307200 7 0 0
myquota3 -- 12 256000 307200 7 0 0
myquota4 -- 12 256000 307200 7 0 0
myquota5 -- 12 256000 307200 7 0 0
拓展一下chmod命令:(会的人可以跳过这里)
Linux chmod命令是控制用户对文件的权限的命令。
Linux/Unix的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其他用户(Other Users).
chmod语法:chmod [-cfvR] [–help] mode file
参数说明:
mode:[ugoa…] [[±=][rwxX]…][,…]
其中:
- u 表示该文件的拥有者,g 表示群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
-
- 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)。
- 其他的没什么作用
举例子:
1、将文件 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
或者
chmod a+r file1.txt
或者
chmod 777 file1.txt
2、将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt
3、为 ex1.py 文件拥有者增加可执行权限
chmod u+e ex1.py
4、将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *