# Windows Nas

# 参考链接

24盘位家庭虚拟化机架式服务器 (opens new window)【大型终极版教程】ESXI+LEDE+DSM+WIN10 (opens new window)

显卡解码支持:AMD GPU (opens new window) Intel GPU (opens new window) NVIDIA GPU (opens new window)

# windows能行么?

D1581运行windows nas,hyper-v运行truenas记录。 (opens new window)+长江存储白片用于数据存储。

“实践是检验真理的唯一标准”,任何看似稳定的系统,无非是测试团队或用户踩过坑。windows占有率领先,反而认为其极不稳定,是完全没有道理的。

# 其他系统

1、OMV,PVE,TrueNas等,其实就是在debian基础上运行webui。

OMV尽量只通过webui调整设置,修改配置文件可能导致报错。

但凡需要跑win虚拟机,我会倾向于ESXi,或win主机。只要有win虚拟机运行,PVE主机就会积极睿频最大频率,功耗暴增。

2、群晖优势在于开箱即用,不需要折腾。smart出现异常会自动下线并报警。

威联通要跑quts hero,能格式化成zfs的机型,才提供了擦洗(scrub)功能。

3、斐讯n1等arm方案装armbian,这些方案的sata基本是usb转sata。nfs速度还行,samba速度很慢,在10mb/s到60mb/s之间波动。

# 我为什么用windows

  1. 安卓模拟器有公司优化;linux下跑安卓没有公司优化适配国内手游,硬件开销大,挂机稳定性较差。

  2. 比特彗星多线程支持好,性能好很多;长效种子,ed2k插件死马当活马医。linux下除了transmission就是libtorrent,在国内更适合pt。

docker部署qbittorrent-EE,增加了对吸血迅雷的屏蔽,也可以考虑用于BT。

  1. smb分享相对linux下的开源实现samba,cpu占用率低得多,速度也快,多线程优化好。相对linux下nfs分享,有更高的4k性能。

如果客户端是性能羸弱的安卓或linux设备,nfs分享能跑出更高的连续读写速度。

  1. 随便插张显卡搭配madvr直接做播放器。

# 文件系统

机械硬盘raid并不适合家用,社群有大量讨论。

  • bt下载数据我用snap raid。
  • 其他文件我用hyper-v运行truenas搭配zfs镜像定期擦洗。

# ReFS完整性流

ReFS还处于开发中,稳定性没有得到充分验证,可以考虑Hyper-V运行TrueNAS+ZFS文件系统。 (opens new window)

ReFS可选功能,完整性流,开启 (opens new window)后可以运行完整性清理器(linux叫擦洗scrub),校验文件好坏,避免固态硬盘的数据静默损坏 (opens new window)

NTFS定期用7zip对整个磁盘计算CRC32也一样能实现固态硬盘的冷数据纠错预热,但毕竟没有校验。

群晖使用LVM软RAID+魔改单盘BTRFS,群晖认为这样的方案足以商用。

那么windows存储空间-镜像+ReFS开启可选功能,完整性流可能也足够安全?

微软对完整性流的介绍中提到:ReFS 和存储空间可以共同自动地更正损坏的元数据和数据。

只有存储空间-镜像是可以搭配ReFS完整性校验并修复,镜像卷等不行。

由于还在开发中,不同版本的windows使用的ReFS版本不同,被新版本系统升级过的ReFS,老版本是不能识别的。

存储空间一旦出现故障想要恢复非常麻烦,且需要手动回收空间。Joe Chen:Win10和Win Server 2016存储池存储空间相关 (opens new window)

# snap raid

类似于有校验的快照,就是修改文件不方便。

  1. 硬盘容量可以不同,只要保证校验盘容量最大
  2. 随时加盘
  3. 就算坏了太多盘也不影响好盘的数据
  4. 成本低,不要阵列卡或者ecc
  5. 读写速度是单盘的速度,不需要读写整个阵列的硬盘

缺点是每次修改了文件都必须要运行一下程序,以防万一可以把磁盘设置成只读。

diskpart
list vol //列出磁盘
select vol 0 //选中要操作的盘
att vol set readonly  //设置只读

att vol clear readonly //清除只读

# hyper-v

优势是支持动态内存,主机关机的时候可以向虚拟机发送关机命令,而不是建立快照或强制关闭。

虚拟机出错偶尔只能强制重启主机。

主机一旦启用hyper-v,主机的网络流量也要走虚拟交换机,对延迟敏感的应用影响较大。

# hyper-v调度器

微软:管理调度器 (opens new window)微软:调度器类型介绍 (opens new window)

win10 1803之后的win10或11默认使用root调度器,虚拟机是主机下一个进程,任务管理器能看到,可以设置cpu相关性,开启超线程的情况下vcpu尽量设置至少4个,有可能调度到任意核心,运气不好2个vcpu调度到同一个物理核心,不过一般应该不会。总vcpu设置2倍逻辑核心数也没事。

