# 硬盘分区与逻辑卷

硬盘

硬盘基础概念

  • CPU(Central Processing Unit,中央处理器):处理数据。
    内存(Memory):数据缓存区。
    硬盘(Disk,以前也叫磁盘):数据存储区。
    • 类比:CPU是喝水,硬盘是水井,内存是水缸。
  • 磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
    扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区默认存放512字节的信息,是硬盘最小存储单元。磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。

在这里插入图片描述
在这里插入图片描述

  • 计算机容量单位:一般用B,KB,MB,GB,TB,PB,EB,ZB,YB,BB来表示:

    1KB (Kilobyte 千字节)=1024B。
    1MB (Megabyte 兆字节,简称“兆”)=1024KB。
    1GB (Gigabyte 吉字节,又称“千兆”)=1024MB。
    1TB (Terabyte 太字节,万亿字节)=1024GB。
    1PB (Petabyte 拍字节,千万亿字节)=1024TB。
    1EB (Exabyte 艾字节,百亿亿字节)=1024PB。(现企业常用)
    1ZB (Zettabyte 泽字节,十万亿亿字节)= 1024EB。
    1YB (Yottabyte 尧字节,一亿亿亿字节)= 1024ZB。
    1BB (Brontobyte 一千亿亿亿字节)= 1024YB。

  • 硬件厂商的容量单位进率是1000,所以实际容量有误差。

硬盘管理

识别硬盘

  • 虚拟机添加硬盘:要先poweroff关机——显示虚拟硬件详情(左下角添加硬件)——开机。
    VMware添加的硬盘占用真机空间少,KVM添加的硬盘占用真机空间大。
    • 开机状态下,添加设备会识别异常。
  • lsblk(list block):查看系统连接的设备。
// lsblk查看硬件
[root@local ~]# lsblk
	NAME		MAJ:MIN RM	SIZE	RO	TYPR	MOUNTPOINT	
	sr0			 11:0	1  1024M	0	rom					// 光驱
	vda			252:0	0	 20G	0	disk				// 第一块硬盘
	├─vda1		252:1	0	  1G	0	part	/boot	// 第一块硬盘第一分区
	└─vda2		252:2	0	 19G	0	part			// 第一块硬盘第二分区
      ├─rl-root	253:0	0	 17G	0	lvm		/
      └─rl-swap	253:1	0	  2G	0	lvm		[SWAP]
	vdb			252:16	0	 20G	0	disk				// 第二块硬盘
    vdc			252:32	0	 20G	0	disk				// 第三块硬盘
[root@local ~]# ls /dev/vda
	/dev/vda
[root@local ~]# ls /dev/vdb
	/dev/vdb
[root@local ~]# ls /dev/vdc
	/dev/vdc

分区规划 fdisk、parted

  • 硬盘分区后,各分区之间不影响。例如:某个分区软件中病毒,其它分区不影响。
    (Windows主分区盘符以C起计,AB是软盘。)
分区模式 MBR、GPT
  • 分区模式(也叫分区方案):MBR 或 GPT
    • MBR(msdos,Master Boot Record,主引导记录)分区模式
      • 系统通过分区表来识别硬盘信息。
        分区表存放硬盘分区信息,最大64字节。一个分区至少16字节,所以MBR分区模式最多四个主分区。(不能有第五个主分区,即使有剩余空间可分配使用,因为分区表限制。)
      • 分区类型:主分区(primary)、扩展分区(extended,占用所有剩余空间)、逻辑分区(logical)。
      • 最大支持容量为 2.2TB 的磁盘
      • 可以有一个扩展分区(其不能被格式化,其空间不能直接存储数据,用来建立逻辑分区)。逻辑分区可以有无限个,只能建立在扩展分区之上,可以存储数据。
      • 常用分区模式:4个主分区;3个主分区+1个扩展分区(n个逻辑分区,逻辑分区从5起计)。可以2个主分区+1个扩展分区+n个逻辑分区。
      • 读写速度主分区比逻辑分区快。
    • GPT(gpt,GUID Partition Table,GUID全局唯一标识符)分区模式
      • 支持128个主分区,最大支持18EB(1024*1024TB)磁盘。
    • GPT和MBR不能同时作用于同一块硬盘。
fdisk命令
  • fdisk 硬盘(fixed disk):给该硬盘分区。默认使用MBR分区模式(按o),按g使用GPT分区模式。
    常用的交互式指令(Ctrl+C退出):
    • n(new):新建分区。(起始点和结束点可以用数字G,也可以用百分比)
    • d(delete):删除分区。
      • 从后往前依次删除分区。例如:共三个分区,要删除第三个分区直接删除就可以,要删除第一个分区,需要先依次删除第三第二第一分区。
    • p(print):查看现有的分区表。
    • i(information):查看具体分区的信息。
    • w(write):保存修改并退出。
    • q(quit):放弃更改并退出。
  • partprobe 硬盘:强制内核识别分区表。当进行新建修改删除分区操作后,计算机没有相应地识别分区时,可以用该命令刷新计算机对分区表的识别。
// fdisk命令分区之 MBR分区模式/dev/vdb
[root@local ~]# fdisk /dev/vdb
    欢迎使用 fdisk(util-linux 2.32.1)。
	更改将停留在内存中,直到您决定将更改写入磁盘。
	使用写入命令前请三思。
    设备不包含可识别的分区表。
    创建了一个磁盘标识符为 0xcb4115ec 的新 DOS 磁盘标签。
    
    命令(输入 m 获取帮助):n
    分区类型
    	p 主分区(0个主分区,0个扩展分区,4空闲)
    	e 扩展分区(逻辑分区容器)
    选择(默认 p):						// 回车
    分区号(1-4,默认 1):					// 回车,当前新建分区编号
    第一个扇区(2048-41943039,默认 2048// 回车,当前新建分区扇区起始点
    上个扇区,+sectors 或 +size{K,M,G,T,P}2048-41943039,默认 41943039):+1G	// 当前新建分区扇区终点
    创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
    
    命令(输入 m 获取帮助):n
    分区类型
    	p 主分区(0个主分区,0个扩展分区,4空闲)
    	e 扩展分区(逻辑分区容器)
    选择(默认 p):							// 回车
    分区号(2-4,默认 2):						// 回车
    第一个扇区(2099200-41943039,默认 2099200// 回车
    上个扇区,+sectors 或 +size{K,M,G,T,P}2048-41943039,默认 41943039):+2G	
    创建了一个新分区 2,类型为“Linux”,大小为 2 GiB。
    
	命令(输入 m 获取帮助):p
    Disk /dev/vdb:20 GiB21474836480 字节,41943040 个扇区。
    单元:扇区 / 1 * 512 = 512 字节
	扇区大小(逻辑/物理):512 字节 / 512 字节
	I/O大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos											// MBR模式磁盘标签类型dos
    磁盘标识符:0xcb115ec
	设备			启动		起点		末尾		 扇区		大小	ID	类型
    /dev/vdb1		  	   2048 	2099199	  2097152	1G	83	Linux
	/dev/vdb2			2099200 	6293503	  4194304	2G	83	Linux
    
    命令(输入 m 获取帮助):w
    分区表已调整。
    将调用 ioctl() 来重新读分区表。
    正在同步磁盘。
    
[root@local ~]# lsblk /dev/vdb[1-2]
    NAME	MAJMIN	RM	SIZE	RO	TYPE	MOUNTPOINT
    vdb1	25217	0	1G		0	part	
	vdb2	25218	0	2G		0	part
