<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://www.totoro.pub/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.totoro.pub/" rel="alternate" type="text/html" /><updated>2024-05-10T14:49:55+08:00</updated><id>https://www.totoro.pub/feed.xml</id><title type="html">橙汁不甜</title><subtitle>totoro625 是条咸鱼&lt;br&gt; 无可救药啦( •̀ ω •́ )✧
</subtitle><author><name>totoro625</name></author><entry><title type="html">分享 AIO 服务器兼 NAS 存储</title><link href="https://www.totoro.pub/share-my-nas-c28" rel="alternate" type="text/html" title="分享 AIO 服务器兼 NAS 存储" /><published>2023-10-07T00:00:00+08:00</published><updated>2023-10-07T00:00:00+08:00</updated><id>https://www.totoro.pub/share-my-nas-c28</id><content type="html" xml:base="https://www.totoro.pub/share-my-nas-c28">&lt;h2 id=&quot;正在运行的配置&quot;&gt;正在运行的配置&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;配件&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;型号&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Intel i5-11400&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;核显&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;主板&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;华硕ROG STRIX B560-I GAMING WIFI&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;内存&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;英睿达DDR4 3200 16Gx2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;电源&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;海盗船RM750e&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;机械大师C28&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;利民 FS140&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热（进）&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;猫头鹰 A9x14 x1 + 玄冰风4010 x2 + 外置USB 9cm x1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热（出）&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;ID-COOLING 12025 x1 + 利民12015 x1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显示器&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;显卡欺骗器&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;键鼠&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;罗技接收器&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;拓展卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;绿联pcie转m2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;固态1pcie位置 4.0 x16&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;亿联 am6a1 1T （slog+l2arc+lvm）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;固态2主板正面 4.0 x16&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;三星 Samsung PM9A1 2T （slog+l2arc+PVE swap+ext4目录）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;固态3主板背面 3.0 x16&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;三星 Samsung PM981 256G （PVE系统盘）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;数据盘&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;西数 WD HC550 16T x4（RAIDZ2）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;UPS&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;APC BK650M2-CH&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;备用&quot;&gt;备用&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;配件&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;型号&lt;/th&gt;
      &lt;th&gt;备注&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显示器&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;树莓派5寸LCD&lt;/td&gt;
      &lt;td&gt;用于临时调试BIOS&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;拓展卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;plx8748&lt;/td&gt;
      &lt;td&gt;NVME 3.0 x16 x4 + 8654 8i x2，不兼容部分老固态，后期淘汰m2再用，暂不需要&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;新购物品清单：&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;3块HC550 16T&lt;/li&gt;
  &lt;li&gt;一台UPS&lt;/li&gt;
  &lt;li&gt;plx8748&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;功率&quot;&gt;功率&lt;/h2&gt;

&lt;p&gt;powersave 模式，50~120W ，日常使用一般 80~100W 波动&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/OBxbuad.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/SKL4Sso.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</content><author><name>totoro625</name></author><category term="PVE" /><summary type="html">正在运行的配置 配件 型号 CPU Intel i5-11400 显卡 核显 主板 华硕ROG STRIX B560-I GAMING WIFI 内存 英睿达DDR4 3200 16Gx2 电源 海盗船RM750e 机箱 机械大师C28 CPU散热 利民 FS140 机箱散热（进） 猫头鹰 A9x14 x1 + 玄冰风4010 x2 + 外置USB 9cm x1 机箱散热（出） ID-COOLING 12025 x1 + 利民12015 x1 显示器 显卡欺骗器 键鼠 罗技接收器 拓展卡 绿联pcie转m2 固态1pcie位置 4.0 x16 亿联 am6a1 1T （slog+l2arc+lvm） 固态2主板正面 4.0 x16 三星 Samsung PM9A1 2T （slog+l2arc+PVE swap+ext4目录） 固态3主板背面 3.0 x16 三星 Samsung PM981 256G （PVE系统盘） 数据盘 西数 WD HC550 16T x4（RAIDZ2） UPS APC BK650M2-CH 备用 配件 型号 备注 显示器 树莓派5寸LCD 用于临时调试BIOS 拓展卡 plx8748 NVME 3.0 x16 x4 + 8654 8i x2，不兼容部分老固态，后期淘汰m2再用，暂不需要 新购物品清单： 3块HC550 16T 一台UPS plx8748 功率 powersave 模式，50~120W ，日常使用一般 80~100W 波动</summary></entry><entry><title type="html">新的PVE，新的开始</title><link href="https://www.totoro.pub/newpve" rel="alternate" type="text/html" title="新的PVE，新的开始" /><published>2023-10-01T00:00:00+08:00</published><updated>2023-10-01T00:00:00+08:00</updated><id>https://www.totoro.pub/newpve</id><content type="html" xml:base="https://www.totoro.pub/newpve">&lt;p&gt;旧机器的性能太差了，正好淘汰了一台电脑，改成PVE了&lt;/p&gt;

&lt;h1 id=&quot;引---全新pve宿主机写个自己的小tips&quot;&gt;引 - 全新PVE宿主机，写个自己的小Tips&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;Docker不得在宿主机及LXC上安装&lt;/li&gt;
  &lt;li&gt;vm全部使用cloudimg构建&lt;/li&gt;
  &lt;li&gt;UFW安装在对外的服务器上&lt;/li&gt;
  &lt;li&gt;数据盘4块HC550 16T 组建ZFS存储池RaidZ-2&lt;/li&gt;
  &lt;li&gt;每个VM安装不再安装Tailscale、zerotier、frpc、CFtunnel&lt;/li&gt;
  &lt;li&gt;独立的swap硬盘用于各VM，及PVE（宿主机64G，UFW 16G，Seafile 16G，Mt-photo 16G）&lt;/li&gt;
  &lt;li&gt;独立的固态用于PVE安装&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://pve.sqlsec.com/&quot;&gt;国光的 PVE 环境搭建教程&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rushb.pro/article/N5105-PVE-Nvme-sensor.html&quot;&gt;N5105 Proxmox VE (PVE) 主页添加温度硬盘等信息&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;开始安装系统&quot;&gt;开始安装系统&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://www.proxmox.com/en/downloads&quot;&gt;官方网站&lt;/a&gt;下载ISO，用&lt;a href=&quot;https://www.ventoy.net/en/download.html&quot;&gt;ventoy&lt;/a&gt;制作启动工具，插上网线再开机（键盘和显示器是必须的），根据引导走完全部流程&lt;/p&gt;

&lt;p&gt;系统盘请使用ext4格式，避免问题&lt;/p&gt;

&lt;p&gt;swap设置为0G，后期自行添加专用swap硬盘，减少系统盘的磨损&lt;/p&gt;

&lt;p&gt;在&lt;a href=&quot;https://tabby.sh/&quot;&gt;tabby&lt;/a&gt;添加配置（直连和转发）&lt;/p&gt;

&lt;h1 id=&quot;特殊情况&quot;&gt;特殊情况&lt;/h1&gt;

&lt;p&gt;DEBUG&lt;/p&gt;

&lt;h2 id=&quot;网络故障pcie插拔&quot;&gt;网络故障/pcie插拔&lt;/h2&gt;

&lt;p&gt;键盘、屏幕连接好后&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ip a 或者 ip addr
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;查看一下网卡是什么，例如：enp8s0&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/network/interfaces
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;修改网卡&lt;/p&gt;

&lt;h2 id=&quot;宿主机重启后vm内开机启动程序未启动&quot;&gt;宿主机重启后VM内开机启动程序未启动&lt;/h2&gt;

&lt;h3 id=&quot;pve开机后重新启动&quot;&gt;PVE开机后重新启动&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/systemd/system/vmreboot.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Unit]
Description=VM reboot
[Service]
待更新
qm stop 202
qm status 202
qm start 202
[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable vmreboot.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;硬盘空间不足&quot;&gt;硬盘空间不足&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;unable to initialize physical volume /dev/nvmeon1p3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;分区时硬盘总容量选择小几个GB即可&lt;/p&gt;

&lt;h1 id=&quot;proxmox-ve-8-换源&quot;&gt;Proxmox VE 8 换源&lt;/h1&gt;

&lt;p&gt;注1：在前面加&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#&lt;/code&gt;注释掉全部内容，添加以下内容&lt;/p&gt;

&lt;p&gt;注2：Ctrl + O 保存，Ctrl + X 退出&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;deb https://mirrors.ustc.edu.cn/debian/ bookworm main non-free non-free-firmware contrib
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main non-free non-free-firmware contrib
deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main
deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free non-free-firmware contrib
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free non-free-firmware contrib
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main non-free non-free-firmware contrib
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main non-free non-free-firmware contrib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;或者:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sed -i &apos;s|http://deb.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g&apos; /etc/apt/sources.list
sed -i &apos;s|http://security.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g&apos; /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/sources.list.d/pve-enterprise.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/sources.list.d/ceph.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;更新-lxcct-template源&quot;&gt;更新 LXC（CT Template）源&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sed -i &apos;s|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g&apos; /usr/share/perl5/PVE/APLInfo.pm
systemctl restart pvedaemon.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;直通--开启-iommu-和-sr-iov&quot;&gt;直通 / 开启 IOMMU 和 SR-IOV&lt;/h1&gt;

&lt;p&gt;默认大家BIOS设置好啦，新机器请看&lt;a href=&quot;https://pve.sqlsec.com/2/1/&quot;&gt;这个教程&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;修改GRUB_CMDLINE_LINUX_DEFAULT字段&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; Intel
GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet intel_iommu=on iommu=pt textonly nomodeset nofb pci=noaer pcie_acs_override=downstream,multifunction&quot;
 AMD
GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet amd_iommu=on iommu=pt textonly nomodeset nofb pci=noaer pcie_acs_override=downstream,multifunction&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;update-grub &amp;amp;&amp;amp; reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;带显卡直通看&lt;a href=&quot;https://pve.sqlsec.com/4/2/&quot;&gt;这个教程&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;个性化配置&quot;&gt;个性化配置&lt;/h1&gt;

&lt;p&gt;自定义pveproxy web界面（非必须，just好看）&lt;/p&gt;

&lt;h2 id=&quot;删除订阅弹窗&quot;&gt;删除订阅弹窗&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sed -Ezi.bak &quot;s/(Ext.Msg.show\(\{\s+title: gettext\(&apos;No valid sub)/void\(\{ \/\/\1/g&quot; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;首页显示-cpu主板nvme硬盘-温度等信息&quot;&gt;首页显示 CPU、主板、NVME、硬盘 温度等信息&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt update
apt install lm-sensors patch -y
sensors-detect
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;全部回车&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;chmod +s /usr/sbin/smartctl
export LC_ALL=en_US.UTF-8
sensors
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;懒人&lt;a href=&quot;https://tty228.github.io/2022/06/18/%E3%80%90Proxmox%20VE%E3%80%91PVE%20%E9%A6%96%E9%A1%B5%E6%98%BE%E7%A4%BA%20CPU%E3%80%81%E4%B8%BB%E6%9D%BF%E3%80%81NVME%E3%80%81%E7%A1%AC%E7%9B%98%20%E6%B8%A9%E5%BA%A6%E7%AD%89%E4%BF%A1%E6%81%AF/&quot;&gt;一键教程&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;看一下自己几个NVME&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;smartctl -a -j /dev/nvme? 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;看一下自己几个硬盘&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;smartctl -a -j /dev/sd? 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /usr/share/perl5/PVE/API2/Nodes.pm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ctrl + w 搜索&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shared =&amp;gt; $meminfo-&amp;gt;{memshared}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;在该段结束后（；为结束）换行添加（记得tab一下对齐）&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$res-&amp;gt;{sensinfo} = `sensors`;
$res-&amp;gt;{cpusensors} = `lscpu | grep MHz`;
$res-&amp;gt;{smartctl_nvme0_json} = `smartctl -a -j /dev/nvme0`;
$res-&amp;gt;{smartctl_nvme1_json} = `smartctl -a -j /dev/nvme1`;
$res-&amp;gt;{smartctl_nvme2_json} = `smartctl -a -j /dev/nvme2`;
$res-&amp;gt;{smartctl_hdd1_json} = `smartctl -a -j /dev/sda`;
$res-&amp;gt;{smartctl_hdd2_json} = `smartctl -a -j /dev/sdb`;
$res-&amp;gt;{smartctl_hdd3_json} = `smartctl -a -j /dev/sdc`;
$res-&amp;gt;{smartctl_hdd4_json} = `smartctl -a -j /dev/sdd`;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注：该示例为3块nvme + 4块硬盘&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /usr/share/pve-manager/js/pvemanagerlib.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;建议使用&lt;a href=&quot;https://winscp.net/eng/download.php&quot;&gt;winscp&lt;/a&gt;打开，&lt;a href=&quot;https://notepad-plus-plus.org/downloads/&quot;&gt;notepad++&lt;/a&gt;编辑&lt;/p&gt;

&lt;p&gt;搜索&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt; PVE Manager Version&lt;/code&gt;新版本为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Manager Version&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&quot;旧的配置1&quot;&gt;旧的配置1&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
            itemId: &apos;sensinfo&apos;,
            colspan: 2,
            printBar: false,
            title: gettext(&apos;CPU温度&apos;),
            textField: &apos;sensinfo&apos;,
            renderer:function(value){
            const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
            const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
            const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
            const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
            const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1];
			const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1];
			const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
			const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1];
             return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3}|${c4}|${c5} ℃ | 主板: ${b0} ℃`
             }
	},
	{
          itemId: &apos;MHz&apos;,
          colspan: 2,
          printBar: false,
          title: gettext(&apos;CPU频率&apos;),
          textField: &apos;cpusensors&apos;,
          renderer:function(value){
			  const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1];
			  const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1];
			  const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1];
			  const f3 = f0*f2/100;
			  return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz `
            }
	},
	{        
        itemId: &apos;nvme_ssd0&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;NVME槽0：pcie槽转接&apos;),
        textField: &apos;smartctl_nvme0_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;nvme_ssd1&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;NVME槽1：主板正面pcie4.0&apos;),
        textField: &apos;smartctl_nvme1_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;nvme_ssd2&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;NVME槽2：主板背面pcie3.0&apos;),
        textField: &apos;smartctl_nvme2_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sda&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;机械硬盘sda&apos;),
        textField: &apos;smartctl_hdd1_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdb&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;机械硬盘sdb&apos;),
        textField: &apos;smartctl_hdd2_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdc&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;机械硬盘sdc&apos;),
        textField: &apos;smartctl_hdd3_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdd&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;机械硬盘sdd&apos;),
        textField: &apos;smartctl_hdd4_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;现在使用配置2&quot;&gt;现在使用配置2&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	{
            itemId: &apos;sensinfo&apos;,
            colspan: 2,
            printBar: false,
            title: gettext(&apos;CPU温度&apos;),
            textField: &apos;sensinfo&apos;,
            renderer:function(value){
            const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
            const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
            const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
            const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
            const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1];
			const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1];
			const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
			const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1];
             return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3}|${c4}|${c5} ℃ | 主板: ${b0} ℃`
             }
	},
	{
          itemId: &apos;MHz&apos;,
          colspan: 2,
          printBar: false,
          title: gettext(&apos;CPU频率&apos;),
          textField: &apos;cpusensors&apos;,
          renderer:function(value){
			  const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1];
			  const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1];
			  const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1];
			  const f3 = f0*f2/100;
			  return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz `
            }
	},
	{        
        itemId: &apos;nvme_ssd0&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/nvme0&apos;),
        textField: &apos;smartctl_nvme0_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;nvme_ssd1&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/nvme1&apos;),
        textField: &apos;smartctl_nvme1_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;nvme_ssd2&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/nvme2&apos;),
        textField: &apos;smartctl_nvme2_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sda&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/sda&apos;),
        textField: &apos;smartctl_hdd1_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdb&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/sdb&apos;),
        textField: &apos;smartctl_hdd2_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdc&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/sdc&apos;),
        textField: &apos;smartctl_hdd3_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;hdd_sdd&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/sdd&apos;),
        textField: &apos;smartctl_hdd4_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
				try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注：该示例为6核心&lt;/p&gt;

