标签机

    REF

    Here is a link to the official Docker documentation for proxy HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

    A quick outline:

    First, create a systemd drop-in directory for the Docker service:

    mkdir /etc/systemd/system/docker.service.d

    Now create a file called /etc/systemd/system/docker.service.d/http-proxy.conf that adds the HTTP_PROXY and HTTPS_PROXY environment variables:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80/"
    Environment="HTTPS_PROXY=http://proxy.example.com:80/"

    If you have internal Docker registries that you need to contact without proxying you can specify them via the NO_PROXY environment variable:

    Environment="HTTP_PROXY=http://proxy.example.com:80/"
    Environment="HTTPS_PROXY=http://proxy.example.com:80/"
    Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

    Flush changes:

    $ sudo systemctl daemon-reload

    Verify that the configuration has been loaded:

    $ sudo systemctl show --property Environment docker
    Environment=HTTP_PROXY=http://proxy.example.com:80/
    Environment=HTTPS_PROXY=http://proxy.example.com:80/

    Restart Docker:

    $ sudo systemctl restart docker

    Footnote regarding HTTP_PROXY vs. HTTPS_PROXY: for a long time, setting HTTP_PROXY alone has been good enough. But with version 20.10.8, Docker has moved on to Go 1.16, which changes the semantics of this variable: https://golang.org/doc/go1.16#net/http
    For https:// URLs, the proxy is now determined by the HTTPS_PROXY variable, with no fallback on HTTP_PROXY.

    rikka@aml-s812 % udevadm info  -n /dev/bus/usb/001/004                                         ~
    P: /devices/platform/soc/c9040000.usb/usb1/1-1
    M: 1-1
    R: 1
    U: usb
    T: usb_device
    D: c 189:3
    N: bus/usb/001/004
    L: 0
    V: usb
    E: DEVPATH=/devices/platform/soc/c9040000.usb/usb1/1-1
    E: DEVNAME=/dev/bus/usb/001/004
    E: DEVTYPE=usb_device
    E: DRIVER=usb
    E: PRODUCT=51d/2/1
    E: TYPE=0/0/0
    E: BUSNUM=001
    E: DEVNUM=004
    E: MAJOR=189
    E: MINOR=3
    E: SUBSYSTEM=usb
    E: USEC_INITIALIZED=17111111955
    E: ID_BUS=usb
    E: ID_MODEL=Back-UPS_BK650M2_CH
    E: ID_MODEL_ENC=Back-UPS\x20BK650M2_CH
    E: ID_MODEL_ID=0002
    E: ID_SERIAL=American_Power_Conversion_Back-UPS_BK650M2_CH_912101A11361
    E: ID_SERIAL_SHORT=911111111111
    E: ID_VENDOR=American_Power_Conversion
    E: ID_VENDOR_ENC=American\x20Power\x20Conversion
    E: ID_VENDOR_ID=051d
    E: ID_REVISION=0001
    E: ID_USB_MODEL=Back-UPS_BK650M2_CH
    E: ID_USB_MODEL_ENC=Back-UPS\x20BK650M2_CH
    E: ID_USB_MODEL_ID=0002
    E: ID_USB_SERIAL=American_Power_Conversion_Back-UPS_BK650M2_CH_9B1111111161
    E: ID_USB_SERIAL_SHORT=9B1111111161
    E: ID_USB_VENDOR=American_Power_Conversion
    E: ID_USB_VENDOR_ENC=American\x20Power\x20Conversion
    E: ID_USB_VENDOR_ID=051d
    E: ID_USB_REVISION=0001
    E: ID_USB_INTERFACES=:030000:
    E: ID_VENDOR_FROM_DATABASE=American Power Conversion
    E: ID_MODEL_FROM_DATABASE=Uninterruptible Power Supply
    E: ID_PATH=platform-c9040000.usb-usb-0:1
    E: ID_PATH_TAG=platform-c9040000_usb-usb-0_1
    E: ID_FOR_SEAT=usb-platform-c9040000_usb-usb-0_1
    E: TAGS=:seat:
    E: CURRENT_TAGS=:seat:
    ➜  ~ cat /etc/nut/upsmon.conf 
    MONITOR ups@127.0.0.1:6502 1 monuser secret master
    MINSUPPLIES 1
    SHUTDOWNCMD "/usr/sbin/poweroff"
    NOTIFYCMD /usr/sbin/upssched
    POLLFREQ 5
    POLLFREQALERT 5
    HOSTSYNC 30
    DEADTIME 15
    POWERDOWNFLAG /etc/killpower
    NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
    NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG FSD SYSLOG+WALL+EXEC
    NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
    NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
    NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
    NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
    RBWARNTIME 43200
    NOCOMMWARNTIME 300
    FINALDELAY 5
    ➜  ~ cat /opt/scripts/mail.py
    !/usr/bin/env python3
    import os
    import sys
    import smtplib
    import mimetypes
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email.mime.text import MIMEText
    from email.mime.audio import MIMEAudio
    from email.mime.image import MIMEImage
    from email import encoders
    
    def sendMail(subject, text):
        gmailUser = 'pve@t.ch'
        gmailPassword = 'pa55Word'
        recipient = 'pve@t.ch'
    
         Create the container email message
        msg = MIMEMultipart()
        msg['From'] = gmailUser
        msg['To'] = recipient
        msg['Subject'] = subject
        msg.attach(MIMEText(text, 'plain'))
    
        try:
             Setup the SMTP server
            mailServer = smtplib.SMTP('xxxx.xxx', 1234)
            #mailServer.ehlo()
            #mailServer.starttls()
            #mailServer.ehlo()
            mailServer.login(gmailUser, gmailPassword)
    
             Send the email
            mailServer.sendmail(gmailUser, recipient, msg.as_string())
            mailServer.close()
    
            print('Sent email to %s' % recipient)
        except Exception as e:
            print('Failed to send email: %s' % str(e))
    
    if __name__ == "__main__":
        if len(sys.argv) != 3:
            print("Usage: send_mail.py <subject> <message>")
            sys.exit(1)
    
        subject = sys.argv[1]
        text = sys.argv[2]
        sendMail(subject, text)
    ➜  ~ cat /etc/nut/ups.conf
    maxretry = 3
    [ups]
        driver = "usbhid-ups"
        port = "auto"
    ➜  ~ cat /etc/nut/upsd.conf
    MAXAGE 25
    LISTEN 0.0.0.0 6502
    ➜  ~ cat /etc/nut/upsd.users
    [monuser]
        password = secret
        upsmon = master
    ➜  ~ cat /opt/scripts/upssched-cmd.sh
    ! /bin/sh
    /opt/scripts/mail.py "Alarm from PVE" "$1"
    ➜  ~ cat /etc/nut/upssched.conf
    CMDSCRIPT  "/opt/scripts/upssched-cmd.sh"
    PIPEFN      /var/run/nut/upssched.pipe
    LOCKFN      /var/run/nut/upssched.lock
    
    AT NOCOMM   * EXECUTE NOTIFY-NOCOMM
    AT COMMBAD  * START-TIMER NOTIFY-COMMBAD 10
    AT COMMOK   * CANCEL-TIMER NOTIFY-COMMBAD COMMOK
    AT FSD      * EXECUTE NOTIFY-FSD
    AT LOWBATT  * EXECUTE NOTIFY-LOWBATT
    AT ONBATT   * EXECUTE NOTIFY-ONBATT
    AT ONLINE   * EXECUTE NOTIFY-ONLINE
    AT REPLBATT * EXECUTE NOTIFY-REPLBATT
    AT SHUTDOWN * EXECUTE NOTIFY-SHUTDOWN
    AT ONBATT   * START-TIMER SHUTDOWN 120
    AT ONLINE   * CANCEL-TIMER SHUTDOWN


    一次或多次排查,换了路由系统之后,寝室的跳板机器(挂着外面进局域网唯一的通道两个 Shadowsocks 代理)的代理突然无法访问了,将代理迁到另一台机器上正常,怀疑是跳板机的网络问题,但是上面跑的网页也十分正常,一直没找到原因就这么搁置了很久;
    今晚弄另一个代理的时候顺便排查原因,检查了 Nginx 到容器的端口问题和容器内部网络问题,在容器内部 Curl Baidu 是正常的,就让我十分费解了。
    Shadowsocks 这边能看到 Log 提示请求到了容器内部,但是客户端却响应超时,Log 内容不足,最后想着把 ss-server 的 Log Level 提升到 Debug 模式后发现有 DNS 解析相关的问题,ss-server log 显示第一次尝试解析 v4 失败,再次尝试解析 v6 失败,搜索时发现 Github Issue服务端ipv6环境使用问题 中的配置有一行

    "dns":"2001:67c:2b0::4"

    改配置指定了 SS-server 使用的 DNS,于是指定 DNS 为局域网的网关后就正常了;

    "dns":"192.168.23.1"
    1. 雪豹1600w标配拼多多摇红包和超级秒杀拿的7.5折券叠加券后320元的清洗机,其他自己买。
      出水快接头和进水快接奶嘴头各一套在1688上买的,19块钱一套全铜进出水快接套装,(某宝拼多多要20块钱一个零件,一套35-40块钱,咸鱼16块钱一套,进出水一套的32,1688全套进出水算上邮费才19元),延长管看你有没有提供插电和水源的问题了,如果有水源有电源,离电源近离水源远买根纤维软管,别买不锈钢网的管还有外面塑料不买pvc,买的是ppr或者pp管,因为这种水管在地上拉来拉去和收纳折叠需要耐磨性和韧性,pvc韧性和耐磨都不如ppr和pp,不锈钢网也不够韧性,两个硬度较高的组合,分分钟没用几次就爆管,特别是你管子缠绕了几圈解开拉直时候有了定型,管子会打折,ppr+纤维软管可以复原,而你买了不锈钢内网+pvc管子会直接爆管,清洗机原配的管子都是纤维软管,买什么不锈钢管。
    2. 洗车液买SONAX索纳克斯香波洗车液,拼多多继续薅超级秒杀里的50-10的优惠券,41块钱买2升的洗车液,这个德国进口大牌子洗车液比国产的还便宜亲民价,用过的老哥都说可以。
    3. 因为雪豹是1600+峰值130bar的机器,绿田品牌专业视频博主给我提供1.2喷芯+3.5滤网的建议参考,主要还要看壶身发泡器的腔体结构,还有吸液孔。
    4. 最后一块麂皮毛巾收水,两块海绵擦车,一个家里的水桶,水桶泥沙过滤网可以自己做一个,随便拿个比较硬的网塞水桶里隔离泥沙,有洗车机就不用两桶水了。
    5. pa壶+洗车机打两次泡沫,预洗一次水枪冲水再喷一次,给水桶里加5ml洗车液,拿水枪射一下出泡沫就行了,水桶里有了洗车液的一点润滑配合车上本来就喷了层泡沫,拿海绵粘水擦,先擦引擎盖,发现海绵有脏东西在水桶里的网刮掉泥沙,再继续擦车,然后换个面擦车的左或者右边,擦完换第二块海绵擦,这样擦完拿水枪冲,普通外壳洗车基本上完事了,如果有锈点买一块洗车泥,8-9块钱一盒200g,整块方块捏出个小球压成饼,横竖的擦不能打圈,海绵沾水,一边跑泥一边淋水,跑洗车泥过程很长。​

    据说每个村子都有一个守村人,或智力低下、或疯疯癫癫、或身体残疾,生活拮据、无父无母、孤独终老。据说守村人的身体残障、家庭破碎都是因为为村子挡下灾难而造成的,而且守村人的一生都与村子绑定在了一起,村子往后的灾难都将以病痛的形式体现在守村人身上,直到守村人承受不住死亡的那天。守村人的一生也不会离开村子,就算离开也是短时间和短距离的。据说离开的距离和时间长了,守村人就会死。当然,当村子繁荣时也会回馈守村人,他们的病痛会减少减轻。传说村子最繁荣时,守村人会和普通人一样,不再疯癫痴傻。传说守村人是前世罪孽深重但有悔改之心的人,今生作为守村人来洗清罪孽。不过虽然守村人是来赎罪的,但是如果有人欺辱他,那么他的罪孽就会转移一些到欺辱他的人的身上。除去那些玄学传说,现实中也的确存在每隔一段时间,村子里就会出现一个苦难的守村人。以上就是守村人的由来。​

    一般放这种玻璃材质的展示品呢,灯带放后面会比较突出质感,放在中间的话更适合放手办,同时灯带最好选择45°嵌入向后打光,这样更容易营造见光不见灯的效果,最后,作为展示柜用了浅色玻璃,那侧边最好不要露出铰链,可以选择天地轴和针式铰链,以上仅供参考。

    OwO 更新一次主题就要唤醒记忆重新弄,麻烦死了

    新装的 ITX 卵路由(大材小用)

    qemu-img convert test.qcow2 -O raw /dev/LVMGROUP/LVMDisc

    TR609 用官方工具刷 CR6606 似乎是校验错误,在上传固件成功后,一直闪烁紫灯,重启仍在 OpenWRT,后来建议刷回 cr6606 的 bootloader,先刷 CR6608。
    要先注入

    insmod /tmp/mtd-rw.ko i_want_a_brick=1

    然后再写入 pb-boot.img

    mtd write ./pb-boot.img Bootloader

    CPUID:906EA
    产品:8代、9代ES不显、正显与正式版
    步进:U0(6+2)
    台式桌面U:
    8700T - ES - QN8J
    8670 - ES - QNLW
    8700 - ES - QN8H
    8700 - QS - QNML
    8670K - ES - QNMR
    8700K - ES - QNLU
    8700K - ES - QNLV
    8700K - ES - QNLW
    8700K - ES - QN8G
    8700K - QS - QNMK
    服务器至强U:
    E-2104G - ES - QPTB
    E-2124 - ES - QPA2
    E-2124G - ES - QP9Y
    E-2126G - ES - QNTA
    E-2126G - ES - QNTM
    E-2134 - ES - QPA1
    E-2136 - QS - QP4C
    E-2136 - ES - QNCU
    E-2136G - ES - QNCW
    E-2144G - ES - QP9Z
    E-2146G - ES - QNT9
    E-2174G - ES - QPA0
    E-2176G - ES - QNCV
    E-2176G - QS - QNT8
    E-2186G - QS - QNT6
    十代马甲U:
    10500 - ES - QSRK
    10600 - ES - QSRJ
    CPUID:906EC
    产品:9代ES, QS与正式版
    步进:P0(8+2)
    台式桌面U:
    9900T - ES - QQC0
    9900T - ES - QQZ6
    9900 - ES - QQBZ
    9900 - ES - QQZ5
    9900K - ES - QQBY
    9900K - ES - QQZ4
    9900K - QS - QQPP
    服务器至强U:
    E-2278G - ES - QRA2
    E-2278G - ES - QQM6
    E-2288G - ES - QRA1
    E-2288G - ES - QQM5
    移动平台U:
    8850HK - ES - QNCT
    9850HK - ES - QQLT
    9980HK - ES - QQLS
    906ED 9代ES - QS - 与正式版 R0(8+2) 都是魔改型号上台式机,这一栏仅仅只是给D大看看R0步进
    10980HK - ES - QTJ1
    2276M- QS -QTJ2
    说明,以上数据都是淘宝自己对比收录的,由于ES不显没有具体型号,都是按照核心线程,功率,是否锁频锁倍数来估测型号的,尤其是8700K有多个型号,有锁频高功耗的,也有低频的,也有65W的可超频的。当然,你也可以把它们看作是能超频的高功耗8700T和8700。
    还有一些不好命名的,比如:
    QNCU,淘宝大家都默认是2146G,实质按频率算是2136,因为它没有核显,不知大家怎么看。
    QNMR最开始是被叫做i7-8670K,因为频率低且6核,现在归为8700K了,频率低发热大不是它的错。
    至于QS,都是在咸鱼详情和网上找的玩家截图,都已核实,CPU在cpu-z的规格里有型号显示,能看到具体型号,和正式版参数一模一样,如果不显示型号,哪怕参数一模一样也算ES。当然,本质上QS也属于ES,这里只是划分出正显版而已。
    还有哪些常见的八代九代测试版U,欢迎大家补充,也方便新来的萌新查询,本人水平有限,不足之处还请大家多多指正。

    PVE开启网卡直通,显卡直通,USB直通。请务必看完此文章,再结合自己实际,操作,如果成功,请再下面评论,自己的平台,有助于网友交流。

    # 第一步:确认自己的主板CPU是否支持Vt-d功能

    不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。

    VT-D是io虚拟化。不是VT-X,具体请参考下面文章

    https://zhuanlan.zhihu.com/p/50640466

    有很多新手,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。

    # 第二步:开启iommu

    #编辑grub,请不要盲目改。根据自己的环境,选择设置
    vi /etc/default/grub
    #在里面找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"
    然后修改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
    如果是amd cpu请改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"如果是需要显卡直通,建议在cmdline再加一句video=vesafb:off video=efifb:off video=simplefb:off,加了之后,pve重启进内核后停留在一个画面,这是正常情况GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"

    修改完成之后,直接更新grub 

    update-grub

    注意,如果此方法还不能开启iommu,请修改 

     /etc/kernel/cmdline文件

    并且使用proxmox-boot-tool refresh 更新启动项

    # 第三步 加载相应的内核模块

    echo vfio >> /etc/modules
    echo vfio_iommu_type1 >> /etc/modules
    echo vfio_pci >> /etc/modules
    echo vfio_virqfd >> /etc/modules

    使用update-initramfs -k all -u命令更新内核参数

    重启主机

    # 第四步 验证是否开启iommu

    重启之后,在终端输入

    dmesg | grep iommu

    出现如下例子。则代表成功

    [ 1.341100] pci 0000:00:00.0: Adding to iommu group 0[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4

    此时输入命令

    find /sys/kernel/iommu_groups/ -type l 
    #出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启

    # 显卡直通

    理论上AMD RADEON 5xxx, 6xxx, 7xxx, Navi 5XXX(XT), NVIDIA GEFORCE 7, 8, GTX 4xx, 5xx, 6xx, 7xx, 9xx, 10xx and RTX 16xx/20xx/30xx都可以成功直通。

    但是对于NVIDIA显卡,建议使用9代以上中端卡直通,且使用最新的驱动。

    对于AMD的APU3/5系列核显/RX4XX/5XX/6XXX均无法完美直通。无法使用本文提供的教程直通,请注意,有其他的教程,但由于我没有卡,无法撰写教程

    ## 1、直接屏蔽显卡驱动

    直通AMD显卡,请使用下面命令echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf #直通NVIDIA显卡,请使用下面命令
    echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf 
    #直通INTEL核显,请使用下面命令,注意!如果使用Gvt-G,请不要使用下面的命令
    echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf 
    echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf 

    ## 2、把显卡绑定到vfio-pci

    使用lspci 查看自己的显卡PCI地址,如02:00

    使用lspci -n 查看显卡的did和vid。我这边是02:00,可以看到下面输出

    root@pve1:~ lspci -n
    00:00.0 0600: 8086:3ec4 (rev 0a)
    00:01.0 0604: 8086:1901 (rev 0a)
    00:02.0 0300: 8086:3e9b
    00:14.0 0c03: 8086:a12f (rev 31)
    00:17.0 0106: 8086:a102 (rev 31)
    00:1c.0 0604: 8086:a114 (rev f1)
    00:1d.0 0604: 8086:a118 (rev f1)
    00:1d.2 0604: 8086:a11a (rev f1)
    00:1d.3 0604: 8086:a11b (rev f1)
    00:1f.0 0601: 8086:a148 (rev 31)
    00:1f.2 0580: 8086:a121 (rev 31)
    00:1f.3 0403: 8086:a170 (rev 31)
    00:1f.4 0c05: 8086:a123 (rev 31)
    00:1f.6 0200: 8086:15b8 (rev 31)
    01:00.0 0200: 15b3:1003
    02:00.0 0100: 10de:1381 (rev 03)02:00.1 0100: 10de:0fbc (rev 03)
    03:00.0 0108: 8086:f1a6 (rev 03)
    04:00.0 0604: 1b21:1080 (rev 04)

     02:00.0 02:00.1一个是GPU,一个是声卡,两者都要一起直通,所以通过命令,把2者都绑定到vfio-pci上。

    echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf
    #注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。

    上述操作完成之后,再检查一下,是否将例子内容替换成自己的。使用以下命令查看。

    cat /etc/modprobe.d/blacklist.conf
    cat /etc/modprobe.d/vfio.conf

    ## 3、更新内核

    对于nvidia显卡,需要

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

    update-initramfs -k all -u 

    随后重启

    ## 4、开始直通

    新建一个虚拟机。根据自己的爱好,选择ovmf或者seabios,通常来说两者对独显直通没有影响,建议nvidia 9系以上选择OVMF,其他选择seabios。

    打开虚拟机面板,正常安装系统,并且开启远程桌面或者安装好向日葵。随后点击添加 PCI设备 

    如下图,注意!!!不要勾选主GPU!。如果不能勾选PCIE,那么一定要把虚拟机改成Q35类型。

    随后开机,如果能正常启动,那么就安装NVIDIA最新驱动。

    提示:由于某些消费级主板PCI的设计问题,你可能只能直通第一个PCIe x16槽的显卡。

    # 核显直通

    如果想要核显显示到显示器。虚拟机请使用Seabios,机型为i440fx并且在bios中开启CSM。估摸着核显需要到pci的00:02位置才能亮。

    目前IGD( Intel Graphics Device)直通理论上支持3代酷睿以上。但是从目前的直通结果看,比较容易的是5代-10代。3-4代直通成功概率低,受多方面影响。11代及其之后,直到目前,也能正常直通,建议11代以上,升级到内核6.2,再直通

    amd 3400g 5xxg 需要vender reset才能直通(本文教程不适合)。

    ## 基于5-10代的CPU核显和11-13代直通给linux。请优先以下面这种方式直通:

    针对于qemu-sever大于6.2-3版本,就是pve6.3以上版本。

    将bios改成seabios,机器类型选择i440fx,使用传统模式装好系统,开启远程。

    将显卡设置成无,在核显后面添加legacy-igd=1,如hostpci0: 0000:00:02.0,legacy-igd=1。此时机器会出现显示器画面。如果出现画面,但是核显不能正确驱动,

    添加一个args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on 

    最后的配置文件,加上声卡可以参考如下:

    args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
    hostpci0: 0000:00:02.0,legacy-igd=1
    hostpci1: 0000:00:1f.3
    machine: pc-i440fx-7.2

    如果上面操作还是不行,请尝试添加vbios,关于什么是vbios,请百度一下,如何提取vbios,请参考下面文章https://foxi.buduanwang.vip/yj/1602.html/,本文不适用。

    ## 基于5-10代的CPU核显直通黑苹果。请优先以下面这种方式直通:

    黑苹果需要OVMF启动,一般需要定制虚拟机bios,以在虚拟机启动的时候,在虚拟机内驱动核显。

    定制bios,请加QQ 70083721,需要付费定制。

    ## 基于11-13代的CPU核显直通。请优先以下面这种方式直通:

    看这个吧,

    https://blog.csdn.net/coolhz/article/details/130234903

    心态炸了。不想写了。

    如果是要显示虚拟机bios,请加QQ 70083721,需要付费定制虚拟机bios。

    # 硬盘直通

    此部分请参考

    https://foxi.buduanwang.vip/virtualization/1754.html/

    # 网卡直通

    正常情况下,网卡直通不会有什么困难。在开启iommu之后,即可在Web页面上,将网卡作为PCIe设备添加即可。

    但,你需要确保没有直通到PVE的管理网口。否则你的PVE会失联。且PVE没有使用此网卡。

    下图为PVE7.2直通网卡的界面。

    注意!

    由于供应商的问题,可能一张物理网卡会有多个逻辑的网口,这些网口会在同一个PCIe地址上,如下

    这有2个I350的网卡,均在07:00这个位置上。将此类网卡直通,有2种情况。

    1、一个网口为PVE管理口,一个网口直通给虚拟机

    此种情况,请参考上面,进行直通,如上上图,请勿勾选 所有功能。

    2、分别直通给虚拟机。

    由于多个网卡位于同一个PCI地址上,可能会在一个iommu组里,只能将这些网卡同时直通给一个虚拟机,否则会报错。

    你需要确认网卡是否在同一个iommu组,执行下面命令:

    for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; lspci -nns "${d#*/}"; done|grep Eth  

    如下输出:

    root@pve3:~ for d in /sys/kernel/iommu_groups/*/devices/*; do      n=${d#*/iommu_groups/*}; n=${n%%/*};     printf 'IOMMU Group %s ' "$n";     lspc
    IOMMU Group 17 04:00.0 Ethernet controller [0200]: Mellanox Technologies MT27500 Family [ConnectX-3] [15b3:1003]
    IOMMU Group 19 07:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
    IOMMU Group 20 07:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)

     从上面输出看,这上面的2个I350网卡分别在组19和20上,就意味着可以分开直通给虚拟机。

    如果同一个iommu组,那么就需要利用PCIe桥的ACS特性,这部分请参考

    IOMMU是如何划分PCI device group的? - 知乎 (zhihu.com)

    情况1: 版本低于7.1

    你需要安装破解内核,才能开启ACS强制。

    这部分参考:

    https://foxi.buduanwang.vip/linux/1522.html/

    情况2:PVE版本为7.1+

    你可以在GRUB上配置一个命令即可完成。

    在grub文件里添加一个参数pcie_acs_override=downstream

    grub如下

    GRUB_DEFAULT=0
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on  pcie_acs_override=downstream"
    GRUB_CMDLINE_LINUX=""
    

    随后进行保存,并且更新内核,更新grub

    update-grub
    update-initramfs -k all -u 

    随后重启

    # 黑苹果

    虚拟机可以创建黑苹果,随后直通硬件到虚拟机,可以获得相关的性能提升。

    黑苹果,你需要以PCI方式直通硬件(请勿勾选PCIe)。最好使用免驱显卡,这样可以直接输出到显示器。

    如果不是免驱显卡,那么请自行进系统之后,配置Opencore。

    黑苹果不支持gvt-g

    塑料用AB胶,玻璃用无影胶,石头用水泥,金属用焊接,手术用手术线缝合,衣服用针线,耳机单元用e8000,手机外壳用胶贴,屏幕用b700,鞋子用7900,pvc接管用PVC胶水,管螺纹螺丝防松密封用厌氧胶,补铸件用铸工胶,木板用白乳胶,电器绝缘密封用704硅橡胶,机械元件密封防油防水用丁晴胶, 昆虫标本耳机外壳填充造型用树脂胶,烤瓷牙用光固化树脂,DIY用热融胶,PCB防水用透明有机密封胶,防鞋线雨天进水烂线断线用502

    有位置信息的一条报错

    [47716.772022] EDAC MC0: 1 CE ie31200 CE on mc#0csrow#1channel#0 (csrow:1 channel:0 page:0x0 offset:0x0 grain:8 syndrome:0x8)

    内存位置信息

    P0_Node0_Channel0_Dimm0 DIMMA1 18ADF4G72AZ-3G2BT
    P0_Node0_Channel1_Dimm1 DIMMB2 MTA18ASF4G72AZ-3G2BZ
     dmidecode -t memory | grep 'Locator'
            Locator: DIMMA1
            Bank Locator: P0_Node0_Channel0_Dimm0
            Locator: DIMMA2
            Bank Locator: P0_Node0_Channel0_Dimm1
            Locator: DIMMB1
            Bank Locator: P0_Node0_Channel1_Dimm0
            Locator: DIMMB2
            Bank Locator: P0_Node0_Channel1_Dimm1

    错误信息

    ➜  ~ grep "[0-9]" /sys/devices/system/edac/mc/mc0/rank*/dimm_ce_count
    /sys/devices/system/edac/mc/mc0/rank0/dimm_ce_count:0 
    /sys/devices/system/edac/mc/mc0/rank1/dimm_ce_count:0
    /sys/devices/system/edac/mc/mc0/rank2/dimm_ce_count:1
    /sys/devices/system/edac/mc/mc0/rank3/dimm_ce_count:0

    这里 rank 和上述的内存位置信息无法对应关系。

    查看该目录下的 dimm_location

    ls /sys/devices/system/edac/mc/mc0/rank2/
    dimm_ce_count  dimm_dev_type  dimm_edac_mode  dimm_label  dimm_location  dimm_mem_type  dimm_ue_count  power  size  uevent
     grep "[0-9]" /sys/devices/system/edac/mc/mc0/rank2/dimm_location
    csrow 1 channel 0

    可以看到和上面 mc#0csrow#1channel#0 能够对应上。

    继续核实位置信息

    ➜  ~  grep "[0-9]" /sys/devices/system/edac/mc/mc0/rank*/dimm_location
    /sys/devices/system/edac/mc/mc0/rank0/dimm_location:csrow 0 channel 0
    /sys/devices/system/edac/mc/mc0/rank1/dimm_location:csrow 0 channel 1
    /sys/devices/system/edac/mc/mc0/rank2/dimm_location:csrow 1 channel 0
    /sys/devices/system/edac/mc/mc0/rank3/dimm_location:csrow 1 channel 1

    这里可以确定出问题的内存条是 第二个内存通道的第一条出现了问题,但问题来了哪个是第二个内存通道?出问题的是B1吗?但是B1处没有内存条。