// fdisk命令分区之 GPT分区模式/dev/vdc
[root@local ~]# fdisk /dev/vdc
    欢迎使用 fdisk(util-linux 2.32.1)。
	更改将停留在内存中,直到您决定将更改写入磁盘。
	使用写入命令前请三思。
    设备不包含可识别的分区表。
    创建了一个磁盘标识符为 0x2b5241c2 的新 DOS 磁盘标签。
    
    命令(输入 m 获取帮助):g
    已创建新的 GPT 磁盘标签(GUID04A9776A-6736-1543-A538-3C6D23504DF5)。
    
    命令(输入 m 获取帮助):n
    分区号(1-128,默认 1):				// 回车,当前新建分区编号
    第一个扇区(2048-41943039,默认 2048// 回车,当前新建分区扇区起始点
    上个扇区,+sectors 或 +size{K,M,G,T,P}2048-41943039,默认 41943039):+1G	// 当前新建分区扇区终点
    创建了一个新分区 1,类型为“Linux filesystem”,大小为 1 GiB。
    
    命令(输入 m 获取帮助):n
    分区号(2-128,默认 2):					// 回车
    第一个扇区(2099200-41943039,默认 2099200// 回车
    上个扇区,+sectors 或 +size{K,M,G,T,P}2048-41943039,默认 41943039):+2G	
    创建了一个新分区 2,类型为“Linux filesystem”,大小为 2 GiB。
    
	命令(输入 m 获取帮助):p
    Disk /dev/vdc:20 GiB21474836480 字节,41943040 个扇区。
    单元:扇区 / 1 * 512 = 512 字节
	扇区大小(逻辑/物理):512 字节 / 512 字节
	I/O大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:gpt									// GPT模式磁盘标签类型gpt
    磁盘标识符:04A9776A-6736-1543-A538-3C6D23504DF5
	设备			起点		末尾		 扇区		大小	ID	类型
    /dev/vdc1  	   2048 	2099199	  2097152	1G	83	Linux 文件系统
	/dev/vdc2	2099200 	6293503	  4194304	2G	83	Linux 文件系统
    
    命令(输入 m 获取帮助):w
    分区表已调整。
    将调用 ioctl() 来重新读分区表。
    正在同步磁盘。
    
[root@local ~]# lsblk /dev/vdc[1-2]
    NAME	MAJMIN	RM	SIZE	RO	TYPE	MOUNTPOINT
    vdc1	25265	0	1G		0	part	
	vdc2	25266	0	2G		0	part
// 创建逻辑分区(逻辑分区产自扩展分区)/dev/vdd 
[root@local ~]# fdisk /dev/vdd   
	p 查看分区表
    n 创建主分区回车--->回车--->回车--->上个扇区 +2G
    n 创建主分区回车--->回车--->回车--->上个扇区 +2G
    n 创建主分区回车--->回车--->回车--->上个扇区 +2G
    p 查看分区表
    n 创建扩展分区回车--->回车--->上个扇区 回车   // 将所有剩余空间给扩展分区
    p 查看分区表
	n 创建逻辑分区--->回车--->上个扇区 +2G
	n 创建逻辑分区--->回车--->上个扇区 +2G
	n 创建逻辑分区--->回车--->上个扇区 回车
	p 查看分区表
	    设备			起点		末尾		 扇区		大小	ID	类型
    /dev/vdd1  	   2048 	4196351	  4194304	1G	83	Linux 
	/dev/vdd2	4196351 	8390655	  4194304	2G	83	Linux 
	/dev/vdd3	8390655		12584959  4194304	2G	83	Linux
	/dev/vdd4	12584959	41943039  29358080	14G	 5	扩展
	/dev/vdd5	12587008	16781311  4194304	2G	83	Linux
	/dev/vdd6	16781311	20977663  4194304	2G	83	Linux
	/dev/vdd7	20977663	41943039  20963328	10G	83	Linux
	w 保存并退出
[root@local ~]# lsblk				// 查看设备
[root@local ~]# parted /dev/vdd
    (parted) print  					// 查看分区类型
    Number 	Start 	End 	Size 	Type 	File system 	标志
    1		1049kB	2149MB	2147MB	primary
    2		2149MB	4296MB	2147MB	primary
    3		4296MB	6443MB	2147MB	primary
    4		6443MB	21.5GB	15.0MB	extended
    5		6443MB	8593MB	2147MB	logical
    6		8593MB	10.7GB	2147MB	logical
    7		10.7GB	21.5GB	10.7GB	logical
    (parted)quit
parted命令
  • 除了 fdisk命令之外,也可以用 parted命令给硬盘分区。
  • parted 硬盘:给硬盘分区。
    常用的交互式指令:
    • help:查看指令帮助。
    • mktable 模式:建立指定模式的分区表。模式:msdos(MBR)或gpt(GPT)。
    • mkpart:交互式分区。(起始点和结束点可以用数字G,也可以用百分比)
      mkpart 分区的名称 文件系统类型 start end:非交互式分区。
    • print:查看分区表。
    • unit GB:大小使用GB显示
    • rm 分区序号:删除指定的分区。
    • quit:退出交互环境。
  • 非交互式:
    • parted 硬盘 mktable msdos或gpt:建立指定模式(msdos或gpt)的分区表。
    • parted 硬盘 print:查看分区表。
    • parted 硬盘 mkpart 分区的名称 start end:分区。
// parted命令分区之 GPT模式
[root@local ~]# parted /dev/vde
    (parted) mktable gpt			// 指定分区模式为GPT。MBR模式为msdos
    
    // 交互式分区
    (parted) mkpart					// 划分新的分区 
    分区名称? []? haha				// 随意写,不写也可以
    文件系统类型? [ext2]? ext4		// 随意写,不会进行格式化
    起始点? 0 
    结束点? 5G 					// 也可以写百分比,是下一个分区的起始点
    // 也可以非交互式分区 (parted) mkpart haha ext4 0 5G
    忽略/Ignore/放弃/Cancel? Ignore		// 选择忽略,输入i(tab)补全
    
    (parted) print				// 查看分区表信息
	Number Start	End		Size	File system		Name	标志
	1		17.4kB	5000MB	5000MB	ext4			haha
    (parted) unit GB			// 使用GB作为单位
	(parted) print 
    Number Start	End		Size	File system		Name	标志
	1		0.00GB	5.00GB	5.00GB	ext4			haha
    
    // 非交互式分区,注意起始点时上一个分区的结束点
    (parted) mkpart	haha ext4 5G 100%	// 划分新的分区  
    
    (parted) print  
	Number Start	End		Size	File system		Name	标志
	1		0.00GB	5.00GB	5.00GB	ext4			haha
	2		5.00GB	21.50GB	16.50GB	ext4			haha            
    (parted) quit				// 退出
[root@local ~]# lsblk 

格式化 mkfs

格式化
  • 格式化:赋予空间文件系统的过程。
    • 例如:使用磁盘空间和家庭装修的类比:分区规划就是垒墙划分使用区域。格式化就是打扫区域并设定基本摆放格局。
  • 文件系统:数据在空间中存放的规则。
    • Windows常见的文件系统类型:NTFS、FAT(兼容性强,但功能小)
    • Linux常见的文件系统类型:ext4(单个数据小,Linux 6系列)、xfs(单个数据大,Linux 7系列以上)、FAT
mkfs命令
  • mkfs.文件系统类型 硬盘的分区(make file system):格式化该分区,指定文件系统类型

    • mkfs.xfs:指定文件系统类型为xfs。
      mkfs.ext3:指定文件系统类型为ext3。
      mkfs.ext4:指定文件系统类型为ext4。
      mkfs.vfat
  • blkid 硬盘的分区(block id):查看该分区文件系统类型(TYPE=)。
    blkid:查看所有分区文件系统类型

// 格式化mkfs,以硬盘/dev/vdb为例
[root@local ~]# mkfs.    			// 连续按两次tab键,查看文件系统类型种类
	mkfs  		mkfs.ext2 	mkfs.ext4  	mkfs.minix  mkfs.vfat
    mkfs.cramfs mkfs.ext3  	mkfs.fat  	mkfs.msdos  mkfs.xfs
[root@local ~]# mkfs.ext4 /dev/vdb1    // 格式化文件系统ext4
[root@local ~]# mkfs.xfs /dev/vdb2     // 格式化文件系统xfs 
[root@local ~]# blkid /dev/vdb1    // 查看文件系统类型  
	/dev/vdb1:UUID="40613385-3ebd-4773-997b-5b2bd5a5bb02" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="cb41115ec-01"
[root@local ~]# blkid /dev/vdb2    // 查看文件系统类型
	/dev/vdb2:UUID="2ebf6086-d03f-4b66-bb35-00cb8f9b1d79" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="cb41115ec02"
[root@local ~]# mkfs.xfs -f /dev/vdb1  // 强制覆盖格式化文件系统xfs
[root@local ~]# blkid /dev/vdb1
	/dev/vdb2:UUID="472c8d86-864b-4689-9346-f8bb97a7b046" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="cb41115ec02-01"

挂载使用

