Linux System

Linux system Operation

Linux system Operation

PXE安装–Preboot Execution Environment

PXE安装需要满足下列条件:
(1)客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;
(2)PXE服务器必须要提供至少含有DHCP以及TFTP的服务!且其中:
        DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;
        TFTP则提供客户端的boot loader及kernel file下载路径。
(3)加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

PXE服务器:DHCP服务+TFTP服务+NFS/FTP/HTTP服务,配置三个服务。
pxe
PXE+Kickstart_Centos6
PXE+KickStart_Centos7
PXE网络装机
Kickstart文件讲解
Collber装机
        cobbler可以看作是一个更多功能的pxe,它实现系统安装和pxe也差不多,需要的文件和过程大致都一样。
        cobbler能自动管理dns/tftp/dhcp/rsync这四个服务(但似乎对tftp的管理有点bug,需要手动启动tftp),且cobbler依赖于httpd(pxe支持http/nfs/ftp)。
        基本的系统安装,cobbler只需生成一个distro和一个profile即可。
        distro相当于一个镜像,它提供安装系统过程中所需的一切文件,如vmlinuz,initrd以及rpm包等。
        profile的作用是为了自动修改pxelinux.cfg/default文件,每生成或修改一次profile,都会在default文件中修改或追加对应的label。

常见问题定位

OVS网桥

vSwitch(Virtual Switch)指虚拟交换机或虚拟网络交换机,工作在二层数据网络,通过软件方式实现物理交换机的二层(和部分三层)网络功能。
ovs-ofctl:基于 OpenFlow 协议对 OpenFlow 交换机进行监控和管理,下发流表信息等。
ovs-vsctl:ovs-vSwitch管理程序,可以进行网桥、接口等的创建、删除、设置、查询等
在这里插入图片描述
Bridge br0:指网桥br0
Port br0:指网桥br0的端口,端口名称是br0;这个和网桥同名的端口可以理解为环回口
type: internal:表示端口类型。此时会发现操作系统中会创建一个虚机网卡br0(状态为down),此端口收到的所有数据包会将流量转发到这张网卡,这张网卡发出的数据会通过port br0这个端口进入ovs。当创建网桥时,默认会创建与网桥同名的internal port,并创建一个同名的Interface接口。

ovs-vsctl show     ##查看网桥详细信息;查看open vswitch的网络状态
ovs-ofctl show br_prv ##查看网桥br0的端口信息
ovs-vsctl list-br  ##查看OVS管理着多少网桥,每个网桥是一个虚拟交换机;只显示网桥名字
ovs-vsctl list-ports br_111  ##查看br_111网桥都有哪些port;只显示port名字
ovs-vsctl list-ifaces br_111  ##查看br_111网桥都有哪些interface;只显示interface名字
ovs-vsctl list bridge br_111   ##查看网桥配置信息
ovs-vsctl list port br_111 bond_prv ##查看端口配置信息,有没有tag,uuid等
ovs-vsctl port-to-br bond_prv  ##查看port属于哪个网桥

ovs-appctl fdb/show <bridge>      ###列出指定网桥上的MAC学习表

ovs-appctl bond/list  ##列出ovs中的bond
ovs-appctl bond/show bond_prv  ##显示bond的简要信息

#####创建一个新的网桥并设置类型
ovs-vsctl add-br br0 ##添加一个名为br0的网桥;会在网桥上创建同名的端口br0 ,类型为internal
ovs-vsctl set bridge br0 datapath_type=netdev
#####添加/删除一个端口,将物理网卡挂接到网桥:
ovs-vsctl add-port 网桥名  端口名
ovs-vsctl add-port br0 eth1   ##从网桥br0删除一个port eth1
ovs-vsctl del-port br0 eth1
ovs-vsctl add-port br0 p1 – set interface p1 type=internal ##新增internal端口p1并添加到网桥br0:
ovs-vsctl set interface p1 type=patch options:peer=p0   ##设置端口p1的类型为patch,并与p0连接。

ovs-vsctl set Interface p0 type=internal ##设置端口p0类型为internal
##添加vlan
Ovs-vsctl set port port_name tag=1



网卡

ethtool

配置和显示以太网接口参数

sudo apt install ethtool    # Ubuntu 或 Debian
sudo yum install ethtool    # CentOS 或 Red Hat