server2016版本默认是classic,2019开始就是core。

classic下总vcpu设置2倍逻辑核心数也没事,core调度器分配给某个虚拟机的核心就不会再运行其他虚拟机的任务,开启超线程的情况下会通知虚拟机开启超线程,如果虚拟机系统禁用超线程,那么超线程出来的那个逻辑核心就会被闲置。

无论是clssic还是core,只能通过hyper-v管理器来管理cpu。

# 半虚拟化

hyper-v运行linux虚拟机不用任何设置,一般默认就已经是"半虚拟化"。微软开发的Linux Integration Services,在linux上一般默认开启。但是性能比vmware的半虚拟化接口要差一点。

屏幕截图 2024-02-08 013911.png

据我测试windows下两块RTL8125b互连,iperf3发送64iB小包,小包转发性能为9.85kpps,如果用hyper-v半虚拟化接口,恐怕小包转发性能最多也就9kpps左右了。

# hyper-v磁盘直通:

  • RDM磁盘直通(Raw Device Mapping),整个物理磁盘可以由虚拟机格式化,但是磁盘控制器还是由host主机管理,既smart信息在host主机下读取。读写还是用的半虚拟化接口。
  • sata控制器或nvme控制器作为pci设备直通到虚拟机下,smart信息在虚拟机内读取。

windows主机下监控smart信息可以用hdd sentinel软件。windows主机virtualbox一般只能用半虚拟化接口virtio,好像没有pci直通。

  • hyper-v提供pci直通,gui小工具 (opens new window)

  • **windows下想要RDM磁盘直通,**需要先在windows主机上的“磁盘管理”(win+q搜索磁盘管理)右键准备直通的磁盘,脱机,之后在vmware或hyper-v的虚拟磁盘设置中就可以直接选择该磁盘。

# virtualbox需要命令行:

查看要直通的硬盘的DeviceID:

wmic diskdrive list brief
或:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list hostdrives

在windows主机上的“磁盘管理”(win+q搜索磁盘管理)右键准备直通的磁盘,脱机。

win+q搜索cmd,右键,管理员身份运行。根据上文查到的ID修改后文的-rawdisk

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands createrawvmdk -filename "D:\是中国人就买长江存储.vmdk" -rawdisk \.\PhysicalDrive0

只需要在virtualbox磁盘配置中虚拟磁盘选择生成的vmdk文件就是直通该磁盘,控制器接口可以改成virtio,网络接口也可以改成virtio。

--partitions 1,2 参数可以指定特定分区。
查看某个磁盘的分区号:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands  listpartitions -rawdisk \\.\PhysicalDrive0

# hyper-v安装

启用hyper-v,win+q搜索“启用或关闭Windows功能”,启用Hyper-V即可。

默认就会生成虚拟交换机,默认是NAT,桥接需要在虚拟交换机管理器中新建一个“外部”交换机,虚拟机可以被路由器分配一个IP。

主机网络流量也都是从虚拟交换机走,停用虚拟交换机会导致主机断网,要从Hyper-v管理器删除。

虚拟机设置中默认会启用安全启动,我一般关闭。

虚拟机设置中-网络适配器,按加号列出的高级功能下默认是动态MAC,我一般启动一次虚拟机后改成静态mac。

自动停止操作我倾向于改为关闭来宾操作系统,既主机关机时会向虚拟机也发送关机信号。

# truenas

hyper-v网卡设置桥接,关闭安全启动,网卡设置为静态mac,禁用检查点,自动停止操作改为关闭来宾操作系统。

scsi控制器中添加DVD驱动器,挂载truenas的安装iso文件。再添加两个硬盘驱动器,新建两个32g虚拟磁盘即可启动安装。最小16g。建两个虚拟磁盘,truenas安装时会自动建立zfs镜像池。

# windows nas设置

文件分享:

  • 登录的账户有密码,其他设备查看文件的时候直接登录该账户。
  • 设置-以太网,设置为专有网络。
  • 右键要分享的文件,共享-共享,一路下一步

远程连接

在设置中搜索远程桌面,开启。其他电脑运行mstsc即可启动远程桌面软件连接,单击显示选项后即可保存连接快捷方式。

本地不登录直接启动

运行netplwiz,取消勾选“要使用本计算机,用户必须输入用户名和密码(E)”确认后输入账户密码即可。

微软屎吃撑,新版本这个选项神秘消失,运行regedit后找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device
双击DevicePasswordLessBuildVersion改成0。

# samba校验

samba开启加密可以避免网络波动引起文件损坏,手机应用往往支持的SMB版本较老,有可能打不开。

微软官方文档 (opens new window)