临时挂载分区 mount
  • mount 硬盘分区 挂载点:挂载使用该硬盘分区。

  • lsblk 设备路径:查看设备和设备挂载点。

  • df -h 挂载点1 挂载点2(disk free,human-readable):查看挂载点挂载的设备以及使用情况。

    • -T(print-Type)选项:显示文件系统类型。
      -t(Type)选项:查看特定文件系统类型。
  • 数据写入的分区:

    • 挂载成功后,在挂载点目录写数据会储存到实际挂载的分区。

    • 没有挂载设备的目录,就会占用根分区的空间。

      • 当根分区快满了,找到空目录挂载新分区,在空目录下的内容只占用挂载的新分区空间。
      • 挂载设备后,挂载点原内容不可见,写在在根分区,卸载设备后,可见挂载点原内容。
// 临时挂载分区,以硬盘/dev/vdb为例
[root@local ~]# mkdir /myb1 /myb2
[root@local ~]# mount /dev/vdb1 /myb1
[root@local ~]# mount /dev/vdb2 /myb2
[root@local ~]# df -h /myb1 /myb2  // 查看该挂载点挂载的设备以及使用情况
	文件系统		容量	已用	可用	已用%	挂载点
    /dev/vdb1	1014M	40M	 975M	4%	/myb1
	/dev/vdb2	 2.0G	47M	 2.0G	3%	/myb2
开机自动挂载 mount -a
  • 开机自动挂载的步骤:编写vim /etc/fstab;使用mount -a检验;无问题重启系统。如果重启系统有问题,登录root后vim /etc/fstab,注释掉编写的内容后重启系统。

  • /etc/fstab(file system table):开机自动运行的配置文件。

    • 编写内容:
      设备:/dev/sdb1blkid /dev/sdb1中的UUID可以代表设备。
      挂载点。
      文件系统类型(要对应) :blkid /dev/sdb1中的TYPE。
      挂载的功能参数:一般写defaults。
      备份标记:一般写0。(0代表不做dump备份)
      检测顺序:一般写0。(0代表不检测)
  • mount -a(all):检验/etc/fastb中自动挂载的书写,没有问题则没有屏幕输出并自动挂载。

// 开机自动挂载,以硬盘/dev/vdb为例
[root@local ~]# blkid /dev/vdb1   // 查看文件系统类型,返回xfs
[root@local ~]# blkid /dev/vdb2   // 查看文件系统类型,返回xfs
[root@local ~]# vim /etc/fstab
	//设备 	 挂载点 	文件系统类型 	local 	备份标记 检测标记
	/dev/vdb1 /myb1 	xfs  		defaults  	0 		0
	/dev/vdb2 /myb2 	xfs  		defaults  	0 		0
[root@local ~]# mount -a
[root@local ~]# reboot				// 成功重启
// 如果重启失败,登录root进行vim /etc/fstab,注释掉自己编写的内容,reboot重启
// 查看自动挂载的效果
[root@local ~]# lsblk
[root@local ~]# df -h 				// 如果忘记挂载点可以使用df查询
[root@local ~]# umount /myb*		// 卸掉原先的挂载,以备查看自动挂载有无成功
[root@local ~]# df -h 				// 也可以 df -h | grep /myb*
	文件系统			容量	已用		可用	已用%	挂载点
	/dev/mapper/r1-root 17G  4.9G	13G		29%	/	
	/dev/vda1		  1014M  255M	760M	26%	/boot  		
[root@local ~]# mount -a /myb*
[root@local ~]# df -h /myb*			// 也可以 df -h | grep /myb*
	文件系统	容量	已用		可用	已用%	挂载点
	/dev/vdb1 1014M  40M	975M	4%	/myb1	
	/dev/vdb2 2.0G  47M		2.0G	3%	/myb2
查看挂载和文件系统类型
  • 设置开机自动挂载后,如果重启开机出现问题,登录root账号后,vim /etc/fstab注释掉自己编写的内容(设备,挂载点,文件系统类型,功能参数defaults,备份标记0,检测顺序0)。
    正常重启开机后,从以下两个方面来排查问题:
    • 查看挂载点的编写:
      • lsblk [设备](list block):查看设备和设备挂载点。
      • df -h [挂载点](disk full):查看挂载点挂载的设备以及使用情况。省略目录则是所有挂载点挂载的设备以及使用情况。
        • -T(type)选项:显示设备文件系统类型。
    • 查看文件系统类型的编写:
      • blkid 目录(block id):查看该目录(多个硬盘分区)的文件系统类型"TYPE="。省略目录则是所有硬盘分区的文件系统类型。
      • df -Th

交换空间 (虚拟内存)

  • 交换空间(swap,又叫虚拟内存):利用硬盘的空间,充当内存的空间。
    • 当物理内存占满了,可以将内存的数据,暂时放入交换空间中,缓解真实物理内存的压力。

查看交换空间

  • swapon:查看交换空间(虚拟内存)的详细信息。
  • free -h(human-readable):查看内存和交换空间(虚拟内存)的总体使用情况。

制作交换空间

  • mkswap 硬盘的分区:格式化分区,指定文件系统类型为swap
  • swapon 空间:将该空间(文件系统类型为swap)启用为交换空间。
  • swapoff 空间 :停用该交换空间。
// 制作交换空间/dev/vde2
[root@local ~]#  ls /dev/vde2             
[root@local ~]#  mkswap /dev/vde2   // 指定文件系统类型为swap
[root@local ~]#  blkid /dev/vde2    // 查看文件系统类型,返回文件系统类型为swap
[root@local ~]#  swapon   			// 查看交换空间的详细信息
    NAME		TYPE		SIZE	USED	PRIO
	/dev/dm-1	partition	2G		91.4M	-2
[root@local ~]#  swapon /dev/vde2 	// 启用交换分区/dev/vde2
[root@local ~]#  swapon
    NAME		TYPE		SIZE	USED	PRIO
	/dev/dm-1	partition	2G		91.4M	-2
	/dev/vde2	partition	15.3G	0B		-3
[root@local ~]#  free -h 			// 查看内存总体使用情况
			total	used	free	shared	buff/cache	available
    Mem:	1.3Gi	752Mi	88Mi	8.0Mi		467Mi		404Mi	// 该虚拟机的内存
	Swap:	17Gi	98Mi	17Gi									// 该虚拟机的交换空间
[root@local ~]#  swapoff /dev/vde2  // 停用交换分区/dev/vde2
[root@local ~]#  swapon
    NAME		TYPE		SIZE	USED	PRIO
	/dev/dm-1	partition	2G		91.4M	-2
[root@local ~]#  free -h 			// 查看内存总体使用情况
			total	used	free	shared	buff/cache	available
    Mem:	1.3Gi	752Mi	88Mi	8.0Mi		467Mi		404Mi
	Swap:	2.0Gi	98Mi	1.9Gi

开机自动启用交换空间 swapon -a

  • 开机自动启用交换空间的步骤:编写vim /etc/fstab;使用swapon -a检验;无问题重启系统。

  • /etc/fstab:开机自动运行的配置文件。

    • 编写内容:
      交换空间:/dev/sdb1blkid /dev/sdb1中的UUID可以代表设备。
      swap:none或swap注意这里和开机自动挂载不一样
      文件系统类型(要对应) :swap
      功能参数:一般写defaults
      备份标记:一般写0
      检测顺序:一般写0
  • swapon -a检测/etc/fstab中交换空间的书写。没有问题则没有屏幕输出并自动挂载。

// 开机自动启用交换空间
[root@local ~]# mkswap /dev/vde2    // 指定文件系统类型为swap
// 开机自动启用交换空间
[root@local ~]# vim /etc/fstab   #增加一行信息
	/dev/vde2 swap swap defaults 0 0
[root@local ~]# swapon 				// 查看交换空间详细信息
[root@local ~]# swapon  -a   		// 检测/etc/fstab的书写
[root@local ~]# swapon
[root@local ~]# reboot 				// 重启测试

交换文件

  • 交换空间(虚拟内存):当物理内存不够用时,使用磁盘空间来模拟内存。
    • 交换空间可以是空闲分区,也可以是逻辑卷。
  • 交换文件:以较大体积充当交换空间的文件
  • 创建启用交换文件的步骤
    1. 创建较大文件:dd if=源文件路径 of=目标文件路径 bs=大小 count=次数:读取源文件内容写入目标文件。
      • bs(block size)是单次读取的大小,count是读取的次数。建议bs=1M,单次读取速度较快。
      • 目标文件可不存在,但父目录需要存在
      • /dev/zero:该文件会不断产生0,可被dd命令作为源文件使用来创建较大的文件。
    2. 格式化该文件:mkswap 文件路径
    3. 启用该文件为交换空间(该文件权限需为600):swapon 文件路径
    4. 可设置开机自动启用交换文件:文件路径 none swap sw 0 0
      • 注意功能参数为sw
  • 删除交换文件需要注意:删除 /etc/fstab 中的开机启用,停止交换文件的启用。
