这篇文章上次修改于 835 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
咕咕咕。。。
还有一个平板的评测还鸽着呢🤣,请叫我挖坑小能手
关于无盘系统,本人Google捣腾了一段时间,才发现Arch Linux Wiki上有一篇无盘系统的文章,自己在虚拟机环境下测试可行,这里记录下搭建的完整流程。
Windows 无盘系统的逻辑与 Linux 的完全不同,尝试 iSCSI 启动时会直接蓝屏,还没有找到比较靠fang谱bian的解决方法,只能先放着咯😑

画了一个简单的流程图
创建客户端目录
ArchLinux客户端系统
这里使用 ArchLinux 搭建环境,因为要使用到pacstrap创建系统根目录,当然其他的发行版也是可以的
mkdir arch-diskless
pacstrap -d ./arch-diskless base mkinitcpio-nfs-utils nfs-utils修改mkinitcpio配置以支持nfs网络启动
cd arch-diskless
vim etc/mkinitcpio.conf......
MODULES=(nfs r8168 broadcom tg3 e1000 e1000e)
BINARIES=(/usr/bin/mount.nfs)
HOOKS=(base udev autodetect modconf block filesystems keyboard fsck net)
......被wiki坑了,在MODULES中不用添加nfsv4,BINARIES也不需要添加/usr/bin/mount.nfs4,如果加了反而会无法启动🌚。可能是新版本已经修复这个问题,相关的文档还没有更正。
进入客户端系统并生成initramfs
mount -t proc /proc ./proc
mount -o bind /dev ./dev
mount -o bind /dev/pts ./dev/pts
mount -o bind /sys ./sys
arch-chroot .
mkinitcpio -p linux检查initramfs和kernel镜像是否存在,没有这两个文件系统根本无法启动
ls /bootinitramfs-linux-fallback.img initramfs-linux.img vmlinuz-linux退出chroot
exit
umount ./{sys,proc,dev/pts,dev}Debian 客户端系统
创建 debian 最小系统文件夹
apt install debootstrap
mkdir debian-chroot
debootstrap stable ./debian-chroot https://mirrors.tuna.tsinghua.edu.cn/debian/chroot 进入系统
mount -t proc /proc debian-chroot/proc
mount -o bind /dev debian-chroot/dev
mount -o bind /dev/pts debian-chroot/dev/pts
mount -o bind /sys debian-chroot/sys
chroot debian-chroot/安装必须的软件
apt update
apt install neofetch vim
apt install linux-image-amd64 initramfs-tools network-manager
systemctl enable networking修改 initramfs 配置,将 MODULES 的值修改为 netboot
vim /etc/initramfs-tools/initramfs.conf...
# MODULES: [ most | netboot | dep | list ]
#
# most - Add most filesystem and all harddrive drivers.
#
# dep - Try and guess which modules to load.
#
# netboot - Add the base modules, network modules, but skip block devices.
#
# list - Only include modules from the 'additional modules' list
#
MODULES=netboot
...重新生成 initramfs 并退出 chroot
update-initramfs -u
exit
umount debian-chroot/{sys,proc,dev/pts,dev}配置服务端

简单的网络拓扑图
修改 NFS 配置
vim /etc/exports添加配置
/srv/nfs/arch-diskless 192.168.x.0/24(rw,no_root_squash,no_subtree_check)/srv/nfs/arch-diskless共享目录192.168.x.0/24可访问的主机(注意主机名和权限的小括号中间是没有空格的)(rw,sync,no_root_squash)权限rw读写no_root_squash登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限。这个参数权限很大,请妥善使用。no_subtree_check即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
重启 NFS 服务
Debian
sudo systemctl restart nfs-kernel-serverArchLinux
sudo systemctl restart nfs-server修改 iPXE 启动脚本
添加启动项
item --key a arch_diskless (A)Archlinux Diskless
:arch_diskless
echo Boot Arch Linux Diskless System
set server_ip 192.168.x.x
set nfs_path /srv/nfs/arch-diskless
kernel nfs://${server_ip}${nfs_path}/boot/vmlinuz-linux
initrd nfs://${server_ip}${nfs_path}/boot/initramfs-linux.img
imgargs vmlinuz-linux initrd=initramfs-linux.img nfsroot=${server_ip}:${nfs_path} netboot=nfs ip=dhcp
boot || goto failedset server_ip 192.168.x.x 这里填写 NFS 服务器 IP
set nfs_path /srv/nfs/arch-diskless对应/etc/exports里的路径
vmlinuz 和 initrd 直接通过 NFS 文件系统获取
imgargs 在启动时给 Kernel 传递命令行参数
完成
到这里整个 Linux 无盘服务就搭建完成了🎉,出现问题的话可以参考下开头的流程图排错。
参考
BasicChroot
PXEBootDisklessSystem
Preboot Execution Environment (简体中文))
archlinux-diskless
只有一条评论 (QwQ)
大佬,方便加个wx吗,想和你聊聊键盘的事 我wx是EleksMaker