Skip to main content

Alpine 运维笔记

Tips#

# 常用命令lsblk --output NAME,SIZE,VENDOR,FSTYPE,LABEL,UUID,MODE# 使用 NAME 排序lsblk -x NAME --output NAME,SIZE,VENDOR,FSTYPE,LABEL,UUID,MODE
# 基础安装包apk add wpa_supplicant e2fsprogs-extra

bash#

# Bashapk add shadow bashusermod --shell /bin/bash admin# 该步骤要求输入密码# chsh root -s /bin/bash
# 补全apk add bash-completion# 加载补全source /etc/profile.d/bash_completion.sh

manpages#

apk add --no-cache man man-pages mdocml-apropos less less-docexport PAGER=less
# 安装和查看apk add --no-cache curl-docman curl
# 或者直接使用 docker 便于查文档docker run --rm -it wener/base:man# 可以安装映射到主机docker run --rm -it -v $PWD/man:/usr/share/man wener/base:man

基础运维#

# 基础工具apk add nano file grep htop rsync curl openssl
# 简化链接apk add tmux mosh
# sshrc - https://github.com/Russell91/sshrc# 依赖包apk add vim tar coreutils openssl
# 证书# /etc/ssl/certs/ca-certificates.crt
# 系统信息apk add neofetch

系统运维#

# 常用工具apk add util-linux# 扩展工具apk add blkid cfdisk findmnt mcookie setpriv sfdisk# 补全apk add util-linux-bash-completion
# 信息查询工具apk add lsof

硬件运维#

apk add pciutilsapk add usbutilsapk add partedapk add ddrescue
# dmidecode ownership vpddecode biosdecodeapk add dmidecode

setup-disk#

# 制作系统盘# swap 0setup-disk -m sys -s 0 -v /dev/sda
# ==========# 新系统检查项# ==========# 修改主机名setup-hostname -n alpine-test/etc/init.d/hostname --quiet restartnano /etc/hosts
# 修改网络地址nano /etc/network/interfaces

本地仓库#

ARCH=$(apk print --print-arch)REPO=$PWD/repomkdir -p $REPO/$ARCHapk fetch -vRo $REPO/$ARCH nano# 可以指定仓库apk fetch -vRo $REPO/$ARCH -X http://mirrors.aliyun.com/alpine/edge/main --no-cache linux-firmware-brcm
# 创建索引# 这里的 APKINDEX 是未签名的apk index -o $REPO/$ARCH/APKINDEX.tar.gz $REPO/$ARCH/*.apkapk -X $REPO update --allow-untrustapk -X $REPO search --allow-untrust nano

容器#

# Dockerapk add dockerrc-update add docker

磁盘扩展#

# 扩展分区# 假设分区结构为: boot,swap,root,空闲# 删除最后一个分区, 再创建最后一个分区, 确保起点位置不变# F 可以看到空余空间# 手动分区# fdisk /dev/sda# 或直接分区apk add util-linuxecho -e 'd\n\nn\n\n\n\n\n\np\nw\n' | fdisk /dev/sda
# 重启# 不重启应该也是可以的 - ext4 支持在线扩容# reboot
# 扩展文件系统apk add e2fsprogs-extraresize2fs /dev/sda2
# 检查结果df -h /
# parted 也可以parted /dev/sdb resize 1 1 200Mparted /dev/sdb resizepart 1 400Mresize2fs /dev/sdb1 400M

udev#

# 设置 /dev/diskapk add udev-init-scripts# OpenRC compatible fork of systemd-udevapk add eudev# init: udev udev-trigger udev-postmount udev-settlerc-update add udev sysinitrc-update add udev-trigger sysinit
# 如果想要立即启用rc-service udev startrc-service udev-trigger start
udevadm trigger
# 该包会影响网卡名字# 会添加 /lib/udev/rules.d/80-net-name-slot.rules# 需要参数 net.ifnames=0 来关闭# 大多数时候不需要# apk add eudev-netifnames
# 所有定义的规则udevadm info --export-db

zfs#

  • 先安装 udev 环境
  • 使用 zfs 时最好使用 uuid, 因为名字可能会发生变化
  • 0.6 时, 导致直接系统重启
  • 0.6 的 init 不是 openrc 的脚本, 启动会警告