// 交换文件
// 创建大文件
]# dd if=/dev/zero of=/opt/sw.txt bs=1M count=2048
    记录了2048+0 的读入
    记录了2048+0 的写出
    2147483648 bytes (2.1 GB, 2.0 GiB) copied, 6.22704 s, 345 MB/s
]# ls -l /opt/sw.txt 
	-rw-r--r--. 1 root root 2147483648 73 08:58 /opt/sw.txt
// 格式化为交换文件
]# mkswap /opt/sw.txt 
    mkswap: /opt/sw.txt:不安全的权限 0644,建议使用 0600。
    正在设置交换空间版本 1,大小 = 2 GiB (2147479552  个字节)
    无标签,UUID=888c6cb2-da52-4beb-a028-bc3f1e9dfd9b
]# blkid /opt/sw.txt
	/opt/sw.txt: UUID="888c6cb2-da52-4beb-a028-bc3f1e9dfd9b" TYPE="swap"
]# swapon
	NAME      TYPE      SIZE USED PRIO
	/dev/dm-1 partition   2G 268K   -2
// 启用交换文件
]# swapon /opt/sw.txt
	swapon: /opt/sw.txt:不安全的权限 0644,建议使用 0600]# chmod 600 /opt/sw.txt
]# ls -l /opt/sw.txt
	-rw-------. 1 root root 2147483648 73 08:59 /opt/sw.txt
]# swapoff /opt/sw.txt 
]# swapon /opt/sw.txt
]# swapon
    NAME        TYPE      SIZE USED PRIO
    /dev/dm-1   partition   2G 360K   -2
    /opt/sw.txt file        2G   0B   -3

// 开机自动启用交换文件
]# echo "/opt/sw.txt none swap sw 0 0" >> /etc/fstab
]# swapoff /opt/sw.txt
]# swapon
    NAME      TYPE      SIZE USED PRIO
    /dev/dm-1 partition   2G 352K   -2
]# swapon -a
]# swapon
    NAME        TYPE      SIZE USED PRIO
    /dev/dm-1   partition   2G 352K   -2
    /opt/sw.txt file        2G   0B   -3

// 注意:设置开机自动启用交换文件后,若要删除该交换文件,需要先删除其在/etc/fstab中的配置
]# rm -rf /opt/sw.txt 
	rm: 无法删除'/opt/sw.txt': 不允许的操作
]# vim /etc/fstab	// 删除"/opt/sw.txt none swap sw 0 0"
]# swapoff /opt/sw.txt
]# rm -rf /opt/sw.txt 

KVM虚拟机的硬盘问题

  • KVM虚拟机(真机为Linux系统):一切皆文件,真机会创建一个大文件,充当虚拟机的硬盘。
    • 真机中存放虚拟机硬盘文件的父目录:/var/lib/libvirt/images
    • 删除虚拟机硬盘时,需要管理员手动删除对应的硬盘文件,否则继续占用真机空间。
    • 虚拟机还原快照不会删除新添加硬盘的硬盘文件,需要在真机上操作,删除不用的硬盘文件。
    • 直接删除硬盘之前(不还原快照),要查看开机自动启用配置文件/etc/fstab,避免删除了自动挂载的设备导致开机异常。
// 真机上操作,删除不用的硬盘文件
[root@server1 ~]# cd /var/lib/libvirt/images	// 虚拟机硬盘在真机的父目录
[root@server1 images]# ls						// 查看虚拟机硬盘
    // 有多余的硬盘文件可以删除,删除之前要"vim /etc/fstab"查看开机自动挂载的设备
[root@server1 images]# df -h / 					// 查看根目录的使用情况
	文件系统	容量		已用	可用	已用%	挂载点
    /dev/sda1	466G	95G	 371G  21%	/		// 发现根目录也是个挂载点

逻辑卷

  • 逻辑卷所需软件:lvm2

  • 物理卷(PV,physical volume):组建卷组的零散存储空间。
    卷组(VG,volume group,也叫虚拟硬盘):会清空物理卷原有的数据。
    逻辑卷(LV,logical volume):由卷组划分出来的可以存储数据的空间。

  • 逻辑卷制作过程:将一个或多个的物理卷(整个分区(主分区或逻辑分区)或整个硬盘)组建成卷组,再从卷组中划分出逻辑卷。卷组划分出的逻辑卷可以是一个到多个。

    • 逻辑卷的优点:整合分散的空间;空间支持扩大。
    • 逻辑卷的缺点:
      • 物理卷损坏会影响卷组,卷组损坏会影响逻辑卷。
      • 读取逻辑卷的速度低于读取普通硬盘空间。
  • 逻辑卷默认的目录:/dev/dm-数字(第一个逻辑卷/dev/dm-0,第二个逻辑卷/dev/dm-1)。
    逻辑卷两个快捷方式:/dev/卷组名/逻辑卷名/dev/mapper/卷组名-逻辑卷名
    ls -l 逻辑卷快捷方式:查看快捷方式指向的逻辑卷的目录/dev/dm-数字
    请添加图片描述

LVM命令

  • 逻辑卷管理(LVM,logical volume manger)
功能物理卷管理PV卷组管理VG逻辑卷管理LV
Scan 扫描pvsvgslvs
Create 创建pvcreatevgcreatelvcreate
Display 显示pvdisplayvgdisplaylvdisplay
Remove 删除pvremovevgremovelvremove
Extend 扩展/vgextendlvextend

逻辑卷的建立、使用、扩展

  • 逻辑卷的建立需要先建立物理卷和卷组。
    逻辑卷的使用需要格式化后挂载。
    逻辑卷的扩展需要卷组有足够的可用空间支持扩展,并且要格式化扩增的空间
  • 逻辑卷默认的目录:/dev/dm-数字(第一个逻辑卷/dev/dm-0,第二个逻辑卷/dev/dm-1)。
    逻辑卷两个快捷方式:/dev/卷组名/逻辑卷名/dev/mapper/卷组名-逻辑卷名
    ls -l 逻辑卷快捷方式:查看快捷方式指向的逻辑卷的目录/dev/dm-数字
逻辑卷的建立
  • 建立命令:
    • pvcreate 多个硬盘或分区的目录:将硬盘或分区建立为物理卷。硬盘或分区最好是空白的。
    • vgcreate 卷组名 多个物理卷的目录:以物理卷建立该卷组。
      • Linux系统老系列需要先 pvcreate命令建立物理卷,再 vgcreate命令建立卷组。新系列可以直接vgcreate 卷组名 多个硬盘或分区的目录 来建立卷组。
    • lvcreate -L 大小 -n 逻辑卷名 卷组名(large,name):在该卷组划分该逻辑卷并指定大小。
  • 查看命令:
    • pvs:查看系统所有物理卷的信息(所属卷组,大小,可用大小)。
    • vgs:查看系统所有卷组的信息(物理卷个数,逻辑卷个数,大小,可用大小)。
    • lvs:查看系统所有逻辑卷的信息(所属卷组,大小)。
    • df -h 逻辑卷的挂载点:查看挂载点的挂载设备及其详细信息(挂载的逻辑卷,文件系统大小,可用大小)。
    • pvdisplay:查看系统所有物理卷的详细信息。
    • vgdispaly:查看系统所有卷组的详细信息。
    • lvdisplay:查看系统所有逻辑卷的详细信息。
逻辑卷的使用
  • 格式化:
    • mkfs.文件系统类型 逻辑卷路径:指定逻辑卷的文件系统类型。
    • blkid 逻辑卷路径:查看文件系统类型。
  • 挂载:
    • vim /etc/fstab:编写开机自动挂载(设备,挂载点,文件系统类型,功能参数defaults,备份标记0,检测顺序0)。
    • mkdir 挂载点:创建编写的挂载点。
    • mount -a:检测/etc/fstab 配置文件的书写并挂载。
    • df -h 挂载点:查看挂载点的挂载设备。