ethtool ethX:显示指定接口的概要信息,包括连接状态、速度、双工模式、链路接口状态(Link detected:yes)。
ethtool -i ethX:显示驱动程序的信息,包括驱动程序名、版本、固件版本等。

dmesg | grep eth
ifup eth1    ###激活eth1网卡
ifdown eth1  ###关闭eth1网卡
ip a s eth0 ##查看网卡\查看mac地址

检查网卡与网络是否物理连通,网线是否插好且连接可用,很多时候不能立刻到机房确定物理连接,可以用命令: ethtool eth0
在这里插入图片描述
网络排查思路:
网卡是否工作,包括硬件和驱动:lspci,dmesg
IP参数是否正确设置:ifconfig
局域网内通信是否正常:ping
路由信息是否正常:route -n
DNS状态:dig, nslookup
路由节点状况与延时:traceroute
服务监听端口:netstat -lnp
防火墙:iptables, SELinux

curl -v telnet://ip:22  ##检查22端口连接性
curl -I  http://aiezu.com # 看看本站的http头是怎么样的
curl -# -o centos6.8.iso http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso  ##下载文件并显示简单进度条

###手动配置网卡ip\网关---方法一
ip address add 192.168.83.132/24 dev br0
ifconfig eht0 9.111.66.96 netmask 255.255.255.0 up
route add default gw 9.111.66.1

####通过配置文件配置ip\网关---方法二

#####配置动态IP:
cat >>/etc/sysconfig/network-scripts/ifcfg-eth0<<  'EOF'
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"

EOF
####查看网卡的bonding状态
cat /proc/net/bonding/{name}
ifenslave -c bond_name eth1 ##在线切换活动网卡为eth1

磁盘整理

lsblk -d /dev/sda  ##查看磁盘
      -f	       ##同时列出该磁盘内的文件系统名称
blkid  或者blkid /dev/sda   ##其实就是lsblk -f中单独显示UUID的一个指令。列出设备的UUID;
没有root权限,要使用sudo blkid /dev/sda
parted指令用来列出磁盘的分区表类型以及分区信息
parted /dev/sda print

fd:软驱 hd:IDE 磁盘 sd:SCSI 磁盘 tty:terminals vd:virtio 磁盘

cat /sys/block/sda/queue/rotational
结果:
返回0:SSD盘
返回1:SATA盘

lsblk 中有MAJ:MIN
stat -c %T /dev/sdi  ##获取minor number,这是16进制
stat -c %t /dev/sdi  ##获取major number,这是16进制

linux启动时会挂载硬盘,系统使用/etc/fstab;/etc/fstab 文件是一个文本文件,包含了在系统引导期间将要挂载的所有文件系统的定义。它通过指定每个文件系统的设备名称、挂载点、文件系统类型和选项等参数来完成此操作。

<设备> <挂载点> <文件系统类型> <挂载选项> <备份频率> <检查顺序>
参数说明:
<设备>:要挂载的设备路径,如 /dev/sdb1。
<挂载点>:挂载的目录,例如 /mnt/usb。
<文件系统类型>:文件系统的类型,比如 ext4、ntfs 等。
<挂载选项>:挂载选项,比如 defaults、ro、noauto 等。
<备份频率>:用于 dump 工具备份的标志,一般填写 0。
<检查顺序>:用于 fsck 工具检查文件系统的顺序,一般填写 0。

修改完/etc/fstab之后重启系统或者手动执行mount -a系统将会按照 fstab 中的配置自动挂载分区。

磁盘路径可以用fdisk -l 命令查看,UUID可以用blkid 命令查看。

ls -all /dev/disk/by-uuid //显示分区的信息可以查看到各分区的uuid
cat /etc/fstab ## 挂载的信息
确保uuid号 是否于/etc/fstab文件中uuid号是否相同

blkid 结果中出现的uuid要和/etc/fstab一样
1、确保fstab 配置正确

通过修改 fstab 中的配置,您可以实现自动挂载硬盘分区、配置文件系统的读写权限、自动挂载方式等功能

lsblk -f 查看挂载情况
挂载:
mount [选项] <设备> <挂载点>

mount -t ext4 /dev/sdb1 /mnt/exfat(挂载点)

/mnt/exfat :表示分区挂载的目录。如果该目录不存在,则需要先创建该目录才能进行挂载操作

要将 /dev/sdb1 分区挂载到 /mnt/usb 目录下;挂载为只读模式可以这样做:
mount -o ro /dev/sdb1 /mnt/usb

