汇总Linux系统运维中遇到的问题
汇总Linux系统运维中遇到的问题
1、fdisk 磁盘分区报错
GPT PMBR size mismatch (20971519 != 83886079) will be corrected by w(rite).
GPT PMBR size mismatch (20971519 != 83886079) will be corrected by w(rite).
这个错误通常是由于磁盘分区表(partition table)与磁盘本身的大小不匹配所导致的。这可能是由于一个分区表被意外地覆盖或者磁盘被重新分区而导致的。parted -l 列出磁盘分区时将提示修复。
parted -l
2、控制台打印 audit: backlog limit exceeded
audit: backlog limit exceeded
的记录意味着系统审计日志的缓冲区已满,导致一些记录无法写入日志文件中,这可能会导致一些安全事件被丢失。通常,这是由于系统的审计日志速度太快而导致的,而系统无法及时处理所有的记录。这可以通过增加系统审计日志缓冲区的大小来解决。可以通过修改 /etc/audit/audit.rules
文件中的 --backlog
参数来增加缓冲区的大小。例如,将 --backlog
参数的值从默认的8192增加到16384可以将缓冲区的大小翻倍。修改完后,您可能需要重新启动 auditd
服务才能使更改生效。
3、关于linux系统资源限制命令和内核参数
ulimit -u # 查看当前用户的最大进程数
ulimit -n # 查看当前用户的最大打开文件数
ulimit -a # 查看当前所有资源限制
cat /proc/sys/kernel/pid_max # 查看系统中可创建的进程数
cat /proc/sys/fs/file-max # 查看系统中可打开的文件数
/etc/security/limits.conf # 限制每个用户可用的最大进程数量和最多可打开的文件描述符的软限制和硬限制
/etc/security/limits.d/20-nproc.conf # 限制每个用户可用的最大进程数量的软限制和硬限制
/etc/sysctl.conf kernel.pid_max # 该参数限制系统中可创建的进程数
/etc/sysctl.conf fs.file-max # 该参数限制系统中可打开的文件数
ulimit -SHn 65536 # 临时设置当前用户文件限制、重启失效
ulimit -SHu 65536 # 临时设置当前用户进程限制、重启失效
su - user1 -c 'ulimit -SHn 65536' # 临时设置用户user1文件限制、重启失效
su - user1 -c 'ulimit -SHu 65536' # 临时设置用户user1进程限制、重启失效
# 设置的硬限制如果超出了系统的最大限制,那么以系统的最大限制为准
# 软限制是用户可以自行调整的当前限制,软限制可以增加到硬限制的值
# 硬限制是软限制的上限值,只有root用户可以增加硬限制,任何用户都可以降低硬限制
4、嵌套虚拟化实验环境下网络不通
混杂模式(Promiscuous Mode)是一种网络接口的工作状态,在这种状态下,网卡能够接收所有经过它的数据流,而不论其目的地址是否是它本身。因此,嵌套虚拟化环境下的虚拟机作为宿主机使用时,需要开启网卡的混杂模式。
5、动态扫描主机scsi LUN
for host in /sys/class/scsi_host/host*/scan; do echo "- - -" > "$host"; done
6、MySQL数据库初始更改特权用户密码及开启远程连接
systemctl enable mysqld.service --now
grep "password" /var/log/mysqld.log
> SELECT `USER`,AUTHENTICATION_STRING,`HOST` FROM MYSQL.USER;
> ALTER USER 'ROOT'@'LOCALHOST' IDENTIFIED BY '123456';
> GRANT ALL PRIVILEGES ON *.* TO 'ROOT'@'%' IDENTIFIED BY '123456';
> FLUSH PRIVILEGES;
> CREATE DATABASE SAMPLEDB;
7、格式化文件系统discard操作
在 mkfs.xfs
命令中,/* no discard */ [-K] 的意思是指在执行 mkfs.xfs
时,使用 -K 参数来禁止(no discard)文件系统的 TRIM 操作。TRIM 操作:是一种用于 SSD(固态硬盘)的命令,用于通知固态硬盘哪些数据块不再被使用,可以被擦除和重用,从而提高 SSD 的性能和寿命。-K 参数:在 mkfs.xfs
命令中,通常用于保留文件系统上的原有数据,而不是完全擦除。但在这种上下文中,它被解释为禁用 TRIM 操作。
注意事项:
禁用 TRIM:如果您在创建 XFS 文件系统时使用 -K 参数,意味着文件系统不会执行 TRIM 操作。这可能导致文件系统在使用 SSD 时不会自动释放不再使用的数据块,从而影响 SSD 的性能和寿命管理。
适用情况:禁用 TRIM 可能在某些情况下是有用的,例如在需要保留原有数据或在特定环境中不希望进行 TRIM 操作时。
8、dd命令远程测速
# 本地:192.168.200.1
# 远程:192.168.200.2
# 远程到本地
ssh root@192.168.200.2 -p 22 dd if=/root/test.bin | dd of=/root/test.bin
ssh root@192.168.200.2 -p 22 dd if=/dev/mapper/centos-root bs=4K count=1024000 | dd of=/root/test.bin
# 本地到远程
dd if=/root/test.bin | ssh -p 22 root@192.168.200.2 dd of=/root/test.bin
dd if=/dev/mapper/centos-root bs=4K count=1024000 | ssh -p 22 root@192.168.200.2 dd of=/root/test.bin
9、屏蔽服务日志(如审计服务)输出到messages文件
vim /etc/rsyslog.conf
:programname, isequal, "audit" stop
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 或者
if $programname == 'audit' then stop
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 重启rsyslog
systemctl restart rsyslog
10、网卡绑定
# 配置网络绑定
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
nmcli connection add type ethernet slave-type bond con-name bond0-ens37 ifname ens37 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-ens38 ifname ens38 master bond0
nmcli connection modify bond0 ipv4.method manual ipv4.addresses 192.168.100.152/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.200.2
nmcli connection up bond0
nmcli connection up bond0-ens37
nmcli connection up bond0-ens38
# 在绑定网络上配置VLAN标记
nmcli connection delete bond0
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
nmcli connection modify bond0 ipv4.method disabled
nmcli connection add type vlan con-name bond0.100 ifname bond0.100 vlan.parent bond0 vlan.id 100
nmcli connection add type vlan con-name bond0.200 ifname bond0.200 vlan.parent bond0 vlan.id 200
nmcli connection modify bond0.100 ipv4.method manual ipv4.addresses 192.168.100.152/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.2
nmcli connection modify bond0.200 ipv4.method manual ipv4.addresses 192.168.200.152/24 ipv4.gateway 192.168.200.2 ipv4.dns 192.168.200.2
nmcli connection up bond0
nmcli connection up bond0.100
nmcli connection up bond0.200
# 查看连接配置和绑定信息
nmcli connection show
cat /proc/net/bonding/bond0
# 删除连接配置
nmcli connection delete bond0
nmcli connection delete bond0-ens37
nmcli connection delete bond0-ens38
nmcli connection delete bond0.100
nmcli connection delete bond0.200
依赖绑定模式的上游交换机配置:
绑定模式 | 交换机上的配置 |
---|---|
0 - balance-rr |
需要启用静态 EtherChannel,而不是链路聚合控制协议(LACP)协商。 |
1 - active-backup |
交换机上不需要任何配置。 |
2 - balance-xor |
需要启用静态 EtherChannel,而不是 LACP 协商。 |
3 - broadcast |
需要启用静态 EtherChannel,而不是 LACP 协商。 |
4 - 802.3ad |
需要启用 LACP 协商的 EtherChannel。 |
5 - balance-tlb |
交换机上不需要任何配置。 |
6 - balance-alb |
交换机上不需要任何配置。 |
11、策略路由
# 需求:修改辅网卡的默认路由表,修改为编号200,并增加辅网卡路由表规则,让本机192.168.200.100发出的数据包走编号200的路由表。
nmcli connection modify ens37 ipv4.route-table 200
nmcli connection modify ens37 ipv4.routing-rules "priority 32000 from 192.168.200.100 table 200"
systemctl restart network
# 修改成功后查看路由策略规则,以及查看路由表
ip rule list
ip route show table 200
ip route show table main
12、引导修复及单用户模式磁盘操作
# 手动引导
grub > set root=hd0,msdos1
grub > linux /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root
grub > initrd /initramfs-3.10.0-957.el7.x86_64.img
grub > boot
# 配置变更
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS # 启动方式判断
grub2-editenv /boot/efi/EFI/centos/grubenv set next_entry=1 # UEFI 设置下次启动条目
grub2-editenv /boot/grub2/grubenv set next_entry=1 # BIOS 设置下次启动条目
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # UEFI 更新grub配置
grub2-mkconfig -o /boot/grub2/grub.cfg # BIOS 更新grub配置
# 逻辑卷激活
vgchange -ay
vgimportclone -n newcentos /dev/sdb2 # 如果vg重命 重命名为newcentos
vgchange newcentos -ay
# 临时文件系统挂载
mount /dev/sdb2 /sysroot
mount --bind /sys /sysroot/sys
mount --bind /proc /sysroot/proc
mount --bind /dev /sysroot/dev
mount --bind /run /sysroot/run
mount --bind /tmp /sysroot/tmp
chroot /sysroot
13、Device #015 does not seem to be present
无法启动网络服务,查看messages
日志/etc/sysconfig/network-scripts/ifup-eth[1995]: Device ens33#015 does not seem to be present, delaying initialization
,其中设备名解析中多了#015
。
原因是网络配置文件行尾换行符为Windows系统下的换行符导致,使用cat -A
命令查看行尾为^M$
,Unix系统下的换行符则只有$
。日志信息中的015是8进制数字表示方式。
在ASCII编码中,有以下两个控制字符:
/012(八进制)= 0x0A(十六进制)代表换行(Line Feed,简称LF),对应的特殊转义字符是"/n"。
/015(八进制)= 0x0D(十六进制)代表回车(Carriage Return,简称CR),对应的特殊转义字符是"/r"。
因此"/015/012"代表"/r/n"就是先回车、再换行,Windows是用这个组合作为换行符。而"/n"是Unix用来表示的换行。
14、RX dropped
从内核2.6.37版本开始,丢弃数据包计数的含义已经发生了变化。在之前,数据包被丢弃最可能是因为出现了错误。现在,rx_dropped
计数器显示了由于以下原因而被丢弃的数据帧的统计信息:
- Softnet backlog full — (Measured from /proc/net/softnet_stat)
- Bad / Unintended VLAN tags
- Unknown / Unregistered protocols
- IPv6 frames when the server is not configured for IPv6
解释过来就是:
1、数据包的处理速度跟不上数据包接收的速度,导致系统内部的接收队列(也称为软中断队列)被填满。
2、数据包带有错误的VLAN标签,或者系统没有预期接收该VLAN标签的数据包。
3、数据包可能包含了一个系统不认识或未配置的协议类型,或者系统不知道如何处理这种协议的数据包。
4、如果服务器没有启用或配置IPv6支持,但收到了IPv6的数据包,那么这些数据包将无法被正确解析或处理。
如果任何数据帧满足上述条件之一,它们将在协议栈之前被丢弃,并且rx_dropped
计数器的值会增加。
15、文件莫名消失的问题
新挂载/home
到新硬盘时,/home
原来数据变空了,这个原因是由于Linux的VFS(虚拟文件系统)机制导致的,正常登录以后,所看到的各个目录,文件都是内核在加载时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂载某个设备到一个VFS挂载点上时(比如/home
),系统就把VFS中的这个挂载点/home
指向你最后所挂载的那个设备上。那么你现在访问该挂载点时,就会看到你最后挂载在此处的设备。而之前所挂载的设备依然在那里,只不过挂载点/home
已经不再指向之前的设备。所以之前的数据是被隐藏了,但并没有删除,若umount挂载后,数据又重新回来了。
16、捕获进程退出状态码
#!/bin/bash
# 启动一个后台进程
sleep 100 &
# 获取后台进程的 PID
PID=$!
# 等待该后台进程完成
wait $PID
# 获取并打印退出状态码
EXIT_STATUS=$?
echo "The background process exited with status $EXIT_STATUS"
17、服务单元Type=forking
当服务单元被设置为 Type=forking
时,systemd 期望该服务在启动时会创建出一个或多个子进程,并且服务本身(父进程)会退出。典型的例子是传统的 UNIX 守护进程,它们在启动时会派生出一个子进程来处理实际的工作,然后父进程会退出。(Type=forking只是为了兼容性)。于是,如果守护进程分叉两次或者它在其他方面表现异常,则可能存在竞争。
https://systemd-devel.freedesktop.narkive.com/eDM9b83I/possible-bug-guessing-mainpid-when-service-type-forking
https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#Options
18、ping: sendmsg: Invalid argument
net ratelimit:xxx callbacks suppressed
原因:arp表满了导致
# 查看系统配额
sysctl -a | grep net.ipv4.neigh.default.gc_thresh
# 查看当前arp条目数目
ip neigh | wc -l
# 解决方案:根据实际arp最大值情况(比如访问其他子机最大个数),调整arp表大小
sudo sysctl -w net.ipv4.neigh.default.gc_thresh1=1024
sudo sysctl -w net.ipv4.neigh.default.gc_thresh2=2048
sudo sysctl -w net.ipv4.neigh.default.gc_thresh3=4096
19、动态链接器在运行时未能找到所需的共享库
- 修改
LD_LIBRARY_PATH
环境变量(临时生效):export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
- 更新
ld.so.cache
(永久生效):echo '/usr/local/lib' | tee -a /etc/ld.so.conf.d/local.conf ldconfig
20、sshd服务开启端口转发
编辑sshd服务配置文件,修改参数AllowTcpForwarding yes
,断开所有的ssh会话后生效。
21、systemd: Unit xxx.mount is bound to inactive unit xxxx.device. Stopping, too
systemctl daemon-reload