apk add zfs zfs-{scripts,udev,utils-py}# vanilla 内核apk add zfs-vanilla# 加载内核模块modprobe zfsecho zfs >> /etc/modules
# init: zfs-import zfs-mount zfs-share zfs-zedrc-update add zfs-import sysinitrc-update add zfs-mount sysinit
# 立即启动rc-service zfs-import startrc-service zfs-mount start
# 检测是否正常zpool status
# 查看磁盘量parted --list# 查看现有磁盘 UUID# 依赖于 udev# 一般会有 ata, scsi, wwn 前缀之类ls -lh /dev/disk/by-id/# 只看主盘ls -lh /dev/disk/by-id/ | grep 'sd.$'
# -f 强制创建, 避免 Does not contain an EFI label 错误# -o ashift=12 使用高级磁盘格式# -m /mnt/data 指定挂载点, 不指定则默认挂载为 /<pool># p1 Pool 的名字# raidz 使用 RADI-Z 冗余zpool create -f -o ashift=12 -m /mnt/data p1 \  raidz \    ata-VBOX_HARDDISK_VB63cffc10-3a66b288 \    ata-VBOX_HARDDISK_VBfb21373d-56cc6c57 \    ata-VBOX_HARDDISK_VB91ae7aad-d4a73895
# 查看状态zpool status
#   pool: p1#  state: ONLINE#   scan: none requested# config:##   NAME                                       STATE     READ WRITE CKSUM#   p1                                         ONLINE       0     0     0#     raidz1-0                                 ONLINE       0     0     0#       ata-VBOX_HARDDISK_VB63cffc10-3a66b288  ONLINE       0     0     0#       ata-VBOX_HARDDISK_VBfb21373d-56cc6c57  ONLINE       0     0     0#       ata-VBOX_HARDDISK_VB91ae7aad-d4a73895  ONLINE       0     0     0## errors: No known data errors
# 此时可以重启测试看看 pool 是否还在
zpool status -x
# 将 scrub 作为周期性任务# 一般一两周一次, 至少一月一次echo '#!/bin/sh -zpool scrub main' > /etc/periodic/weekly/zfs-scrubchmod +x /etc/periodic/weekly/zfs-scrub
# 测试 crond# busybox 的 run-parts 功能较少apk add run-partsrun-parts /etc/periodic/weekly -v --report

uninstall zfs#

# 销毁使用的 poolzpool destroy pool
# 停止 servicerc-service zfs-import stoprc-service zfs-mount stop
# 移除 initrc-update del zfs-import sysinitrc-update del zfs-mount sysinit
# 移除内核模块modprobe -r zfs

btrfs#

# 辅助程序apk add btrfs-progsapk add btrfs-progs-extra# 补全apk add btrfs-progs-bash-completion
# 加载内核模块modprobe btrfs# 确保启动时加载echo btrfs >> /etc/modules
# 加载模块后会生成, 如果没有可以手动创建# mknod /dev/btrfs-control c 10 234
# -M 混合元数据和数据, 适用于小数据, 数据大了过后磁盘布局不可预见# -L 指定标签# -U 可手动指定 UUID, 避免修改 fstab# -O 指定特性mkfs.btrfs --help
# 查看支持的特性mkfs.btrfs -O list-all# mixed-bg            - mixed data and metadata block groups (0x4, compat=2.6.37, safe=2.6.37)# extref              - increased hardlink limit per file to 65536 (0x40, compat=3.7, safe=3.12, default=3.12)# raid56              - raid56 extended format (0x80, compat=3.9)# skinny-metadata     - reduced-size metadata extent refs (0x100, compat=3.10, safe=3.18, default=3.18)# no-holes            - no explicit hole extents for files (0x200, compat=3.14, safe=4.0)
# a.b.c.d 做 raid 1# 这几个设备的 uuid 会变成一样mkfs.btrfs -d raid1 -m raid1 /dev/sd{a,b,c,d}
# 此时可以将任意一个设备进行挂载mount /dev/sda /mnt/main/
# 设备扫描btrfs device scan# 查看文件系统btrfs filesystem show# 查看使用量btrfs fi df /data
# 执行 scrub# https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-scrub# 结果会存储于 /var/lib/btrfs/btrfs sc start /data# 查看执行状态btrfs sc status /data
# 执行 check# check or repair a btrfs filesystem# https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check# 不建议执行在线检测
# 自动挂载需要修改 /etc/fstabecho "UUID=$(blkid -s UUID -o value /dev/sda) /data btrfs defaults 0 0" >> /etc/fstab