mount -a :将 /etc/fstab 中定义的所有档案系统挂上

unmount: 卸载
-v:执行时显示详细的信息

umount -v /dev/sda1  ###通过设备名卸载
/dev/sda1 umounted
umount -v /mnt/mymount/   ###通过挂载点卸载;挂载点就是本地访问的文件目录
/tmp/diskboot.img umounted

卸载失败时,可能设备处于繁忙:
lsof | grep mymount         查找mymount分区里打开的文件 


交换分区:swap:

swapon -s        //查看都有哪些交换分区挂载
swapoff /dev/sda7  ###禁用交换分区
mkswap -U random /dev/sda7  ###随机生成新的uuid 为交换分区
swapon /dev/sda7   ###激活交换分区

首先查看当前swap分区的大小:free -m
新建磁盘分区指定状态为82,即为swap分区格式:fdisk命令
重读磁盘分区:partprobe命令
格式化swap分区:mkswap命令
手动挂载和卸载swap分区:swapon/off
设置开机自动挂载swap分区:swapon -a vim /etc/fstab
swapon -a   //用swapon -a来重读/etc/fstab文件,使新swap分区挂载

fdisk -l /dev/sda

ssh连接慢

/etc/ssh/sshd_config: 或者ip冲突
UseDNS no
GSSAPIAuthentication no

免密设置:
ssh-keygen是为ssh生成、管理和转换认证密钥的工具,它支持rsa和dsa两种认证密钥,默认rsa加密。
首先需要修改你要远程免密登录的目标服务器的远程连接配置sshd_config。
使用ssh-keygen生成公钥和私钥文件(默认在 ~/.ssh 目录,id_rsa.pub文件是公钥文件,另一个id_rsa是私钥文件)。
然后使用ssh-copy-id把生成的公钥拷贝到你要远程免密登录的目标服务器上。就可以了。

1、修改要远程登录得服务器-/etc/ssh/sshd_config

# 允许root账户远程登录
PermitRootLogin yes
# 关闭严模式
StrictModes no
# 允许密钥登录
RSAAuthentication yes
PubkeyAuthentication yes
# 公钥数据存放文件
AuthorizedKeysFile      .ssh/authorized_keys

2、重启目标sshd 服务

systemctl restart sshd.service

3、操控机器A copy 公钥到目标服务器B

ssh-keygen
ssh-copy-id root@B
ssh root@B   ##不需要输入密码即可

tail -f /var/log/secure
ssh -vvv remote_user@remote_ip
chmod 600 /root/
chmod 700 /root/.ssh/

当主板话了之后,会有老的密钥:ssh: connect to host 192.168.0.109 port 22: Connection refused问题
ssh-keygen -R +输入服务器的IP

磁盘空间占据

df -hT 与 du -sh 目录A ##差距比较大
在 TX2 系统上,告警提示磁盘空间不够

1、首先使用du / -h --max-depth=1 命令查看各个目录的占用空间,试图找到占用较多空间的目录du -h -x --max-depth=1
2、查看 inode 的使用率,怀疑 inode 不够导致此问题 df -i
3、使用 lsof 检查,怀疑是不是有可能文件已被删除,但是进程还存活的场景 lsof |grep delete;然后kill -9 进程id
4、如果mount目录下原来是有文件存在的,那么该目录被 mount 之后这些文件就会被隐藏,不属于该文件系统,使用du命令是看不到的: 先unmount  再查看目录文件是不是有了

OOM

内存使用率未占满的情况下触发了 OOM(Out Of Memory)原因肯恩那个如下:
1、内存使用率过高
通常情况下当实例内存使用率持续高于90%时,可判断为实例内存使用率过高。
在系统内部执行 top 命令后按 M,查看 RES 及 SHR 列是否有进程占用内存过高。
cat /proc/meminfo | grep -i shmem ##查看共享内存是否过高
cat /proc/meminfo | grep -i SUnreclaim ##查看不可回收的 slab 内存占用是否过高
cat /proc/meminfo | grep -iE “HugePages_Total|Hugepagesize” ##查看是否存在内存大页
HugePages_Total 输出非0,表示配置了内存大页。内存大页的大小为 HugePages_Total*Hugepagesize
确认已不需要内存大页,可通过注释 /etc/sysctl.conf 文件中的 vm.nr_hugepage 配置项,再执行 sysctl -p 命令取消内存大页