&lt;h4 id=&quot;nuc配置&quot;&gt;NUC配置&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	{
            itemId: &apos;sensinfo&apos;,
            colspan: 2,
            printBar: false,
            title: gettext(&apos;CPU温度&apos;),
            textField: &apos;sensinfo&apos;,
            renderer:function(value){
            const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
            const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
            const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
            const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
			const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
			const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1];
             return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3} ℃ | 主板: ${b0} ℃`
             }
	},
	{
          itemId: &apos;MHz&apos;,
          colspan: 2,
          printBar: false,
          title: gettext(&apos;CPU频率&apos;),
          textField: &apos;cpusensors&apos;,
          renderer:function(value){
			  const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1];
			  const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1];
			  const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1];
			  const f3 = f0*f2/100;
			  return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz `
            }
	},
	{        
        itemId: &apos;nvme_ssd0&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/nvme0&apos;),
        textField: &apos;smartctl_nvme0_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} 
                try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} 
                try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} 
                try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
	{        
        itemId: &apos;ssd_sda&apos;,
        colspan: 2,
        printBar: false,
        title: gettext(&apos;/dev/sda&apos;),
        textField: &apos;smartctl_hdd1_json&apos;,
        renderer: function(value) {
            value = JSON.parse(value);
            if (value[&apos;model_name&apos;]) {
                try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;}
				try {var serial_number = &apos; | 序列号: &apos; +  value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} 
                try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} 
                try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} 
                return `${model_name}${serial_number}${power_on_time}${temperature}`;
            } else { 
                return `提示: 未安装硬盘或已直通硬盘控制器`;
            }
        }
    },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;搜索&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;widget.pveNodeStatus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;将 height: 300 （默认值） 改大为 420，或者更大，然后保存（每多一行大概增大 20~25）&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl restart pveproxy.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;检查WEB界面是否正常显示&lt;/p&gt;

&lt;h1 id=&quot;powersave模式&quot;&gt;powersave模式&lt;/h1&gt;

&lt;p&gt;默认使用高性能模式，切换为低性能模式&lt;/p&gt;

&lt;p&gt;查看支持的 CPU 电源模式&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;只有两种结果powersave、performance为intel pstate 受害者&lt;/p&gt;

&lt;p&gt;查看当前的 CPU 电源模式&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt install linux-cpupower -y
cpupower -c all frequency-info
cpupower -c all frequency-set -g powersave
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;持久化---cpupower开机启动&quot;&gt;持久化  / cpupower开机启动&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/systemd/system/cpupower.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Unit]

Description=CPU powersave

[Service]

Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set -g powersave  

[Install]

WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable cpupower.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;apc-ups-连接&quot;&gt;APC UPS 连接&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt-get install apcupsd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apcupsd/apcupsd.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;必要的配置：
在 UPSNAME 后面给个易懂的名字
在 UPSCABLE 后指定为 usb
在 UPSTYPE 后更改为 usb
在 DEVICE 后为空，这样系统便会自动检测 USB 连接 UPS&lt;/p&gt;

&lt;p&gt;其他的随便找个教程即可，注意：关机触发条件，有剩余电量和剩余时间，默认为5%和3分钟。注意这里&lt;strong&gt;只要满足其中任一条件&lt;/strong&gt;便会触发&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/default/apcupsd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ISCONFIGURED=no 更改为 yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;任何教程都没提，太坑了！&lt;a href=&quot;https://unix.stackexchange.com/questions/494295/apcupsd-on-debian-stretch-9-no-connection-to-ups&quot;&gt;来源&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/etc/init.d/apcupsd restart
systemctl enable apcupsd.service
systemctl status apcupsd.service 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;查看ups运行状态&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apcaccess
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;安装tailscale&quot;&gt;安装Tailscale&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -fsSL https://tailscale.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tailscale up --advertise-exit-node --accept-routes --accept-dns=false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;点击/打开终端给的链接，授权登录&lt;/p&gt;

&lt;p&gt;不要关闭浏览器，在管理员界面找到这台机器&lt;/p&gt;

&lt;p&gt;设置里面关闭登录过期，打开exit node&lt;/p&gt;

&lt;p&gt;也可以预设密钥登录&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tailscale up --advertise-exit-node --accept-routes --accept-dns=false --authkey=tskey-auth-xxxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;NODE01
tailscale up --advertise-routes=192.168.2.32/29 --accept-dns=false --accept-routes --advertise-exit-node
NODE02
tailscale up --advertise-exit-node --accept-dns=false --accept-routes --advertise-routes=192.168.1.96/27,192.168.1.128/27,192.168.1.192/27,192.168.1.0/28
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;zfs池&quot;&gt;ZFS池&lt;/h1&gt;

&lt;h2 id=&quot;参考资料-1&quot;&gt;参考资料&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.truenas.com/community/threads/slideshow-explaining-vdev-zpool-zil-and-l2arc-for-noobs.7775/&quot;&gt;为新手解释 VDev、zpool、ZIL 和 L2ARC 的幻灯片！&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.v2ex.com/t/972903&quot;&gt;2023.9 ZFS 能用于数据盘吗？关于 PVE 下 ZFS RAID 等相关 10 个疑问&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://note.lishouzhong.com/article/wiki/sitemap-index.html&quot;&gt;李守中 Wiki&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pve.proxmox.com/wiki/ZFS_on_Linux&quot;&gt;ZFS on Linux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dapeng.li/learning/zfs/index.html&quot;&gt;踩坑集 学习笔记&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;开始&quot;&gt;开始&lt;/h2&gt;

&lt;p&gt;PVE管理界面组ZFS池，选择4块hdd，名称z2pool，RAID级别RAIDZ2，压缩lz4，ashift：12&lt;/p&gt;

&lt;p&gt;注，示例池名称为z2pool&lt;/p&gt;

&lt;p&gt;ZFS 严重依赖内存，因此至少需要 8GB 才能启动&lt;/p&gt;

&lt;p&gt;专用缓存和/或日志磁盘，则应使用企业级 SSD。这可以显着提高整体性能。&lt;/p&gt;