failed to read the system array#

  • 会导致启动时挂载失败
[ 1985.671707] BTRFS info (device sde): disk space caching is enabled[ 1985.671712] BTRFS info (device sde): has skinny extents[ 1985.675608] BTRFS error (device sde): failed to read the system array: -5[ 1985.731217] BTRFS error (device sde): open_ctree failed
# 从新扫描后挂载btrfs dev scanmount -a
# 如果还不行可以尝试btrfs rescue zero-log /dev/sdemount -a

networking#

  • auto
    • try to ip link set <dev> up at boot. Best choice for anything PCIe/SoC.
  • allow-hotplug
    • for kernel+drivers+udev to detect the device, then ip link set <dev> up it. The only thing that can deal with annoying USB, SDIO, etc.
apk add ethtool# 支持更多的参数apk add ifupdownapk add iftop# 支持 -vapk add run-partsapk add iproute2# A utility to ping multiple hosts at once# http://fping.org/apk add fping
# 设置地址和掩码ifconfig eth1 192.168.8.182 netmask 255.255.252.0# 实际调用# 这里的 run-parts 可能是 busybox 的 run-parts, 不支持 -v, 建议额外安装# run-parts --exit-on-error --verbose /etc/network/if-pre-up.d# ip addr add 192.168.8.182/255.255.252.0 broadcast 192.168.11.255    dev eth1 label eth1ifup -v eth1
# 一个网卡, 多个网关auto eth0iface eth0 inet static    address 10.1.248.11    netmask 255.255.255.0    up ip route add default via 10.1.248.1 dev eth0  metric 100    up ip route add default via 10.1.248.3 dev eth0  metric 200
# 一个网卡, 多个地址auto eth0iface eth0 inet static  address aaa.aaa.aaa.aaa  netmask 255.255.254.0  gateway bbb.bbb.bbb.bbb  dns-nameservers ccc.ccc.ccc.ccc ddd.ddd.ddd.ddd eee.eee.eee.eee  dns-search vps-number.com  # 或者  up ip addr add fff.fff.fff.fff/prefixlen dev eth0
auto eth0:0iface eth0:0 inet static  address fff.fff.fff.fff  netmask 255.255.254.0

network benchmark#

apk add iperf3 iptraf-ng iftop
iperf3 -siperf3 -c HOST

init#

  • openrc
  • /etc/conf.d/localmount
    • 可配置强制挂载点

iscsi#

http://scst.sourceforge.net/

# An administration shell for storage targets# init: targetcli# bin: targetcli# apk add targetcli
# ISCSI target for SCST - userspace tools# apk add iscsi-scst
# High performance, transport independent, multi-platform iSCSI initiator# init: iscsid# bin: iscsi_discovery, iscsiadm, iscsi-iname# sbin: iscsid, iscsistart# conf:#   /etc/iscsi/initiatorname.iscsi#   /etc/iscsi/iscsid.conf#   /etc/iscsi/ifaces/ifaceapk add open-iscsi

netatalk#

stress#

stress --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1stress --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.097;}' < /proc/meminfo)k --vm-keep -m 10

disk#

  • badblocks
  • e2fsprogs-extra
apk add cdrkit# 检测 iso 是否可启动# 结果中会包含 El Torito 信息# https://en.wikipedia.org/wiki/El_Torito_(CD-ROM_standard)isoinfo -d -i is_it_bootable.iso
# burn isopv spp-2016.10.0.iso | dd bs=4M of=/dev/sdd

QEMU#

If you want to run VM as unprivileged user and let Qemu create tunX devices, then you must add that user to the group "qemu". If you use KVM for hardware-assisted virtualization, then you may also need to add that user to the group "kvm".