逻辑卷的扩展
  • 扩展的步骤:

    1. lvsdf 命令查看逻辑卷的大小,确定要扩增的容量(或扩展后的大小)。
    2. vg 命令查看卷组的可用大小是否支持扩展,如果容量不够,扩展卷组:vgextend 卷组名 硬盘或分区的目录
    3. 扩展逻辑卷:lvextend -L 目标大小 逻辑卷目录 ,目标大小也可写作 +增量,逻辑卷目录可以使用快捷方式 /dev/卷组名/逻辑卷名
    4. 扩展逻辑卷后,空间大小(使用lvs命令查看)会变大,但扩增的部分没有指定文件系统类型,因此文件系统的大小(使用df命令查看)没有变。
      需要扩展逻辑卷的文件系统(刷新文件系统):
      • xfs_growfs 逻辑卷目录(刷新xfs文件系统)
      • resize2fs 逻辑卷目录(刷新ext4文件系统)
    5. lvsdf 命令查看逻辑卷大小与文件系统大小是否一致。
  • 逻辑卷支持缩减变小,但不建议,可能导致已有数据的丢失。

代码示例
// 逻辑卷的建立、使用、扩展
// 环境准备,添加一块80G的硬盘/dev/vdb,分为三个10G的主分区和两个20G的逻辑分区

// 建立卷组vgcreate
/*
 * [root@local ~]# pvcreate /dev/vdb{3,5}			// 建立物理卷pvcreate
 * 		Physical volume "/dev/vdb3" successfully created.
 * 		Physical volume "/dev/vdb5" successfully created.
 * 	// 老的Linux系统系列制作逻辑卷需要先pvcreate,新系统系列可以直接vgcreate。
*/
[root@local ~]# vgcreate systemvg /dev/vdb[1-2]		// 建立卷组vgcreate,卷组名systemvg,使用逻辑卷/dev/vdb[1-2]
	Physical volume "/dev/vdb1" successfully created.	// 在较新的系统系列,未成为物理卷的空间会自动创建物理卷
	Physical volume "/dev/vdb2" successfully created.
	Volume group "systemvg"	successfully created.
[root@local ~]# pvs					// 查看系统的所有物理卷信息
	PV			VG			Fmt		Attr	PSize		PFree	// PSize物理卷大小,PFree物理卷可用大小
	/dev/vda2	r1			lvm2	a--		<19.00g			0	// 第一个物理卷/dev/vda2,所属卷组rl,可用大小无剩余
	/dev/vdb1	systemvg	lvm2	a--		<10.00g		<10.00g	// 第二个物理卷/dev/vdb1,所属卷组systemvg
	/dev/vdb2	systemvg	lvm2	a--		<10.00g		<10.00g	
[root@local ~]# vgs					// 查看系统的卷组信息  
	VG			#PV	#LV	#SN	Attr	VSize	VFree	// #PV包含的物理卷数量,#LV划分的逻辑卷数量,VSize卷组大小,VFree卷组可用大小
	r1			1	2	0	wz--n-	<19.00g		0	// 第一个卷组r1,包含1个物理卷,划分了2个逻辑卷,可用大小无剩余。
	systemvg	2	0	0	wz--n-	19.99g	19.99g	// 第二个卷组systmevg,包含2个物理卷,未划分逻辑卷
    
// 建立逻辑卷lvcreate
[root@local ~]# lvcreate -L 16G -n vo systemvg		// 建立逻辑卷lvcreate,-L大小16G,-n卷名vo,所属卷组systemvg
	Logical volume "vo" created.
[root@local ~]# vgs					// 查看系统的卷组信息 
	VG			#PV	#LV	#SN	Attr	VSize	VFree	
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	2	1	0	wz--n-	19.99g	3.99g	// systemvg卷组,划分了一个逻辑卷,剩余可用大小19.99-16=3.99g
[root@local ~]# lvs					// 查看系统的逻辑卷信息。一共有三个逻辑卷,rl卷组下的root和swap,systemvg卷组下的vo
	LV		VG		 Attr		LSize	Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    root	rl		 -wi-ao----	<17.00g							// 第一个逻辑卷root,所属卷组rl。
    swap	rl		 -wi-ao----	  2.00g							// 第二个逻辑卷swap,所属卷组rl。		
    vo		systemvg -wi-a-----	 16.00g							// 第三个逻辑卷vo,空间大小16.00g
[root@local ~]# ls -l /dev/rl/root					// /dev/rl/root是第一个逻辑卷/dev/dm-0的快捷方式
    lrwxrwxrwx. 1 root root 7 68 09:13 /dev/rl/root -> ../dm-0	
[root@local ~]# ls -l /dev/systemvg/vo				// /dev/systemvg/vo是第三个逻辑卷/dev/dm-2的快捷方式
    lrwxrwxrwx. 1 root root 7 68 10:36 /dev/systemvg/vo -> ../dm-2	
 
// 使用逻辑卷(格式化并挂载)mkfs.*
[root@local ~]# mkfs.xfs /dev/systemvg/vo	// 格式化(指定文件系统类型)
[root@local ~]# blkid /dev/systemvg/vo		// 查看文件系统类型
	/dev/systemvg/vo:UUID="leeaalaf2-63cf-4cb5-balf-46abf9a0660c" BLOCK_SIZE="512" TYPE="xfs"
[root@local ~]# vim /etc/fatab				// 编写开机自动挂载
    /dev/systemvg/vo /mylv xfs defaults 0 0		// 设备,挂载点,文件系统类型,功能参数,备份标记,检测顺序。
[root@local ~]# mkdir /mylv					// 创建编写的挂载点
[root@local ~]# mount -a					// 检验编写,挂载
[root@local ~]# df -h /mylv					// 查看挂载的设备及其详细情况
	文件系统			容量	已用	可用	已用	挂载点
	/dev/systemvg/vo	16G	147M  16G	1%	/mylv	// mylv目录挂载了/dev/systemvg/vo,文件系统大小16G。
        
// 扩展逻辑卷lvextend,vo在原有16G的基础上,扩展到18G,也就是+2G
[root@local ~]# df -h | grep vo				// 查看vo逻辑卷的文件系统大小(一般是和空间大小一致)
	/dev/mapper/systemvg-vo 16G 147M	16G	1%	/mylv
[root@local ~]# vgs							// 查看系统的卷组信息
	VG			#PV	#LV	#SN	Attr	VSize	VFree
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	2	1	0	wz--n-	19.99g	3.99g	// systemvg卷组还有3.99g可用。
[root@local ~]# lvextend -L 18G /dev/systemvg/vo	// 扩展逻辑卷的空间大小到18G,这里"18G"也可用"+2G"
	Size of logical volume systemvg/vo changed from 16.00 GiB4096to 18.00 GiB4608 extends.	
	Logical volume systemvg/vo successfully resized.
[root@local ~]# vgs
	VG			#PV	#LV	#SN	Attr	VSize	VFree
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	2	1	0	wz--n-	19.99g	1.99g	// systemvg卷组还有1.99g可用。
[root@local ~]# lvs | grep vo				// 查看vo逻辑卷的空间大小
	vo	systemvg	-wi-ao----	18.00g
[root@local ~]# df -h | grep vo				// 查看vo逻辑卷的文件系统大小(一般是和空间大小一致)
	/dev/mapper/systemvg-vo 16G 147M	16G	1%	/mylv	// 文件系统大小16G,新扩展的2G没有格式化(指定文件系统类型)
// 扩展逻辑卷的文件系统,也叫刷新文件系统。逻辑卷文件类型是xfs使用xfs_growfs命令,是etx4使用resize2fs命令。
[root@local ~]# xfs_growfs  /dev/systemvg/vo
	data blocks changed from 4194304 to 4718592
[root@local ~]# df -h | grep vo				// 查看vo逻辑卷的文件系统大小
	/dev/mapper/systemvg-vo 18G 161M	18G	1%	/mylv	// 文件系统大小18G,同空间大小一致
        
// 若扩展逻辑卷时卷组可用大小不足,需先扩展卷组vgextend
[root@local ~]# vgextend systemvg /dev/vdb{3,5,6}	// 扩展卷组vgextend,增加物理卷/dev/vdb{3,5,6}
[root@local ~]# vgs							// 查看系统的卷组信息
	VG			#PV	#LV	#SN	Attr	VSize	VFree
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	5	1	0	wz--n-	69.98g	51.98g	// systemvg卷组的大小69.98g,可用大小51.98g
[root@local ~]# lvs | grep vo
	vo	systemvg	-wi-ao----	18.00g
