Linux相关配置+双系统安装记录
Linux Config
本来想在 leetcode 上一展宏图,没想到被拉去做服务器运维去了 😭 记录一下今天踩的坑 :pig_face:
前情提要
在做好一切 ssh 配置后,进行最后的维护检查,htop 时发现了 64 核 cpu 全部 100% 占用。第一反应是查看运行进程,发现是大量不具名的--bash进程。
进行断网处理后,发现进程不再继续进行。断开所有 ssh 连接后,重新恢复网络连接,通过 wireshark 发现了一个非常可疑的发往 143.110.58.7 的网络包(实际挖矿 IP 代理有美国,欧洲和中国香港 IP),通过 80 端口发出,随后进行三次握手后,所有 cpu 开始饱满。通过sudo ufw deny 80/tcp后杀死进程不会再重启。否则会在一段时间后重启。立刻怀疑服务器已经被植入挖矿脚本。随后证实了如下情况。
通过日志得知该进程在嗅探过程中发现本机 22 端口完全不设防并且密码极其简单,采用暴力方式破解后通过 ssh 植入了后门。只可惜没有做的太干净,还是被我发现了 😅服务器的密码设置的太简单,又通过内网穿透暴露到了外网,被端口扫描发现并植入了恶意挖矿脚本,进行全天候 24 小时挖矿,并且夺取了系统的 root 权限。于是我们只得重新安装 bios 和操作系统。
今天师傅重新安装了 BIOS。于是我们重新安装 ubuntu22.04 到服务器上。我们的服务器共两台,每台是 64 核 CPU,x86_64 架构,CPU 是很不错的 AMD Ryzen Threadripper PRO 7975WX 32-Cores,是很先进的 cpu~,cpu 支持 52 位实地址,57 位虚地址。感兴趣的小伙伴可以看看,偷偷打印了一份 CPU 的报告 :face_savoring_food:
cpu.txt|attachment (3.6 KB)
然后 GPU 是 L40,两机各两台。通过 nvidia 的 bluefield 的 DPU,支持 InfiniBand,RocE 两种 RDMA 协议,可以让两卡通信数据绕过 cpu 内核直接写入内存。之前还出现过高温的情况(DPU 烧到了接近 100 度 😭),不过后面还是通过加装更多的风扇解决了。
开始处理。首先基本的系统安装完成后,开始装载我们的 7.3T 的硬盘和 NvMe 硬盘。担心原先的硬盘也被动了手脚,于是我重新进行了分区,格式化硬盘里的所有数据,在 root 路径下创建一个新的文件夹,并将其挂载。
mklabel gpt
mkpart primary 1 -1
p # output
sudo mkfs.ext4 /dev/sda # 格式化硬盘
手动挂载会导致服务器重新上电后不自动挂载。因此我们将挂载规则写入 etc/fstab

/dev/sda /disk1 ext4 defaults 0 0
这样每次都会将我们的硬盘以 ext4 格式挂载到/disk1 路径下。
接下来还需要扩展系统盘。默认的系统盘安装在 NvMe 后,只会分配 100GB 的空间。我们将 NvMe 硬盘分成了 3 个分区,前两个分区用于
- /boot(目录用于存储启动 Linux 系统所需的核心文件,包括内核文件(如 vmlinuz),初始 RAM 磁盘映像(如 initrd 或 initramfs),以及用于启动加载程序(如 GRUB)的配置文件);
- /boot/efi(一个可扩展固件接口,用于efi启动器的挂载点,包含了efi版本的grub);
最后一个分区被用来整个作为系统盘。我们于是:
sudo vgdisplay # 查看各个盘,分区和大小
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv # 记不清名字啦
resize2fs dev/mapper/ubuntu--vg-ubuntu--lv # 重新调整大小进行扩容
这样就成功扩容系统盘大小。效果图如下:

接下来解决启动过程中等待时间过长问题,经过排查得知是强行等待网络连接直至 2min30s 超时导致,于是手动修改 systemd-networkd-wait-online.service 规则。
cd /etc/systemd/system/network-online.target.wants/
sudo vim systemd-networkd-wait-online.service
在 [Services] 一栏添加 TimeoutSec=5,强制超时 5s 后立刻启动。