https://wiki.archlinux.org/index.php/QEMU_(简体中文)

https://allyourco.de/running-vmware-esxi-under-qemu-kvm/

kvm#

# 基础apk add qemu-system-x86_64 libvirt# 32 位apk add qemu-system-i386# 如果需要 GUI 管理apk add libvirt-daemon dbus polkit# 如果想用其他磁盘格式apk add qemu-img# 启用内核模块modprobe kvm-intelecho kvm-intel >> /etc/modules# 如果是 AMD# modprobe kvm-amd
# 开机启用rc-update add libvirtdrc-update add dbus
# KVM 默认会桥接 NAT, 如果想使用默认的网络配置, 需要加载 tun 模块modprobe tun
# 添加用户到分组addgroup $USER kvmaddgroup $USER qemuaddgroup $USER libvirt

virtual-disk#

modprobe nbd max_part=16# 链接qemu-nbd -c /dev/nbd0 image.qcow2partprobe /dev/nbd0# 挂载mount /dev/nbd0p1 /mnt/image
umount /mnt/image
# 断开连接qemu-nbd -c /dev/nbd0

ftp#

apk add vsftp# 修改配置nano /etc/vsftpd/vsftpd.conf# 最简配置, 允许匿名操作cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.oldecho "anonymous_enable=YESwrite_enable=YESanon_upload_enable=YESanon_mkdir_write_enable=YESdirmessage_enable=YESxferlog_enable=YESxferlog_file=/dev/stdoutconnect_from_port_20=YESftpd_banner=Welcome to wener FTP service.listen=YESbackground=NO" > /etc/vsftpd/vsftpd.conf

lvm#

apk add lvm2modprobe dm-mod
# 扫描逻辑分组vgscan# 激活vgchange -ay SangomaVGlvs# 挂载mount /dev/SangomaVG/root /mnt/data

libguestfs#


guestfish: guest filesystem shellguestfish lets you edit virtual machine filesystemsCopyright (C) 2009-2016 Red Hat Inc.Usage:  guestfish [--options] cmd [: cmd : cmd ...]Options:  -h|--cmd-help        List available commands  -h|--cmd-help cmd    Display detailed help on 'cmd'  -a|--add image       Add image  -c|--connect uri     Specify libvirt URI for -d option  --csh                Make --listen csh-compatible  -d|--domain guest    Add disks from libvirt guest  --echo-keys          Don't turn off echo for passphrases  -f|--file file       Read commands from file  --format[=raw|..]    Force disk format for -a option  -i|--inspector       Automatically mount filesystems  --keys-from-stdin    Read passphrases from stdin  --listen             Listen for remote commands  --live               Connect to a live virtual machine  -m|--mount dev[:mnt[:opts[:fstype]]]                       Mount dev on mnt (if omitted, /)  --network            Enable network  -N|--new [filename=]type                       Create prepared disk (test<N>.img or filename)  -n|--no-sync         Don't autosync  --no-dest-paths      Don't tab-complete paths from guest fs  --pipe-error         Pipe commands can detect write errors  --progress-bars      Enable progress bars even when not interactive  --no-progress-bars   Disable progress bars  --remote[=pid]       Send commands to remote guestfish  -r|--ro              Mount read-only  --selinux            Enable SELinux support  -v|--verbose         Verbose messages  -V|--version         Display version and exit  -w|--rw              Mount read-write  -x                   Echo each command before executing it
To examine a disk image, ISO, hard disk, filesystem etc:  guestfish [--ro|--rw] -i -a /path/to/disk.imgor  guestfish [--ro|--rw] -i -d name-of-libvirt-domain
--ro recommended to avoid any writes to the disk image.  If -i option failsrun again without -i and use 'run' + 'list-filesystems' + 'mount' cmds.
For more information, see the manpage guestfish(1).

acf#


crond#

  • 实际执行时使用的 run-parts
  • busybox 自带的 run-parts 功能较少, 可额外安装