[root@local ~]# lvextend -L 25G /dev/systemvg/vo	// 扩展vo逻辑卷至25G
	Size of logical volume systemvg/vo changed from 18.00 GiB4608to 25.00 GiB6400 extends.
	Logical volume systemvg/vo successfully resized.
[root@local ~]# vgs
	VG			#PV	#LV	#SN	Attr	VSize	VFree
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	5	1	0	wz--n-	69.98g	44.98g	// systemvg卷组的还有51.98-(25-18)=44.98g可用
[root@local ~]# df -h | grep vo					
	/dev/mapper/systemvg-vo 18G 161M	18G	1%	/mylv	// vo逻辑卷的文件系统大小18G,需要扩展到同空间大小一致
[root@local ~]# xfs_growfs /dev/systemvg/vo			// 扩展文件系统大小
[root@local ~]# df -h | grep vo
	/dev/mapper/systemvg-vo 25G 211M	25G	1%	/mylv

PE

  • PE(physical extent):是卷组划分逻辑卷的最小单元。
    • PE 默认是4M
      例如:划分一个250M大小的逻辑卷时,卷组会默认划分给该逻辑卷252M,因为离250M最近的被4M整除的大小是252M(给多不给少)。
  • PE相关命令:
    • vgdisplay 卷组名:查看该卷组的详细信息。可查看PE的大小。
    • vgchange -s 大小 卷组名(size):修改该卷组的PE为该大小。
    • vgcreate -s 大小 卷组名 多个物理卷的目录(size):创建该卷组,并指定PE为该大小。
    • lvcreate -l 数字 -n 逻辑卷名 卷组名:创建该逻辑卷,并指定逻辑卷大小为数字个PE。
    • lvcreate -L 大小 -n 逻辑卷名 卷组名(large,name):在该卷组划分该逻辑卷并指定大小。
// PE(卷组划分逻辑卷的最小单元)
// 请在卷组sysytemvg下创建一个大小为250M的逻辑卷lvredhat。
// 因为250M不能被4M整除,因此需要更改卷组的PE值
[root@local ~]# vgdisplay systemvg | grep PE	// 查看卷组的详细信息中的PE项
	PE Size		4.00 MiB						// systemvg卷组的PE默认为4M
[root@local ~]# vgchange -s 1M systemvg			// 修改卷组的PE大小为1M
    Volume group "systemvg" successfully changed.
[root@local ~]# vgdisplay systemvg | grep PE	// 查看卷组的详细信息
	PE Size		1.00 MiB						// systemvg卷组的PE为1M
[root@local ~]# lvcreate -L 250M -n lvredhat systemvg	// 创建250M的逻辑卷lvredhat
	Logical volume "lvredhat" created.
[root@local ~]# lvs | grep lvredhat				// 查看逻辑卷信息中的lvredhat项
	lvredhat systemvg -wi-a----- 250.00m		// 大小250MB
      
// 创建逻辑卷并指定大小为多少个PE大小
[root@local ~]# lvcreate -l 100 -n lvtest systemvg		// 创建100个PE大小的逻辑卷lvtest
	Logical volume "lvtest" created.
[root@local ~]# lvs | grep lvtest	

// 创建卷组并指定PE大小
// 新建大小10G的逻辑分区vdb7
[root@local ~]# vgcreate -s 2M vgtest /dev/vdb7	 
	Physical volume "/dev/vdb7" successfully created.
	Volume group "vgtest"  successfully created.
[root@local ~]# vgdisplay systemvg | grep PE
	PE Size		2.00 MiB

逻辑卷的删除

  • 删除逻辑卷的前提:卸载正在挂载使用的逻辑卷(如果有开机自动挂载记得在配置文件删除)。
  • lvremove 逻辑卷路径1 逻辑卷路径n:删除逻辑卷。
// 删除逻辑卷:如果使用了逻辑卷,要先卸载。如果有开机自动挂载,要删除编写的配置内容
// 删除逻辑卷/dev/systemvg/vo
[root@local ~]# lvremove /dev/systemvg/vo 
	  Logical volume systemvg/vo contains a filesystem in use.
[root@local ~]# df -h | grep vo			// 查找vo逻辑卷的挂载点
	/dev/mapper/systemvg-vo	18G	161M	18G	1%	/mylv
[root@local ~]# umount /mylv/			// 卸载挂载点
[root@local ~]# grep mylv /etc/fstab	// 查看是否有开机自动挂载
	/dev/systemvg/vo /mylv xfs defaults 0 0
[root@local ~]# vim /etc/fstab			// 删除vo逻辑卷的开机自动挂载
[root@local ~]# lvremove /dev/systemvg/vo
	Do you really want to remove active logical volume systemvg/vo? [y/n]: y
  	  Logical volume "vo" successfully removed.
[root@local ~]# lvremove -y /dev/systemvg/lvredhat 
	  Logical volume "vo" successfully removed.   
  • 删除卷组的前提:基于此卷组创建的所有逻辑卷,要全部删除。
    一般删除卷组后空闲的物理卷也删除掉。
  • vgremove 卷组名1 卷组名n:删除卷组。
  • pvremove 物理卷路径1 物理卷路径n:删除物理卷。
// 删除卷组:基于此卷组创建的所有逻辑卷,要全部删除
// 删除卷组/dev/systemvg
[root@local ~]# lvs | grep systemvg					// 查看systemvg卷组的所有逻辑卷
	lvredhat systemvg	……
	lvtest	 systemvg	……
[root@local ~]# lvremove -y /dev/systemvg/lv*		// 删除systemvg卷组的所有逻辑卷,刚好两个逻辑卷都是lv开头
[root@svr1 ~]# vgs									// 查看系统的所有卷组的信息
	VG			#PV	#LV	#SN	Attr	VSize	VFree
	r1			1	2	0	wz--n-	<19.00g		0
	systemvg	5	0	0	wz--n-	69.98g	69.98g	// 5个物理卷,划分逻辑卷0个,可用大小与空间大小一致69.98g
[root@svr1 ~]# vgremove systemvg					// 删除卷组
	Volume group "systemvg" successfully removed.
[root@svr1 ~]# pvs									// 查看系统的所有物理卷的信息
	PV			VG	Fmt		Attr	PSize		PFree
	/dev/vda2	r1	lvm2	a--		<19.00g			0
	/dev/vdb1		lvm2	---		<10.00g		<10.00g		// 所属卷组VG为空
	/dev/vdb2		lvm2	---		<10.00g		<10.00g	
	/dev/vdb3		lvm2	---		<10.00g		<10.00g	
	/dev/vdb5		lvm2	---		<20.00g		<20.00g	
	/dev/vdb6		lvm2	---		<20.00g		<20.00g	
[root@svr1 ~]# pvremove /dev/vdb{1,2,3,5,6}			// 删除空闲的物理卷
	Labels on physical volume "/dev/vdb1" successfully wiped.
	Labels on physical volume "/dev/vdb2" successfully wiped.
	Labels on physical volume "/dev/vdb3" successfully wiped.
	Labels on physical volume "/dev/vdb5" successfully wiped.
	Labels on physical volume "/dev/vdb6" successfully wiped.

进程管理

  • 程序:静态的没有执行的代码,占用硬盘空间。
    进程:动态的执行的代码,占用CPU与内存。提供功能的是进程。
  • 父进程与子进程:树型结构。
    • PID(process ID):进程编号。子进程PID比父进程大,且没有联系。
  • systemd(PID永远为1):所有进程的父进程,也叫上帝进程。

查看进程

  • 以下示例的前提准备:新开第二个终端,su切换到用户lisi,vim /haha.txt,在原第一个终端查看进程。
pstree 进程树
  • pstree [选项] 用户名(processes tree):查看该用户开始的进程树。省略用户则是所有进程。
  • pstree [选项] 进程号:查看该进程的进程树
    • -p:显示PID。
    • -a:显示命令的完整指令。
// pstree -p、-a 查看进程
[root@local ~]# pstree			// 显示正在运行的所有进程
[root@local ~]# pstree -p lisi
[root@local ~]# pstree -p lisi	// 显示lisi用户开启的进程及其PID
	bash(9609)───vim(9656)
[root@local ~]# pstree -a lisi  // 显示进程及命令的完整指令 
	bash
	  └─vim /haha.txt