&lt;p&gt;VM 内安装 Proxmox VE（嵌套虚拟化），请不要对该 VM 的磁盘使用virtio，因为 ZFS 不支持它们。请改用 IDE 或 SCSI（也适用于virtio SCSI 控制器类型）&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zpool status
zfs list
zfs get volsize,refreservation,used &amp;lt;pool&amp;gt;/vm-&amp;lt;vmid&amp;gt;-disk-X
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;阅读手册&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man zpool
man zfs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;限制zfs内存使用arc&quot;&gt;限制ZFS内存使用（ARC）&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;默认情况&lt;/strong&gt;下， ZFS 将&lt;em&gt;50%&lt;/em&gt;的主机内存用于&lt;strong&gt;自适应&lt;/strong&gt;替换&lt;strong&gt;缓存&lt;/strong&gt;(ARC)。为 ARC 分配足够的内存对于 IO 性能至关重要，因此请谨慎减少内存。根据一般经验，至少分配&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2 GiB Base + 1 GiB/TiB-Storage&lt;/code&gt;。例如，如果您有一个具有 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8 TiB&lt;/code&gt;可用存储空间的池，那么您应该为 ARC使用`10 GiB内存。&lt;/p&gt;

&lt;p&gt;您可以通过直接写入&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_max&lt;/code&gt;模块参数来更改当前启动的 ARC 使用限制（重新启动会再次重置此更改）：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo &quot;$[10 * 1024*1024*1024]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_max
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;要&lt;strong&gt;永久更改&lt;/strong&gt;ARC 限制，请将以下行添加到 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/modprobe.d/zfs.conf&lt;/code&gt;：（8G)&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;options zfs zfs_arc_max=8589934592
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果您所需的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_max&lt;/code&gt;值低于或等于 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_min&lt;/code&gt;（默认为系统内存的 1/32），则&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_max&lt;/code&gt;将被忽略，除非您还将&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_min&lt;/code&gt;设置为最多&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zfs_arc_max - 1&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo &quot;$[8 * 1024*1024*1024 - 1]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_min
echo &quot;$[8 * 1024*1024*1024]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_max
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;交换分区-swap&quot;&gt;交换分区 SWAP&lt;/h2&gt;

&lt;p&gt;最好在物理磁盘上创建一个分区并将其用作交换设备，&lt;strong&gt;请勿在ZFS上使用swap&lt;/strong&gt;，&lt;a href=&quot;https://github.com/openzfs/zfs/issues/7734&quot;&gt;BUG&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;使用fdisk对ssd进行分区&quot;&gt;使用fdisk对SSD进行分区&lt;/h3&gt;

&lt;p&gt;n、1、p、…..w&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkswap /dev/nvme1n1p3
swapon /dev/nvme1n1p3
nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;增加一行&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;UUID=xxxxx你的UUID swap swap defaults 0 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;修改-swapiness&quot;&gt;修改 swapiness&lt;/h3&gt;

&lt;p&gt;对于服务器来说，swapiness推荐为 10&lt;/p&gt;

&lt;p&gt;临时&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sysctl -w vm.swappiness=10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;永久&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;增加一行&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vm.swappiness = 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;生效&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sysctl -p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;swappiness值&lt;/th&gt;
      &lt;th&gt;策略&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;0&lt;/td&gt;
      &lt;td&gt;内核只会交换以避免&lt;em&gt;内存不足的&lt;/em&gt;情况&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;无需完全禁用的最小交换量&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;当系统中有足够的内存时，有时建议使用此值来提高性能&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;60&lt;/td&gt;
      &lt;td&gt;默认值&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;100&lt;/td&gt;
      &lt;td&gt;内核将积极地交换&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;举例： 我的笔记本电脑有 16 GB 的内存和 8 GB 的交换空间。如果我在内核参数中使用 60 swappiness，那么在使用大约 6 GB （16G*40% = 6.4G）的内存后，我的机器开始使用交换&lt;/p&gt;

&lt;h2 id=&quot;zil-和-l2arc&quot;&gt;ZIL 和 L2ARC&lt;/h2&gt;

&lt;h3 id=&quot;检查nvme状态&quot;&gt;检查nvme状态&lt;/h3&gt;

&lt;p&gt;适用于转接卡等情况&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lspci
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;获取设备编号，通过编号查询id&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lspci -n | grep -i 02:00.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;获取硬件id，查看指定PCI设备的带宽&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lspci -n -d 144d:a80a -vvv | grep --color Width
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;例如：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Speed 8GT/s, Width x4
Speed 16GT/s, Width x4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用fdisk对SSD进行分区，请看前文，不再赘述&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;注：必须使用GPT分区表，不能使用MBR分区表&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;查看硬盘uuid&quot;&gt;查看硬盘uuid&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;blkid
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;或者&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lsblk -fl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;将-zil-镜像添加到池中&quot;&gt;将 ZIL 镜像添加到池中&lt;/h3&gt;

&lt;p&gt;ZFS ZIL(SLOG)虽然用起来有写缓存的效果，但 &lt;strong&gt;ZIL 不是写缓存&lt;/strong&gt; 。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ZIL 写入操作全是 4K 写操作&lt;/strong&gt;，所以 ZFS 搞出了一个 SLOG ( Separate intent LOG ) 组件， &lt;strong&gt;SLOG 组件必须是一个独立设备或分区，专门存放 ZIL 数据&lt;/strong&gt; 。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zpool add z2pool log mirror /dev/disk/by-partuuid/xxxxx你的UUID /dev/disk/by-partuuid/xxxxx你的UUID
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;将-l2arc-设备添加到池中&quot;&gt;将 L2ARC 设备添加到池中&lt;/h3&gt;

&lt;p&gt;一般建议不超过内存容量*10&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zpool add z2pool cache /dev/disk/by-partuuid/xxxxx你的UUID
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;检查l2arc持久化&quot;&gt;检查L2ARC持久化&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /sys/module/zfs/parameters/l2arc_rebuild_enabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;默认值为 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt; 。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;l2arc_rebuild_enabled=1&lt;/code&gt; 表示打开 L2ARC 持久化，即重启之后 L2ARC Deivce 中的数据还能用&lt;/p&gt;

&lt;h2 id=&quot;小技巧&quot;&gt;小技巧&lt;/h2&gt;

&lt;h3 id=&quot;基础&quot;&gt;基础&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool create &amp;lt;pool_name&amp;gt; &amp;lt;pool_type&amp;gt; &amp;lt;device_name&amp;gt;&lt;/code&gt; 创建一个存储池。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool attach &amp;lt;pool_name&amp;gt; &amp;lt;device_in_pool&amp;gt; &amp;lt;device_name&amp;gt;&lt;/code&gt; 向池中添加一个设备使 &lt;em&gt;strip&lt;/em&gt; 变成 &lt;em&gt;mirror&lt;/em&gt; 。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool detach &amp;lt;pool_name&amp;gt; &amp;lt;pool_device_name&amp;gt;&lt;/code&gt; 让一个池中的设备脱离池。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool remove &amp;lt;pool_name&amp;gt; &amp;lt;pool_device_name&amp;gt;&lt;/code&gt; 从一个池中删除一个设备。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool offline &amp;lt;pool_name&amp;gt; &amp;lt;device_name&amp;gt;&lt;/code&gt; 让一个池中的设备离线。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool scrub &amp;lt;pool_name&amp;gt;&lt;/code&gt; 同步池中的数据后，检测池中数据的错误并修复。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool add &amp;lt;zpool_name&amp;gt; log &amp;lt;device&amp;gt;&lt;/code&gt; 给没有 SLOG 设备的池添加一个 SLOG 设备。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool attach &amp;lt;zpool_name&amp;gt; &amp;lt;log_device&amp;gt; &amp;lt;device&amp;gt;&lt;/code&gt; 向已有一个 SLOG 设备的池添加另一个 SLOG 设备使之互为镜像。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zpool add &amp;lt;zpool_name&amp;gt; log mirror &amp;lt;device_a&amp;gt; &amp;lt;device_b&amp;gt;&lt;/code&gt; 直接添加两个互为镜像的 SLOG 设备。&lt;/p&gt;

&lt;h3 id=&quot;文件系统&quot;&gt;文件系统&lt;/h3&gt;

&lt;p&gt;请勿直接使用zfs根目录，如&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/z2pool&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&quot;创建一个新的文件系统并挂载&quot;&gt;创建一个新的文件系统并挂载:&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs create z2pool/docs -o mountpoint=/docs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;快照相关&quot;&gt;快照相关&lt;/h3&gt;

&lt;h4 id=&quot;虚拟机快照显示&quot;&gt;虚拟机快照显示&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs set snapdev=visible z2pool/vm-303-disk-1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样可以直接在&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/zvol/z2pool&lt;/code&gt;目录（或&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/dev/z2pool&lt;/code&gt;目录）找到对应的快照，然后方便的通过各种备份工具进行备份，例如&lt;a href=&quot;https://restic.net/&quot;&gt;restic&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;创建一个快照&quot;&gt;创建一个快照&lt;/h4&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs snapshot z2pool/home@tuesday
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;按日期创建快照&quot;&gt;按日期创建快照&lt;/h4&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; +&lt;span class=&quot;s2&quot;&gt;&quot;%Y-%m-%d&quot;&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
zfs snapshot z2pool/home@&lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;查看所有快照&quot;&gt;查看所有快照&lt;/h4&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs list &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; snapshot
zfs list &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; snapshot z2pool/home
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;回滚到前一个快照&quot;&gt;回滚到前一个快照&lt;/h4&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs rollback z2pool/home@monday
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;删除一个快照&quot;&gt;删除一个快照&lt;/h4&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs destroy &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; z2pool/home@monday
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;重命名快照&quot;&gt;重命名快照&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs rename z2pool/home@version1 z2pool/home@version2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注意: 当一个 &lt;em&gt;dataset&lt;/em&gt; 存在快照时，无法直接删除。但可使用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-r&lt;/code&gt; 参数强制删除。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs destroy -r z2pool/home
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;克隆&quot;&gt;克隆&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;克隆只能从快照中创建，在删除克隆以前，对应的快照无法删除。&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs clone z2pool/home@monday z2pool/home2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;复制&quot;&gt;复制&lt;/h3&gt;

&lt;p&gt;直接复制快照即可&lt;/p&gt;

&lt;p&gt;待补充&lt;/p&gt;

&lt;h3 id=&quot;其他&quot;&gt;其他&lt;/h3&gt;

&lt;h4 id=&quot;可通过命令查询文件系统的所有属性&quot;&gt;可通过命令查询文件系统的所有属性&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs get all z2pool/home
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;可通过命令查询存储池的所有属性&quot;&gt;可通过命令查询存储池的所有属性&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  zpool get all z2pool
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;查看存储池当前状态和-io-状况&quot;&gt;查看存储池当前状态和 I/O 状况&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zpool status -v
zpool iostat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;显示存储池所有操作历史记录&quot;&gt;显示存储池所有操作历史记录&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  zpool history z2pool
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;开始虚拟机安装&quot;&gt;开始虚拟机安装&lt;/h1&gt;

&lt;h2 id=&quot;cloudinit-方式安装&quot;&gt;Cloudinit 方式安装&lt;/h2&gt;

&lt;p&gt;教程贴子：https://gist.github.com/chriswayg/b6421dcc69cb3b7e41f2998f1150e1df&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;下载镜像：&lt;a href=&quot;http://cloud-images.ubuntu.com/releases/23.04/release/&quot;&gt;Ubuntu23.04&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;http://cloud-images.ubuntu.com/releases/23.04/release/ubuntu-23.04-server-cloudimg-amd64.img&quot;&gt;推荐这个&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://cloud.debian.org/cdimage/cloud/bookworm/latest/&quot;&gt;Debian12&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://cloud.debian.org/cdimage/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2&quot;&gt;推荐这个&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;任意地方上传下载的镜像，例如&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/root/debian-12-genericcloud-amd64.qcow2&lt;/code&gt;
除了&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qm importdisk&lt;/code&gt; 其他命令均可用在web界面操作&lt;/p&gt;

&lt;h3 id=&quot;创建模板&quot;&gt;创建模板&lt;/h3&gt;

&lt;h4 id=&quot;正常方式创建虚拟机&quot;&gt;正常方式创建虚拟机&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm create 902 --name debian12-templ --memory 2048 --net0 virtio,bridge=vmbr0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;添加cloudinit系统盘&quot;&gt;添加cloudinit系统盘&lt;/h4&gt;

&lt;p&gt;自行确认需要存放虚拟机的位置，示例为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;local-lvm&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm importdisk 902 /root/debian-12-genericcloud-amd64.qcow2 local-lvm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;使用cloudinit系统盘&quot;&gt;使用cloudinit系统盘&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm set 902 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-902-disk-0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;添加cloudinit设备&quot;&gt;添加cloudinit设备&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm set 902 --ide2 local-lvm:cloudinit --boot c --bootdisk scsi0 --serial0 socket --vga serial0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;增加系统盘空间&quot;&gt;增加系统盘空间&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm resize 902 scsi0 +30G
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;设置网络&quot;&gt;设置网络&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm set 902 --ipconfig0 ip=dhcp
qm set 902 --ipconfig0 ip=10.10.10.222/24,gw=10.10.10.1
qm set 902 --ipconfig0 ip=192.168.2.34/24,gw=192.168.2.1,ip6=auto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;设置密钥或密码&quot;&gt;设置密钥或密码&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm set 902 --sshkey ~/.ssh/id_rsa.pub
qm set 902 --cipassword 你的密码
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;建议直接在web界面设置用户为root或你的用户名&lt;/p&gt;

&lt;h4 id=&quot;检查设置&quot;&gt;检查设置&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm cloudinit dump 902 user
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;ssh进入vm按自己的习惯设置&quot;&gt;SSH进入VM，按自己的习惯设置&lt;/h3&gt;

&lt;h4 id=&quot;debian-cloudinit换源&quot;&gt;Debian cloudinit换源&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/mirrors/debian.list
nano /etc/apt/mirrors/debian-security.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;分别修改为&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://mirrors.ustc.edu.cn/debian/
https://mirrors.ustc.edu.cn/debian-security/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;换源操作转换为模板后会丢失&lt;/p&gt;

&lt;h4 id=&quot;阿里源安装docker&quot;&gt;阿里源安装docker&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;来宾代理-guest-agent&quot;&gt;来宾代理 Guest Agent&lt;/h4&gt;

&lt;p&gt;web界面开启QEUM Guest Agent&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt install qemu-guest-agent -y
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;其他-1&quot;&gt;其他&lt;/h4&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zu1k/nali/releases&quot;&gt;nali&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/natesales/q&quot;&gt;q&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt install htop cron screen nano -y
wget https://conf.totoro.pub/bash/q -O /usr/bin/q
wget https://conf.totoro.pub/bash/nali -O /usr/bin/nali
chmod +X /usr/bin/q
chmod +X /usr/bin/nali
chmod 777 /usr/bin/q
chmod 777 /usr/bin/nali
q www.baidu.com|nali
mkdir /data
mkdir /data/ssl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;特殊的，只在专用服务器设置&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl https://get.acme.sh | sh -s email=my@example.com
apt install ufw -y
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;crontab -e
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;添加我的SSL更新命令&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;37 7    2 * *   wget Update-Url -O xxx.cer
38 7    2 * *   wget Update-Url -O xxx.key
47 12 1 * * &quot;/root/.acme.sh&quot;/acme.sh --issue --dns dns_dp --server google --challenge-alias acme.example.com --keylength ec-256 -d example.com -d *.example.com -d *.01.example.com -d *.02.example.com -d *.03.example.com --force
37 13 1 * * &quot;/root/.acme.sh&quot;/acme.sh --install-cert -d example.com --key-file /data/ssl/example.com.key --fullchain-file /data/ssl/example.com.cer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;poweroff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;设置为模板并通过模板创建虚拟机&quot;&gt;设置为模板，并通过模板创建虚拟机&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm template 902
qm clone 902 190 --name debian12
qm start 190
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;调整-vm-磁盘的大小&quot;&gt;调整 VM 磁盘的大小&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm shutdown 190 &amp;amp;&amp;amp; qm wait
qm resize 190 scsi0 +8G
qm start 190
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;直接使用iso安装&quot;&gt;直接使用ISO安装&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.debian.org/distrib/netinst&quot;&gt;Debian ISO 下载&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ubuntu.com/download/server#downloads&quot;&gt;Ubuntu ISO 下载&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;table&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;a href=&quot;https://next.itellyou.cn/Original/#&quot;&gt;Windows ISO 下载&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;第三方精简版： &lt;a href=&quot;https://www.techworm.net/2023/08/download-tiny10-iso-pc-windows-10.html&quot;&gt;Tiny10 ISO&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a href=&quot;https://www.techworm.net/2023/08/download-tiny11-iso-pc-windows-11-lite.html&quot;&gt;Tiny11 ISO&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;有用的cdrom&quot;&gt;有用的CDROM&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://gparted.org/download.php&quot;&gt;GParted Live CD/USB/HD/PXE Bootable Image&lt;/a&gt; 分区用&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;使用img安装&quot;&gt;使用IMG安装&lt;/h2&gt;

&lt;h3 id=&quot;openwrt&quot;&gt;OpenWrt&lt;/h3&gt;

&lt;h4 id=&quot;推荐的系统镜像&quot;&gt;推荐的系统镜像&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://openwrt.cc/releases/targets/x86/64/&quot;&gt;SuLingGG&lt;/a&gt; openwrt-18.06-k5.4 &lt;a href=&quot;https://doc.openwrt.cc/&quot;&gt;文档&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://downloads.immortalwrt.org/&quot;&gt;ImmortalWrt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://downloads.openwrt.org/releases/&quot;&gt;OpenWrt官方&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://openwrt.ai/&quot;&gt;在线编译&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;安装方法&quot;&gt;安装方法&lt;/h3&gt;

&lt;p&gt;上传你的img，设置好网卡后，正常流程创建虚拟机，导入一下硬盘即可&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm importdisk 100 /var/lib/vz/template/iso/openwrt-xxx.img local-lvm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;激活硬盘，即可正常使用&lt;/p&gt;

&lt;h3 id=&quot;网络配置&quot;&gt;网络配置&lt;/h3&gt;

&lt;p&gt;正常用户都可以直接web设置这些内容&lt;/p&gt;

&lt;p&gt;不正常的用户通过shell修改&lt;/p&gt;

&lt;h4 id=&quot;修改lan-ipaddr&quot;&gt;修改LAN ipaddr&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vi /etc/config/network
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;使用lxc&quot;&gt;使用LXC&lt;/h1&gt;

&lt;p&gt;不推荐使用任何LXC容器&lt;/p&gt;

&lt;h2 id=&quot;使用proxmox-ve-helper-scripts创建lxc&quot;&gt;使用&lt;a href=&quot;https://tteck.github.io/Proxmox/&quot;&gt;Proxmox VE Helper Scripts&lt;/a&gt;创建LXC&lt;/h2&gt;

&lt;p&gt;请先使用软路由保障PVE全局的网络&lt;/p&gt;

&lt;h3 id=&quot;plex-media-server&quot;&gt;Plex Media Server&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/plex.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;emby-media-server&quot;&gt;Emby Media Server&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/emby.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;jellyfin-media-server&quot;&gt;Jellyfin Media Server&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/jellyfin.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;nextcloud&quot;&gt;Nextcloud&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nextcloudpi.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;photoprism&quot;&gt;PhotoPrism&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/photoprism.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;adguard-home&quot;&gt;AdGuard Home&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;transmission&quot;&gt;Transmission&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/transmission.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;vaultwarden&quot;&gt;Vaultwarden&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;bash -c &quot;$(wget -qO - https://github.com/tteck/Proxmox/raw/main/ct/alpine-vaultwarden.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;vm使用&quot;&gt;VM使用&lt;/h1&gt;

&lt;h2 id=&quot;数据盘及swap&quot;&gt;数据盘及swap&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;fdisk -l
fdisk /dev/sdb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;n、1、p、…..w&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /data
mkswap /dev/sdc
swapon /dev/sdc
nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;增加一行&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;UUID=xxxxx你的UUID swap swap defaults 0 0
UUID=xxxxx你的UUID /data ext4 defaults 0 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl daemon-reload
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;检查磁盘挂载情况&quot;&gt;检查磁盘挂载情况&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;df -h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;重复一下换源&quot;&gt;重复一下换源&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/apt/mirrors/debian.list
nano /etc/apt/mirrors/debian-security.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;分别修改为&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://mirrors.ustc.edu.cn/debian/
https://mirrors.ustc.edu.cn/debian-security/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;安装tailscale-1&quot;&gt;安装Tailscale&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl -fsSL https://tailscale.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tailscale up --advertise-exit-node --accept-routes --accept-dns=false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;点击/打开终端给的链接，授权登录&lt;/p&gt;

&lt;p&gt;不要关闭浏览器，在管理员界面找到这台机器&lt;/p&gt;

&lt;p&gt;设置里面关闭登录过期，打开exit node&lt;/p&gt;

&lt;p&gt;也可以预设密钥登录&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tailscale up --advertise-exit-node --accept-routes --accept-dns=false --authkey=tskey-auth-xxxx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;如果是lxc&quot;&gt;如果是LXC&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/pve/lxc/401.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;添加&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;ddns&quot;&gt;DDNS&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go:latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;web访问ip:9876，配置密钥&lt;/p&gt;

&lt;h2 id=&quot;plex&quot;&gt;Plex&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget xxx # https://www.plex.tv/media-server-downloads/
dpkg -i plexmediaserver_1.32.6.7557-1cf77d501_amd64.deb
systemctl status plexmediaserver.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -d \
--name plex \
--network=host \
-e TZ=&quot;Asia/Shanghai&quot; \
-e PLEX_CLAIM=&quot;claim-xxx&quot; \
-v /data/plexconfig:/config \
-v /data/plextranscode:/transcode \
-v /data/plexmedia:/data \
plexinc/pms-docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;其他-2&quot;&gt;其他&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juewuy/ShellClash/blob/master/README_CN.md&quot;&gt;ShellClash&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MetaCubeX/Clash.Meta/blob/Alpha/docs/config.yaml&quot;&gt;Clash.Meta&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;常用命令&quot;&gt;常用命令&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;zfs list
zpool status
zpool iostat -v 1
rsync -aiv --progress /mnt/usb/ /data/xxx/xxx
pct set 401 -mp0 /data/archive,mp=/archive
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;seafilepro&quot;&gt;SeafilePro&lt;/h1&gt;

&lt;p&gt;Pro版本3用户以内免费，部署方式查看&lt;a href=&quot;https://cloud.seafile.com/published/seafile-manual-cn/docker/pro-edition/%E7%94%A8Docker%E9%83%A8%E7%BD%B2Seafile.md&quot;&gt;官方中文教程&lt;/a&gt; &lt;a href=&quot;https://manual.seafile.com/docker/pro-edition/deploy_seafile_pro_with_docker/&quot;&gt;官方英文教程【推荐】&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;debug&quot;&gt;DEBUG&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker-compose logs -f --tail 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;bug示例&quot;&gt;BUG示例&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;seafile-mysql    | 2077-77-77  77:77:77 3064 [ERROR] Incorrect definition of table mysql.column_stats: expected column &apos;hist_type&apos; at position 9 to have type enum(&apos;SINGLE_PREC_HB&apos;,&apos;DOUBLE_PREC_HB&apos;,&apos;JSON_HB&apos;), found type enum(&apos;SINGLE_PREC_HB&apos;,&apos;DOUBLE_PREC_HB&apos;).
seafile-mysql    | 2077-77-77  77:77:77 3064 [ERROR] Incorrect definition of table mysql.column_stats: expected column &apos;histogram&apos; at position 10 to have type longblob, found type varbinary(255).
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;解决办法&quot;&gt;解决办法&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker exec -it seafile-mysql bash
mysql_upgrade --user=root --password=xxxx
exit
docker-compose down
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;bug示例2&quot;&gt;BUG示例2&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;seaf-cli status Traceback (most recent call last): File &quot;/usr/lib/python3/dist-packages/pysearpc/named_pipe.py&quot;, line 85, in _get_transport transport = self._pool.get(False)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;解决办法-1&quot;&gt;解决办法&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;seaf-cli start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;一劳永逸-加入开机启动&quot;&gt;一劳永逸 加入开机启动&lt;/h4&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano /etc/systemd/system/seafile.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Unit]

Description=seafile

[Service]

Type=oneshot
ExecStart=/usr/bin/seaf-cli start

[Install]

WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl daemon-reload
systemctl enable seafile.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>totoro625</name></author><category term="PVE" /><summary type="html">旧机器的性能太差了，正好淘汰了一台电脑，改成PVE了 引 - 全新PVE宿主机，写个自己的小Tips Docker不得在宿主机及LXC上安装 vm全部使用cloudimg构建 UFW安装在对外的服务器上 数据盘4块HC550 16T 组建ZFS存储池RaidZ-2 每个VM安装不再安装Tailscale、zerotier、frpc、CFtunnel 独立的swap硬盘用于各VM，及PVE（宿主机64G，UFW 16G，Seafile 16G，Mt-photo 16G） 独立的固态用于PVE安装 参考资料 国光的 PVE 环境搭建教程 N5105 Proxmox VE (PVE) 主页添加温度硬盘等信息 开始安装系统 官方网站下载ISO，用ventoy制作启动工具，插上网线再开机（键盘和显示器是必须的），根据引导走完全部流程 系统盘请使用ext4格式，避免问题 swap设置为0G，后期自行添加专用swap硬盘，减少系统盘的磨损 在tabby添加配置（直连和转发） 特殊情况 DEBUG 网络故障/pcie插拔 键盘、屏幕连接好后 ip a 或者 ip addr 查看一下网卡是什么，例如：enp8s0 nano /etc/network/interfaces 修改网卡 宿主机重启后VM内开机启动程序未启动 PVE开机后重新启动 nano /etc/systemd/system/vmreboot.service [Unit] Description=VM reboot [Service] 待更新 qm stop 202 qm status 202 qm start 202 [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable vmreboot.service 硬盘空间不足 unable to initialize physical volume /dev/nvmeon1p3 分区时硬盘总容量选择小几个GB即可 Proxmox VE 8 换源 注1：在前面加#注释掉全部内容，添加以下内容 注2：Ctrl + O 保存，Ctrl + X 退出 nano /etc/apt/sources.list deb https://mirrors.ustc.edu.cn/debian/ bookworm main non-free non-free-firmware contrib deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main non-free non-free-firmware contrib deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free non-free-firmware contrib deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free non-free-firmware contrib deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main non-free non-free-firmware contrib deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main non-free non-free-firmware contrib 或者: sed -i &apos;s|http://deb.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g&apos; /etc/apt/sources.list sed -i &apos;s|http://security.debian.org/debian|https://mirrors.ustc.edu.cn/debian|g&apos; /etc/apt/sources.list nano /etc/apt/sources.list.d/pve-enterprise.list deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription nano /etc/apt/sources.list.d/ceph.list deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription apt update 更新 LXC（CT Template）源 sed -i &apos;s|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g&apos; /usr/share/perl5/PVE/APLInfo.pm systemctl restart pvedaemon.service 直通 / 开启 IOMMU 和 SR-IOV 默认大家BIOS设置好啦，新机器请看这个教程 nano /etc/default/grub 修改GRUB_CMDLINE_LINUX_DEFAULT字段 Intel GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet intel_iommu=on iommu=pt textonly nomodeset nofb pci=noaer pcie_acs_override=downstream,multifunction&quot; AMD GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet amd_iommu=on iommu=pt textonly nomodeset nofb pci=noaer pcie_acs_override=downstream,multifunction&quot; update-grub &amp;amp;&amp;amp; reboot 带显卡直通看这个教程 个性化配置 自定义pveproxy web界面（非必须，just好看） 删除订阅弹窗 sed -Ezi.bak &quot;s/(Ext.Msg.show\(\{\s+title: gettext\(&apos;No valid sub)/void\(\{ \/\/\1/g&quot; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js systemctl restart pveproxy.service 首页显示 CPU、主板、NVME、硬盘 温度等信息 apt update apt install lm-sensors patch -y sensors-detect 全部回车 chmod +s /usr/sbin/smartctl export LC_ALL=en_US.UTF-8 sensors reboot 懒人一键教程 看一下自己几个NVME smartctl -a -j /dev/nvme? 看一下自己几个硬盘 smartctl -a -j /dev/sd? nano /usr/share/perl5/PVE/API2/Nodes.pm Ctrl + w 搜索shared =&amp;gt; $meminfo-&amp;gt;{memshared} 在该段结束后（；为结束）换行添加（记得tab一下对齐） $res-&amp;gt;{sensinfo} = `sensors`; $res-&amp;gt;{cpusensors} = `lscpu | grep MHz`; $res-&amp;gt;{smartctl_nvme0_json} = `smartctl -a -j /dev/nvme0`; $res-&amp;gt;{smartctl_nvme1_json} = `smartctl -a -j /dev/nvme1`; $res-&amp;gt;{smartctl_nvme2_json} = `smartctl -a -j /dev/nvme2`; $res-&amp;gt;{smartctl_hdd1_json} = `smartctl -a -j /dev/sda`; $res-&amp;gt;{smartctl_hdd2_json} = `smartctl -a -j /dev/sdb`; $res-&amp;gt;{smartctl_hdd3_json} = `smartctl -a -j /dev/sdc`; $res-&amp;gt;{smartctl_hdd4_json} = `smartctl -a -j /dev/sdd`; 注：该示例为3块nvme + 4块硬盘 nano /usr/share/pve-manager/js/pvemanagerlib.js 建议使用winscp打开，notepad++编辑 搜索 PVE Manager Version新版本为Manager Version 旧的配置1 { itemId: &apos;sensinfo&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU温度&apos;), textField: &apos;sensinfo&apos;, renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1]; const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1]; const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1]; const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1]; const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1]; return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3}|${c4}|${c5} ℃ | 主板: ${b0} ℃` } }, { itemId: &apos;MHz&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU频率&apos;), textField: &apos;cpusensors&apos;, renderer:function(value){ const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1]; const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1]; const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1]; const f3 = f0*f2/100; return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz ` } }, { itemId: &apos;nvme_ssd0&apos;, colspan: 2, printBar: false, title: gettext(&apos;NVME槽0：pcie槽转接&apos;), textField: &apos;smartctl_nvme0_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;nvme_ssd1&apos;, colspan: 2, printBar: false, title: gettext(&apos;NVME槽1：主板正面pcie4.0&apos;), textField: &apos;smartctl_nvme1_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;nvme_ssd2&apos;, colspan: 2, printBar: false, title: gettext(&apos;NVME槽2：主板背面pcie3.0&apos;), textField: &apos;smartctl_nvme2_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 使用寿命: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;GB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;GB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sda&apos;, colspan: 2, printBar: false, title: gettext(&apos;机械硬盘sda&apos;), textField: &apos;smartctl_hdd1_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdb&apos;, colspan: 2, printBar: false, title: gettext(&apos;机械硬盘sdb&apos;), textField: &apos;smartctl_hdd2_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdc&apos;, colspan: 2, printBar: false, title: gettext(&apos;机械硬盘sdc&apos;), textField: &apos;smartctl_hdd3_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdd&apos;, colspan: 2, printBar: false, title: gettext(&apos;机械硬盘sdd&apos;), textField: &apos;smartctl_hdd4_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | 通电: &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | 通电: &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | 温度: &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, 现在使用配置2 { itemId: &apos;sensinfo&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU温度&apos;), textField: &apos;sensinfo&apos;, renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1]; const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1]; const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1]; const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1]; const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1]; return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3}|${c4}|${c5} ℃ | 主板: ${b0} ℃` } }, { itemId: &apos;MHz&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU频率&apos;), textField: &apos;cpusensors&apos;, renderer:function(value){ const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1]; const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1]; const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1]; const f3 = f0*f2/100; return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz ` } }, { itemId: &apos;nvme_ssd0&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/nvme0&apos;), textField: &apos;smartctl_nvme0_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;nvme_ssd1&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/nvme1&apos;), textField: &apos;smartctl_nvme1_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;nvme_ssd2&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/nvme2&apos;), textField: &apos;smartctl_nvme2_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sda&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/sda&apos;), textField: &apos;smartctl_hdd1_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdb&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/sdb&apos;), textField: &apos;smartctl_hdd2_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdc&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/sdc&apos;), textField: &apos;smartctl_hdd3_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;hdd_sdd&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/sdd&apos;), textField: &apos;smartctl_hdd4_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_cycle_count = &apos; | &apos; + value[&apos;power_cycle_count&apos;] + &apos;次&apos;;} catch(e) {var power_cycle_count = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_cycle_count}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, 注：该示例为6核心 NUC配置 { itemId: &apos;sensinfo&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU温度&apos;), textField: &apos;sensinfo&apos;, renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1]; const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1]; const b0 = value.match(/temp1.*?\+([\d\.]+)?/)[1]; return `表面: ${p0} ℃ | 核心: ${c0}|${c1}|${c2}|${c3} ℃ | 主板: ${b0} ℃` } }, { itemId: &apos;MHz&apos;, colspan: 2, printBar: false, title: gettext(&apos;CPU频率&apos;), textField: &apos;cpusensors&apos;, renderer:function(value){ const f0 = value.match(/CPU.*scaling MHz.*?([\d]+)/)[1]; const f1 = value.match(/CPU min MHz.*?([\d]+)/)[1]; const f2 = value.match(/CPU max MHz.*?([\d]+)/)[1]; const f3 = f0*f2/100; return `实时: ${f3} MHz(${f0}%) | 最小: ${f1} MHz | 最大: ${f2} MHz ` } }, { itemId: &apos;nvme_ssd0&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/nvme0&apos;), textField: &apos;smartctl_nvme0_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var percentage_used = &apos; | 磨损: &apos; + value[&apos;nvme_smart_health_information_log&apos;][&apos;percentage_used&apos;].toFixed(0) + &apos;% &apos;;} catch(e) {var percentage_used = &apos;&apos;;} try {var data_units_read = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_read&apos;]*512/1024/1024/1024;var data_units_read = &apos;(读: &apos; + data_units_read.toFixed(2) + &apos;TB, &apos;;} catch(e) {var data_units_read = &apos;&apos;;} try {var data_units_written = value[&apos;nvme_smart_health_information_log&apos;][&apos;data_units_written&apos;]*512/1024/1024/1024;var data_units_written = &apos;写: &apos; + data_units_written.toFixed(2) + &apos;TB)&apos;;} catch(e) {var data_units_written = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${percentage_used}${data_units_read}${data_units_written}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, { itemId: &apos;ssd_sda&apos;, colspan: 2, printBar: false, title: gettext(&apos;/dev/sda&apos;), textField: &apos;smartctl_hdd1_json&apos;, renderer: function(value) { value = JSON.parse(value); if (value[&apos;model_name&apos;]) { try {var model_name = value[&apos;model_name&apos;];} catch(e) {var model_name = &apos;&apos;;} try {var serial_number = &apos; | 序列号: &apos; + value[&apos;serial_number&apos;];} catch(e) {var serial_number = &apos;&apos;;} try {var power_on_time = &apos; | &apos; + value[&apos;power_on_time&apos;][&apos;hours&apos;].toFixed(0) + &apos;小时&apos;;} catch(e) {var power_on_time = &apos;&apos;;} try {var temperature = &apos; | &apos; + value[&apos;temperature&apos;][&apos;current&apos;].toFixed(1) + &apos;°C&apos;;} catch(e) {var temperature = &apos;&apos;;} return `${model_name}${serial_number}${power_on_time}${temperature}`; } else { return `提示: 未安装硬盘或已直通硬盘控制器`; } } }, 搜索widget.pveNodeStatus 将 height: 300 （默认值） 改大为 420，或者更大，然后保存（每多一行大概增大 20~25） systemctl restart pveproxy.service 检查WEB界面是否正常显示 powersave模式 默认使用高性能模式，切换为低性能模式 查看支持的 CPU 电源模式 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 只有两种结果powersave、performance为intel pstate 受害者 查看当前的 CPU 电源模式 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor apt install linux-cpupower -y cpupower -c all frequency-info cpupower -c all frequency-set -g powersave 持久化 / cpupower开机启动 nano /etc/systemd/system/cpupower.service [Unit] Description=CPU powersave [Service] Type=oneshot ExecStart=/usr/bin/cpupower frequency-set -g powersave [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable cpupower.service APC UPS 连接 apt-get install apcupsd nano /etc/apcupsd/apcupsd.conf 必要的配置： 在 UPSNAME 后面给个易懂的名字 在 UPSCABLE 后指定为 usb 在 UPSTYPE 后更改为 usb 在 DEVICE 后为空，这样系统便会自动检测 USB 连接 UPS 其他的随便找个教程即可，注意：关机触发条件，有剩余电量和剩余时间，默认为5%和3分钟。注意这里只要满足其中任一条件便会触发 nano /etc/default/apcupsd ISCONFIGURED=no 更改为 yes 任何教程都没提，太坑了！来源 /etc/init.d/apcupsd restart systemctl enable apcupsd.service systemctl status apcupsd.service 查看ups运行状态 apcaccess 安装Tailscale curl -fsSL https://tailscale.com/install.sh | sh tailscale up --advertise-exit-node --accept-routes --accept-dns=false 点击/打开终端给的链接，授权登录 不要关闭浏览器，在管理员界面找到这台机器 设置里面关闭登录过期，打开exit node 也可以预设密钥登录 tailscale up --advertise-exit-node --accept-routes --accept-dns=false --authkey=tskey-auth-xxxx NODE01 tailscale up --advertise-routes=192.168.2.32/29 --accept-dns=false --accept-routes --advertise-exit-node NODE02 tailscale up --advertise-exit-node --accept-dns=false --accept-routes --advertise-routes=192.168.1.96/27,192.168.1.128/27,192.168.1.192/27,192.168.1.0/28 ZFS池 参考资料 为新手解释 VDev、zpool、ZIL 和 L2ARC 的幻灯片！ 2023.9 ZFS 能用于数据盘吗？关于 PVE 下 ZFS RAID 等相关 10 个疑问 李守中 Wiki ZFS on Linux 踩坑集 学习笔记 开始 PVE管理界面组ZFS池，选择4块hdd，名称z2pool，RAID级别RAIDZ2，压缩lz4，ashift：12 注，示例池名称为z2pool ZFS 严重依赖内存，因此至少需要 8GB 才能启动 专用缓存和/或日志磁盘，则应使用企业级 SSD。这可以显着提高整体性能。 VM 内安装 Proxmox VE（嵌套虚拟化），请不要对该 VM 的磁盘使用virtio，因为 ZFS 不支持它们。请改用 IDE 或 SCSI（也适用于virtio SCSI 控制器类型） zpool status zfs list zfs get volsize,refreservation,used &amp;lt;pool&amp;gt;/vm-&amp;lt;vmid&amp;gt;-disk-X 阅读手册 man zpool man zfs 限制ZFS内存使用（ARC） 默认情况下， ZFS 将50%的主机内存用于自适应替换缓存(ARC)。为 ARC 分配足够的内存对于 IO 性能至关重要，因此请谨慎减少内存。根据一般经验，至少分配2 GiB Base + 1 GiB/TiB-Storage。例如，如果您有一个具有 8 TiB可用存储空间的池，那么您应该为 ARC使用`10 GiB内存。 您可以通过直接写入zfs_arc_max模块参数来更改当前启动的 ARC 使用限制（重新启动会再次重置此更改）： echo &quot;$[10 * 1024*1024*1024]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_max 要永久更改ARC 限制，请将以下行添加到 /etc/modprobe.d/zfs.conf：（8G) options zfs zfs_arc_max=8589934592 如果您所需的zfs_arc_max值低于或等于 zfs_arc_min（默认为系统内存的 1/32），则zfs_arc_max将被忽略，除非您还将zfs_arc_min设置为最多zfs_arc_max - 1. echo &quot;$[8 * 1024*1024*1024 - 1]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_min echo &quot;$[8 * 1024*1024*1024]&quot; &amp;gt;/sys/module/zfs/parameters/zfs_arc_max 交换分区 SWAP 最好在物理磁盘上创建一个分区并将其用作交换设备，请勿在ZFS上使用swap，BUG 使用fdisk对SSD进行分区 n、1、p、…..w mkswap /dev/nvme1n1p3 swapon /dev/nvme1n1p3 nano /etc/fstab 增加一行 UUID=xxxxx你的UUID swap swap defaults 0 0 修改 swapiness 对于服务器来说，swapiness推荐为 10 临时 sysctl -w vm.swappiness=10 永久 nano /etc/sysctl.conf 增加一行 vm.swappiness = 10 生效 sysctl -p swappiness值 策略 0 内核只会交换以避免内存不足的情况 1 无需完全禁用的最小交换量 10 当系统中有足够的内存时，有时建议使用此值来提高性能 60 默认值 100 内核将积极地交换 举例： 我的笔记本电脑有 16 GB 的内存和 8 GB 的交换空间。如果我在内核参数中使用 60 swappiness，那么在使用大约 6 GB （16G*40% = 6.4G）的内存后，我的机器开始使用交换 ZIL 和 L2ARC 检查nvme状态 适用于转接卡等情况 lspci 获取设备编号，通过编号查询id lspci -n | grep -i 02:00.0 获取硬件id，查看指定PCI设备的带宽 lspci -n -d 144d:a80a -vvv | grep --color Width 例如： Speed 8GT/s, Width x4 Speed 16GT/s, Width x4 使用fdisk对SSD进行分区，请看前文，不再赘述 注：必须使用GPT分区表，不能使用MBR分区表 查看硬盘uuid blkid 或者 lsblk -fl 将 ZIL 镜像添加到池中 ZFS ZIL(SLOG)虽然用起来有写缓存的效果，但 ZIL 不是写缓存 。 ZIL 写入操作全是 4K 写操作，所以 ZFS 搞出了一个 SLOG ( Separate intent LOG ) 组件， SLOG 组件必须是一个独立设备或分区，专门存放 ZIL 数据 。 zpool add z2pool log mirror /dev/disk/by-partuuid/xxxxx你的UUID /dev/disk/by-partuuid/xxxxx你的UUID 将 L2ARC 设备添加到池中 一般建议不超过内存容量*10 zpool add z2pool cache /dev/disk/by-partuuid/xxxxx你的UUID 检查L2ARC持久化 cat /sys/module/zfs/parameters/l2arc_rebuild_enabled 默认值为 1 。 l2arc_rebuild_enabled=1 表示打开 L2ARC 持久化，即重启之后 L2ARC Deivce 中的数据还能用 小技巧 基础 zpool create &amp;lt;pool_name&amp;gt; &amp;lt;pool_type&amp;gt; &amp;lt;device_name&amp;gt; 创建一个存储池。 zpool attach &amp;lt;pool_name&amp;gt; &amp;lt;device_in_pool&amp;gt; &amp;lt;device_name&amp;gt; 向池中添加一个设备使 strip 变成 mirror 。 zpool detach &amp;lt;pool_name&amp;gt; &amp;lt;pool_device_name&amp;gt; 让一个池中的设备脱离池。 zpool remove &amp;lt;pool_name&amp;gt; &amp;lt;pool_device_name&amp;gt; 从一个池中删除一个设备。 zpool offline &amp;lt;pool_name&amp;gt; &amp;lt;device_name&amp;gt; 让一个池中的设备离线。 zpool scrub &amp;lt;pool_name&amp;gt; 同步池中的数据后，检测池中数据的错误并修复。 zpool add &amp;lt;zpool_name&amp;gt; log &amp;lt;device&amp;gt; 给没有 SLOG 设备的池添加一个 SLOG 设备。 zpool attach &amp;lt;zpool_name&amp;gt; &amp;lt;log_device&amp;gt; &amp;lt;device&amp;gt; 向已有一个 SLOG 设备的池添加另一个 SLOG 设备使之互为镜像。 zpool add &amp;lt;zpool_name&amp;gt; log mirror &amp;lt;device_a&amp;gt; &amp;lt;device_b&amp;gt; 直接添加两个互为镜像的 SLOG 设备。 文件系统 请勿直接使用zfs根目录，如/z2pool 创建一个新的文件系统并挂载: zfs create z2pool/docs -o mountpoint=/docs 快照相关 虚拟机快照显示 zfs set snapdev=visible z2pool/vm-303-disk-1 这样可以直接在/dev/zvol/z2pool目录（或/dev/z2pool目录）找到对应的快照，然后方便的通过各种备份工具进行备份，例如restic 创建一个快照 zfs snapshot z2pool/home@tuesday 按日期创建快照 name=`date +&quot;%Y-%m-%d&quot;` zfs snapshot z2pool/home@$name 查看所有快照 zfs list -t snapshot zfs list -t snapshot z2pool/home 回滚到前一个快照 zfs rollback z2pool/home@monday 删除一个快照 zfs destroy -R z2pool/home@monday 重命名快照 zfs rename z2pool/home@version1 z2pool/home@version2 注意: 当一个 dataset 存在快照时，无法直接删除。但可使用 -r 参数强制删除。 zfs destroy -r z2pool/home 克隆 克隆只能从快照中创建，在删除克隆以前，对应的快照无法删除。 zfs clone z2pool/home@monday z2pool/home2 复制 直接复制快照即可 待补充 其他 可通过命令查询文件系统的所有属性 zfs get all z2pool/home 可通过命令查询存储池的所有属性 zpool get all z2pool 查看存储池当前状态和 I/O 状况 zpool status -v zpool iostat 显示存储池所有操作历史记录 zpool history z2pool 开始虚拟机安装 Cloudinit 方式安装 教程贴子：https://gist.github.com/chriswayg/b6421dcc69cb3b7e41f2998f1150e1df 下载镜像：Ubuntu23.04 推荐这个 Debian12 推荐这个 任意地方上传下载的镜像，例如/root/debian-12-genericcloud-amd64.qcow2 除了qm importdisk 其他命令均可用在web界面操作 创建模板 正常方式创建虚拟机 qm create 902 --name debian12-templ --memory 2048 --net0 virtio,bridge=vmbr0 添加cloudinit系统盘 自行确认需要存放虚拟机的位置，示例为local-lvm qm importdisk 902 /root/debian-12-genericcloud-amd64.qcow2 local-lvm 使用cloudinit系统盘 qm set 902 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-902-disk-0 添加cloudinit设备 qm set 902 --ide2 local-lvm:cloudinit --boot c --bootdisk scsi0 --serial0 socket --vga serial0 增加系统盘空间 qm resize 902 scsi0 +30G 设置网络 qm set 902 --ipconfig0 ip=dhcp qm set 902 --ipconfig0 ip=10.10.10.222/24,gw=10.10.10.1 qm set 902 --ipconfig0 ip=192.168.2.34/24,gw=192.168.2.1,ip6=auto 设置密钥或密码 qm set 902 --sshkey ~/.ssh/id_rsa.pub qm set 902 --cipassword 你的密码 建议直接在web界面设置用户为root或你的用户名 检查设置 qm cloudinit dump 902 user SSH进入VM，按自己的习惯设置 Debian cloudinit换源 nano /etc/apt/mirrors/debian.list nano /etc/apt/mirrors/debian-security.list 分别修改为 https://mirrors.ustc.edu.cn/debian/ https://mirrors.ustc.edu.cn/debian-security/ 换源操作转换为模板后会丢失 阿里源安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 来宾代理 Guest Agent web界面开启QEUM Guest Agent apt install qemu-guest-agent -y 其他 nali q apt install htop cron screen nano -y wget https://conf.totoro.pub/bash/q -O /usr/bin/q wget https://conf.totoro.pub/bash/nali -O /usr/bin/nali chmod +X /usr/bin/q chmod +X /usr/bin/nali chmod 777 /usr/bin/q chmod 777 /usr/bin/nali q www.baidu.com|nali mkdir /data mkdir /data/ssl 特殊的，只在专用服务器设置 curl https://get.acme.sh | sh -s email=my@example.com apt install ufw -y crontab -e 添加我的SSL更新命令 37 7 2 * * wget Update-Url -O xxx.cer 38 7 2 * * wget Update-Url -O xxx.key 47 12 1 * * &quot;/root/.acme.sh&quot;/acme.sh --issue --dns dns_dp --server google --challenge-alias acme.example.com --keylength ec-256 -d example.com -d *.example.com -d *.01.example.com -d *.02.example.com -d *.03.example.com --force 37 13 1 * * &quot;/root/.acme.sh&quot;/acme.sh --install-cert -d example.com --key-file /data/ssl/example.com.key --fullchain-file /data/ssl/example.com.cer poweroff 设置为模板，并通过模板创建虚拟机 qm template 902 qm clone 902 190 --name debian12 qm start 190 调整 VM 磁盘的大小 qm shutdown 190 &amp;amp;&amp;amp; qm wait qm resize 190 scsi0 +8G qm start 190 直接使用ISO安装 Debian ISO 下载 Ubuntu ISO 下载 Windows ISO 下载 第三方精简版： Tiny10 ISO Tiny11 ISO 有用的CDROM GParted Live CD/USB/HD/PXE Bootable Image 分区用 使用IMG安装 OpenWrt 推荐的系统镜像 SuLingGG openwrt-18.06-k5.4 文档 ImmortalWrt OpenWrt官方 在线编译 安装方法 上传你的img，设置好网卡后，正常流程创建虚拟机，导入一下硬盘即可 qm importdisk 100 /var/lib/vz/template/iso/openwrt-xxx.img local-lvm 激活硬盘，即可正常使用 网络配置 正常用户都可以直接web设置这些内容 不正常的用户通过shell修改 修改LAN ipaddr vi /etc/config/network 使用LXC 不推荐使用任何LXC容器 使用Proxmox VE Helper Scripts创建LXC 请先使用软路由保障PVE全局的网络 Plex Media Server bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/plex.sh)&quot; Emby Media Server bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/emby.sh)&quot; Jellyfin Media Server bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/jellyfin.sh)&quot; Nextcloud bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nextcloudpi.sh)&quot; PhotoPrism bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/photoprism.sh)&quot; AdGuard Home bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard.sh)&quot; Transmission bash -c &quot;$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/transmission.sh)&quot; Vaultwarden bash -c &quot;$(wget -qO - https://github.com/tteck/Proxmox/raw/main/ct/alpine-vaultwarden.sh)&quot; VM使用 数据盘及swap fdisk -l fdisk /dev/sdb n、1、p、…..w mkfs.ext4 /dev/sdb1 mount /dev/sdb1 /data mkswap /dev/sdc swapon /dev/sdc nano /etc/fstab 增加一行 UUID=xxxxx你的UUID swap swap defaults 0 0 UUID=xxxxx你的UUID /data ext4 defaults 0 2 systemctl daemon-reload reboot 检查磁盘挂载情况 df -h 重复一下换源 nano /etc/apt/mirrors/debian.list nano /etc/apt/mirrors/debian-security.list 分别修改为 https://mirrors.ustc.edu.cn/debian/ https://mirrors.ustc.edu.cn/debian-security/ 安装Tailscale curl -fsSL https://tailscale.com/install.sh | sh tailscale up --advertise-exit-node --accept-routes --accept-dns=false 点击/打开终端给的链接，授权登录 不要关闭浏览器，在管理员界面找到这台机器 设置里面关闭登录过期，打开exit node 也可以预设密钥登录 tailscale up --advertise-exit-node --accept-routes --accept-dns=false --authkey=tskey-auth-xxxx 如果是LXC nano /etc/pve/lxc/401.conf 添加 lxc.cgroup2.devices.allow: c 10:200 rwm lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file DDNS docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go:latest web访问ip:9876，配置密钥 Plex wget xxx # https://www.plex.tv/media-server-downloads/ dpkg -i plexmediaserver_1.32.6.7557-1cf77d501_amd64.deb systemctl status plexmediaserver.service docker run -d \ --name plex \ --network=host \ -e TZ=&quot;Asia/Shanghai&quot; \ -e PLEX_CLAIM=&quot;claim-xxx&quot; \ -v /data/plexconfig:/config \ -v /data/plextranscode:/transcode \ -v /data/plexmedia:/data \ plexinc/pms-docker 其他 ShellClash Clash.Meta 常用命令 zfs list zpool status zpool iostat -v 1 rsync -aiv --progress /mnt/usb/ /data/xxx/xxx pct set 401 -mp0 /data/archive,mp=/archive SeafilePro Pro版本3用户以内免费，部署方式查看官方中文教程 官方英文教程【推荐】 DEBUG docker-compose logs -f --tail 10 BUG示例 seafile-mysql | 2077-77-77 77:77:77 3064 [ERROR] Incorrect definition of table mysql.column_stats: expected column &apos;hist_type&apos; at position 9 to have type enum(&apos;SINGLE_PREC_HB&apos;,&apos;DOUBLE_PREC_HB&apos;,&apos;JSON_HB&apos;), found type enum(&apos;SINGLE_PREC_HB&apos;,&apos;DOUBLE_PREC_HB&apos;). seafile-mysql | 2077-77-77 77:77:77 3064 [ERROR] Incorrect definition of table mysql.column_stats: expected column &apos;histogram&apos; at position 10 to have type longblob, found type varbinary(255). 解决办法 docker exec -it seafile-mysql bash mysql_upgrade --user=root --password=xxxx exit docker-compose down docker-compose up -d BUG示例2 seaf-cli status Traceback (most recent call last): File &quot;/usr/lib/python3/dist-packages/pysearpc/named_pipe.py&quot;, line 85, in _get_transport transport = self._pool.get(False) 解决办法 seaf-cli start 一劳永逸 加入开机启动 nano /etc/systemd/system/seafile.service [Unit] Description=seafile [Service] Type=oneshot ExecStart=/usr/bin/seaf-cli start [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable seafile.service</summary></entry><entry><title type="html">机械大师 C28 | Mechanic Master C28</title><link href="https://www.totoro.pub/mechanic-master-c28" rel="alternate" type="text/html" title="机械大师 C28 | Mechanic Master C28" /><published>2022-11-15T00:00:00+08:00</published><updated>2022-11-15T00:00:00+08:00</updated><id>https://www.totoro.pub/mechanic-master-c28</id><content type="html" xml:base="https://www.totoro.pub/mechanic-master-c28">&lt;p&gt;一直在用ITX，例如： &lt;a href=&quot;/in-win-chopin-pro&quot;&gt;迎广肖邦&lt;/a&gt; ，实在是苦于散热，供电的拉胯，于是把目光放在了mATX机箱上&lt;/p&gt;