echo 'CRON_OPTS="-c /etc/crontabs -L /var/log/crond.log -l 6"' > /etc/conf.d/crondrc-update add crondrc-service crond restart
BusyBox v1.26.2 (2017-10-04 13:37:41 GMT) multi-call binary.
Usage: run-parts [-a ARG]... [-u UMASK] [--reverse] [--test] [--exit-on-error] DIRECTORY
Run a bunch of scripts in DIRECTORY
    -a ARG      Pass ARG as argument to scripts    -u UMASK    Set UMASK before running scripts    --reverse   Reverse execution order    --test      Dry run    --exit-on-error Exit if a script exits with non-zero
Usage: run-parts [OPTION]... DIRECTORY      --test          print script names which would run, but don't run them.      --list          print names of all valid files (can not be used with                      --test)  -v, --verbose       print script names before running them.      --report        print script names if they produce output.      --reverse       reverse execution order of scripts.      --exit-on-error exit as soon as a script returns with a non-zero exit                      code.      --lsbsysinit    validate filenames based on LSB sysinit specs.      --new-session   run each script in a separate process session      --regex=PATTERN validate filenames based on POSIX ERE pattern PATTERN.  -u, --umask=UMASK   sets umask to UMASK (octal), default is 022.  -a, --arg=ARGUMENT  pass ARGUMENT to scripts, use once for each argument.  -V, --version       output version information and exit.  -h, --help          display this help and exit.

wireguard#

  • 3.8 还没有,需要使用 edge
qemu-img create -f raw edge-virt.raw 300Mwget https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.8/releases/x86_64/alpine-virt-3.8.2-x86_64.isoqemu-system-x86_64 -m 2g -hda edge-virt.raw -net nic -net user,hostfwd=tcp::2222-:22 -cdrom alpine-virt-3.8.2-x86_64.iso -boot d
# Setup VMsetup-interfacesrc-service networking restartsetup-sshd -c opensshecho 'PermitRootLogin yes' >> /etc/ssh/sshd_configecho root:root | chpasswdrc-service sshd restart
# From Hostssh-keygen -R [127.0.0.1]:2222ssh [email protected] -p 2222
echo "http://mirrors.aliyun.com/alpine/edge/mainhttp://mirrors.aliyun.com/alpine/edge/communityhttp://mirrors.aliyun.com/alpine/edge/testing" >> /etc/apk/repositoriesapk update
ERASE_DISKS=/dev/sda setup-disk -m sys -s 0 /dev/sdapoweroff

FAQ#

ip: ioctl 0x8913 failed: no such device#

  • 可能是网卡名字发生了改变

恢复网卡名字#

  • 安装 udev 后可能会出现, 因为 udev 可能会进行重命名
  • 此时 eth0 可能就不存在了, 此时可能名字为 enp0s3 这样的
  • 在 udev 中改变 if name 的为独立包, eudev-netifnames, 将该包移除即可
    • /lib/udev/rules.d/80-net-name-slot.rules
# 查看网络设备名cat /proc/net/dev
# 查看网络控制器lspci | egrep -i --color 'network|ethernet'# 查看网络相关硬件lshw -class network
ifconfig -aip link showip a

文件系统变成了只读#

  • 看看 /etc/fstab 的 UUID 是否有多的,错误的或重复的
  • 使用 df 查看当前挂载设备
  • blkid 查看设备 UUID
  • 从新挂载为读写 mount -rw -o remount UUID=<正确的 UUID> /
  • 修改 /etc/fstab
  • 重启

find: /sys/module/pcc_cpufreq#

  • 查看 linux/cpufreq

traps: rc-status[3854] general protection#

[ 6921.149981] traps: rc-status[3854] general protection ip:7ca2e00baa1b sp:7ecdf01d7038 error:0[ 6921.149987]  in ld-musl-x86_64.so.1[7ca2e009d000+89000][ 6921.150003] grsec: From 192.168.11.29: Segmentation fault occurred at            (nil) in /bin/rc-status[rc-status:3854] uid/euid:0/0 gid/egid:0/0, parent /bin/bash[bash:3570] uid/euid:0/0 gid/egid:0/0[ 6921.150020] grsec: From 192.168.11.29: denied resource overstep by requesting 4096 for RLIMIT_CORE against limit 0 for /bin/rc-status[rc-status:3854] uid/euid:0/0 gid/egid:0/0, parent /bin/bash[bash:3570] uid/euid:0/0 gid/egid:0/0
# 生成转储的异常为 denied resource overstep by requesting 4096 for RLIMIT_CORE against limit 0# 查看当前的 limitulimit -a# 配置文件cat /etc/security/limits.conf# RLIMIT_CORE = 0 说明不能创建转储# 针对当前会话设置, 再次调用时会生成 core 文件ulimit -c 4096