管理员模式运行powershell:
在整个文件共享服务器当中开启加密
Set-SmbServerConfiguration –EncryptData $true

对特定共享开启加密:
Set-SmbShare –Name <sharename> -EncryptData $true

# 文件操作后校验

文件操作尽可能使用fastcopy并开启每次文件操作后校验,或用teracopy软件,速度慢一点但与资源管理器的ui结合更好。

# samba文件分享聚合

多盘场景下,群晖等可以聚合多个目录在同一个smb子目录下,Windows:

  • 商业软件StableBit Drivepool实现类似JBOD
  • windows挂载磁盘到文件夹而不是分配盘符
  • 创建链接,只要分享d:\share文件夹
mklink /j  "d:\share\e" "e:"

# 硬链搭配刮削

下载到的资源偶尔会自带nfo,为了防止被刮削器修改后导致做种出现问题,用如下脚本把E:\t下的文件夹和常见视频文件或字幕文件硬链到E:\t2文件夹下。

@echo off
set workingDir=E:\t
set link=E:\t2
mkdir "%link%"
XCOPY /T "%workingDir%" "%link%"
setlocal enabledelayedexpansion
for /r "%workingDir%" %%i in (*.mkv,*.mp4,*.m2ts,*.clpi,*.mpls,*.rmvb,*.srt,*.ass,*.iso) do ( 
set "dirnoname=%%~dpi"
echo next
echo !dirnoname!%%~nxi
mklink /h "%link%!dirnoname:%workingDir%=!%%~nxi" "%%i" 
)

mklink /j或/d指向文件的位置。而/h硬链是同一个文件出现在不同位置。软链不能用于刮削,硬链可以用于刮削。硬链缺点是只能链在同一个硬盘。

# primo cache缓存

威联通建议缓存至少达到10%,最好有20%。既10t硬盘至少1t缓存,最好2t,不然命中率会很低。

primo cache4.1 (opens new window),只缓读不缓写,不开一级缓存(内存),bt软件本身就有缓存,做种24小时后,空闲内存基本都被windows用作缓存。

pt可能同时下载的人少,缓存命中率非常低,基本一直在10%以内。

bt做种2t,500g缓存。命中率在60%~90%之间波动,测试2天,上传量60多个g,用光缓存盘500g。用光后平均每天更新100g的缓存,但是每天上传量也就25g左右。

# 防止自动更新后自动重启

事件查看器中,重启原因代码:0x80020010。

微硬真的是无法无天,组策略也是摆设,设置了也白设置,除非停用windows更新服务。 (opens new window)

如果不想停用windows更新,可以把自动重启的二进制文件删掉:

C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator
Reboot_AC
Reboot_Battery
备份两个文件,新建两个同名文件夹,设置成只读。

# windows无显卡启动

  • 装AMYUNI发布的usb虚拟显示器驱动。

发布链接 (opens new window)下载链接 (opens new window)

解压后管理员运行usbmmidd.bat。

想要添加更多虚拟显示器,管理员运行cmd:

deviceinstaller64 enableidd 1

# 搭配ups停电关机

  • APC ups有一个小工具apcupsd
  • APC bk650等型号可以用apcPCPE软件
  • UPS停电自动关机助手,ping路由器,不通就关机
  • 脚本
  1. APC bk650,山特TG-BOX,长的像超大号排插,apc这款有替换电池卖,两款都能控制nas。价格在500左右,续航可能就几十分钟。铅酸电池。
  2. 雷迪司H1000M是最便宜能控制nas的ups。铅酸电池。
  3. 绿巨能1000VA/600W,雷迪司D650/360W,这两款都是入门级产品,200以内就能买到,雷迪司这款用的锂电池,绿巨能用的铅酸电池。没有控制功能。
  4. 山克 3000VA 1800W,后备式续航最猛的一款,停电了也要nas接着运行就选这款。
  5. 有些产品用的12v电瓶,铅酸用个两年基本就要换了,可以买12v锂电瓶换上去,锂电瓶寿命长一些。正因为换电瓶就行,二手的便宜好货自己换电池也就几十块。
  6. 标称容量虽然很大,但是本身转换效率80%,电源转换效率可能也在80%再加上铅酸电池衰减很快,对他们的续航能力不要抱有太大的期望。注意铅酸电池长时间亏电会腐蚀铅板,导致报废。
  7. 后备式的ups通常在断电后有10ms的切换时间,输出通常是方波,而不是正弦波,方波不适合带电机,对于电脑通常没什么影响。除非电源主电容相对负载太小否则断电的10ms对于家用没什么影响,没有必要买在线式。
  8. 如果非要买在线式,注意在线式的噪音一般都会更大些,而且因为都是针对政企市场,一般对nas支持度不高。山克 SC1K最便宜大牌,华为UPS2000-A-1KTTS便宜大腕,apc山特这种大牌就不说了。