Netgear MS510TXUP Switch Unbrick

先升级了Image1 到1.0.4.2,重启后发现还是启用的Image2(1.0.4.1)的固件,所以又把Image2升级,升级后就无法启动了;电源灯快闪,但网口灯不亮,但是电脑链接不是断开的,有发送数据没有接收数据,初步猜想可能是固件问题。

首先尝试通过Reset看看能不能恢复,按说明书 不管是按5-10秒、 10-15秒 都没反应。

然后就在网上搜索看看有没有能救砖的方式,尝试过网件路由器的救砖方式NMRP,尝试过却是无效的,下载官方的交换机管理软件也是无法搜索到交换机。

又继续查找解决方案,有网件交换机  GS724T V3 GS110TP 通过UART重新刷入固件,难点在于找到TX 和RX 位置。

拆开交换机 发现有3个插针的位置,其中一个靠近两个大的散热器应该是UART的位置,用万用表量了下 三个位置各个插针的电压,靠近散热器的4个插针从上面往下数第二个针对地3.3V 其他都是0V,靠近散热风散位置的插针中间两个是3.3V 两边都是0V,猜测 靠近散热器的应该是UART接口,那个3.3V的针脚应该就是发送数据的TX针脚。然后淘宝上买了条USB接口的UART刷机线准备尝试下

实在也没底,就想着他有两个Image 会不会有两个存储芯片,如果是两个芯片就好办到时候再买一台换个固件没问题的芯片即可,于是又把各个芯片找了下 发现这个机器处理器是RTL9313 内存256MB用的winbond的W632GU6NB-11,储存芯片只找到一个 MXIC的MX25L25645GMI-08G,这是个32MB的NOR 闪存,并没有两个存储芯片,如果UART 没办法刷入固件 就只能通过编程器直接写这个闪存,这个就完全超过我的能力范围了。

在网上搜索RTL9313 的时候发现 ZyXEL XS1930-10 交换机也是用的这块芯片,bootloader是uboot,并且还有人通过UART刷入了Openwrt 系统,就希望MS510TXUP 也能找到这个UART的接口,并能进入bootloader。然后又搜索到部分网件的交换机也是uboot作为bootloader 并且支持tftpboot。

等了一天,USB的UART刷机线到了,立马接线用Putty尝试了下,先连接了第一针脚接地(黑线),第二针脚接USBUSB的UART刷机线的RX(白线),打开Putty 设置波特率115200,接通交换机电源,成功看到数据输出。