2、进程数超限
sysctl -a | grep min_free ##min_free_kbytes 值单位为 kbytes
vim /etc/sysctl.conf
vm.min_free_kbytes 值为不超过总内存的1%即可
sysctl -p 使其生效
sysctl -a | grep oom
若 vm.panic_on_oom=0,则系统会提示 OOM,并启动 oom-killer 杀掉占用最高内存的进程。
若 vm.panic_on_oom =1,则系统会自动重启。
3、检查系统可用内存是否低于 min_free_kbytes 值
min_free_kbytes 值表示强制 Linux 系统最低保留的空闲内存(Kbytes),如果系统可用内存低于设定的 min_free_kbytes 值,则默认系统启动 oom-killer 或强制重启。具体行为由内核参数 vm.panic_on_oom 值决定:

NTP

ntp处理指导:
netstat -antp | grep 123 看123端口是不是被占用,ntp默认是123端口
ntpdate -d 时钟源:强制同步(先停ntp服务,强制同步,打开ntp服务)
ntpq -np:-n不显示域名
ntpq -p
remote 表示提供时间来源的服务器地址。
refid 表示提供时间来源的服务器的上层时间来源服务器地址。
offset 表示本地与remote的时间偏移量,offset 越接近于0,本地与remote的时间越接近,单位为毫秒。
/etc/ntp.conf
server time1.tencentyun.com iburst
其中 minpoll 4 表示最小为2^4,maxpoll 5 表示最大为2^5;指定NTP消息的最小16s和最大32s轮询间隔以秒为单位。

CPU 空闲但高负载情况处理

Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
ps -axjf ##检查是否存在D状态进程
D 状态指不可中断的睡眠状态。该状态进程无法被关闭,也无法自行退出。

内存+CPU:
lsof 文件绝对路径:查看文件被哪个服务占用 lsof /var/log/messages
lsof | grep /var/log/messages 查看是否有进程打开这个文件
lsof -p 进程IP:查看该进程打开的内容
lsof -i:port 查看某个端口是不是被占用
lsof -c mysql 查看mysql都打开了哪些文件

tcp重传:
netstat -antp | grep -i “time_wait”
ss -a 查看机器的socket连接数
ss -l 查看机器的端口情况
ss -s 查看机器的网络连接数
ss -pl

初始系统

SUSE15

zypper lr  # 查看镜像源列表;列出仓库
zypper rr local-source  ## 删除镜像源
zypper install 软件名    ##安装软件
zypper rm telnet  ##删除安装软件
zypper lu   ##列出所有包可更新的
zypper update rsync  ##更新包
zypper se lvm  ##模糊查找安装的软件包,名字带lvm的
zypper info rsync  ##查看包的详细信息
zypper clean  ##清除 zypper 本地缓存

CentoS

yum install -y epel-release 安装epel第三方软件仓库
yum install -y net-tools 工具包集合,包含ifconfig等命令

rpm -qa | grep -i java | xargs -n1 rpm -e --nodepsrpm -qa:查询所安装的所有rpm软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件

yum list --showduplicate | grep jdk 查看jdk依赖的安装包
yum list tomcat 查看已安装的软件包
yum deplist tomcat 列出软件包的依赖性
yum check-update 检查可更新的程序
yum update tomcat升级tomcat包
yum update 升级所有安装包
rpm -qa kernel或rpm -qa | grep -i kernel
yum clean all
yum makecache

[root@docker01 ~]# yum install mariadb-server  安装
[root@docker01 ~]# yum remove mariadb-server   卸载
[root@docker01 ~]# rpm -qif `which mysql` #返回软件包的有关信息
[root@docker01 ~]# rpm -qf `which mysql`  #返回软件包的全名
[root@docker01 ~]# rpm -qlf `which mysql` #返回软件安装的文件列表;涉及哪些文件

Debian/Ubuntu

/etc/apt/sources.list  ##源
apt-get update 更新源
apt-get upgrade  ##更新软件包
grub2-mkconfig -o /boot/grub2/grub.cfg  ##重新生成grub配置并更新内核参数
dpkg --list | grep linux-image

CPU 和内核

CPU核数:一个CPU由多少个核心组成,核心数越多,代表这个CPU的运转速度越快,性能越好。对于同一个数据处理,一核CPU相当于1个人处理数据,双核CPU相当于2个人处理同一个数据,4核CPU相当于4个人去处理同一个数据,因此处理核心数越多,CPU的工作效率也就越高。
CPU核数是指中央处理器(CPU)中的内核数量,指CPU中有多少个独立的处理器核心。

