企业磁盘管理挂载/虚拟内存故障案例及优化/磁盘分区/企业服务器泄露占用swap区案例/

磁盘挂载mount命令

什么是挂载?

linux设备中,需要通过挂载命令,给设备指定的入口(已经存在的空目录),不进行挂载无法使用

通过mount命令指定设备,指定入口(目录)
入口:挂载点(空目录)/mnt linux临时挂载点

磁盘在格式化后,挂载前,是不能被正常的使用
例如:/data
mount /dev/sdb1 /data

通过mount进行挂载,只能临时生效,只要重启系统就会失效

选项:
-t 指定文件系统 mount -t ext4 /dev/sdb2
-a 挂载/etc/fstab配置文件中的配置 ,mount -a
-o 指定挂载的参数(权限、功能、允许SUID)

临时挂载/dev/sdb1至/mnt目录

[root@calms ~]# mount /dev/sdb1 /mnt/
查看:
[root@calms ~]# df -h |grep mnt
/dev/sdb1 1020M 33M 988M 4% /mnt
在这里插入图片描述

挂载光盘到/media目录

mount /dev/cdrom /media/
在这里插入图片描述

卸载:

umount /media
umount+挂载点 (卸载)

在这里插入图片描述

目前挂载流程:

  1. 磁盘分区
  2. 磁盘格式化
  3. 磁盘挂载

永久挂载

对于挂载,我们希望永久生效(临时+永久)

方案

  1. mount /dev.sdb1 /data/写入到/etc/rc.local,命令最好写到绝对路径
  2. 专业的开机自动挂载的配置文件,/etc/fstab,根据配置文件要求mount命令改为配置文件形式即可

/etc/fstab这个文件别玩坏,否则整个虚拟机起不来

/etc/fstab文件的每一列含义:
在这里插入图片描述
配置文件形式的mount命令
mount /dev/sdb1 /data/

/etc/fstab配置文件的样子
/dev/sdb1 /data/ xfs default 0 0

在这里插入图片描述
第四列:defaults挂载的参数

async/sync是否为同步方式运行
user/houser是否允许普通用户使用mount命令挂载
exec/noexe是否允许可执行文件执行
suid/nosuid是否允许存在suid属性的文件,默认suid
auto/noauto执行mount -a 命令时,此文件系统是否被主动挂载,默认auto
rw/ro是否以制度或者读写模式进行挂载

default具有rw,suid,dev,exec,auto,nosuer,async等默认参数的设定

Buffer和cached:

buffers(缓冲区)会根据磁盘的读写,设计的为还没有写入磁盘,cached(缓存)是把读取过的数据保存起来,为己被从硬盘中读取和存入硬盘以备进行使用

sync用来把buffer数据写到磁盘

第五列:
是否备份,0代表备份;1代表每天进行备份;2代表不定期备份

第六列(是否检验扇区,开机的过程中,系统认为会以fsck检验我们系统是否完整)

0 不检验
1检验
2校验

生产环境:
自己挂载磁盘,一定要用0,否则系统重启不起来
[root@calms /]# cat /etc/fstab

查看系统是否是0?
#
# /etc/fstab
# Created by anaconda on Fri Apr  5 10:32:14 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

centos6前ext4为它的文件,与之相对应的文件是fsck,文件系统不一样检查工具也变成不一样
所以fsck、efsck针对ext4的检查工具

xfs的检查工具,fsck.xfs===xfs_repair

配置自动挂载:
mount /dev/sdb1 /mnt/
在这里插入图片描述
配置后检查,测试后挂载
[root@calms /]# mount -a
mount: mount point 0 does not exist

fstab改坏修复:
mount -o rw,remount
vim /etc/fstab修改

实现通过、etc/rc.local挂载
/usr/bin/mount /dev/sdb1 /mnt
在这里插入图片描述

上面在一些文件操作挂载的时候,地点时间人物,都标注清楚(出手就是专业,在企业在不仅是你一个人操作服务器,不仅方便同事工作,也体现自己专业水准)

[root@calms /]# tail -2 /etc/rc.local