&lt;p&gt;目前的痛点：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;ITX散热限高45/56mm，下压散热器效果太差了&lt;/li&gt;
  &lt;li&gt;1U电源的供电能力薄弱，风扇/电容啸响&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;解决方向：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;支持130mm塔式散热的ITX机箱或支持160mm塔式散热的mATX机箱&lt;/li&gt;
  &lt;li&gt;支持STX/ATX电源的机箱&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;考虑到手上的海盗船SF450白金的体验也就那样，于是将重点放在了支持ATX电源的机箱上，考虑了一圈后选择了&lt;a href=&quot;https://item.jd.com/10033538851498.html&quot;&gt;机械大师C28机箱&lt;/a&gt;&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;机械大师C28机箱尺寸是&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;342*185*284mm&lt;/code&gt;（长宽高），支持&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ATX/SFX/L&lt;/code&gt;电源和&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mATX/ITX&lt;/code&gt;主板，体积为：17.9L，支持240水冷/162mm塔式散热，335mm显卡，外壳是2mm铝合金，内壳是1mm钢&lt;/p&gt;

&lt;p&gt;旧的迎广肖邦&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/in-win-chopin-pro-01.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;新的机械大师C28&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-12.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;新旧对比&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-05.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;我的配置&quot;&gt;我的配置&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;配件&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;型号&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;备注&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Intel i5-11400&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;AMD会带来不幸&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;主板&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;华硕ROG STRIX B560-I GAMING WIFI&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;对，主板没换&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;内存&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;英睿达DDR4 3200 16G*2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;32G足够，64G没钱&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;利民 FS140&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;利民12015 *1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;顶部空间不够&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;ID-COOLING 12025 *2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;尾部及底部&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;猫头鹰 A9x14 *1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;前部&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;机械大师C28&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;三星 Samsung PM9A1 2T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;980Pro 的 OEM 版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;西数 WD SN550E 2T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;移动硬盘拆机版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;HDD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;西数 WD HC500 16T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;矿盘&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;电源&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;海盗船RM750e&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;微星GTX1660Super 6G魔龙&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;矿卡&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显示器&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;公司配的DELL 24寸&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;巨大的散热器&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-06.png&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-09.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;框架&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-10.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-11.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;显卡（矿卡）&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-07.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-08.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;跑分&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-01.png&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-02.png&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-03.png&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/mechanic-master-c28-04.png&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;</content><author><name>totoro625</name></author><category term="life" /><summary type="html">一直在用ITX，例如： 迎广肖邦 ，实在是苦于散热，供电的拉胯，于是把目光放在了mATX机箱上</summary></entry><entry><title type="html">我的 ITX 主机 | 迎广肖邦Pro</title><link href="https://www.totoro.pub/in-win-chopin-pro" rel="alternate" type="text/html" title="我的 ITX 主机 | 迎广肖邦Pro" /><published>2022-07-29T00:00:00+08:00</published><updated>2022-07-29T00:00:00+08:00</updated><id>https://www.totoro.pub/in-win-chopin-pro</id><content type="html" xml:base="https://www.totoro.pub/in-win-chopin-pro">&lt;p&gt;很久很久以前（2018-08-31）分享了 &lt;a href=&quot;/zs-a4&quot;&gt;ZS-A4 ITX主机&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;现在分享一下我最新的ITX主机 迎广肖邦&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;回顾一下旧的ZS-A4吧&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx01.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;新的迎广肖邦就小很多&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/in-win-chopin-pro-01.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/in-win-chopin-pro-02.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;我的配置&quot;&gt;我的配置&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;配件&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;型号&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;备注&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Intel i5-11400&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;AMD会带来不幸&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;主板&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;华硕ROG STRIX B560-I GAMING WIFI&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;内存&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;英睿达DDR4 3200 16G*2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;32G足够，64G没钱&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;猫头鹰 Noctua NH-L9i&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;猫扇信仰！&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;利民 TL-C12015B + 杂牌静音4cm风扇&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;加强CPU散热&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;迎广肖邦Pro&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;三星 Samsung PM9A1 2T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;980Pro 的 OEM 版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;三星 Samsung PM9A1 联想版 2T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;980Pro 的 联想OEM 版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 3&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;西数 WD SN550E 2T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;移动硬盘拆机版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;HDD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;西数 WD HC500 16T&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;矿盘&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;电源&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;机箱自带 200W&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;自带核显 HUD730&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显示器&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;公司配的DELL 24寸&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;目前核显打游戏够用，如需显卡可以通过pcie4.0延长线外置显卡&lt;/p&gt;</content><author><name>totoro625</name></author><category term="life" /><summary type="html">很久很久以前（2018-08-31）分享了 ZS-A4 ITX主机</summary></entry><entry><title type="html">YubiKey 与 BitLocker</title><link href="https://www.totoro.pub/yubikey-more" rel="alternate" type="text/html" title="YubiKey 与 BitLocker" /><published>2020-02-09T00:00:00+08:00</published><updated>2020-02-09T00:00:00+08:00</updated><id>https://www.totoro.pub/yubikey-more</id><content type="html" xml:base="https://www.totoro.pub/yubikey-more">&lt;p&gt;前年的这个时候&lt;a href=&quot;https://totoro.ink/yubikey.html&quot;&gt;买了一个 YubiKey&lt;/a&gt; ，具体的应用实际上就是并没有什么，除了给我输入一下超长的主密码。&lt;/p&gt;