RLIMIT_AS //进程的最大虚内存空间,字节为单位。 RLIMIT_CORE //内核转存文件的最大长度。 RLIMIT_CPU //最大允许的CPU使用时间,秒为单位。当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。然而,可以捕捉信号,处理句柄可将控制返回给主程序。如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送 SIGKILL信号终止其执行。 RLIMIT_DATA //进程数据段的最大值。 RLIMIT_FSIZE //进程可建立的文件的最大长度。如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。 RLIMIT_LOCKS //进程可建立的锁和租赁的最大值。 RLIMIT_MEMLOCK //进程可锁定在内存中的最大数据量,字节为单位。 RLIMIT_MSGQUEUE //进程可为POSIX消息队列分配的最大字节数。 RLIMIT_NICE //进程可通过setpriority() 或 nice()调用设置的最大完美值。 RLIMIT_NOFILE //指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。 RLIMIT_NPROC //用户可拥有的最大进程数。 RLIMIT_RTPRIO //进程可通过sched_setscheduler 和 sched_setparam设置的最大实时优先级。 RLIMIT_SIGPENDING //用户可拥有的最大挂起信号数。 RLIMIT_STACK //最大的进程堆栈,以字节为单位。

ip: RTNETLINK answers: File exists#

  • ip addr add 时出现
  • usually indicates that a route already exists and you are trying to add it again.
  • rtnetlink.7
    • Linux IPv4 routing socket
  • 网络启停时是依据 /var/run/ifstate 中的 if 状态进行操作
  • 如果一开始停止失败, 那么就会导致启动是会, 导致实际的 if 状态和 ifstate 中的状态不一致
  • Two Default Gateways on One System
  • inetfaces 中只能指定一条 gateway
    • 如果指定了多条会出现该异常
  • Linux Advanced Routing & Traffic Control
# 例如ip addr add 192.168.8.182/255.255.252.0 broadcast 192.168.8.255 dev eth1 label eth1# 此时可以尝试ip addr flush dev eth1# 查看实际操作strace -e open ifup eth1# 直接添加 eth1=eth1nano /var/run/ifstate# 然后就可以正常操作 ifup 和 ifdown 了

grsec: time set by /sbin/hwclock[hwclock:2863]#

[   14.977686] grsec: time set by /sbin/hwclock[hwclock:2863] uid/euid:0/0 gid/egid:0/0, parent /lib/rc/sh/openrc-run.sh[openrc-run.sh:2838] uid/euid:0/0 gid/egid:0/0

node docker seg fault#

PHP 下 iconv 有问题#

Alpine 下 PHP 的 iconv 有问题 https://github.com/docker-library/php/issues/428 https://github.com/docker-library/php/issues/240

apk add --no-cache gnu-libiconv --repository http://mirrors.aliyun.com/alpine/edge/testingLD_PRELOAD=/usr/lib/preloadable_libiconv.so php# 或export LD_PRELOAD="/usr/lib/preloadable_libiconv.so php"
RUN apk add gnu-libiconv --no-cache --repository mirrors.aliyun.com/alpine/edge/testingENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php

rc-status sysinit 异常#

启动分区修复#

  1. mbr 坏了但分区是好的
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/mbr.bin of=/dev/sdc
  1. 启动分区坏了
# 查看分区信息file -s /dev/sdc1

TBD#

[    0.013013] DMAR-IR: This system BIOS has enabled interrupt remapping               on a chipset that contains an erratum making that               feature unstable.  To maintain system stability               interrupt remapping is being disabled.  Please               contact your BIOS vendor for an update


[ 7785.189928] perf: interrupt took too long (2658 > 2500), lowering kernel.perf_event_max_sample_rate to 75000