在这里插入图片描述
这种挂载不好,挂载涉及到磁盘,rc.local流程来看,它是最后进行加载的,所以对于挂载来说不建议,放入rc.local中,企业中尽量不要用!

补充:在centos7后这样使用不能执行了(需要先授权)
在这里插入图片描述
使用方式:
在这里插入图片描述

UUID=9e46ffd2-c46d-4691-aa7f-e7f349d1c8f4 / xfs defaults 0 0
UUID=8e261f31-203b-47e1-a6d2-444c71c4a1d7 /boot xfs defaults 0 0
UUID=6862d0c8-722f-4780-97c8-757e43459f0b swap swap defaults 0 0

UUID(设备的独一无二编程)

使用blkid命令获取各个设备的UUID

[root@calms ~]# blkid
/dev/sda1: UUID=“8e261f31-203b-47e1-a6d2-444c71c4a1d7” TYPE=“xfs”
/dev/sda2: UUID=“6862d0c8-722f-4780-97c8-757e43459f0b” TYPE=“swap”
/dev/sda3: UUID=“9e46ffd2-c46d-4691-aa7f-e7f349d1c8f4” TYPE=“xfs”
/dev/sdb1: UUID=“8635ed6d-a5d2-4395-bf83-63f6ed3bc047” TYPE=“xfs”
/dev/sr0: UUID=“2020-11-04-11-36-43-00” LABEL=“CentOS 7 x86_64” TYPE=“iso9660” PTTYPE=“dos”

使用UUID替代设备名挂载

mount UUID=“8635ed6d-a5d2-4395-bf83-63f6ed3bc047” TYPE=“xfs” /mnt

umount不能卸载的情况:

(1)处于当前挂载的目录

在这里插入图片描述
这种情况有两种方式:

1.切换至其他目录进行卸载
2.选项 -l 强制卸载

在这里插入图片描述

(2)【网络、分布式文件】系统服务器端假死

umount -l /mnt
卸载:

  1. 一般不能使用df -h,会夯住

  2. grep sd /proc/mounts
    /dev/sda3 / xfs rw,relatime,attr2,inode64,noquota 0 0
    /dev/sda1 /boot xfs rw,relatime,attr2,inode64,noquota 0 0
    找到挂载点在进行卸载,还可以使用卸载设备名进行卸载

umount -l /dev/sda1

企业生产磁盘分区说明

生产分区:手动分区

1.常规服务器分区(标准)

/boot 内核 1G
swap 虚拟分区 物理内存1.5倍,最高16G
/ 所有

特点:没有特别重要的数据

2.数据服务器(数据库,存储服务)10T

/boot 内核 1G
swap 虚拟分区 物理内存1.5倍,最高8-16G
/ 200G-400G
/data 所有,存放数据

3. 大厂分区(30T)

/boot 内核 1G
swap 虚拟分区 物理内存1.5倍,最高8-16G
/ 200G-400G
剩余留着,谁用谁分

很多企业有些人还这样分:

/boot,swap /, /usr, /home,/var完全没有必要(不理想分的方式)

虚拟分区swap知识

什么是swap分区?

虚拟的内存空间,作用当系统物理内存不够理想的时候,讲硬盘空间的一部分释放出来,以供当前运行的程序使用

当物理内存不够时会随机kill占用内存的进程,从而产生oom,使用swap可以解决弥补内存不足,防止重要的进程被系统kill

到底要不要用swap分区?

数据库服务器不用swap分区(256G),就是mysql,程序单一,并且还有监控

常规情况,都要用swap,云主机没有swap

如何讲磁盘空间划分一部分给swap使用?

找一块硬盘,划分1G分区或者使用磁盘已有的空间,dd(现有磁盘空间)或fdisk(已有的磁盘空间)

格式化swap分区

mkswap /dev/sdb1
通过swapon -a /dev/sdb1 将设备加入swap

使用free -m检查swap大小
如果不想使用swap ,swapoff /dev/sdb1 (移除)

以上的操作都是临时的,如需要永久生效,需要将配置添加到/etc/fstab

#创建swap分区实践