这样无需等待启动。
此时另一位同学加入战场,于是失去了学习配置 ssh 公钥私钥的机会,去安装相关 nvidia 驱动,cuda 编译相关工具。
首先安装 C/C++ 相关编译工具链。
sudo apt update && sudo apt install build-essentials
安装 gcc-11 和 g++-11 版本适配 Ubuntu22.04. 接下来安装 nvidia 相关驱动,nvidia-smi 显示相关驱动为 570 版本。
sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
成功安装 nvidia 相关驱动。接着安装相关工具链,这也很简单,也就是sudo apt install nvidia-cuda-toolkit
很顺利,和第一次一样成功安装。

接下来进行 gpu 压力测试,我们采用最经典的 gpu-burn。
wget https://codeload.github.com/wilicc/gpu-burn/zip/master # 下载
unzip gpu-burn-master.zip # 解压缩
cd gpu-burn-master
make
形成 gpu-burn 可执行文件。基于之前的经验,采用 double 运算无法让 GPU 达到功率墙,因为 GPU 最擅长的不是双精度浮点运算,而是单精度 float。因此进行压测,采用 90% 的 memory 占用,压测 5 分钟。五分钟满载测试,GPU 温度不超过 75 度。成功。
./gpu-burn -tc -m 90% 300 # tc 启用 tensorCore

接下来检查 cpu 是否在上次的挖矿中受损。因此采用 stress --cpu 64 对全部 cpu 进行压测。温度在 85 摄氏度左右,表现正常。

此时同学已经将公,私钥配好并进行分发。于是在配置好中央 windows 跳板机后,利用跳板机配置代理转发功能,实现跳板机登录服务器。首先将私钥存入本机中。/User/xxx/.ssh/id_jump 中。随后在 vscode 内写入规则。
Host 这里是服务器名
HostName 这里是 IP
User 这里是用户名
Port 这里是 ssh 端口
ProxyJump 这里是跳板机
IdentityFile /Users/xxx/.ssh/id_jump // 私钥地址
Host 跳板机名
HostName IP
User 用户名
Port 端口
IdentityFile /Users/xxx/.ssh/id_jump // 私钥地址
这样就实现了一键无密钥登录服务器。
双系统安装 (Windows 10 + ubuntu 18.04)
- 下载 easy UEFI,准备好一个空的 U 盘,下载 ubuntu 18.04 amd64 iso 文件
- 通过 easy UEFI 制作好了一个启动盘。启动盘制作时,选择 U 盘作为 disk 分区,选择 EFI/bootx64.EFI 作为引导项。
- 对磁盘进行分区。对于磁盘 1,我们需要借助他的 EFI 启动分区来帮助启动我们的 ubuntu。因此我们将其划出 1GB 的分区空间作为/boot 挂载点。efi 分区将自动扫描检测得到。接着将磁盘 2 划分出 600GB 作为根目录挂载空间。
- 随后选择我们的启动盘启动,进入 grub 引导。随后按照我们划分的分区来格式化成 ext4 文件格式提供给 ubuntu18.04(注意!千万不能将整个盘作为 ubuntu 系统的启动盘,不然数据都没了不就寄了)
- 进入 ubuntu,仅安装 openssh,剩下的到时候再说吧。
ubuntu 配置
1.没有网络怎么办?先以太网连接,再配置无线网络。
2.ifconfig -a 找到无线网卡,这里我们的无线网卡是 wlp4s0,也可以通过 iw dev 来显示。
3.接下来进入到 /etc/netplan 中进行编辑 00-installer-config.yaml。我们主要编辑如下:
network:
ethernets:
enp3s0:
dhcp4: true
wifis:
wlp4s0:
dhcp4: true
access-points:
"<WIFI-SSID>":
password: "password"
version: 2
最后执行:
apt install wpasupplicant
apt install network-manager
netplan generate
netplan apply
拔掉物理网线即可。
4.配置超时策略
同上。
5.从疑难杂项中选择从其他镜像启动,选择 ubuntu 即可。

浙公网安备 33010602011771号