你会用 NAS 给 PC 装系统吗?

2020-04-29 17:31:46 79点赞 659收藏 43评论

新组装的 PC 需要装系统,但是手边又没有合适的U盘做启动介质,不如试试在家里搭一套安装系统的网络服务吧。利用 PXE 网络启动,可以无需U盘就能把 Win10 和 Ubuntu 20.04 装好。首先整个项目的文件打包可以点击这里下载。

概述

这是一套涉及到多个服务组件相互配合的系统,但整体配置还不算复杂,先来看看整个项目的结构吧。

你会用 NAS 给 PC 装系统吗?

整个项目大体分为 4 个组件,分别是 DHCP 服务器、TFTP 文件服务器、HTTP 服务器、SMB 文件共享服务和 iPXE 网卡启动 ROM。

PXE 是预启动执行环境(Preboot eXecution Environment),可以通过网卡启动 PC,而不需要依赖本地硬盘里的数据,对于装系统来说再合适不过了。

PXE 启动并安装系统的原理如下:

  1. PC 在 BIOS 中选择从网卡启动

  2. PC 网卡发出 DHCP 请求

  3. DHCP 服务器应答 PXE 启动配置文件路径

  4. PC 网卡下载对应的 PXE 启动配置文件,并启动执行环境

  5. PXE 在执行环境中加载系统安装文件,启动正常的系统安装过程

下面让我们一步一步的看看应该怎么配置。

DHCP

第一步需要配置 DHCP 服务器,一般我们用的 openwrt 会使用 dnsmasq 做 DHCP 服务器。就以 dnsmasq 的配置文件为例。

dhcp-match=set:iPXE,175

dhcp-boot=tag:!iPXE,ipxe.efi,DiskStation,10.10.10.201

dhcp-boot=tag:iPXE,http://10.10.10.201:12345/menu.ipxe


一行一行的来看。

第 1 行是对包含 175 tag 的请求,打上 iPXE 的标志。这里涉及一个新概念 iPXE。iPXE 是新一代的网卡 PXE ROM,拥有更多的功能。与老版 PXE ROM 相比,在使用中最明显的区别就是,iPXE 可以通过 http 下载启动配置,而老版 PXE 只能通过 tftp 下载,http 比 tftp 在传输性能上要高出很多。如果你是这几年新买的网卡,基本都是原生带有 iPXE ROM 的了。而 DHCP 请求中带有 175 tag 也就标志着这块网卡是支持 iPXE 的。

第 2 行先判断了只有不带 iPXE 标志的请求才会执行,!是否定的意思。这一行是指示老版 PXE 通过 tftp 去 10.10.10.201 这台服务器上下载 ipxe.efi 这个文件来执行,DiskStation 是这台服务器的名字。执行了 ipxe.efi 之后,旧网卡就也支持 iPXE 特性了。

第 3 行是判断带有 iPXE 标志的请求,回去对应的 http 地址下载我们准备好的启动配置文件。

总体来看这个配置文件就是让支持 iPXE 的网卡直接通过 http 去下载配置文件,不支持的网卡先刷上支持的 ROM,再以支持 iPXE 的网卡的身份重新请求一次 DHCP。

TFTP 服务器

从上面 DHCP 的请求过程可以看出来,我们需要在 TFTP 服务器上放一个 ipxe.efi文件,这个文件可以从 ipxe.org 下载到。由于后续请求都会由 iPXE ROM 通过 http 发起,所以 TFTP 服务器也只需要这一个文件就够了。

群晖的系统自带 TFTP 服务器,可以在 控制面板 - 文件服务 中开启。

你会用 NAS 给 PC 装系统吗?

HTTP 服务器

iPXE ROM 可以通过 http 协议下载文件,大大提升了文件加载速度。对于千兆内网来说,2.5G 的 ubuntu 20.04 安装镜像,也只需要 1 分半钟左右就能下载完成了。

所以我们会把安装中用到的大部分文件都放在 http 服务器上。目录结构可以参考最上面 httproot 的部分。http 服务器我是在 Docker 里跑了一个 Caddy 的。其实你用群晖自带的 Web Station 应该也可以。