[root@local ~]# pstree -ap lisi
	bash,9609
	  └─vim,9656 /haha.txt
ps 快照
  • ps [选项](processes snapshot):进程快照。

    • aux:显示当前终端所有进程a、当前用户在所有终端下的进程x、以用户格式输出u可以查看进程所属用户

      -elf:显示系统内所有进程-e、以长格式输出信息-l、包括最完整的进程信息-f可以查看父进程

    • ps -C 进程名:查看进程的PID 。

// ps aux、-elf	进程快照
[root@local ~]# ps aux | less	// 用户,PID,%CPU,%内存,……,COMMAND程序指令
[root@local ~]# ps aux | wc -l
[root@local ~]# ps -elf	| less // PPID是父进程的PID,PRI/NI进程优先级(越小与越高)
[root@local ~]# ps -elf | wc -l

[root@local ~]# ps -elf | head -1 
	F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
F: 表示进程标志,指示进程的状态和属性,例如运行状态、僵尸状态等。
S: 表示进程的状态,例如运行状态(R)、睡眠状态(S)、僵尸状态(Z)等。
UID: 表示进程所属的用户IDPID: 表示进程的ID(进程标识符)。
PPID: 表示父进程的ID(父进程标识符)。
C: 表示进程的CPU使用率。
PRI: 表示进程的优先级。
NI: 表示进程的nice值,用于调整进程的优先级。
ADDR: 表示进程的内存地址空间。
SZ: 表示进程使用的物理内存大小。
WCHAN: 表示进程当前正在等待的事件或条件。
STIME: 表示进程的启动时间。
TTY: 表示进程所连接的终端设备。
TIME: 表示进程的累计CPU占用时间。
CMD: 表示进程的命令行。

[root@python ~]# ps aux |head -1 
	USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 表示进程所属的用户名。
PID: 表示进程的ID(进程标识符)。
%CPU: 表示进程的CPU使用率。
%MEM: 表示进程使用的内存占比。
VSZ: 表示进程使用的虚拟内存大小。
RSS: 表示进程使用的物理内存大小。
TTY: 表示进程所连接的终端设备。
STAT: 表示进程的状态。
START: 表示进程的启动时间。
TIME: 表示进程的累计CPU占用时间。
COMMAND: 表示进程的命令行。
top 动态
  • top [-d 刷新秒数] [-u 用户名](delay):动态查看进程。(按P进行CPU排序,按M进行内存排序)
  • 6:09:开机使用时长。
    user:登录的用户(通过终端登陆不计)。
    load average:平均一分钟、五分钟、十五分钟处理的进程数。
    running运行进程数,sleeping睡眠进程数,stopped停止进程数,zombie僵尸进程数。
  • uptime:截取top动态的第一行。

请添加图片描述

pgrep 条件
  • pgrep [选项] 字符串(process grep):查询进程名模糊匹配字符串的进程的PID。
    • -l(list):输出PID和进程名。
    • -x(exact):进程名精确匹配字符串。
    • -u :指定用户开启的进程。注意只能-lu,不能-ul
// pgrep
[root@local ~]# pgrep -l systemd  	// 显示模糊匹配systemd的进程的PID和进程名
[root@local ~]# pgrep -lx systemd 	// 显示精确匹配systemd的进程的PID和进程名
[root@local ~]# pgrep -u lisi 		// 显示lisi用户开启的进程的PID
[root@local ~]# pgrep -lu lisi		// 显示lisi用户开始的进程的PID和进程名,不能用"-ul"

控制进程

  • 控制进程(进程前后台的调度):

    • 命令行 &:该命令行以正在运行的状态放入后台。

    • Ctrl + z :挂起当前进程(暂停并放入后台)。

    • jobs :查看后台任务列表。选项 -l 列出进程号PID。

    • bg [数字](background):激活后台第数字个被挂起的任务。

    • fg [数字](foreground):将后台任务恢复到前台运行。

  • sleep 数字:使进程睡眠数字秒。

// 控制进程
[root@local ~]# sleep 1000
	^Z                 			// Ctrl+z,暂停并放入后台
	[1]+  已停止	sleep 1000
[root@local ~]# sleep 2000
	^Z                 			// Ctrl+z,暂停并放入后台
	[2]+  已停止	sleep 2000
[root@local ~]# sleep 3000 &	// 以运行状态放入后台
	[3]	43701
[root@local ~]# jobs 			// 查看后台任务列表
	[1]-  已停止	sleep 1000		// -代表将要成为默认作业	
	[2]+  已停止	sleep 2000		// +代表bg和fg无参数时的默认作业
	[3]   运行中	sleep 3000	
[root@local ~]# bg				// 这里没有指定参数,则会激活+的任务
    [2]+ sleep 2000 &
[root@local ~]# jobs 
	[1]+  已停止	sleep 1000		
	[2]   已停止	sleep 2000 &
	[3]-  运行中	sleep 3000 &
[root@local ~]# fg				// 这里没有指定参数,则会激活+的任务
    sleep 1000					// Ctrl+c,杀死进程
    ^C

杀死进程

  • 杀死进程的方式:

    • 关闭终端。

    • Ctrl+c:杀死前台的进程。

    • kill [-9] PID:杀死该PID的进程。根据PID

      kill [-9] %后台任务编号:杀死该编号的后台任务。

    • killall [-9] 进程名:杀死所有该名的进程。根据进程名

    • pkill [-9] 字符串 (process kill):杀死名称包含字符串的进程。
      pkill [-9] -u 用户名1,用户名n:杀死用户开启的所有进程。

      • 不用-9则优雅杀死:如果进程正被使用,等使用结束再杀死。
      • -9则残忍杀死:即使进程正被使用,也立即杀死。
// 杀死进程
[root@local ~]# sleep 3000 &
	[1] 35490
[root@local ~]# sleep 3000 &
	[2] 35491
[root@local ~]# jobs 
    [1]-  运行中               sleep 3000 &
    [2]+  运行中               sleep 3000 &
[root@local ~]# killall -9 sleep
    [1]-  已杀死               sleep 3000
    [2]+  已杀死               sleep 3000

孤儿进程

  • 僵尸进程:子进程先父进程结束,且父进程没有回收子进程释放子进程的资源,子进程成为一个僵尸进程。
  • 孤儿进程:父进程先子进程结束,子进程成为一个孤儿进程。
    • 孤儿进程要么直接被上帝进程收编,要么被杀死。
  • 一般启动进程,都是在当前bash进程启动一个子进程。而系统服务的进程(以httpd、mysqld等),是先在当前bash进程启动一个子进程bash或sh,再在该子进程中启动下一代子进程,然后将子进程杀死,下一代子进程成为孤儿进程,然后被上帝进程收编。这个过程可以通过sh -c "启动进程命令"实现。
// 孤儿进程
// 已有的进程树
]# pstree -p
    systemd(1)─┬─NetworkManager(509)─┬─{NetworkManager}(552)
               │                     └─{NetworkManager}(553)
               ├─agetty(591)
               ├─agetty(592)
               ├─crond(564)
               ├─dbus-daemon(507)
               ├─irqbalance(505)───{irqbalance}(537)
               ├─polkitd(508)─┬─{polkitd}(544)
               │              ├─{polkitd}(545)
               │              ├─{polkitd}(546)
               │              ├─{polkitd}(547)
               │              └─{polkitd}(548)
               ├─qemu-ga(510)───{qemu-ga}(536)
               ├─rsyslogd(589)─┬─{rsyslogd}(658)
               │               └─{rsyslogd}(659)
               ├─sshd(560)───sshd(754)───sshd(766)───bash(767)───pstree(849)
               ├─systemd(758)───(sd-pam)(760)
               ├─systemd-journal(457)
               ├─systemd-logind(506)
               ├─systemd-udevd(484)
               └─tuned(559)─┬─{tuned}(682)
                            ├─{tuned}(687)
                            ├─{tuned}(688)
                            └─{tuned}(689)