NUMA

yum/apt install numactl -y

  • NUMA(Non Uniform Memory Access)非一致性内存访问.
    numa是一种关于多个cpu如何访问内存的架构模型,numa架构通俗说,一个物理cpu(一般包含多个逻辑cpu)构成一个node(node=cpu+内存),也就是说一个物理cpu再加一块内存构成了一个node。每个cpu可以访问自己node下的内存,也可以访问其他node的内存,但是访问速度是不一样的,自己node下的更快。numactl --hardware命令可以查看node状况。
    在这里插入图片描述

NUMA的内存分配策略有localalloc、preferred、membind、interleave。

localalloc规定进程从当前node上请求分配内存;
preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。
membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。
interleave规定进程从指定的若干个node上以RR(Round Robin 轮询调度)算法交织地请求分配内存。

numactl --hardware  ##系统的 NUMA 拓扑信息,包括可用节点、每个节点的 CPU 和内存信息以及节点之间的距离。
available: 2 nodes (0-1)
node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
node 0 size: 191698 MB
node 0 free: 6707 MB
node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63
node 1 size: 193527 MB
node 1 free: 228 MB
node distances:
node   0   1 
  0:  10  21 
  1:  21  10
以下是该输出结果的解释:
- "available: 2 nodes (0-1)" 表示系统中有两个 NUMA 节点,编号分别为 0 和 1。

- "node 0 cpus: ...""node 1 cpus: ..." 分别列出了每个节点上的 CPU 列表。例如,"node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30" 表示节点 0 上有 16 个 CPU,编号分别为 0、2、4、……、30。

- "node 0 size: ...""node 1 size: ..." 分别列出了每个节点的总内存大小。例如,"node 0 size: 31651 MB" 表示节点 0 的总内存大小为 31651 MB。

- "node 0 free: ...""node 1 free: ..." 分别列出了每个节点的可用内存大小。例如,"node 0 free: 28560 MB" 表示节点 0 目前有 28560 MB 的可用内存。

- "node distances:" 显示了每对节点之间的距离。例如,"0:  10  10" 表示节点 0 到节点 0 的距离为 10,节点 0 到节点 1 的距离为 21。
numactl --show查看当前策略
numastat:显示进程与每个numa节点的内存分配的统计数据和分配的成功与失败情况
                           node0           node1
numa_hit             61277893389     14730997697
numa_miss                      0               0
numa_foreign                   0               0
interleave_hit             34917           35980
local_node           61277803116     14730942389
other_node                 90273           55308
    numa_hit---命中的,也就是为这个节点成功分配本地内存访问的内存大小
     numa_miss---把内存访问分配到另一个node节点的内存大小,这个值和另一个node的numa_foreign相对应。
     numa_foreign--另一个Node访问我的内存大小,与对方node的numa_miss相对应
     interleave_hit---这个参数暂时不明确
     local_node----这个节点的进程成功在这个节点上分配内存访问的大小
     other_node----这个节点的进程 在其它节点上分配的内存访问大小

numactl -H :显示各node中内存使用情况
numastat -m :显示每个节点中,系统范围内使用内存的情况
numactl --show:查看当前策略
numactl --hardware: ##系统的 NUMA 拓扑信息,包括可用节点、每个节点的 CPU 和内存信息以及节点之间的距离。
numastat:显示进程与每个numa节点的内存分配的统计数据和分配的成功与失败情况

DPDK

DPDK

dpdk-devbind --status  ##查DPDK用得是哪个物理卡,mac

Data Plane Development Kit—dpdk
是一组快速处理数据包的开发平台及接口,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

当前数据包的处理流程是这样:
数据包到达网卡,网卡发送中断通知CPU,CPU将数据包拷贝到内核空间中,应用程序从内核空间中拷贝数据到用户态空间,数据处理。
网卡–>内核空间–>用户空间–>应用程序

dpdk解决问题办法:
DPDK技术是重载网卡驱动,直接将数据传递给用户态的应用程序,避免了中间环节的经过TCP/IP协议栈,内核空间到用户空间的copy。
同时针对第一点网卡频繁的中断,应用程序可以使用轮询的方式获取网卡上的数据,避免中断造成的场景切换和恢复浪费的时间。
网卡–>用户空间–>应用程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值