从输出来看是两个固件校验失败,卡在密码输入界面,需要验证密码。尝试用USB的UART刷机线的TX(绿线)接口接入第三针脚,成功输入登录密码(这个后来发现随便怎么输入都可以,当时没有截图,后面恢复固件后怎么也进不去了,所以以下都没有图片了),输入密码后又加载固件,但是还是加载失败,进入uboot shell。赶紧尝试看看help看看支持什么。一条一条的命令看,首先找到了tftpboot启动的命令,开始搭建tftp服务器,但是tftp服务器搭建好,发现无法连接,ping都ping不通,换了不同的网口也不行,尝试了通过 setenv 修改 ipaddr、serverip、ethact(rtl9310#0、rtl9310#1…rtl9310#9)并且通过saveenv保存都没法连接,不过修改ethact后,在ping下就又会恢复,继续研究支持的指令发现了个rtk指令。

继续研究rtk 发现 可以通过 rtk network on 启动网络,但是也只是所有网络接口的灯亮一下,还是没法连接,又是先换网口再换ethact,还是无效,当时有点失望。

继续研究支持的指令 发现有几个load指令 loads loadb loady 可以通过串口传输数据进去,然后又开始折腾,刚开始直接执行loads,这样会自动把固件写入到内存0x80…0(后面几个0 就忘记了),执行bootm 写入的内存起始位置,发现校验不过去,又尝试通过y模式传文件在网上找到Xshell以y模式把固件写入到默认位置,启动还是校验不过去,怀疑固件是不是加密了,需要解密后的固件,但通过md 0x810…0 查看之前加载的有问题的固件开头部分数据 发现固件没有加密,试试加载到内存0x830…0,成功进入系统,进入系统后重新通过tftp的方式升级固件,并等待提示完成,重启后顺利加载固件。

总结:

1连接好UART线。第一针脚接gen(黑色线),第二针脚接RX(白色线),第三针脚接TX(绿色线),详细见上图,接好后XShell 链接 Com口,具体的查看你系统增加了哪个Com口,波特率115200 其他默认,然后给交换机通电。密码随便输入按回车即可

2.启动后观察下固件加载到内存的位置,我映像中应该是0x810…0(后面几个0 就忘记了),执行 “loady 0x830…0(后面0的个数和固件加载的位置个数一样)”等待数据载入,通过软件Xshell以y模式载入从官方下载的最新固件(bix格式),这个过程很漫长,当数据载入完成后会有提示 ,再通过bootm 0x830…0(后面0的个数和固件加载的位置个数一样)启动交换机系统。

打开/etc/apt/sources.list 修改 pve 源

nano /etc/apt/sources.list

注释原来的两个源

#deb http://ftp.debian.org/debian buster main contrib
#deb http://ftp.debian.org/debian buster-updates main contrib

加入国内的镜像

deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib

添加源

deb http://download.proxmox.com/debian stretch pve-no-subscription

删除企业源,编辑文件:

nano /etc/apt/sources.list.d/pve-enterprise.list

找到并删除或注释掉以下一行:

#deb https://enterprise.proxmox.com/debian stretch pve-enterprise

加入签名:

wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg

更新:

apt-get update && apt-get dist-upgrade -y

安装 docker-ce:

apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
apt-key fingerprint 0EBFCD88
echo "deb https://download.docker.com/linux/debian/ buster stable" >> /etc/apt/sources.list
apt-get update && apt-get install docker-ce -y

创建一个新的目录存放数据

mkdir /portainer
mkdir /portainer/data

启动

docker run -d --name portainer --restart=always -p 127.0.0.1:9000:9000 -v /portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

设置自动启动

systemctl enable docker

首先说需求

1、双拨,电信合约写着是供两台主机拨号使用,那我干嘛不双拨,双倍满足;实际家里200M带宽双拨后可以到500M。

2、科学上网。

3、nginx Http反向代理内部NAS(限制只有指定的域名才可以访问,其他域名都返回403),及其他服务,之前电信的443 端口还没被限制,同一个端口不同的域名即可访问不同的web站点,这样就可以直接通过https://域名/进到路由管理界面,以及Nas管理界面等。

4、Strongswan vpn服务器端,便于在其他地方访问家庭网络。

网上也有很多已经编译好的固件,但是要么功能太多,而且很多功能会有冲突;要么是功能太少,加个应用还缺包;所以打算自己编译。

根据 https://github.com/klever1988/nanopi-openwrt  创建了一个自己的 项目 https://github.com/huase2020/Nanopi-R2S ,移除了全部用不到的应用,只保留了一些基本的,然后再把ipset iptables 所需要的相关包加进去。

由于网上的科学上网的应用,比如 luci-app-passwall 功能多多少少 有些问题,所以就直接不使用这些应用。直接下载使用官方的应用,然后通过基本的iptables来控制数据流入流出即可。

ipset create proxy_list hash:ip family inet
for ip in $(cat /etc/huase/gfwipv4list.txt)
do 
	ipset add proxy_list "$ip"
done
	
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
	
iptables -t nat -A PREROUTING -p tcp -m set --match-set proxy_list dst -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -m set --match-set proxy_list dst -j REDIRECT --to-ports 12345

ipset create proxy_list_v6 hash:ip family inet6
for ip in $(cat /etc/huase/gfwipv6list.txt)
do 
	ipset add proxy_list_v6 "$ip"
done
	
#支持ipv6
ip -6 rule add fwmark 1 table 100
ip -6 route add local ::/0 dev lo table 100

域名通过dsnmasq-full来解析并在解析的时候指定解析的服务器以及解析后的ip增加到ipset中,方法是在/etc/dnsmasq.conf 添加以下格式的数据即可。

server=/hp.com/127.0.0.1#5353
ipset=/hp.com/proxy_list,proxy_list_v6
#如果代理服务器端不支持ipv6 就直接屏蔽ipv6
#address=/hp.com/::

其中也遇到很多问题,首先是UDP 没办法 通过 TPROXY代理成功,目前只能代理TCP流量,DNS解析通过V2Ray转发到1.1.1.1来实现。

其次是 科学上网和 多拨的冲突,这个通过修改防火墙来实现,因为所有白名单中的流量都通过V2RAY,所以mwan3 就直接加个过滤-m set ! –match-set proxy_list

if iptables -t mangle -S OUTPUT | grep mwan3_hook &> /dev/null; then
         if ! iptables -t mangle -S OUTPUT | grep 'proxy_list dst -j mwan3_hook' &> /dev/null; then
             iptables -t mangle -D PREROUTING -j mwan3_hook
             iptables -t mangle -D OUTPUT -j mwan3_hook
             iptables -t mangle -A PREROUTING -m set ! --match-set proxy_list dst -j mwan3_hook
             iptables -t mangle -A OUTPUT -m set ! --match-set proxy_list dst -j mwan3_hook
         fi
fi

if ip6tables -t mangle -S OUTPUT | grep mwan3_hook &> /dev/null; then
	if ! ip6tables -t mangle -S OUTPUT | grep 'proxy_list dst -j mwan3_hook' &> /dev/null; then
		ip6tables -t mangle -D PREROUTING -j mwan3_hook
		ip6tables -t mangle -D OUTPUT -j mwan3_hook
		ip6tables -t mangle -A PREROUTING -m set ! --match-set proxy_list_v6 dst -j mwan3_hook
		ip6tables -t mangle -A OUTPUT -m set ! --match-set proxy_list_v6 dst -j mwan3_hook
	fi
fi

目前自编固件使用非常正常和稳定。

自16年购入该机器基础配置,换了cpu及内存,换了400W电源,买过两块阵列卡( HP P410 , LSI 9217-8i IT模式 ),两块显卡(  R7 250 E4 2G , GTX 1650 4G ),及7块硬盘(5块4T红盘,2块10T西数桌面盘),前前后后 ,折腾了无数次 ,现将我的经历分享给大家,我本身需求其实很简单。

1.需要一个存储服务器,由于使用频率不高,所以希望硬盘尽量休眠减少损耗,目前群辉(DSM)功能比较多,操作也比较方便。

2.需要一个HTPC用于连接电视播放视频。

3.偶尔可能需要一个虚拟机用于安装CentOS、Openwrt、Ubuntu之类的进行测试 。

刚开始的方案一

Gen8(4块4T红盘+1块512G SSD)在SSD中 安装Windows Server 2012 R2,并通过USB引导到第五块硬盘(gen8 不改线SSD接的是sata5)启动Windows,使用Hyper-V虚拟机虚拟DSM,然后把除了系统盘外的其他硬盘都直通给DSM。

缺点:直通给DSM的硬盘无法休眠,正常低功耗运行的时候功耗在60W左右(4块4T红盘+一块  R7 250 E4 2G 显卡),而且群辉版本最高到5.2。

试过硬盘由Windows控制,然后通过NFS共享给DSM,休眠 的问题是解决了,但是群辉的部分套件功能异常。于是想着换ESXI,通过直通 SATA控制器的方式给DSM,于是有了下面的方案。

方案二:ESXI(版本6.0,6.5的有BUG)直通SATA控制器给DSM,显卡直通给HTPC。

方案二第一阶段

ESXI安装在32G的TF卡中,SATA控制器直通给DSM,后其他系统就没有地方安装了,如果使用DSM通过NFS共享的空间安装,也会影响到DSM的休眠,所以想着看看能不能直接把USB 3.0用起来,让SSD通过USB3.0 连接到ESXI。最后参考 https://www.virten.net/2015/10/usb-devices-as-vmfs-datastore-in-vsphere-esxi-6-0/ 增加了一个SSD 的USB3.0存储。

通过SSH连接ESXI;暂停 ESXI的一个USB相关的服务,这个服务暂停后将无法在ESXI中直接添加USB设备给虚拟机,只能直通USB控制器。

/etc/init.d/usbarbitrator stop

停止这个服务的自动启动

 chkconfig usbarbitrator off

列出所有硬盘,在其中找到你的盘(通常6.0是mpx.vmhba开头,6.5是naa开头),我的盘是mpx.vmhba32:C0:T0:L0

ls /dev/disks/

把你的硬盘修改成GPT分区模式

partedUtil mklabel /dev/disks/mpx.vmhba32:C0:T0:L0 gpt

创建硬盘分区需要知道开始位置 和结束位置,一般开始位置都是2048,我们就只要得到结束位置即可

partedUtil getptbl mpx.vmhba32:C0:T0:L0

返回:

gpt
 1947 255 63 31293440

通过返回的值计算结束位置
1947 * 255 * 63 – 1 = 31278554
或者直接通过命令计算出来

eval expr $(partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 | tail -1 | awk '{print $1 " \* " $2 " \* " $3}') - 1

创建VMFS分区

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 31278554 AA31E02A400F11DB9590000C2911D1B8 0"

挂载VMFS分区

vmkfstools -C vmfs5 -S upan(usb显示名称) /dev/disks/mpx.vmhba32:C0:T0:L0:1

因为停掉了ESXI的一个USB服务,导致不能直接把USB设备添加到虚拟机,所以直通了USB2.0的#2驱动器给HTPC,千万不能直通#1,会导致tf卡也被直通进来导致Esxi无法写tf卡,任何配置信息的修改都将失败。

这样操作以后HTPC不休眠,只设置一定时间关闭显示器,就可以通过外接的鼠标键盘直接激活。DSM也获得了SATA的控制权,硬盘也可以休眠了,低功耗运行的时候功耗40W左右( 4块4T红盘+一块  R7 250 E4 2G 显卡+512G SSD )。

方案二第二阶段

虽然DSM可以休眠了,但是还是经常被无故唤醒,查各种日志,看是哪些服务做了什么,大部分都是系统做的,有人访问,会唤醒写日志,定时服务会唤醒,等等,于是就想看看能不能把系统独立出来,于是有了阶段二。

我增加了一块虚拟的100G的硬盘给DSM,然后把所有应用以及一些常用的数据放在这个盘里,其他的盘则进行电机休眠。具体设置休眠的方法参考我之前写的一篇文章

后来需要测试下一个程序的性能,买了块HP P410阵列卡及一个5盘位的硬盘笼子,挂了4块换下来的快要坏掉的SAS 300G(Dell 服务器上会提示异常,估计是坏道很多了,快要坏了)硬盘组raid0。这样担心原来200W电源不够,于是有换了400W的二手台达电源。这个时候硬盘笼子里多了个空位,于是又补了块4T的盘进去;后面测试完后,就把阵列卡移走了及sas盘移走了。

再后来玩了一段时间pt,原先的5块硬盘组的raid6空间不够用,于是又买了两块10T的硬盘加一块 LSI 9217-8i IT模式 阵列卡;之前买的HP P410 发热很大,硬盘没办法休眠,支持SAS盘; LSI 9217-8i IT模式 ,以为可以支持休眠,但经测试还是没办法休眠,不过群辉可以读到硬盘SMART信息。后来不玩PT,移除了阵列卡及两块硬盘,回到了基本的5块4T硬盘组 Raid6,准备等4T盘坏了后慢慢换成10T盘 ,也不打算再外挂第5块盘了,影响美观。

目前这样配置已经基本可以使用,硬盘也可以休眠了(这个休眠只是电机),休眠的时候功耗在50W不到(5块4T红盘组的Raid6+  R7 250 E4 2G 显卡+intel 512G SSD );近期因为需要输出4k 60HZ,换了 GTX 1650 4G显卡,也可以轻松直通给Windows使用,这张卡不需要设置就可以直通,只是直通后无法使用,需要在虚拟机 .vmx 配置文件中增加以下内容。

hypervisor.cpuid.v0 = “FALSE”

方案三

由于ESXI6.0需要占用4G左右的内存,分给DSM 1GB,剩余只有10GB给到HTPC,由于两个系统都直通了硬件,分配内存只能全部预留,跑XPlane 还是比较勉强,所以想着ESXI换成PVE,能再多2-3G的内存给到HTPC,于是有了方案三。

刚开始从官方下载了 PVE 最新版本6.2 安装还是很容易的,而且可以安装到usb2.0的U盘里,速度比tf卡快了很多。按网上普遍的方法直通的时候遇到了问题,直通sata和直通显卡后没办法启动会提示,网上说是HP的RMRR检查没办法禁用导致的,只能通过修改内核。

Device is ineligible for IOMMU domain attach due to platform RMRR requirement.  Contact your platform

按照 https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/ 的方法重新编译了最新版的内核5.4.41-1,更新上去之后还是无法启动提示错误

kvm: -device vfio-pci,host=0000:00:1f.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on: VFIO_MAP_DMA failed: Invalid argument
kvm: -device vfio-pci,host=0000:00:1f.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on: vfio 0000:00:1f.0: failed to setup container for group 10: memory listener initialization failed: Region pc.bios: vfio_dma_map(0x7fe3c6a67200, 0xe0000, 0x20000, 0x7fe37de20000) = -22 (Invalid argument)

然后继续搜索相关错误,发现都没有解决方案。又想起 国内一网友 手残的拾君 ( https://www.bilibili.com/read/cv3899236 )既然能在 HPE SL250s Gen8 上成功,就试试看修改编译和他一样的内核看看,一试还真就成功了。

具体步骤整理如下:

一、修改编译内核

参考 https://blog.csdn.net/WeDone/article/details/104337318 搭建编译环境

更换 Debian 软件包源为 163,编辑 /etc/apt/sources.list 替换为:

deb http://mirrors.163.com/debian/ buster-updates main
deb-src http://mirrors.163.com/debian/ buster-updates main
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

执行

sudo apt-get update && apt-get install -y gnupg2 wget

加入 Proxmox 软件包源:

wget -qO - http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg | sudo apt-key add
echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription " | sudo tee /etc/apt/sources.list.d/buster-pvetest.list
sudo apt-get update

安装编译环境:

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler screen

sudo apt install python3-dev  python3-sphinx lintian bc bison libdw-dev libiberty-dev libnuma-dev libslang2-dev lz4 rsync  libpve-common-perl dh-make 

根据:https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/ 补齐部分包

apt-get install git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libdw-dev libnuma-dev libslang2-dev sphinx-common asciidoc-base automake cpio dh-python file gcc kmod libiberty-dev libpve-common-perl libtool perl-modules python-minimal sed tar zlib1g-dev lz4

然后按 手残的拾君 ( https://www.bilibili.com/read/cv3899236 ) 的方法获取到指定的版本并进行修改产生一个diff的path文件

获取指定的版本(使用5.0.21-2 9a85bc6293ad2efb2930dde2b7123b1e008af11a 还是有些问题,不知道是我设置问题还是比的问题,系统选Windows后Bios选UEFI,开机会超时。 然后又去看看新的版本这里经过测试发现6.1的版本5.3.18-2-pve 9100f5656d3e94df55b53f6a2e33a6fc8f0fc3f2 的内核也可以使用)

git clone git://git.proxmox.com/git/pve-kernel.git
cd ./pve-kernel/
git reset --hard 9100f5656d3e94df55b53f6a2e33a6fc8f0fc3f2

修改的方法见 手残的拾君 ( https://www.bilibili.com/read/cv3899236 ) 或者 https://forum.proxmox.com/threads/compile-proxmox-ve-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/

编译

make V=s

二、安装核心,卸载自带的核心

上传到pve,然后安装核心

dpkg -i *.deb

卸载核心:

apt-get remove  5.4.34-1-pve -y

直接卸载会提示错误,我们按给的提示操作即可。

touch '/please-remove-proxmox-ve'
apt purge proxmox-ve -y
apt-get remove  5.4.34-1-pve -y 

接下来开启直通支持编辑 /etc/default/grub

找到GRUB_CMDLINE_LINUX_DEFAULT =”quiet” 改成

GRUB_CMDLINE_LINUX_DEFAULT =”quiet intel_iommu=on video=efifb:off”

更新引导

update-grub

编辑/etc/modules 在最下面几行添加

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

一个一行,写入后保存退出,然后把显卡加入黑名单,并更新。

三、然后按照 https://blog.51cto.com/12242014/2382885 的步骤直通显卡

运行lspci 找到显卡的编号,我这里是07

lspci

执行 lspci -n -s 07:00 获取 07的两组id

 lspci -n -s 00

把获取到的两个id写入/etc/modprobe.d/vfio.conf 禁用显卡并打开不安全的中断

echo "options vfio-pci ids=10de:1f82,10de:10fa" >> /etc/modprobe.d/vfio.conf
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" >> /etc/modprobe.d/vfio.conf

把显卡加入黑名单

echo "blacklist nvidiafb" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/pve-blacklist.conf

运行以下命令加入必要的配置

echo 1 > /sys/module/kvm/parameters/ignore_msrs
echo "options kvm ignore_msrs=1">>/etc/modprobe.d/kvm.conf

更新并重启

update-initramfs -k all -u && reboot

添加虚拟机,BIOS选择 UEFI,机器类型选q35,添加显卡的时候要勾选 主GPU 及 PCI-Express

刚开始的时候遇到了以下一些问题

1.usb连接的声卡(Monitor 03 US Dragon),声卡不能移除,移除会导致虚拟机死机。之前连在DELL U2720QM上,显示器一关闭usb会自动断开就会死机,试了半天才找到是声卡。没办法只能移移至Gen8后面USB2.0接口长时间连接。

2.usb连接的罗技优联,移除后不能再恢复,只能通过移至Gen8 后面的usb2.0接口长时间连接。

3.能连的usb口最多5个,还不能直通usb controller。usb 3.0的Controller 连着数据U盘,内置的usb2.0连接着系统U盘这个和后面的2.0接口是同一个Controller.

4.最头疼的是 显卡虽然能用,但是性能好像大打折扣,鲁大师跑分5000多。

5.群辉怎么弄都不休眠,后来无意中发现Video Station一直在索引,影视信息一直没出来,查资料发现检索影视信息的网站被墙了。

后来修改了方案,系统安装在tf卡上(安装的时候swap分区设置成0,后续自己在usb3.0的ssd上创建一个swap文件挂載),直接通过pci直通后面的usb2.0 接口(直通的是#2控制器)给Win10虚拟机,解决了1,2问题。因为有usb2.0可以插分线器,基本也解决了问题3接口不够用的问题。

更换了内核 5.3.18-2-pve 解决了问题4,现在鲁大师跑分恢复到10万分,还是不及用Esxi 时候的11万分。

目前配置 :

DSM:1.5G内存,直通了 SATA控制器(5块4T硬盘)+原来的ESXI中100G 放在u盘中的系统盘。

Win10:12G内存,直通usb 2.0 #2控制器+显卡

存在的问题:通过usb 直通 u盘 会导致虚拟机系统识别不了,整体性能鲁大师跑分在cpu 显卡 都低于Esxi 10%左右。

我这边用到的系统安装包以及编译好的内核

https://pan.baidu.com/s/1kubhPLL0c3rrnj-ovbe0KQ

提取码:hkvc

使用到以下软件

kmod-macvlan(用于虚拟接口), mwan3 (用于负载均衡), luci-app-mwan3(mwan3 界面)

先登录ssh。

更新软件包

opkg update

安装必要的软件

opkg install  kmod-macvlan luci-app-mwan3

创建虚拟接口,以下指令 可以放在 /etc/rc.local 里 exit 前面,这样系统自动启动后就会运行

ip link add link eth0 vth1 type macvlan
ifconfig vth1 hw ether 00:00:00:00:00:01
ifconfig vth1 up

在管理界面 网络》接口 创建两个pppoe链接,其中一个接口选择eth0,另一个选择 vth1

在管理界面 网络》Load Balancing 配置中启用 两个接口的负载均衡,并在Member 里设置好各个接口的Weight,如果需要平均分配只需要设置一致即可。

群辉系统自带的硬盘休眠会因为读写数据而导致所有硬盘都被唤醒。这里介绍使用Linux自身休眠部分硬盘的方法。

1、添加一块用于做系统的盘,可以是虚拟盘,然后把应用都安装在这个虚拟盘创建的存储空间中,检查需要休眠的硬盘上有没有运行着会经常读写数据的套件,比如Download Station的电驴,如果有需要把目录移到别的不需要休眠的硬盘上。

2、关闭系统自带的硬盘休眠

3、 用root账号登陆ssh,通过 “fdisk -l” 命令找到需要休眠的硬盘位置,这里我们假设是sdb、sdc、sdd、sde,通过 “ cat /proc/mdstat” 命令我们发现 md0系统分区挂载了全部盘,md1 swap分区也挂载了全部盘,这里我们把md0和md1中除了系统盘外的其他硬盘都移除。然后设置下系统启动5分钟后再设置硬盘自动休眠,如果立马设置会导致硬盘直接就进入省电模式(估计运行的时候系统并没有读写硬盘数据)。

具体的方法就是 修改 /etc/rc文件在最后 “ exit 0 ” 前面增加

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm --manage /dev/md0 --fail /dev/sdd1
mdadm --manage /dev/md0 --fail /dev/sde1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md1 --fail /dev/sdc2
mdadm --manage /dev/md1 --fail /dev/sdd2
mdadm --manage /dev/md1 --fail /dev/sde2

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm --manage /dev/md0 --remove /dev/sdd1
mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md1 --remove /dev/sdc2
mdadm --manage /dev/md1 --remove /dev/sdd2
mdadm --manage /dev/md1 --remove /dev/sde2

(
sleep 300
hdparm -S 241 /dev/sdb
hdparm -S 241 /dev/sdc
hdparm -S 241 /dev/sdd
hdparm -S 241 /dev/sde
)&

4.重启DSM,重启后会提示系统分区异常。

效果:设置了省电模式的硬盘,只要不读写,都会在指定的时间(30分钟,可以通过hdparm -S后面的参数调整,240 20分钟,241 30分钟)后电机停止转动,需要的时候会自动启动。一般情况下系统读写数据不会唤起休眠的硬盘,只有当与休眠硬盘相关套件读写数据的时候才会唤起。像Photo Station、Video Station、Monments、Drive即使数据在休眠的硬盘上,只要不使用,也不会唤起硬盘。

1.Raid1 一般由多块盘组成,需要把其他硬盘在关机的情况下先移除,然后再启动,这个时候系统会报故障,不需要理会。

2.用root账号登陆ssh,使用指令

cat /proc/mdstat 

查询阵列表,找到需要转换阵列。


md0、md1被系统使用,md2开始是 我们的硬盘阵列。

3.通过指令

mdadm --grow --raid-devices=1 --force /dev/md2

转换阵列为Basic,/dev/md2是我们需要转换的阵列

转换完成后阵列将转换成Basic,并不再有故障提示

一、准备工作

yum -y update
yum -y install net-tools
yum install epel* -y

二、安装GNOME桌面系统、xrdp、vnc

yum -y groups install "GNOME Desktop"
yum --enablerepo=epel -y install xrdp
yum -y install tigervnc tigervnc-server

三、修改xrdp配置

sed -i "s/max_bpp=32/max_bpp=24/g" /etc/xrdp/xrdp.ini

四、配置selinux

chcon -t bin_t /usr/sbin/xrdp
chcon -t bin_t /usr/sbin/xrdp-sesman

五、启动xrdp并设置自动启动

systemctl start xrdp
systemctl enable xrdp

六、配置防火墙

firewall-cmd --zone=public --add-port=3389/tcp --permanent
firewall-cmd --reload

一、准备工作

yum -y update

创建一个 redmine 账号用于启动 redmine

adduser redmine

获取Redmine 并解压缩

cd /home/redmine/
wget http://www.redmine.org/releases/redmine-3.4.6.tar.gz
tar -zxvf redmine-3.4.6.tar.gz
mv redmine-3.4.6/* /home/redmine/
rm -rf redmine-3.4.6.tar.gz
rm -rf redmine-3.4.6

二、安装 环境

1、安装Ruby

yum -y install epel-release curl-devel sqlite-devel libyaml-devel
gpg –keyserver hkp://keys.gnupg.net –recv-keys D39DC0E3
curl -L https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm reload
rvm install 2.3.3 #安装redmine-3.4.6 对应的 ruby
rvm use ruby-2.3.3

2、安装Rake 和 Rails

gem source -r https://rubygems.org/
gem source -a https://gems.ruby-china.org/
gem install rake -v 12.0.0
gem install rails -v 4.2.8

3、安装其他的包

yum -y install mysql-devel postgresql-devel ImageMagick-devel

三、配置Redmine

cd /home/redmine/config/
cp database.yml.example database.yml
vi database.yml #修改数据库配置

这里我使用Postgresql 数据库 只需要把之前的 production 注释掉,并配置

四、安装Redmine

cd  /home/redmine/
bundle install #安装依赖
rake db:migrate RAILS_ENV=”production”
rake redmine:load_default_data RAILS_ENV=”production” #这时候会提示你选择语言,输入:zh
rake generate_secret_token #为rails生产cookie秘钥
chown -R redmine:redmine *
chmod -R 700 *

五、启动Redmin

su – redmine -c “/usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /home/redmine/bin/rails server webrick -e production -d”

六、用Mongrel组件来替换Webrick

gem install mongrel -v 1.2.0.pre2 –pre –source https://gems.ruby-china.org/
在gemfile中加入
gem “mongrel”,”~> 1.2.0.pre2″
删除gemfile.lock文件,重新执行
bundle install
启动
su – redmine -c “/usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /home/redmine/bin/rails server mongrel -e production -d”

七、配置Nginx代理访问,并修改nginx http配置,设置 client_max_body_size 1024M,以保证可以正常上传文件

location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}