硬盘相关的概念

ATA ATA 定义了发送给硬盘的命令,标准定义了命令: ech IDENTIFY DEVICE: 获取设备信息 25h READ DMA EXT: 读取扇区 35h WRITE DMA EXT: 写入扇区 ATA 同时也是接口,图片如下。ATA 前身是 IDE,现在 ATA 叫做 PATA。 AHCI AHCI 可以简单理解为 PCIe <-> SATA 的转换器。AHCI 暴露为一个 PCIe 设备: $ lspci -vv 00:1f.2 SATA controller: Intel Corporation C600/X79 series chipset 6-Port SATA AHCI Controller (rev 05) Kernel modules: ahci 处理器通过 IO port/MMIO 访问 AHCI,然后 AHCI HBA 连接到 SATA 设备。 SATA SATA 一般说的是接口。它一般分为两个部分,数据和电源。数据部分只有 7 个 pin,三个 GND 和两对差分线(A+A- B+B-),图片如下:

Read More

在 ESXi 中用 PERCCli 换 RAID 中的盘

背景 最近有一台机器的盘出现了报警,需要换掉,然后重建 RAID5 阵列。iDRAC 出现报错: Disk 2 in Backplane 1 of Integrated RAID Controller 1 is not functioning correctly. Virtual Disk 1 on Integrated RAID Controller 1 has become degraded. Error occurred on Disk2 in Backplane 1 of Integrated RAID Controller 1 : (Error 2) 安装 PERCCli 首先,因为系统是 VMware ESXi 6.7,所以在DELL 官网下载对应的文件。按照里面的 README 安装 vib: esxcli software vib install -v /vmware-perccli-007.1420.vib 需要注意的是,如果复制上去 Linux 版本的 PERCCli,虽然也可以运行,但是找不到控制器。安装好以后,就可以运行 /opt/lsi/perccli/perccli 。接着,运行 perccli show all,可以看到类似下面的信息:

Read More

用 fluentd 收集 k8s 中容器的日志

背景 在维护一个 k8s 集群的时候,一个很常见的需求就是把日志持久化存下来,一方面是方便日后回溯,一方面也是聚合 replicate 出来的同一个服务的日志。 在我目前的需求下,只需要把日志持久下来,还不需要做额外的分析。所以我并没有部署类似 ElasticSearch 的服务来对日志进行索引。 实现 实现主要参考官方的仓库:https://github.com/fluent/fluentd-kubernetes-daemonset。它把一些常用的插件打包到 docker 镜像中,然后提供了一些默认的设置,比如获取 k8s 日志和 pod 日志等等。为了达到我的需求,我希望: 每个结点上有一个 fluentd 收集日志,forward 到单独的 log server 上的 fluentd log server 上的 fluentd 把收到的日志保存到文件 由于 log server 不由 k8s 管理,所以按照官网的方式手动安装: $ curl -L https://toolbelt.treasuredata.com/sh/install-debian-buster-td-agent4.sh | sh 然后,编辑配置 /etc/td-agent/td-agent.conf: <source> @type forward @id input_forward bind x.x.x.x </source> <match **> @type file path /var/log/fluentd/k8s compress gzip <buffer> timekey 1d timekey_use_utc true timekey_wait 10m </buffer> </match> 分别设置输入:监听 fluentd forward 协议;输出:设置输出文件,和 buffer 配置。如有需要,可以加鉴权。

Read More

静态编译 ipmitool

为了在 ESXi 上运行 ipmitool,需要静态编译 ipmitool。网上已经有一些解决方案: https://github.com/ryanbarrie/ESXI-ipmitool https://github.com/hobbsh/static-ipmitool https://github.com/ewenmcneill/docker-build-static-ipmitool 我稍微修改了一下,用来编译最新 ipmitool: #!/bin/bash set -x export VERSION=1.8.18 rm -rf ipmitool_$VERSION curl -L -o ipmitool_$VERSION.tar.bz2 http://deb.debian.org/debian/pool/main/i/ipmitool/ipmitool_$VERSION.orig.tar.bz2 tar xvf ipmitool_$VERSION.tar.bz2 cd ipmitool-$VERSION CC=gcc CFLAGS=-m64 LDFLAGS=-static ./configure make -j24 cd src ../libtool --silent --tag=CC --mode=link gcc -m64 -fno-strict-aliasing -Wreturn-type -all-static -o ipmitool.static ipmitool.o ipmishell.o ../lib/libipmitool.la plugins/libintf.la file $PWD/ipmitool.static 复制下来,编译完成后 scp 到 esxi 中即可使用。

Read More

通过 ipmitool 配置 iLO 4 管理端口

ipmitool 自带了对 iDRAC 的支持,可以通过 ipmitool delloem 设置 iDRAC 的管理端口。但是对 iLO 的支持并没有实现。研究了一番,找到了通过 raw command 配置 iLO 4 管理端口的方法。 这篇文章 讲述了 ipmitool lan 命令实际会发送的命令: 读取配置: $ ipmitool raw 0x0c 0x02 CHANNEL KEY SET BLOCK 一般来说 SET 和 BLOCK 都是 0。KEY 的常见取值: 3: IP 地址 4: IP 地址来源 5: MAC 地址 6: 子网掩码 12: 默认网关 返回的数据中,第一个字节忽略,剩下的就是数据了。 写入配置: $ ipmitool raw 0x0c 0x01 CHANNEL KEY DATA... 知道如何读取配置后,接下来就是找到 iLO 4 配置 NIC 的地方了。一番搜索,找到了 HPE iLO IPMI User Guide。在第 101 页,可以找到一个用于配置 iLO NIC 选择的设置:

Read More

ESXi 网络配置

用过 ESXi 的大家都知道,它网页版对网络的配置功能有限,特别是 IPv6 的部分,有的事情无法实现。更好的办法是 SSH 到 ESXi 上直接用命令行进行配置。 可能会用到的一些命令: esxcfg-vmknic: 用来给 vmkernel 配置地址 esxcfg-route: 设置系统路由表 esxcli: 大杂烩,很多功能都在里面 tcpdump-uw:魔改版 tcpdump 一些例子: 设置 IPv6 默认路由: [root@esxi:~]esxcfg-route -f V6 -a default $IPV6 删除 vmkernel 的 IPv6 地址: [root@esxi:~]esxcli network ip interface ipv6 address remove -i $VMKERNEL -I $IPV6/$PREFIX 参考:https://kb.vmware.com/s/article/1002662

Read More

Linksys E8450 OpenWRT 配置 w/ 802.11ax

背景 之前用的 newifi 路由器(Lenovo y1s)无线网总是出问题,于是换了一个新的支持 802.11ax 的路由器 Linksys E8450,目前在 openwrt snapshot 支持。Openwrt 的支持页面:Linksys E8450。 过程 按照支持页面,下载固件: $ wget https://downloads.openwrt.org/snapshots/targets/mediatek/mt7622/openwrt-mediatek-mt7622-linksys_e8450-squashfs-sysupgrade.bin 然后访问固件升级页面:http://192.168.1.1/config-admin-firmware.html#firmware,选择下载的 bin 文件。点击 “开始升级”,然后等待。一段时间后,ssh 到路由器: $ ssh root@192.168.1.1 The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established. ED25519 key fingerprint is SHA256:REDACTED. No matching host key fingerprint found in DNS. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.

Read More

用 gitlab ci 构建并部署应用到 k8s

背景 在 k8s 集群中部署了 gitlab-runner,并且希望在 gitlab ci 构建完成后,把新的 docker image push 到 private repo,然后更新应用。 参考文档:Gitlab CI 与 Kubernetes 的结合,Using Docker to build Docker images。 在 gitlab ci 中构建 docker 镜像 这一步需要 DinD 来实现在容器中构建容器。为了达到这个目的,首先要在 gitlab-runner 的配置中添加一个 volume 来共享 DinD 的证书路径: gitlabUrl: REDACTED rbac: create: true runnerRegistrationToken: REDACTED runners: config: |[[runners]] [runners.kubernetes] image = "ubuntu:20.04" privileged = true [[runners.kubernetes.volumes.empty_dir]] name = "docker-certs" mount_path = "/certs/client" medium = "Memory" privileged: true 注意两点:1. privileged 2.

Read More

Gnome 的 Fractional Scaling

背景 最近发现部分软件(包括Google Chrome,Firefox 和 Visual Studio Code) 在 125% 的 Fractional Scaling 模式下会很卡。找到了一些临时解决方法,但是很不优雅,也很麻烦。所以深入研究了一下 Fractional Scaling 的工作方式。 临时解决方法 根据关键字,找到了 Chrome menus too slow after enabling fractional scaling in Ubuntu 20.04。按它的方法,关闭 Google Chrome 的硬件加速,发现卡顿问题确实解决了。 类似地,也可以[关闭 VSCode 的硬件加速](Chrome menus too slow after enabling fractional scaling in Ubuntu 20.04),在 Firefox 里也可以找到相应的设置。这样操作确实可以解决问题。但是,对于每一个出问题的应用都这样搞一遍,还是挺麻烦的。 另一个思路是,不使用 Fractional Scaling,而只是把字体变大。但毕竟和我们想要的效果不大一样。 一些发现 在物理机进行了一些实验以后,发现一个现象:125% 的时候卡顿,而其他比例(100%,150%,175%,200%)都不卡顿。 网上一顿搜到,找到了 xrandr 工具。下面是观察到的一些现象(GNOME 设置分辨率一直是 1920x1080): 放缩比例 xrandr 显示的分辨率 xrandr 显示的 transform 100% 1920x1080 diag(1.

Read More

常用交换机命令

背景 最近接触了 Cisco,DELL,Huawei,H3C,Ruijie 的网络设备,发现配置方式各有不同,故记录一下各个厂家的命令。 Huawei 测试型号:S5320 保存配置 <HUAWEI>save The current configuration will be written to flash:/vrpcfg.zip. Are you sure to continue?[Y/N]y Now saving the current configuration to the slot 0.... Save the configuration successfully. 进入配置模式 <HUAWEI> system-view 查看当前配置 [HUAWEI] display current-configuration 查看 LLDP 邻居 [HUAWEI]display lldp neighbor brief 查看 CDP 邻居 [HUAWEI]display cdp neighbor brief 启用 LLDP [HUAWEI]lldp enable 启用 CDP [HUAWEI-XGigabitEthernet0/0/1]lldp compliance cdp txrx 启用只读 SNMPv1 community [HUAWEI]snmp-agent sys-info version all Warning: This command may cause confliction in netconf status.

Read More