&lt;p&gt;日常逛 V站看到一个&lt;a href=&quot;https://www.v2ex.com/t/376472&quot;&gt;三年前的坟帖子&lt;/a&gt; 更新了，有人回复了配置 YubiKey 以支持 BitLocker 的方法。&lt;/p&gt;

&lt;p&gt;微软的官方教程中就有用智能卡加密硬盘的方法&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;WIN10 可用的3种方法 &lt;!--more--&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/dd875530(v=ws.10)&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;WIN7 使用的方法 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/ee424307(v=ws.10)&lt;/code&gt; Hexo会自动渲染链接里面的括号，所以，请复制到浏览器打开&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;简单的来说，就是 WIN10 支持使用 CA 的证书、自签名证书、文件加密（EFS）证书作为 BitLocker 智能卡的证书，但是需要简单的配置一下。而 WIN7 只能使用自签名证书。&lt;/p&gt;

&lt;p&gt;实际上&lt;em&gt;从Windows Server 2012和Windows 8开始，微软通过硬盘加密规范完善了BitLocker，该规范允许将BitLocker的加密操作下放到存储设备的硬件中完成&lt;/em&gt;，所以谈 BitLocker 默认当前在用的是 WIN10系统了（WIN8一边去）。&lt;/p&gt;

&lt;p&gt;首先我们需要去官网下载 YubiKey Smart Card Minidriver ，也就是 YubiKey 的智能卡证书，确保windows 能够识别我们的智能卡&lt;/p&gt;