在这里插入图片描述
a创建分区,并格式化swap分区
fdisk dev/sdb分一个G大小
mkswap /dev/sdb1 (格式化为swap)
在这里插入图片描述
查看当前的swap分区大小,然后进行扩展和缩小
free - m
在这里插入图片描述
内存有1个G

扩展swap分区大小
swapon dev/sdb1
free -m
在这里插入图片描述
增加了1个G

swapon -a 激活所有的swap

缩小swap分区大小
swapoff /dev/sdb1
free -m
在这里插入图片描述
又回来了
swapoff -a 关闭所有的swap

检查当前swap分区有那些设备
swapon -s
文件名 类型 大小 已用 权限
在这里插入图片描述

如果磁盘没有过多的分区可用,也可以通过文件增加swap空间,本质上还是磁盘
dd if=/dev/zero of=/opt/swap_file bs=1M count=500
chmod 0600 /opt/swap_file
mkswap -f /opt/swap_file
swapon /opt/swap_file
free -m

[root@calms ~]# dd if=/dev/zero of=/opt/swap_file bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 0.460898 s, 1.1 GB/s
[root@calms ~]# chmod 0600 /opt/swap_file                        
[root@calms ~]# mkswap -f /opt/swap_file
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=964e788b-040b-4fcf-82dd-b8c09e791f06
[root@calms ~]# swapon /opt/swap_file
[root@calms ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7802         348        6742          11         710        7208
Swap:          1523           0        1523
[root@calms ~]# swapon -s
Filename				Type		Size	Used   Priority
/dev/sda2                              	partition	1048572	0      -2
/opt/swap_file                         	file	511996	0	-3

如果希望swap开机自动挂载,将swap信息追加至/etc/fstab

dd命令

if=/dev/zero 来源,/dev/zero生产数据,用来创建文件
of=/opt/swap_file
bs=1M ( block size)
count=500(block数量)

dd模拟一个分区:
dd if=/dev/zero of=/dev/sdd1 bs=1M count=500
[root@calms ~]# dd if=/dev/zero of=/dev/sdd1 bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 1.33218 s, 394 MB/s
[root@calms ~]# mkfs.xfs /dev/sdd1
meta-data=/dev/sdd1 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@calms ~]# mount /dev/sdd1 /mnt/
[root@calms ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.8G 500M 3.4G 13% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 12M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda3 23G 4.0G 20G 18% /
/dev/sda1 1014M 183M 832M 19% /boot
tmpfs 781M 0 781M 0% /run/user/0
/dev/loop0 497M 26M 472M 6% /mnt

cd /mnt
touch a

/dev/loop0(循环文件接口)是一种伪设备,这种设备使得文件可以如同块设备一般被访问

测试swap分区作用

Linux特性:

  1. 多余内存自动用于buff/cache,物理内存不够用的时候,释放,给回物理地址
  2. 物理内存耗尽,系统会启用保护机制,干掉占用内存较高的程序

关闭虚拟内存
swapoff –a
free –m

lsblk

使用dd命令消耗物理内存
dd if=/dev/zero of=/dev/null bs=70M count=10000
已杀死

该进程非常消耗内存,造成物理内存不够,系统会启用保护机制,干掉内存较高的程序

grep mem /var/log/message 发现存在oom
container kernel:Out of memory:kill process 2193(dd)score 699 or sacrifice child
为了避免物理内存不够用时,强制杀死进程(使用swap硬盘空间来临时充当内存)

开启虚拟内存
swapon –a
free –m

继续测试
dd if=/dev/zero of=/dev/null bs=70M count=10000
发现swap开始被使用了
swap一旦被使用,发现系统越来越慢
因为把磁盘空间模拟内存使用,所以就很慢

企业案例:Java环境,Tomcat服务,内存充足但是占用swap,在工作中特别是Java服务器环境,当程序代码写的有问题的时候,就会发生内存泄露,就会产生占用swap

解决方式
1.开发查找程序泄露问题,解决根本
2.同时运维也可以临时增大一些swap大小(临时)
3.优化系统内核,让系统尽量使用内存而不是swap(swap会使程序变慢)
4.清空swap

虚拟内存使用故障处理及优化

1. 让系统先使用物理内存而不是swap

cat /proc/sys/vm/swappiness 默认值
编辑内核文件 sysctl.conf 加入vm.swappiness
(centos7放置在sysctl.d
cd /etc/sysctl.d/
cat /proc/sys/vm/swappines


tail –1 /etc/sysctl.conf 查看编辑后的内容
sysctl -p 价值内核参数配置生效

cat /proc/sys/vm/swappines

swappiness=0时,系统最大限度使用物理内存,如果内存不足,任然会占用swap分区,swappiness时,系统会积极使用swap分区,并且把内存数据及时加载到swap里面,centos7默认设置为30

cat /proc/sys/vm/swappiness 默认通过proc来查看更改结果

echo 5 >/proc/sys/vm/appiness
也可以直接这样调整,然后命令加载到rc.local文件里

2. 直接清空swap分区数据和缓存数据

sync将缓冲区数据写入磁盘(强制block数写入磁盘,更新超级块)
echo 1 > /proc/sys/vm/drop_caches 清空cache缓存区
cat /proc/sys/vm/drop_caches
swapoff -a 关闭swap分区
swapon –a 重启开启swap分区

企业面试案例:服务器出现内存泄露,占用很多swap空间,询问什么原因,怎么解决?

Linux内存知识

free –m
在这里插入图片描述

mem行(第二行)是内存使用情况
swap行(第三行)是交换空间的使用情况
total列显示系统总的可用物理内存和交换空间大小
used列显示已经被使用的物理内存和交换空间
free列显示还有多少物理内存和交换空间可以使用
shared列显示被共享使用的物理内存大小
buff/cache列显示被buffer和cache使用物理内存大小
available列显示还可以被应用程序使用的物理内存的大小
真正可用内存:buff/cache avaliable

cat /proc/meminfo
在这里插入图片描述

第一行的buffer和cached为物理内存分配出来,但是buffer和cached还没有使用的大小
– buffers/cache 反应的是被程序实实在在吃掉的内存
+buffers/cache 反应的是可以挪用的内存总数

第二行的–/+buffer/cache中的使用内存used为物理分配内存给buffer和cached使用情况,free为真实的内存剩余大小。

总内存:memory=used+free=used1+free1=buffers+cached+used1+free

也就是说真正剩余内存

free1=free+buffers+cached

内存中的buffers和cached为内存使用机制

磁盘相关命令(这里总结上一篇文章和这一篇文章所用到的命令)

dd 生成一个模拟设备的文件
free 查看内存–m
lsblk 查看分区及挂载信息
mkfs 格式化(–t)
sync 将数据从缓冲区同步到磁盘
xfs_repair xfs修复文件
fsck,e2fsck ext修复工具
swapon 加载swap
swappoff 关闭swap
mount 挂载(–a -t -o)
umount 卸载
mkswap 格式化swap
gdisk gpt分区工具,常用于大于2T
fdisk mbr分区工具,小于2T
parted gpt分区工具,常用于大于2T,更复杂
partprobe 通知内核生效
blkid 查看块设备信息

后期这些命令会并到思维导图,到时候给大家呈现出来!!!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 10:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 10:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 10:28:02       87 阅读
  4. Python语言-面向对象

    2024-04-24 10:28:02       96 阅读

热门阅读

  1. Linux CentOS 7 服务器集群硬件常用查看命令

    2024-04-24 10:28:02       33 阅读
  2. Quest 2 VR程序读取本地图片

    2024-04-24 10:28:02       28 阅读
  3. 标准化,信息化,数字化,智能化

    2024-04-24 10:28:02       38 阅读
  4. 在微信小程序部署AI模型的几种方法

    2024-04-24 10:28:02       29 阅读
  5. C# 异步编程

    2024-04-24 10:28:02       40 阅读
  6. python实现读取,修改excel数据

    2024-04-24 10:28:02       36 阅读
  7. 等保测评试题分享(4)

    2024-04-24 10:28:02       39 阅读
  8. Python dlib(HOG+SVM)人脸识别总结

    2024-04-24 10:28:02       39 阅读
  9. 组合模式(Composite)

    2024-04-24 10:28:02       34 阅读