menu.ipxe 是 iPXE 启动后会显示的一个菜单,可以选择安装 Windows 10 或者 Ubuntu 20.04,根据选择的结果再去加载对应操作系统的安装文件。以下是它的内容。

#!ipxe

:start

menu Choose to Install

item --key w windows Install Windows 10

item --key u ubuntu Install Ubuntu 20.04

item --gap -- --------------------------------------

item --key t shell Drop to iPXE shell

item reboot Reboot

item --key q exit Exit iPXE and try next boot device in BIOS

choose --timeout 10000 --default exit selected

set menu-timeout 0

goto ${selected}

:shell

shell

goto start

:reboot

reboot

:exit

exit

:windows

kernel wimboot

initrd images/win/install.bat install.bat

initrd images/win/winpeshl.ini winpeshl.ini

initrd images/win/pe/Boot/BCD BCD

initrd images/win/pe/Boot/boot.sdi boot.sdi

initrd images/win/pe/sources/boot.wim boot.wim

boot

:ubuntu

kernel images/ubuntu/mnt/casper/vmlinuz vmlinuz

initrd images/ubuntu/mnt/casper/initrd initrd

imgargs vmlinuz initrd=initrd ip=dhcp boot=casper url=http://10.10.10.201:12345/images/ubuntu/ubuntu-20.04-desktop-amd64.iso

boot


配置文件语法类似 shell 脚本。先声明一个 menu,再根据用户的选择跳转到不同的位置去执行。

这个配置文件作为一个示例,如果你想安装别的系统只需要参考文档做对应的修改就好了。

Windows 10

上面的 menu.ipxe 中 :windows 下面对应了 Windows 10 的安装。Windows 10 的安装用到了一个 boot loader 叫 wimboot,它可以帮你从 iPXE 中引导一个 WinPE 系统。WinPE 相关的文件可以从 Windows Assessment and Deployment Toolkit (ADK)中获得,或者直接用我打包好的 httproot/images/win/pe 中的就行。winpeshl.ini 会告诉 WinPE 启动后先去执行 install.bat,而 install.bat 会尝试 ping 并 mount SMB 共享中的 Windows 10 安装文件。

install.bat 内容如下

wpeinit

SMBSERVER=10.10.10.201

SMBPATH=smbpath

SMBUSER=smbuser

SMBPASS=smbpass

ping "%SMBSERVER%" -n 3

net use w: %SMBSERVER%%SMBPATH% /user:%SMBUSER% %SMBPASS%

:ask

@echo Which version do you want to install?

@echo 1. Win10 1909

@echo 2. Win10 1903

@echo off

set INPUT=

set /P INPUT=Type the number:

if /I "%INPUT%" EQU "1" (

goto :Win10_1909

)else if /I "%INPUT%" EQU "2" (

goto :Win10_1903

)else (

@echo Invalid Input %INPUT%

goto :ask

)

:Win10_1903

w:win10_1903setup.exe

exit

:Win10_1909

w:win10_1909setup.exe

exit


开头 4 个变量的意义:

  • SMBSERVER: SMB 共享服务器 IP

  • SMBPATH: SMB 共享目录名

  • SMBUSERSMB: 共享登陆用户名(有只读权限即可)

  • SMBPASS: SMB 共享登陆密码

这个脚本中包含了 win10_1903 和 win10_1909 两个版本,对应了 smbroot 中的两个目录,你可以选择自己喜欢的版本安装。这两个目录的内容即是对应的安装 iso 镜像里的内容。

对应的操作均可以在群晖的 NAS 中完成,SMB 共享服务可以在 控制面板 - 文件服务中开启,对应共享文件夹的权限也可以在 共享文件夹 中设置。

群晖的 File Station 应用可以直接挂载 iso 镜像,挂载之后把镜像内的内容都复制到对应的 SMB 共享文件夹里就行了。

Ubuntu 20.04

Ubuntu 20.04 的安装对应 menu.ipxe 中 :ubuntu 之下的内容。Ubuntu 的安装非常简单,只涉及 http 服务器上的内容就够了。

将下载好的 iso 放在 images/ubuntu 目录里,然后将它挂载到 images/ubuntu/mnt 目录上。iPXE 会下载 casper/vmlinuz 作为 kernel,casper/initrd 作为 initrd 来启动 Live Desktop,并在启动后下载 ubuntu-20.04-desktop-amd64.iso 来准备安装文件。