&lt;h2 id=&quot;ca证书&quot;&gt;CA证书&lt;/h2&gt;

&lt;p&gt;土豪的选择,基本会送智能卡，可以直接用。&lt;/p&gt;

&lt;h2 id=&quot;自签名证书&quot;&gt;自签名证书&lt;/h2&gt;

&lt;p&gt;注意需要修改注册表&lt;/p&gt;

&lt;p&gt;在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE&lt;/code&gt; 下新建一个&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DWORD&lt;/code&gt;的值，数值名称为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SelfSignedCertificates &lt;/code&gt; 数值数据为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;这样就使得系统允许使用自签名证书加密 BitLocker&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/yubikey-more.png&quot; alt=&quot;yubikey4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;新建两个TXT文件&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[NewRequest]
Subject = &quot;CN=BitLocker&quot;
KeyLength = 2048
ProviderName = &quot;Microsoft Smart Card Key Storage Provider&quot;
KeySpec = &quot;AT_KEYEXCHANGE&quot; 
KeyUsage = &quot;CERT_KEY_ENCIPHERMENT_KEY_USAGE&quot;
KeyUsageProperty = &quot;NCRYPT_ALLOW_DECRYPT_FLAG&quot;
RequestType = Cert
SMIME = FALSE
[EnhancedKeyUsageExtension]
OID=1.3.6.1.4.1.311.67.1.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blcert.txt&lt;/code&gt; 这个是创建加密证书&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[NewRequest]
Subject = &quot;CN=BitLocker DRA&quot;
KeyLength = 2048
ProviderName = &quot;Microsoft Enhanced Cryptographic Provider v1.0&quot;
Exportable = TRUE 
ExportableEncrypted = FALSE
KeySpec = &quot;AT_KEYEXCHANGE&quot; 
KeyUsage = &quot;CERT_KEY_ENCIPHERMENT_KEY_USAGE&quot;
KeyUsageProperty = &quot;NCRYPT_ALLOW_DECRYPT_FLAG&quot;
RequestType = Cert
SMIME = FALSE
[EnhancedKeyUsageExtension]
OID=1.3.6.1.4.1.311.67.1.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bldracert.txt&lt;/code&gt; 这个是创建恢复秘钥&lt;/p&gt;

&lt;p&gt;接着使用 CMD 调用证书创建程序创建证书即可&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;certreq –new blcert.txt
certreq –new bldracert.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;文件加密证书efs&quot;&gt;文件加密证书（EFS)&lt;/h2&gt;

&lt;p&gt;这种方法是利用了文件加密系统的证书，我们需要在&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;控制面板\用户帐户\用户帐户&lt;/code&gt;找到管理文件加密证书&lt;/p&gt;

&lt;p&gt;按照流程创建一个加密证书放在本地硬盘或者智能卡中即可（推荐放在本地硬盘上可以备份）&lt;/p&gt;

