今天抽时间折腾一套无盘的。 win简单来说,10.使用 ipxe 网络启动,将 win10 安装在网络上 iscsi 在服务器上的单独文件中存储硬盘,然后正常启动。主要使用的软件工具和功能如下:
tftpd(必须) tftp 网络启动必备的服务器。openwrt 的路由器的 dnsmasq 可提供此功能。但是,因为我以后会有的 web 以及服务和共享服务 iscsi target 所有的服务都在虚拟机中,不想在路由器上大惊小怪web(可选) tftp 传输方式太慢,还是 http/https 它更快,所以我得到了这个samba(windows 安装必须) windows 安装时,默认安装程序必须安装,不能使用 pe 安装方式,pe 由于没有网络,安装时驱动会减少,导致启动后没有网络 iscsi 蓝屏设备,提示启动设备电脑 有问题tgt(iscsi 共享存储服务)或务)或其他等效服务 ubuntu 做上面的服务器,在 ubuntu 上很简单,直接 apt install tgt 就可以了。netboot.xyz(或其他的 ipxe,或者自己编译) 没有其他原因。我一直在用它。 netboot.xyz 作为网络启动的管理,手头有 netboot.xyz 编译源代码省事,就用了我用的 virtualbox 测试,virtualbox 中创建了 openwrt,ubuntu, wins 三个虚拟机。而且在同一个内网。而且在同一个内网。openwrt 用于网关和提供 dhcp 服务,所以需要双网卡。ubutu 为了方便主机访问文件,我还得到了一张双网卡。从网上搜索具体的使用和配置。wins 配置从网络开始,不添加硬盘,不从 uefi 启动。
准备工作openwrt 配置(可选)因为我的 openwrt 只提供基本的网络服务,所以其他服务都是 ubuntu 包括这个系统 tftpd 所以需要服务 tftpd 拦截和转发访问信息 ubuntu 电脑中。dnsmasq YYDS!!。在/etc/dnsmasq.conf 添加以下内容
dhcp-option-force=211,60i ##这似乎是一个超时设置dhcp-option=option:tftp-server,192.168.1.127 #这个设置是真实的tftp服务器的,这个ip就是ubuntu该系统在内网中的服务器不能跨网段。本文调整到此ip需要换成实际的dhcp-boot=ipxe/netboot.xyz.kpxe,192.168.1.127,192.168.1.127 #这个是bios方式的ipx启动文件,后面的是tftp域名与服务对应ipdhcp-match=set:efi-x86_64,option:client-arch,电脑7 #这两行是efi我还没有测试过启动模式dhcp-boot=tag:efi-x86_64,ipxe/netboot.xyz.efi,192.168.1.127
ubuntu 系统(可选)
其实这些都可以扔掉 openwrt 只是我不想扩大 openwrt,好像只有硬盘 1G 还有多少。ubuntu 系统安装 docker, tgt。
apt-get -y remove docker docker-engine docker.io containerd runc apt-get -y update apt-get -y install ca-certificates curl gnupg lsb-release tgt curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb[arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update -y apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin #普通用户想要执行docker命令可以在普通用户权限下运行 #sudo usermod -aG docker $USER
ipxe 等服务的 docker 启动配置
version: '3'services: tftp: image: pghalliday/tftp restart: always volumes: - ./buildout/buildout:/var/tftpboot:rw ports: - "69:69/udp" - "69:69/tcp" logging: driver: "json-file" samba: image: andyzhangx/samba:win-fix command: "-r -w WORKGROUP -s \\"share;/share;yes;no;yes;all;all\\" " restart: always environment: - TZ=CST6CDT - NMBD=true - FILEMASK=0777 - DIRECTORYMASK=0777 - FORCEGROUP=root - FORCEUSER=root - USERID=0 - GROUPID=0 volumes: - /data:/share #/data共享文件中显示的目录share中 ports: - "139:139" - "445:445" logging: driver: "json-file" web: image: nginx:alpine restart: always ports: - "80:80" volumes: - ./buildout:/var/www/html:rw - /data:/var/www/html/buildout/iso:rw - ./nginx-site.conf:/etc/nginx/conf.d/default.conf:rw logging: driver: "json-file"
配置中的 nginx 配置文件:
server{listen 80;server_name localhost;root /var/www/html/buildout;index index.php index.html index.htm;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;client_max_body_size 512m;client_body_buffer_size 512m;autoindex on;location / ry_files $uri $uri/ /index.html;}}
netboot.xyz 构建(ipxe 必须)
roles/netbootxyz/files/ipxe/local/general.h 添加以下配置,开启 sanboot 相关功能
#define PXE_STACK /* PXE stack in iPXE - you want this! */#define PXE_MENU /* PXE menu booting */#define DOWNLOAD_PROTO_NFS /* Network File System Protocol */#define SANBOOT_PROTO_ISCSI /* iSCSI protocol */#define SANBOOT_PROTO_AOE /* AoE protocol */#define SANBOOT_PROTO_IB_SRP /* Infiniband SCSI RDMA protocol */#define SANBOOT_PROTO_FCP /* Fibre Channel protocol */#define SANBOOT_PROTO_HTTP /* HTTP SAN protocol */#define PXE_CMD /* PXE commands */
user_overrides.yml 修改相关配置:
boot_domain: 192.168.1.127bootloader_http_enabled: true
我写了一个小脚本 netbootxyz 的编译:
#!/bin/bashcd netboot.xyzdocker build -t localbuild -f Dockerfile .docker run --rm -it -v $(pwd)/../buildout:/buildout localbuild
netbootxyz 构建出的 menu.ipxe 添加以下内容(我的) buildout 目录中):
#item --gap Default: 下面添加这条线item win10_boot ${space}win10_64_bootitem win10_install ${space}win10_64_install#以下添加到最后:win10_bootecho "boot win10 from iscsi"set keep-san 1#ip注意地址,对于默认的tgt来说,iqn冒号前有一个1sanboot iscsi:192.168.1.127:::1:iqn.rix.test.win:win10 || goto mainmenu:win10_installecho "install win10 to iscsi"imgfreeset keep-san 1sanhook iscsi:192.168.1.127:::1:iqn.rix.test.win:win10kernel http://${boot_domai
/wimbootini
tr
电脑