只用路由器也能装系统了?

以上所说的所有服务,其实在 OpenWrt 上都有对应的功能。所以如果你的软路由存储空间够大的话,按照上述配置,只用一个路由器也可以给 PC 装系统了。


展开 收起
43评论

  • 精彩
  • 最新
  • 好主意~ 想了几次了都没动手。

    校验提示文案

    提交
    可以试试了

    校验提示文案

    提交
    收起所有回复
  • 一群人怎么研究黑群晖,你可倒好,花大几千买个群晖装pc系统, [小眼睛] [小眼睛] [小眼睛] [小眼睛] [小眼睛]

    校验提示文案

    提交
    哈哈,我们好像说的不是一个事。是给 PC 装系统,不是装 PC 系统 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 不是保姆级教程看不太懂啊,还是谢谢博主

    校验提示文案

    提交
    相信自己,你能行的

    校验提示文案

    提交
    收起所有回复
  • 何苦呢,紫薯布丁。

    校验提示文案

    提交
    如果可能反复装好几次系统就有用处了

    校验提示文案

    提交
    这又是何苦呢…

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 家用貌似不太适用,毕竟系统更新很快 半年就有新版本

    校验提示文案

    提交
    换个iso就行了,搭好后比刷优盘快

    校验提示文案

    提交
    收起所有回复
  • 楼主,文件包打不开,求解,谢了

    校验提示文案

    提交
    我刚试了一下能打开啊,或者需要科学?

    校验提示文案

    提交
    求科学教程🤝

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 要有折腾的时间早就装完多少个系统了,除非特定场景的,另外现在efi启动的场景网络启动有点不同

    校验提示文案

    提交
    是为特定场景准备的

    校验提示文案

    提交
    收起所有回复
  • 写得好,能不能直接把系统装nas里?电脑不用硬盘

    校验提示文案

    提交
    能,nas提供iscsi盘,系统装在nas上

    校验提示文案

    提交
    估计我自己存储池没弄好,直接弄了一个raid5 厚卷 3个12t提示我能用20t,但是没空间建立iscsi了

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 弱弱的问句:这种方式安装系统的硬盘资料还能保留吗?

    校验提示文案

    提交
    这取决于你选不选格式化硬盘

    校验提示文案

    提交
    收起所有回复
  • 谢楼主教程,按楼主实践了一下,在openwrt上搭建这个服务,遇到了几个坑,这里说一下,以供后来人借鉴:
    1)整个项目打包文件里面的httproot下,少了一个wimboot的文件
    2)install.bat 前面的几个变量设置,需要修改一下:
    set SMBSERVER=10.10.10.201
    set SMBPATH=smbpath
    set SMBUSER=smbuser
    set SMBPASS=smbpass
    另外,启动Ubuntu 安装这部分,我测试启动会kernel panic报错:unable to mount root fs
    暂时还不知道怎么改。

    校验提示文案

    提交
  • 这…等下我去买个u盘
    是我懒
    楼主文章是很好的,感谢分享
    万一有用上的时候呢

    校验提示文案

    提交
  • 技术流。。 [皱眉]

    校验提示文案

    提交
  • 我首先支持作者这种精神,这个我大概看了一下,适合搞批发。我这搞零售的还是用U盘吧。

    校验提示文案

    提交
  • 网吧基本都用这个的,家用确实不大实用
    家用搞个iscsi就够满足了

    校验提示文案

    提交
  • openwrt要设置通告服务器吗?群晖的DHCP 开不?

    校验提示文案

    提交
  • 看起来很不错

    校验提示文案

    提交
  • 我还是找个优盘吧 [皱眉]

    校验提示文案

    提交
  • win10不需要解决网卡驱动问题了?

    校验提示文案

    提交
  • 无盘系统文件是怎么保存的?

    校验提示文案

    提交
    无盘系统保存文件,会放到服务器上的一个目录里。每台机器可以设置一个目录。nt4.0无盘95、98的路过。暴露年龄了。

    校验提示文案

    提交
    收起所有回复
  • 下不来啊 老大

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
659
扫一下,分享更方便,购买更轻松