&lt;p&gt;然后修改本地策略组（gpedit.msc），在计算机配置、管理模板、Windows组件、BitLocker 驱动器加密、验证智能卡证书使用合规性，设置为已启用，并修改对象标识符为创建的证书的增强型秘钥用法：加密文件系统&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt; (1.3.6.1.4.1.311.10.3.4)&lt;/code&gt;的数值&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;或者&lt;/strong&gt;直接修改注册表在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE&lt;/code&gt; 的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CertificateOID&lt;/code&gt; 数值数据为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt; (1.3.6.1.4.1.311.10.3.4)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;在 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE&lt;/code&gt; 下新建一个&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DWORD&lt;/code&gt;的值，数值名称为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SelfSignedCertificates &lt;/code&gt; 数值数据为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;怕麻烦的、不会修改注册表的，在桌面新建 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;001.reg &lt;/code&gt;复制下面的内容粘贴后运行即可&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE]
&quot;SelfSignedCertificates&quot;=dword:00000001
&quot;CertificateOID&quot;=&quot;1.3.6.1.4.1.311.10.3.4&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;p&gt;BitLocker 可以用来加密 C盘 ，但是要是重装系统的话，进入PE还是很麻烦的。&lt;/p&gt;

&lt;p&gt;我只用来加密数据。&lt;/p&gt;

&lt;p&gt;PS:自签名证书有效期时长为1年、文件加密（EFS）证书有效期时长为100年&lt;/p&gt;

&lt;p&gt;我并不会修改有效期，所以用了文件加密（EFS）证书。&lt;/p&gt;

&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;

&lt;p&gt;EFS 文件加密系统 创建 BitLocker 的操作要点：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;下载官网的YubiKey Smart Card Minidriver，在设备管理器更新智能卡的驱动&lt;/li&gt;
  &lt;li&gt;修改注册表&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE]&lt;/code&gt;中&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;CertificateOID&quot;=&quot;1.3.6.1.4.1.311.10.3.4&quot;&lt;/code&gt;（等效于本地策略组修改数值）添加&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;SelfSignedCertificates&quot;=dword:00000001 &lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;生成pfx证书存储到硬盘，或者直接存到 YubiKey（不可再次取出，安全性更高。无法备份，不推荐）&lt;/li&gt;
  &lt;li&gt;用 YubiKey manager塞入任意一个 piv 证书插槽&lt;/li&gt;
  &lt;li&gt;在需要启用 BitLocker 的硬盘上右击选择启用即可&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;其他电脑访问启用智能卡的 BitLocker 磁盘只需要插入 YubiKey 后在设备管理器更新智能卡的驱动包 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YubiKey Smart Card Minidriver&lt;/code&gt;即可&lt;/p&gt;

&lt;p&gt;友情提醒：记牢 BitLocker 磁盘的恢复秘钥或者直接多买几个 YubiKey 塞入证书后备用防丢，之后就把证书销毁就好了，不要留下安全隐患。&lt;/p&gt;</content><author><name>totoro625</name></author><category term="bash" /><summary type="html">前年的这个时候买了一个 YubiKey ，具体的应用实际上就是并没有什么，除了给我输入一下超长的主密码。</summary></entry><entry><title type="html">我的 ITX 主机 | ZS-A4</title><link href="https://www.totoro.pub/zs-a4" rel="alternate" type="text/html" title="我的 ITX 主机 | ZS-A4" /><published>2018-08-31T00:00:00+08:00</published><updated>2018-08-31T00:00:00+08:00</updated><id>https://www.totoro.pub/zs-a4</id><content type="html" xml:base="https://www.totoro.pub/zs-a4">&lt;h2 id=&quot;起因&quot;&gt;起因&lt;/h2&gt;

&lt;p&gt;难以忍受破旧笔记本（ACER V5-472G i5-3337u）懦弱的CPU性能，正值工作之际，计划更换一台新的电脑。&lt;/p&gt;

&lt;p&gt;心水水的 i7-8550u 性能由于散热原因达不到应有的水平，更不要说 i7-8750h 的散热能力了，根本压不住。&lt;/p&gt;

&lt;p&gt;想到以后对于CPU的需求越来越多，索性上了台式机。不过为了以后能够经常性的搬运、携带，便上了 ITX 的贼船。（工作原因）&lt;/p&gt;

&lt;p&gt;Inter 的挤牙膏功夫太强，甚至还往回缩了一大口（ CPU 漏洞频发）。正值散片价格上涨之宜，干脆的上了 AMD 平台。&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx01.jpg&quot; alt=&quot;主机&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;我的配置&quot;&gt;我的配置&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;配件&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;型号&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;备注&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;AMD ryzen 2600X&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;AMD YES !&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;主板&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;ASRock/华擎 Fatal1ty B450 Gaming-ITX/ac&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;内存&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Team/十铨 ddr4-2400 8G + 16G&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;32G没钱上&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;CPU散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Cryorig/快睿 C7&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱散热&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Noctua/猫头鹰 NF-A9X14-PWM x2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;猫扇信仰&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;机箱&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;ZS-A4&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;类似于 DAN cases A4-SFX 的国产版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Samsung/三星 PM981 256G&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;970evo 的 OEM 版&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;SSD 2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;CRUCIAL/镁光/英睿达 MX500 500G&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;性价比不错&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;HDD 1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;Seagate/希捷 ST500 500G&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;旧笔记本拆机当存储&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;电源&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;USCorsair/海盗船 SF450&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显卡&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;COLORFUL/七彩虹 GTX750ti&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;亮机卡&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;显示器&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;AOC LV243XIP 23.8寸&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;花自己的钱贼心疼&lt;/p&gt;

&lt;p&gt;等到9102年3月份老黄的2060发布，我也是不会买的，亮机卡够用了&lt;/p&gt;

&lt;h2 id=&quot;一些照片&quot;&gt;一些照片&lt;/h2&gt;

&lt;h3 id=&quot;开箱&quot;&gt;开箱&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;最后到的PM981&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;AMD yes！&lt;/p&gt;

&lt;h3 id=&quot;细节&quot;&gt;细节&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx05.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx06.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx07.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx08.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;整机照片&quot;&gt;整机照片&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx09.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;对比照片&quot;&gt;对比照片&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx10.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;对比破旧的笔记本，居然还要小一圈&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx11.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx12.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;对比一下移动硬盘&lt;/p&gt;

&lt;h3 id=&quot;临时工作地点&quot;&gt;临时工作地点&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx13.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx14.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;临时工作地点2&quot;&gt;临时工作地点2&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx01.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/itx15.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</content><author><name>totoro625</name></author><category term="life" /><summary type="html">起因</summary></entry><entry><title type="html">yubikey使用初体验</title><link href="https://www.totoro.pub/yubikey" rel="alternate" type="text/html" title="yubikey使用初体验" /><published>2018-03-14T00:00:00+08:00</published><updated>2018-03-14T00:00:00+08:00</updated><id>https://www.totoro.pub/yubikey</id><content type="html" xml:base="https://www.totoro.pub/yubikey">&lt;p&gt;觊觎 &lt;a href=&quot;https://www.yubico.com/&quot;&gt;yubico&lt;/a&gt; 公司的 &lt;a href=&quot;https://www.yubico.com/products/yubikey-hardware/&quot;&gt;yubikey&lt;/a&gt; 很久了，最近又由于 lastpass 主密钥过长不方便的原因，索性买了一个回来研究。&lt;/p&gt;

&lt;p&gt;我在购买前有了解到这是一个略微高端的玩具，国内外的教程都很少，而且新老教程都有些不尽准确的地方。yubikey 在设计使用上对于 MAC OS 以及 Linux 系统比较友好，而在 Windows 上的使用范围就相对小了很多，不过如果是仅仅用做固定密码输入器的话，也是够用的。
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;介绍&quot;&gt;介绍&lt;/h2&gt;

&lt;p&gt;我先后查阅了官方的 &lt;a href=&quot;https://www.gitbook.com/book/iamtwz/yubikey-handbook-chinese/details&quot;&gt;yubikey 使用手册&lt;/a&gt; &lt;a href=&quot;https://iamtwz.gitbooks.io/yubikey-handbook-chinese/content/&quot;&gt;(点此阅读)&lt;/a&gt;  ，以及几乎是中文能搜索到的最早的博文（2012年）&lt;a href=&quot;https://bigeagle.me/2012/05/yubikey/&quot;&gt;入手yubikey,一点小心得&lt;/a&gt; 和他的后续 &lt;a href=&quot;https://bigeagle.me/2016/02/yubikey-4/&quot;&gt;YubiKey 4 简介与配置&lt;/a&gt; ，还有康哥的 &lt;a href=&quot;http://scateu.me/2018/01/20/gpg-yubikey-advanced-usage.html&quot;&gt;Yubikey OpenPGP Card 略高级折腾手记&lt;/a&gt; ，赵一开的&lt;a href=&quot;https://blog.blahgeek.com/yubikey-intro/&quot;&gt;YubiKey入手和介绍&lt;/a&gt;、&lt;a href=&quot;https://blog.blahgeek.com/yubikey-review/&quot;&gt;Yubikey使用一年总结&lt;/a&gt; ，折腾录的&lt;a href=&quot;https://www.zhway.com/%E4%BA%8C%E6%AC%A1%E9%A9%97%E8%AD%89%E7%A5%9E%E5%99%A8yubikey/&quot;&gt;二次验证神器yubikey&lt;/a&gt; ，还有&lt;a href=&quot;https://mechanus.io/ke-neng-shi-zui-hao-de-yubikey-gpg-ssh-zhi-neng-qia-jiao-cheng/&quot;&gt;可能是最好的 Yubikey + GPG/SSH 智能卡教程&lt;/a&gt; 。知乎专栏的&lt;a href=&quot;https://zhuanlan.zhihu.com/p/31802760&quot;&gt;把 Gpg4win 的 gpg-agent 转发到 WSL 中&lt;/a&gt;、&lt;a href=&quot;https://zhuanlan.zhihu.com/p/26712353&quot;&gt;配置新版 GPG SSH 认证代理&lt;/a&gt; 。感觉我还是能够驾驭的住这个精致的玩具的&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/yubikey-more.png&quot; alt=&quot;yubikey4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;首先说一下功能，YubiKey 4 可以&lt;strong&gt;同时&lt;/strong&gt;工作在三种模式:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;传统键盘设备模式: Yubico OTP, Challenge-Response, 静态密码, HOTP 等, 这个模式又有两个slot，对应于短按和长按操作，生成两种密码&lt;/li&gt;
  &lt;li&gt;Smartcard 模式: OpenPGP card 和 PIV card，可以用来安全地保存 RSA 私钥&lt;/li&gt;
  &lt;li&gt;U2F 模式: 一种两步认证协议，Google, Dropbox, Github 等网站都支持&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/blahgeek&quot;&gt;@BlahGeek&lt;/a&gt; 之前入手 YubiKey 4 时写得 &lt;a href=&quot;https://blog.blahgeek.com/yubikey-intro/&quot;&gt;blog&lt;/a&gt; 描述得更详细一些，可以参考。&lt;/p&gt;

&lt;h2 id=&quot;我的使用&quot;&gt;我的使用&lt;/h2&gt;

&lt;p&gt;而我日常主要使用的是 windows ，有时会用 WSL ，偶尔会用 Linux ，所以我主要使用到的功能则是静态密码模式以及 Smartcard 模式中的 OpenPGP card 来安全地保存 RSA 私钥。官网有一份 &lt;a href=&quot;https://www.yubico.com/why-yubico/for-business/computer-login/windows-login/&quot;&gt;Windows 下如何使用的说明&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;根据教程我安装的 &lt;a href=&quot;https://www.microsoft.com/en-us/store/p/yubikey-for-windows-hello/9nblggh511m5&quot;&gt;YubiKey for Windows Hello&lt;/a&gt; 总是不太好用，一方面可能是我的笔记本太过老旧的原因，另一方面可能是我的电脑没有内置&lt;em&gt;TPM&lt;/em&gt;(可信赖平台模块)的原因，新的电脑（需要win 10）应该都可以支持。&lt;/p&gt;

&lt;h3 id=&quot;windows锁屏解锁&quot;&gt;Windows锁屏解锁&lt;/h3&gt;

&lt;p&gt;而针对 Windows 用户还有一个替代程序 &lt;a href=&quot;https://www.yubico.com/support/knowledge-base/categories/articles/use-yubico-windows-login-tool/&quot;&gt;yubico windows login tool&lt;/a&gt; (&lt;a href=&quot;https://www.yubico.com/support/knowledge-base/categories/articles/os-logon-tools/&quot;&gt;下载页&lt;/a&gt;)，可以适用于全部版本的 Windows 。我们只需要安装完成后重启电脑并打开管理程序即可食用，更加便捷的代价是他不能够在开机的时候使用，仅仅只能用作系统锁定时的解锁，远不如 YubiKey for Windows Hello 好用。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/yubikey.png&quot; alt=&quot;yubico windows login tool&quot; /&gt;&lt;/p&gt;

&lt;p&gt;按理来说 &lt;a href=&quot;https://www.yubico.com/support/knowledge-base/categories/articles/smart-card-tools/&quot;&gt;yubikey 可以运行在 Smartcard 模式&lt;/a&gt;上为我在开机过程中解锁系统，但是我的 Smartcard 证书始终无法导入系统，可能是我的教育版 win10 有哪些地方没有设置好。&lt;/p&gt;

&lt;h3 id=&quot;静态密码输入&quot;&gt;静态密码输入&lt;/h3&gt;

&lt;p&gt;另外一个我最常使用的就是传统键盘模式了，而且我用的还是最为人诟病的静态密码模式，既短按和长按分别输出两段预设好的密码。这是相当不安全的，但是由于是 windows 上使用，我也没什么应用可以使用其他高级的安全模式，反倒是总有一些人喜欢在我输入密码的时候偷窥我的密码，保存好两段静态密码再通过密码登入 lastpass 复制各种密码倒成了我的一个更加安全的手段。静态密码不安全无非在于，yubikey 离身后直接被熟人套取密码，但要知道你有两个静态密码，你就可以有很多种组合，例如A、B、AB、BA，以及在此基础上添加字符、删减字符，这样可以使得你的主密码更加安全。当然，做了这么多工作，最重要的还是 yubikey 尽可能的不要离身，这样静态密码才能安全。&lt;/p&gt;

&lt;p&gt;在使用传统键盘模式前需要下载一个 &lt;a href=&quot;https://www.yubico.com/support/knowledge-base/categories/articles/yubikey-personalization-tools/&quot;&gt;YubiKey Personalization Tool&lt;/a&gt; 来管理你的 yubikey，MAC 用户与 Linux 用户则只需要通过包管理器安装 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yubikey-personalization yubikey-personalization-gui&lt;/code&gt; 即可食用了。&lt;/p&gt;