// 一般启动进程
]# sleep 1000 &
	[1] 850					// 进程850
]# pstree -p
    systemd(1)─┬─NetworkManager(509)─┬─{NetworkManager}(552)
               │                     └─{NetworkManager}(553)
               ├─agetty(591)
               ├─agetty(592)
               ├─crond(564)
               ├─dbus-daemon(507)
               ├─irqbalance(505)───{irqbalance}(537)
               ├─polkitd(508)─┬─{polkitd}(544)
               │              ├─{polkitd}(545)
               │              ├─{polkitd}(546)
               │              ├─{polkitd}(547)
               │              └─{polkitd}(548)
               ├─qemu-ga(510)───{qemu-ga}(536)
               ├─rsyslogd(589)─┬─{rsyslogd}(658)
               │               └─{rsyslogd}(659)
               ├─sshd(560)───sshd(754)───sshd(766)───bash(767)─┬─pstree(851)
               │                                               └─sleep(850)		// 在当前bash进程767下的进程850
               ├─systemd(758)───(sd-pam)(760)
               ├─systemd-journal(457)
               ├─systemd-logind(506)
               ├─systemd-udevd(484)
               └─tuned(559)─┬─{tuned}(682)
                            ├─{tuned}(687)
                            ├─{tuned}(688)
                            └─{tuned}(689)
// 孤儿进程
]# sh						// 开启子进程sh
sh-4.4# sleep 2000 &
	[1] 853					// 进程853
sh-4.4# pstree -p
    systemd(1)─┬─NetworkManager(509)─┬─{NetworkManager}(552)
               │                     └─{NetworkManager}(553)
               ├─agetty(591)
               ├─agetty(592)
               ├─crond(564)
               ├─dbus-daemon(507)
               ├─irqbalance(505)───{irqbalance}(537)
               ├─polkitd(508)─┬─{polkitd}(544)
               │              ├─{polkitd}(545)
               │              ├─{polkitd}(546)
               │              ├─{polkitd}(547)
               │              └─{polkitd}(548)
               ├─qemu-ga(510)───{qemu-ga}(536)
               ├─rsyslogd(589)─┬─{rsyslogd}(658)
               │               └─{rsyslogd}(659)
               ├─sshd(560)───sshd(754)───sshd(766)───bash(767)─┬─sh(852)─┬─pstree(854)
               │                                               │         └─sleep(853)	// 进程853的父进程852
               │                                               └─sleep(850)
               ├─systemd(758)───(sd-pam)(760)
               ├─systemd-journal(457)
               ├─systemd-logind(506)
               ├─systemd-udevd(484)
               └─tuned(559)─┬─{tuned}(682)
                            ├─{tuned}(687)
                            ├─{tuned}(688)
                            └─{tuned}(689)
sh-4.4# exit				// 退出sh子进程852
	exit
]# pstree -p
systemd(1)─┬─NetworkManager(509)─┬─{NetworkManager}(552)
           │                     └─{NetworkManager}(553)
           ├─agetty(591)
           ├─agetty(592)
           ├─crond(564)
           ├─dbus-daemon(507)
           ├─irqbalance(505)───{irqbalance}(537)
           ├─polkitd(508)─┬─{polkitd}(544)
           │              ├─{polkitd}(545)
           │              ├─{polkitd}(546)
           │              ├─{polkitd}(547)
           │              └─{polkitd}(548)
           ├─qemu-ga(510)───{qemu-ga}(536)
           ├─rsyslogd(589)─┬─{rsyslogd}(658)
           │               └─{rsyslogd}(659)
           ├─sleep(853)		// 进程853的父进程852死亡,成为孤儿进程,被上帝进程收编
           ├─sshd(560)───sshd(754)───sshd(766)───bash(767)─┬─pstree(855)	
           │                                               └─sleep(850)
           ├─systemd(758)───(sd-pam)(760)
           ├─systemd-journal(457)
           ├─systemd-logind(506)
           ├─systemd-udevd(484)
           └─tuned(559)─┬─{tuned}(682)
                        ├─{tuned}(687)
                        ├─{tuned}(688)
                        └─{tuned}(689)
// 系统服务进程的原理
[root@dhcp ~]# sh -c "sleep 3000 &"
[root@dhcp ~]# pstree -p
systemd(1)─┬─NetworkManager(509)─┬─{NetworkManager}(552)
           │                     └─{NetworkManager}(553)
           ├─agetty(591)
           ├─agetty(592)
           ├─crond(564)
           ├─dbus-daemon(507)
           ├─irqbalance(505)───{irqbalance}(537)
           ├─polkitd(508)─┬─{polkitd}(544)
           │              ├─{polkitd}(545)
           │              ├─{polkitd}(546)
           │              ├─{polkitd}(547)
           │              └─{polkitd}(548)
           ├─qemu-ga(510)───{qemu-ga}(536)
           ├─rsyslogd(589)─┬─{rsyslogd}(658)
           │               └─{rsyslogd}(659)
           ├─sleep(853)
           ├─sleep(861)		// 实际启动了一个sh进程,在sh进程中启动sleep进程,再杀死该sh进程
           ├─sshd(560)───sshd(754)───sshd(766)───bash(767)─┬─pstree(862)
           │                                               └─sleep(850)
           ├─systemd(758)───(sd-pam)(760)
           ├─systemd-journal(457)
           ├─systemd-logind(506)
           ├─systemd-udevd(484)
           └─tuned(559)─┬─{tuned}(682)
                        ├─{tuned}(687)
                        ├─{tuned}(688)
                        └─{tuned}(689)

RAID磁盘阵列

  • RAID磁盘阵列(Redundant Arrays of Inexpensive Disks,廉价冗余磁盘阵列)
    • 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘使用的存储技术。
    • 可以存储数据并实现一定程度的冗余保障(备份保障)。
    • 阵列的价值:提升I/O效率、硬件级别的数据冗余
    • 不同RAID级别的功能、特性各不相同

RAID 0

  • RAID 0,条带模式:

    • 同一个文档被分散存放在不同磁盘。

    • 并行写入以提高效率。

    • 至少需要两块磁盘组成,磁盘利用率100%。

    • 读写效率最高,但没有容错功能。

  • 例如:磁盘AB,数据1234,可以将13写入磁盘A,24写入磁盘B。

RAID 1

  • RAID 1,镜像模式:

    • 一个文档复制成多份,被分别写入不同磁盘。

    • 多份拷贝提高可靠性(提高容错),提高读效率。

    • 至少需要两块磁盘组成,磁盘利用率50%。

  • 例如:磁盘AB,数据1234,会将1234写入磁盘A,也将1234写入磁盘B。

RAID 5

  • RAID 5,分布式奇偶校验的独立磁盘模式:

    • 相当于RAID 0和RAID 1的折中方案。

    • 有奇偶校验算法,提高可靠性,效率提升。

    • 至少一块磁盘的容量来存放校验数据(可以是零散空间但总量达一块)。

    • 至少需要三块磁盘组成,磁盘利用率n-1/n。

    • 一般准备四块:三块用,一块备用以防硬盘损坏,最多可以坏一块。

RAID 6

  • RAID 6,高性价比/可靠模式:

    • 相当于扩展的RAID 5阵列。

    • 提供2份独立校验方案。

    • 至少两块磁盘的容量来存放校验数据(可以是零散空间但总量达两块)。

    • 至少需要四块磁盘组成,磁盘利用率n-2/n。

    • 最多可以坏两块。

RAID 01/RAID 10

  • RAID 0+1(RAID 01)/RAID 1+0(RAID 10):

    • 至少四块盘组成,例如:ABCD四块盘,数据1234。
      • RAID 0+1:AB、CD做RAID 0,在此基础上再做RAID 1。
        AB写13,CD写24,在此基础上,A写13,B也写13,C写24,D也写24。
      • RAID 1+0:AB、CD做RAID 1,在此基础上再做RAID 0。
        AB写1234,CD也写1234,在此基础上,A写13,B写24,C写13,D写24。
    • 整合RAID 0、RAID 1的优势。
    • 并行存取提高效率、镜像写入提高可靠性。
    • 至少需要四块磁盘组成,磁盘利用率50%

对比

对比项RAID 0RAID 1RAID 10RAID 5RAID 6
磁盘数>=2>=2>=4>=3>=4
存储利用率100%<=50%<=50%n-1/nn-2/n
校验盘12
容错性
IO读写性能较高
  • 如果要控制成本且使用较高的冗余性,使用RAID 6。如果要使用较高的读写性能,无需考虑成本,则使用RAID 10。

IPMI

ipmitool -l lanplus -U root -H 服务器IP地址 [-P 密码] power status/on/off/reset	// 控制远程服务器电源,查询电源状态/开机/关机/重启
ipmitool -l lanplus -U root -H 服务器IP地址 [-P 密码] sol activate		// 激活并连接远程服务器的终端控制台

end

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值