这篇文章上次修改于 537 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
咕咕咕。。。
还有一个平板的评测还鸽着呢🤣,请叫我挖坑小能手
关于无盘系统,本人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 /boot
initramfs-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-server
ArchLinux
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 failed
set 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