&lt;p&gt;打开程序，选择静态密码模式中的Scan Code，即可设置短按和长按分别输入的预设密码了&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/yubikey2.png&quot; alt=&quot;静态密码&quot; /&gt;&lt;/p&gt;

&lt;p&gt;选择一个 Configuration Slot ，#1 是短按 #2 是长按&lt;/p&gt;

&lt;p&gt;再把键盘模式选择一下，目前普遍是 US Keyboard&lt;/p&gt;

&lt;p&gt;之后就可以输入你想要设置的静态密码了，可以根据需要选择静态密码输入完成之后是否需要在输入一个回车键，简化我们的输入过程&lt;/p&gt;

&lt;p&gt;写好之后选择 Write Configuration 写入 yubikey&lt;/p&gt;

&lt;p&gt;第一次写入需要保存一个历史写入文件，选择一个安全的地方放置一下即可&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/Rna8.png&quot; alt=&quot;静态密码设置&quot; /&gt;&lt;/p&gt;

&lt;p&gt;就这样，我们的 yubikey 就具备了基础的输入密码的功能了，经过测试，yubikey 的密码输入功能在任何可以接收键盘信号的设备上都是可以使用的，比如安卓手机。这样我就可以通过 yubikey 来输入我的 lastpass ，即使是在手机上也无需输入一连串超长的安全密码了。&lt;/p&gt;

&lt;h3 id=&quot;openpgp-card&quot;&gt;OpenPGP card&lt;/h3&gt;

&lt;p&gt;yubikey 工作在 Smartcard 模式上时可以支持 MAC OS 的 PIV card 解锁，而我等没有 MAC 的用户就用用 OpenPGP card 好了。&lt;/p&gt;

&lt;p&gt;在接触 yubikey 之前我是没有接触过 OpenPGP 的，根据我看到的几篇博文，打都告诉我不要把主密钥丢在 yubikey 里面，否则永远都取不出来了。当然丢 yubikey 里面会更加的安全，但是如果丢了就真的丢了。。。&lt;/p&gt;

&lt;p&gt;对于那些真正的需要安全的人而言，主密钥是肯定得丢在 yubikey 中的，但是就我这样丢三落四的人，还是算了吧。&lt;/p&gt;

&lt;p&gt;作为一个 Windows 用户需要安装一个 &lt;a href=&quot;https://www.gpg4win.org/&quot;&gt;gpg4win&lt;/a&gt; 来使得 Windows 能够支持在 Powershell 中运行 gpg 命令，这个时候你说 WSL ？抱歉，不加以设置，你在 WSL 中是看不到 yubikey 的&lt;/p&gt;

&lt;p&gt;参考&lt;a href=&quot;https://zhuanlan.zhihu.com/p/31802760&quot;&gt;把 Gpg4win 的 gpg-agent 转发到 WSL 中&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我是没读懂也没有设置成功。。。。。。&lt;/p&gt;

&lt;p&gt;不过我在 Windows 下的 Powershell 中一样可以使用 yubikey 啊，我把主密钥导出备份之后，再将主密钥移动到 yubikey 中，使得电脑上每次使用主密钥的时候都需要我去插入 yubikey 才可以使用&lt;/p&gt;

&lt;p&gt;而根据很多人说的，主密钥删除而单独使用子密钥的情况我却从未遇到过，测试了很多次都失败了，无法仅仅导出子密钥后单独使用子密钥，可能是我哪里设置的不正确的原因。&lt;/p&gt;

&lt;p&gt;安卓手机上也有一个名为：OpenKeychain:Easy PGP 的程序，同样支持 yubikey 的使用。&lt;/p&gt;

&lt;p&gt;当你安装过 gpg4win 软件之后，我们打开它，根据向导生成一份属于自己的 OpenPGP 证书，之后一定要导出绝密密钥，否则会在转移密钥到 yubikey 的过程中，主密钥再也取不出来了。我们可以多尝试几次，只要不把公钥证书上传到托管服务器，我们在本地都是可以随意删除的。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;img/R4QA.png&quot; alt=&quot;Kleoptra&quot; /&gt;&lt;/p&gt;

&lt;p&gt;之后的更加复杂的操作我们将在 PowerShell 上进行&lt;/p&gt;

&lt;p&gt;首先你需要设置一下 YubiKey。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg --card-edit  # 打开设置
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;admin&lt;/code&gt; 打开管理模式 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help&lt;/code&gt; 查看帮助  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;passwd&lt;/code&gt; 设置 PIN, Admin PIN 和 Reset Code&lt;/p&gt;

&lt;p&gt;PIN 的默认值是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;123456&lt;/code&gt;，Admin PIN 的默认值是 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;12345678&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;需要先进入 admin 模式后，help 命令才会有更多的选项，passwd 才可以设置更多的密码&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/R2p0.png&quot; alt=&quot;help&quot; /&gt;&lt;/p&gt;

&lt;p&gt;需要注意的是&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PIN 码是平时最常用的密码，如果输错三次就会被锁定，需要使用 Reset Code 来解锁，Reset Code 输错三次，只能&lt;a href=&quot;https://developers.yubico.com/ykneo-openpgp/ResetApplet.html&quot;&gt;物理重置&lt;/a&gt;。&lt;/li&gt;
  &lt;li&gt;Admin PIN 是管理卡信息(如添加密钥、修改密码)使用的密码，不能短于 8 位，输错三次则管理功能被锁定，只能&lt;a href=&quot;https://developers.yubico.com/ykneo-openpgp/ResetApplet.html&quot;&gt;物理重置&lt;/a&gt;。 &lt;strong&gt;记住，千万不要在需要输入 Admin PIN 的时候输入短于 8 位的密码，这样会直接锁定&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;你可以继续设置一些其他信息，比如持卡人姓名、公钥的 URL 等等，也可以下次再弄。&lt;/p&gt;

&lt;p&gt;建议将公钥的 URL 设置一下，这样插入新的电脑时可以通过 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch&lt;/code&gt; 命令直接获取 yubikey 中密钥的公钥了&lt;/p&gt;

&lt;p&gt;操作完后我们使用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;quit &lt;/code&gt; 退出编辑&lt;/p&gt;

&lt;p&gt;想必经过 gpg4win 软件的设置之后我们也有了自己的私钥（ Mac 用户有一个 &lt;a href=&quot;https://gpgtools.org/&quot;&gt;GPGtools&lt;/a&gt; ）&lt;/p&gt;

&lt;p&gt;首先我们可以生成一份子密钥&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg --expert --edit-key i@example.com  # 编辑这个密钥
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;之后进入 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&amp;gt;&lt;/code&gt; 中执行命令，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addkey &lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (12) ECC (encrypt only)
  (13) Existing key
Your selection?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这里通常选择&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8&lt;/code&gt; 自定义的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RSA&lt;/code&gt; 密钥&lt;/p&gt;

&lt;p&gt;这个时候就让你选择这个 RSA 密钥具备的功能&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;默认情况是具备 Sign Encrypt ，常见 Current allowed actions: 后面的描述，我们通过反复选择 S E A来更改这个密钥的性质，成为你所需要的密钥&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;RSA keys may be between 1024 and 4096 bits long.	# 密钥长度
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.	# 过期时间
         0 = key does not expire
      &amp;lt;n&amp;gt;  = key expires in n days
      &amp;lt;n&amp;gt;w = key expires in n weeks
      &amp;lt;n&amp;gt;m = key expires in n months
      &amp;lt;n&amp;gt;y = key expires in n years
Key is valid for? (0) 1Y
Key expires at 03/15/19 02:17:39 中国标准时间
Is this correct? (y/N) Y
Really create? (y/N)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;之后一份子密钥就创建成功了，我们需要创建3份子密钥因为在 接下来的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;keytocard&lt;/code&gt; 过程中我们将会把私钥转移到卡中再也取不出来，这个时候你再备份，就备份不出私钥了。&lt;/p&gt;

&lt;p&gt;保存一下退出&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; save
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;导出一下公私钥，离线存储到一个安全的地方。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg --export -a &quot;i@example.com&quot; &amp;gt; public.key
gpg --export-secret-key -a &quot;i@example.com&quot; &amp;gt; private.key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果有必要，可以将公钥上传到公钥服务器，命令是这个&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg --send-keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;将私钥装载到 Yubikey&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg --edit-key &quot;i@example.com&quot;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;会显示出你的主密钥和子密钥。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; toggle
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;key【空格】数字&lt;/code&gt; 定位到子密钥，先装载 signing 子密钥。数字按实际的来，不一定是&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; key 1
gpg&amp;gt; keytocard
Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;先反选签名密钥，然后装载加密密钥：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; key 1
gpg&amp;gt; key 2
gpg&amp;gt; keytocard
Please select where to store the key:
   (2) Encryption key
Your selection? 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;反选加密密钥，装载认证密钥至 Yubikey:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; key 2
gpg&amp;gt; key 3
gpg&amp;gt; keytocard
Please select where to store the key:
   (3) Authentication key
Your selection? 3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;最后保存：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gpg&amp;gt; save
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样就可以了！&lt;/p&gt;

&lt;p&gt;私钥想备份你现在也没办法了。&lt;/p&gt;

&lt;p&gt;另外，加密命令用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg -r 接收人id -es 文件路径&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;解密用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg -o 解压文件路径 -d 加密的文件&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;例如：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg -r totoro625 -es do.xml&lt;/code&gt; ，输入密码后，在文件同目录就会生成一份名为 do.xml.gpg 的加密文件，此时我们删除 do.xml ，将 do.xml.gpg 保存即可&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg -o do2.xml -d do.xml.gpg&lt;/code&gt; ,这样在文件同目录就会生成一份名为 do2.xml 的解密后文件，跟原先的 do.xml 一样，这就是解密文件。&lt;/p&gt;

&lt;h3 id=&quot;u2f-模式&quot;&gt;U2F 模式&lt;/h3&gt;

&lt;p&gt;目前我的网站登录还在使用固定密码，一时半会不会改用 U2F 来麻烦自己。&lt;/p&gt;

&lt;h3 id=&quot;实际应用&quot;&gt;实际应用&lt;/h3&gt;

&lt;p&gt;我主要用的就是 win10 的解锁和固定密码的输入功能，至于 OpenPGP 我是不打算怎么用的（毕竟也不太会用，还不熟悉），目前仅仅用于加密重要文件保存在各大云服务提供商，如百度云、微软云、谷歌云。我的 &lt;a href=&quot;https://pan.totoro.ink/totoro625.asc&quot;&gt;OpenPGP 公钥&lt;/a&gt; 指纹是 CF68BB23A52D176C57116CBCE4925DDF24118AF1&lt;/p&gt;

&lt;p&gt;我真的不是很会用 OpenPGP ，目前能做到的仅仅是加密解密自己的文件与消息，验证别人的签名。&lt;/p&gt;</content><author><name>totoro625</name></author><category term="bash" /><summary type="html">觊觎 yubico 公司的 yubikey 很久了，最近又由于 lastpass 主密钥过长不方便的原因，索性买了一个回来研究。</summary></entry><entry><title type="html">自用字体</title><link href="https://www.totoro.pub/totoro625-font" rel="alternate" type="text/html" title="自用字体" /><published>2016-12-19T00:00:00+08:00</published><updated>2016-12-19T00:00:00+08:00</updated><id>https://www.totoro.pub/totoro625-font</id><content type="html" xml:base="https://www.totoro.pub/totoro625-font">&lt;p&gt;呤思者陈中文字体，更新自龙猫兔简体1.0.0，经过多次重写，编码后重命名为呤思者陈中文字体&lt;/p&gt;

&lt;p&gt;英文部分为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ampersand&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;中文部分为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;硬笔楷体&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;符号部分自定义图案&lt;/p&gt;

&lt;p&gt;这是中文字体
&lt;img src=&quot;https://img.totoro.pub/blog/font02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/Totoro625/totoro625-font-family&quot;&gt;下载链接&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这是富含图标的英文字体&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://img.totoro.pub/blog/font01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;font-family&quot;&gt;font family&lt;/h2&gt;

&lt;h2 id=&quot;totoro625&quot;&gt;totoro625&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Totoro625/totoro625-font-family/master/totoro625.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;英文部分为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ampersand&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;中文部分为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;硬笔楷体&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;符号部分自定义图案&lt;/p&gt;

&lt;h2 id=&quot;totoro625-en&quot;&gt;totoro625-en&lt;/h2&gt;

&lt;p&gt;totoro625的删减版本，只保留英文部分和符号部分&lt;/p&gt;

&lt;h2 id=&quot;zcoolkuaile&quot;&gt;zcoolkuaile&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Totoro625/totoro625-font-family/master/zcoolkuaile.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Copyright 2018 The ZCOOL KuaiLe Project Authors (https://www.github.com/googlefonts/zcool-kuaile)&lt;/p&gt;

&lt;h2 id=&quot;zhuziawan&quot;&gt;zhuziawan&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Totoro625/totoro625-font-family/master/zhuziawan.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;日系饱满圆润字体：筑紫A丸ゴシック5字重！&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s/DvOS36W7CpQXyFbhBEXXWA&quot;&gt;作者：宁静之雨&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;筑紫A丸，一款日系字形字体，风格类似圆体，曾有人把它的汉字部分和Neutraface Display Alt的英文数字进行混搭，万恶的是，不知道是谁起的头，把这个混搭字体叫做sleek字体，后来传播了起来，被不少朋友所熟悉。&lt;/p&gt;

  &lt;p&gt;以讹传讹的sleek字体莫名其妙传了那么多年，它本身却只是一个单字重的字体，而先前广为流传的筑紫A丸字体本尊，也只有人移植了3字重而已。&lt;/p&gt;

  &lt;p&gt;2019年，读者【大熊】提供了全套完整日系官方筑紫A丸和筑紫B丸多字重字库，经过我精心补全中文汉字之后，完美的5字重完整字库终于出来了！&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;我切片了中文常用部分：&lt;/p&gt;

&lt;p&gt;Github：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://raw.githubusercontent.com/Totoro625/totoro625-font-family/master/zcoolkuaile.css&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;我的腾讯云CDN：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://conf.totoro.pub/fonts/zcoolkuaile.css&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;请自建托管使用！&lt;/p&gt;</content><author><name>totoro625</name></author><summary type="html">呤思者陈中文字体，更新自龙猫兔简体1.0.0，经过多次重写，编码后重命名为呤思者陈中文字体</summary></entry></feed>