# NeoJ's Web Page (下水鱼的Blog) — Full Content > Go、WebGL、Python、网络加速、大模型部署与硬核复古技术博客的全文语料版(llms-full.txt)。 > Index: https://firsh.me/llms.txt · License: CC BY-SA 4.0 --- ## GLM-5.2 W4A8 Ascend 910B2 部署手册 - URL: https://firsh.me/blog/0186.html - Date: 2026-07-13 - Keywords: GLM-5.2, W4A8, Ascend 910B, NPU部署, SGLang, CANN, 量化推理, 华为昇腾, 大模型部署, quay.io镜像 GLM-5.2 W4A8 Ascend 910B2 部署手册 **[ hot ]**** quay.io/neojjjjj/sglang:cann9.0.0-910b-glm5.2-20260615 镜像 📄 deploy.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 ** --- ## 华硕路由器Web突然无法登陆,到底是固件损坏,还是被弱密码攻击了呢? - URL: https://firsh.me/blog/0190.html - Date: 2026-07-06 - Keywords: 华硕路由器, ASUS路由器, 路由器无法登陆, 固件损坏, 弱密码攻击, 路由器安全, Web管理界面, 路由器故障排查, 路由器被入侵, 固件修复 华硕路由器Web突然无法登陆,到底是固件损坏,还是被弱密码攻击了呢? 公众号 地址 https://mp.weixin.qq.com/s/ZLz2By5-UH6KRs1cySbcrQ 📊 asus_router_webui_login_ubifs_fix.docx − 100% + Reset 🔍 Fullscreen ⬇ Download 🔗 Open Retry 0 /3 Loading Excel... Initializing viewer 📊 Failed to Load Excel Unable to load the Excel file. Please try again. 🔄 Retry ⬇ Download File 🔗 Open Direct Format: DOCX Zoom: 100% Sheets: - Retries: 0 --- ## 当LSTM遇到注意力那么我们能做些什么呢 - URL: https://firsh.me/blog/0188.html - Date: 2026-07-02 - Keywords: LSTM, 注意力机制, Attention, 循环神经网络, RNN, 深度学习, 自然语言处理, NLP, 序列模型, 神经网络 当LSTM遇到注意力那么我们能做些什么呢 📄 paper_docker.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 最近开始尝试Sglang VLLM 部署模型的一些总结【截止2026年6月22日】 - URL: https://firsh.me/blog/0187.html - Date: 2026-07-02 - Keywords: SGLang, vLLM, 模型部署, 大语言模型, LLM推理, 推理框架, GPU推理, 模型服务化, LLM serving, 推理加速 最近开始尝试Sglang VLLM 部署模型的一些总结【截止2026年6月22日】 📄 journey.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## RocketMQ Install - URL: https://firsh.me/blog/0067.html - Date: 2026-07-02 - Keywords: RocketMQ, 消息队列, RocketMQ安装, RocketMQ配置, NameServer, Broker, JDK, Maven, 一主一从, Linux环境变量 RocketMQ Install RocketMQ消息队列安装以及使用,RocketMQ安装常见问题,以及解决方案。 摘要: 我要装个RocketMQ rocketmq 安装 安装rocketmq需要环境: 1、jdk1.7以上 2、maven 3、git jdk1.8 1 wget http://112firshme11224.test.upcdn.net/blog/tmp/jdk-8u92-linux-x64.tar.gz maven下载: 1 2 3 wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar xf apache-maven-3.3.9-bin.tar.gz -C /opt/ git下载: 1 2 yum install git -y 环境变量如下: 1 2 3 4 5 6 7 8 9 10 11 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL export JAVA_HOME = /opt/jdk/jdk1.8.0_65 export JRE_HOME = /opt/jdk/jdk1.8.0_65/jre export CLASSPATH = .: $JAVA_HOME /lib/dt.jar: $JAVA_HOME /lib/tools.jar: $JRE_HOME /lib: $CLASSPATH export PATH = $PATH : $JAVA_HOME /bin/ export PATH = $PATH :/usr/local/go/bin export GOPATH = /usr/local/ export M2_HOME = /opt/apache-maven-3.3.9 export PATH = $PATH : $M2_HOME /bin export ROCKETMQ_HOME = /opt/RocketMQ-3.5.8/devenv export NAMESRV_ADDR = 127.0.0.1:9876 使配置文件生效 1 source /etc/profile 检测maven 1 2 3 4 5 6 7 [ root@dscn1 ~ ] # mvn -v Apache Maven 3.3.9 ( bb52d8502b132ec0a5a3f4c09453c07478323dc5 ; 2015-11-11T00:41:47+08:00 ) Maven home: /opt/apache-maven-3.3.9 Java version: 1.8.0_65, vendor: Oracle Corporation Java home: /opt/jdk/jdk1.8.0_65/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux" , version: "2.6.32-573.22.1.el6.x86_64" , arch: "amd64" , family: "unix" [toc] ##一、正式开始安装rocketmq 1、下载安装 1 2 3 4 a)wget https://github.com/alibaba/RocketMQ/archive/v3.5.8.tar.gz ###下载包 b)tar -xf v3.5.8.tar.gz -C /opt/ ###解压 c)cd /opt/RocketMQ-3.5.8 ###进入解压后目录 d)sh install.sh ###进行安装(下载国外的数据,时间较长) 2、修改文件内存 1 2 3 4 5 cd /opt/RocketMQ-3.5.8/devenv/bin #vim修改runbroker.sh、runserver.sh两个文件 ------------------------------------- JAVA_OPT = " ${ JAVA_OPT } -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=320m" ###Xms启动时内存,Xmx最大内存,Xmn最小内存 -------------------------------------- 3、启动 nameserver 1 nohup sh mqnamesrv >/var/log/ns.log 2> & 1 & 4、验证 nameserver 是否启动: 1 tail -f /var/log/ns.log ###查看日志有无错误信息 5、启动 broker 在启动 borker 之前需要指定 nameserver 地址: 1 2 3 echo "export NAMESRV_ADDR=127.0.0.1:9876" >> /etc/profile ###写入到环境变量,或者直接 -n来指定 nohup sh mqbroker -n 192.168.0.106:9876 autoCreateTopicEnable = true > /var/log/mq.log 2> & 1 & 6、检验是否开启 1 tail -f /var/log/mq.log ###查看日志有无错误信息 7、关闭的命令: 1 2 sh mqshutdown namesrv sh mqshutdown broker 8、创建队列 1 sh mqadmin updateTopic -b "192.168.0.106:10911" -t Topic1 -r 10 -w 10 ###-b broker的ip和端口 -t java程序中定义的名字 9、更改broker配置文件,更改ip,使外网可以访问 1 sh mqadmin updateBrokerConfig -b 192.168.0.106:10911 -k brokerIP1 -v 192.168.0.106 10、以此输入下面两个命令: 1 2 3 bash tools.sh com.alibaba.rocketmq.example.quickstart.Producer ###生产者(生产队列) bash tools.sh com.alibaba.rocketmq.example.quickstart.Consumer ###消费者(清理队列) 如果报错是内存不够,就改 runbroker.sh 、 runserver.sh 两个文件 如果启动报错是不知道主机: 检查/etc/sysconfig/network 中的记录的hostname是否和/etc/hosts中的主机名绑定一致,如果不一致请确保一致 在/etc/hosts中添加 192.168.1.118 hostname的名称(master01)跟/etc/sysconfig/network一样(master01) 开启9876rocketmq的nameserver端口 #vim /etc/sysconfig/iptables 二、一主一从的配置 除了启动步骤不同。其余与上面一主的配置相同: 1、修改/opt/RocketMQ-3.5.8/devenv/bin/runbroker.sh、runserver.sh两个文件: 1 JAVA_OPT = " ${ JAVA_OPT } -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=320m" ###Xms启动时内存,Xmx最大内存,Xmn最小内存 2、主的机器修改/opt/RocketMQ-3.5.8/devenv/conf/2m-2s-async/broker-a.properties 1 2 3 4 5 6 7 8 9 10 11 namesrvAddr = 192.168.0.106:9876 ; 192.168.0.107:9876 brokerIP1 = 192.168.0.106 brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH storePathRootDir = /opt/RocketMQ-3.4.6 storePathCommitLog = /opt/RocketMQ-3.4.6/log/commitlog 3、从的机器修改/opt/RocketMQ-3.5.8/devenv/conf/2m-2s-async/broker-a-s.properties 1 2 3 4 5 6 7 8 9 10 11 namesrvAddr = 192.168.0.106:9876 ; 192.168.0.107:9876 brokerIP1 = 192.168.0.107 brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 1 deleteWhen = 04 fileReservedTime = 48 brokerRole = SLAVE flushDiskType = ASYNC_FLUSH storePathRootDir = /opt/RocketMQ-3.4.6 storePathCommitLog = /opt/RocketMQ-3.4.6/log/commitlog 参考内容和解释如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #所属集群名字 brokerClusterName = rocketmq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName = broker-a | broker-b #0 表示 Master, >0 表示 Slave brokerId = 0 #nameServer地址,分号分割 namesrvAddr = rocketmq-nameserver1:9876 ; rocketmq-nameserver2:9876 #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums = 4 #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable = true #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup = true #Broker 对外服务的监听端口 listenPort = 10911 #删除文件时间点,默认凌晨 0点 deleteWhen = 00 #文件保留时间,默认 48 小时 fileReservedTime = 120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog = 1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue = 300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio = 88 #存储路径 storePathRootDir = /opt/rocketmq/data #commitLog 存储路径 storePathCommitLog = /opt/rocketmq/data/commitlog #消费队列存储路径存储路径 storePathConsumeQueue = /opt/rocketmq/data/consumequeue #消息索引存储路径 storePathIndex = /opt/rocketmq/data/index #checkpoint 文件存储路径 storeCheckpoint = /opt/rocketmq/data/checkpoint #abort 文件存储路径 abortFile = /opt/rocketmq/data/abort #限制的消息大小 maxMessageSize = 65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole = ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType = ASYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128 4、两个机器上都启动nameserver: 1 nohup sh mqnamesrv >/var/log/ns.log 2> & 1 & 5、主的机器启动broker: 1 nohup sh mqbroker -c ../conf/2m-2s-async/broker-a.properties > /var/log/mq.log 2> & 1 & 6、从的机器启动broker: 1 nohup sh mqbroker -c ../conf/2m-2s-async/broker-a-s.properties > /var/log/mq.log 2> & 1 & 运行成功的图! Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## Vultr 账户删除 - URL: https://firsh.me/blog/0064.html - Date: 2026-07-02 - Keywords: Vultr, Vultr账户删除, VPS, Linode, HostUS, 云服务器, 信用卡解绑, VPS速度对比, 账户注销, 云主机 Vultr 账户删除 今天大脑错乱了,买了个Vultr的VPS,速度很慢,远远不比Linode的VPS速度。 文章 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 今天大脑错乱了,买了个Vultr的VPS,速度很慢,远远不比Linode的VPS速度。 #下面的链接是删除账户的链接。 用了一会发现速度实在太慢,还不稳定带宽比较低,所以想解绑信用卡,发现解决不了索性直接删除账户。 hostus,linode的主机都不错,都稳定服务态度也好,推荐大家使用。 下面是删除用户的链接地址。 https://my.vultr.com/billing/cancel/ --- ## Falco 二次开发用的文档 - URL: https://firsh.me/blog/0089.html - Date: 2026-07-02 - Keywords: Falco, 二次开发, 云原生安全, 运行时安全, Falco插件, 自定义规则, eBPF, 系统调用监控, CNCF, 威胁检测 Falco 二次开发用的文档 📄 Practical Cloud Native Security with Falco_ Risk and Threat Detection for Containers, Kubernetes, and Cloud. Early Release.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 读过的小说 - URL: https://firsh.me/blog/0090.html - Date: 2026-07-02 - Keywords: 王小波, 爱你就像爱生命, 中国文学, 小说推荐, 程序员作家, 王小波作品, 中国当代小说, 文学阅读, 书单, 人文阅读 读过的小说 爱你就像爱生命—王小波(第一代程序员) 📄 爱你就像爱生命 王小波,李银河.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## CPS 王垠 - URL: https://firsh.me/blog/0091.html - Date: 2026-07-02 - Keywords: CPS, 王垠, 续延传递风格, Continuation Passing Style, 编译器, 代码解析, pmatch, 模式匹配, 函数式编程, 程序语言理论 CPS 王垠 摘要: CPS.scm , pmatch.scm scheme 代码。 Stat CPS.scm Code pmatch.scm Code CPS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ;; A simple CPS transformer which does proper tail-call and does not ;; duplicate contexts for if-expressions. ;; author: Yin Wang (yw21@cs.indiana.edu) ( load "pmatch.scm" ) ( define cps ( lambda ( exp ) ( letrec ([ trivial? ( lambda ( x ) ( memq x ' ( zero? add1 sub1 )))] [ id ( lambda ( v ) v )] [ ctx0 ( lambda ( v ) ` ( k , v ))] ; tail context [ fv ( let ([ n -1 ]) ( lambda () ( set! n ( + 1 n )) ( string->symbol ( string-append "v" ( number->string n )))))] [ cps1 ( lambda ( exp ctx ) ( pmatch exp [ , x ( guard ( not ( pair? x ))) ( ctx x )] [( if , test , conseq , alt ) ( cps1 test ( lambda ( t ) ( cond [( memq ctx ( list ctx0 id )) ` ( if , t , ( cps1 conseq ctx ) , ( cps1 alt ctx ))] [ else ( let ([ u ( fv )]) ` ( let ([ k ( lambda ( , u ) , ( ctx u ))]) ( if , t , ( cps1 conseq ctx0 ) , ( cps1 alt ctx0 ))))])))] [( lambda ( , x ) , body ) ( ctx ` ( lambda ( , x k ) , ( cps1 body ctx0 )))] [( , op , a , b ) ( cps1 a ( lambda ( v1 ) ( cps1 b ( lambda ( v2 ) ( ctx ` ( , op , v1 , v2 ))))))] [( , rator , rand ) ( cps1 rator ( lambda ( r ) ( cps1 rand ( lambda ( d ) ( cond [( trivial? r ) ( ctx ` ( , r , d ))] [( eq? ctx ctx0 ) ` ( , r , d k )] ; tail call [ else ( let ([ u ( fv )]) ` ( , r , d ( lambda ( , u ) , ( ctx u ))))])))))]))]) ( cps1 exp id )))) % pmatch 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ( define-syntax pmatch ( syntax-rules ( else guard ) (( _ ( rator rand ... ) cs ... ) ( let (( v ( rator rand ... ))) ( pmatch v cs ... ))) (( _ v ) ( error 'pmatch "failed: ~s" v )) (( _ v ( else e0 e ... )) ( begin e0 e ... )) (( _ v ( pat ( guard g ... ) e0 e ... ) cs ... ) ( let (( fk ( lambda () ( pmatch v cs ... )))) ( ppat v pat ( if ( and g ... ) ( begin e0 e ... ) ( fk )) ( fk )))) (( _ v ( pat e0 e ... ) cs ... ) ( let (( fk ( lambda () ( pmatch v cs ... )))) ( ppat v pat ( begin e0 e ... ) ( fk )))))) ( define-syntax ppat ( syntax-rules ( _ quote unquote ) (( _ v _ kt kf ) kt ) (( _ v () kt kf ) ( if ( null? v ) kt kf )) (( _ v ( quote lit ) kt kf ) ( if ( equal? v ( quote lit )) kt kf )) (( _ v ( unquote var ) kt kf ) ( let (( var v )) kt )) (( _ v ( x . y ) kt kf ) ( if ( pair? v ) ( let (( vx ( car v )) ( vy ( cdr v ))) ( ppat vx x ( ppat vy y kt kf ) kf )) kf )) (( _ v lit kt kf ) ( if ( equal? v ( quote lit )) kt kf )))) test 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ;;; tests ;; var ( cps 'x ) ( cps ' ( lambda ( x ) x )) ( cps ' ( lambda ( x ) ( x 1 ))) ;; no lambda (will generate identity functions to return to the toplevel) ( cps ' ( if ( f x ) a b )) ( cps ' ( if x ( f a ) b )) ;; if stand-alone (tail) ( cps ' ( lambda ( x ) ( if ( f x ) a b ))) ;; if inside if-test (non-tail) ( cps ' ( lambda ( x ) ( if ( if x ( f a ) b ) c d ))) ;; both branches are trivial, should do some more optimizations ( cps ' ( lambda ( x ) ( if ( if x ( zero? a ) b ) c d ))) ;; if inside if-branch (tail) ( cps ' ( lambda ( x ) ( if t ( if x ( f a ) b ) c ))) ;; if inside if-branch, but again inside another if-test (non-tail) ( cps ' ( lambda ( x ) ( if ( if t ( if x ( f a ) b ) c ) e w ))) ;; if as operand (non-tail) ( cps ' ( lambda ( x ) ( h ( if x ( f a ) b )))) ;; if as operator (non-tail) ( cps ' ( lambda ( x ) (( if x ( f g ) h ) c ))) ;; why we need more than two names ( cps ' ((( f a ) ( g b )) (( f c ) ( g d )))) ;; factorial ( define fact-cps ( cps ' ( lambda ( n ) (( lambda ( fact ) (( fact fact ) n )) ( lambda ( fact ) ( lambda ( n ) ( if ( zero? n ) 1 ( * n (( fact fact ) ( sub1 n )))))))))) ;; print out CPSed function ( pretty-print fact-cps ) ;; => ;; '(lambda (n k) ;; ((lambda (fact k) (fact fact (lambda (v0) (v0 n k)))) ;; (lambda (fact k) ;; (k ;; (lambda (n k) ;; (if (zero? n) ;; (k 1) ;; (fact ;; fact ;; (lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2)))))))))) ;; k)) (( eval fact-cps ) 5 ( lambda ( v ) v )) ;; => 120 大佬的代码解析 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## Linux 丛裸机进行安全加固 - URL: https://firsh.me/blog/0092.html - Date: 2026-07-02 - Keywords: Linux安全加固, SSH加固, sshd_config, 裸机部署, Linux服务器安全, auditd审计, 环境变量加固, JDK安装, iftop网络监控, Python安装 Linux 丛裸机进行安全加固 创建用户 useradd abs password abs 一、ssh加固 vi /etc/ssh/sshd_config #################### Port 35791 Protocol 2 MaxAuthTries 3 MaxSessions 3 RSAAuthentication yes PubkeyAuthentication yes UsePAM yes X11Forwarding yes Banner none UseDNS no PermitRootLogin no PasswordAuthentication yes ##################### service sshd reload 二、环境变量加固profile vi /etc/profile ####################################### ##记录历史命令时间 export HISTTIMEFORMAT=" whoami %F %T " ##修改帐户TMOUT值,600秒无操作自动退出 export PS1='$LOGNAME@' hostname :'$PWD''$ ' umask 022 TMOUT=600 ####################################### source /etc/profile 三、屏蔽banner信息 备份方法: cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak cp -p /etc/motd /etc/motd_bak 加固方法: vi /etc/ssh/sshd_config banner NONE vi /etc/motd 删除全部内容或更新成自己想要添加的内容 四、禁用x_windows服务 vi /etc/inittab —————————————————————————— id:5:initdefault: –5改成3 —————————————————————————— 五、打开审计 chkconfig auditd on service auditd restart 六、清理不必要的信任主机 删除其中不必要的主机 vi /etc/hosts.equiv vi /$HOME/.rhosts 七、安装基础包 1、安装rz sz和 screen 1).安装 yum install -y lrzsz yum install -y screen 2).查看 rz 会弹出一个框 2、安装iftop 1).安装 yum -y install flex byacc libpcap ncurses ncurses-devel libpcap-devel wget http://www.ex-parrot.com/pdw/iftop/download/iftop-1.0pre2.tar.gz tar zxvf iftop-1.0pre2.tar.gz cd iftop-1.0pre2 ./configure make && make install 2).查看带宽 iftop -B -n -N -p 3、安装jdk (1.6.0 1.7.0 1.8.0)这三个版本的jdk包 默认为1.8.0版本 1).下载安装包到某个路径 mkdir /opt/jdk/ jdk-8u65-linux-x64.gz jdk-7u80-linux-x64.gz 2).解压 tar xf jdk-7u80-linux-x64.gz tar xf jdk-8u65-linux-x64.gz 3).修改环境变量 vim /etc/profile export JAVA_HOME=/opt/jdk/jdk1.8.0_65 export JRE_HOME=/opt/jdk/jdk1.8.0_65/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH export PATH=$PATH:$JAVA_HOME/bin/ source /etc/profile 4).查看java版本 java -version java version “1.8.0_65” Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) 5).安装jdk1.6.0版本 cd /opt/jdk/ chmod 755 jdk-6u45-linux-x64.bin ./jdk-6u45-linux-x64.bin (注意,这个步骤一定要在jdk-6u45-linux-x64.bin所在目录下) 会生成一个jdk1.6.0_45目录 6).查看1.6.0或1.7.0的版本 ./jdk1.6.0_45/bin/java -version java version “1.6.0_45” Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 或 ./jdk1.7.0_80/bin/java -version java version “1.7.0_80” Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) 4、安装Python 1).安装 sqlite-devel(因为 Flask 应用程序可能使用能 Sqlite 数据库,所以这个得装上(之前因为没装这个,导致 Python 无法导入 sqlite3 库)) yum install sqlite-devel -y 2).安装Python2.7 wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz tar xf Python-2.7.8.tgz cd Python-2.7.8 ./configure –prefix=/usr/local make && make install 安装成功之后,你可以在 /usr/local/bin/python2.7 找到 Python 2.7。 5、安装aide 安装mhash yum -y install mhash-devel.x86_64 mhash.x86_64 2.安装aide yum -y install aide.x86_64 配置(默认即可) vim /etc/aide.conf –可以不改,按默认就可以了 4.生成初始化数据库 aide –init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz 开始检测 aide –check 6、Lynis安全检查工具 1).介绍 https://cisofy.com/ Lynis是一个为系统管理员提供的 Linux和Unix的审计工具 。 Lynis扫描系统的配置,并创建概述系统信息与安全问题所使用的专业审计。 当用户启动该软件后,Lynis会会逐次扫描系统的内核、用户目录、软件信息等,并最后生成一个全面的报告。 需要说明的是,该工具只能生成一个扫描检测后的报告,对用户起到提醒作用,本身并不能提高系统的安全性。 但是该工具却可以成为其他安全软件、系统测评软件的模块。 2).安装 yum -y install lynis 或 wget https://cisofy.com/files/lynis-2.1.1.tar.gz 3).全面检查 lynis –check-all -Q 4).自动检查 lynis -c –auditor “automated” –cronjob > /var/log/lynis/report.txt 5).检查某项目 lynis –tests FILE-6354 –quick 6).查看警告 grep Warning /var/log/lynis.log 7).查看建议 grep Suggestion /var/log/lynis.log 八、建立主机间的信任 1、生成密钥(默认的是rsa) ssh-keygen -t rsa 2、将生成的密钥(公钥)拷贝给另一台主机 ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 35791 root@192.168.1.4 ” 指定端口时记得使用双引号,以免报错 3、测试 ssh -p 35791 root@192.168.1.4 这样直接连接到192.168.1.4这一台主机上,不用输入密码就是添加信任成功 九、修改主机名 1.临时修改主机名 查看当前主机名: spark@localhost:~$ hostname localhost 修改主机名并查看当前主机名: spark@localhost: $ sudo hostname hadoop spark@localhost: $ hostname hadoop PS:以上的修改只是临时修改,重启后就恢复原样了。 2.永久修改主机名 步骤1: 修改/etc/sysconfig/network中的hostname vi /etc/sysconfig/network HOSTNAME=localhost.localdomain #修改localhost.localdomain为orcl1 修改network的HOSTNAME项。点前面是主机名,点后面是域名。没有点就是主机名。 这个是永久修改,重启后生效。目前不知道怎么立即生效。 想立即生效,可以同时采用第一种方法。 步骤2: 修改/etc/hosts文件 vi /etc/hosts 127.0.0.1 localhost.localdomain #修改localhost.localdomain为orcl1 shutdown -r now #最后,重启服务器即可。 十、配置防火墙 1、进入配置文件 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vim /etc/sysconfig/iptables ######################################################## *filter ################ NULL Accept Hosts ###################### ###允许保垒机 -A INPUT -s 221.41.47.213/32 -p tcp –dport 35791 -j ACCEPT -A INPUT -s 10.168.189.37/32 -p tcp –dport 35791 -j ACCEPT ###允许本机 -A INPUT -s 221.43.178.5/32 -p tcp –dport 35791 -j ACCEPT -A INPUT -s 10.0.0.10/32 -p tcp –dport 35791 -j ACCEPT ###允许内网 -A INPUT -s 10.0.0.0/8 -p tcp –dport 35791 -j ACCEPT ###允许腾讯众创空间 -A INPUT -s 221.69.10.134/32 -p tcp –dport 35791 -j ACCEPT MMSS 249 -A INPUT -s 100.41.85.249/32 -p tcp -j ACCEPT -A INPUT -d 100.41.85.249/32 -p tcp -j ACCEPT ###限制连接数 -A INPUT -p tcp –dport 8080 -m connlimit –connlimit-above 3000 -j DROP -A INPUT -p tcp –dport 8888 -m connlimit –connlimit-above 3000 -j DROP -A INPUT -p tcp –dport 28080 -m connlimit –connlimit-above 3000 -j DROP ###允许除35791之外所有端口 -A INPUT -p tcp –dport 35791 -j DROP -A INPUT -p tcp ! –dport 35791 -j ACCEPT ################ Black List ############################ #-A INPUT -s 106.187.53.56/32 -p tcp –dport 35791 -j DROP ########### DNS Resolved ############################## -A INPUT -p udp -m udp –sport 53 -j ACCEPT -A INPUT -p udp -m udp –dport 53 -j ACCEPT ################# ALLOW Local ######################## -A INPUT -i lo -j ACCEPT ################# Forbidden Ping ####################### -A INPUT -i eth0 -p icmp -s 0/0 -d 0/0 -j DROP ################# NFS Backup Server #################### -A INPUT -s 10.168.189.37/32 -p all -j ACCEPT -A INPUT -s 121.41.47.213/32 -p all -j ACCEPT ################# Forbidden ALL ######################## -P INPUT DROP ################# OUTPUT Settings #################### -P OUTPUT ACCEPT COMMIT ##################################################### 十一、阿里云服务器安装安骑士 1、安装64位的执行命令 wget ‚ http://update.aegis.aliyun.com/download/AliAqsInstall_64.sh' && sh AliAqsInstall_64.sh i24iJ7 2、安装32位的执行命令 wget ‚ http://update.aegis.aliyun.com/download/AliAqsInstall_32.sh' && sh AliAqsInstall_32.sh i24iJ7 --- ## LVM 扩容VG/LV - URL: https://firsh.me/blog/0093.html - Date: 2026-07-02 - Keywords: LVM, LVM扩容, VG扩容, LV扩容, 物理卷PV, 卷组VG, 逻辑卷LV, resize2fs, Linux存储管理, 动态扩容 LVM 扩容VG/LV 动态扩容 VG 1.1 查看硬盘信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [ root@pgb lvm ] # fdisk -l Disk /dev/hda: 19.3 GB, 19327352832 bytes 255 heads, 63 sectors/track, 2349 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 144 1052257+ 82 Linux swap / Solaris /dev/hda3 145 2349 17711662+ 83 Linux Disk /dev/hdb: 2147 MB, 2147483648 bytes 16 heads, 63 sectors/track, 4161 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hdb1 1 1985 1000408+ 83 Linux /dev/hdb2 1986 4161 1096704 83 Linux Disk /dev/hdd: 1073 MB, 1073741824 bytes 16 heads, 63 sectors/track, 2080 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hdd1 1 2080 1048288+ 83 Linux [ root@pgb lvm ] # pvscan PV /dev/hdb1 VG vg01_pgdata lvm2 [ 976.00 MB / 972.00 MB free ] PV /dev/hdd1 VG vg01_pgdata lvm2 [ 1020.00 MB / 0 free ] Total: 2 [ 1.95 GB ] / in use: 2 [ 1.95 GB ] / in no VG: 0 [ 0 ] #备注:根据 fdisk 和 pvscan 命令输出,知道 /dev/hdb2 还没有加入 VG, 可以使用,接下来将 /dev/hdb2 加入 VG vg01_pgdata。 1.2 查看 VG 信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ root@pgb lvm ] # vgdisplay --- Volume group --- VG Name vg01_pgdata System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 1.95 GB PE Size 4.00 MB Total PE 499 Alloc PE / Size 256 / 1.00 GB Free PE / Size 243 / 972.00 MB VG UUID B5pg8R-2AGm-6DEp-K7HK-TI1I-HC3h-gWx32m 1.3 格式化文件系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ root@pgb lvm ] # mkfs -t ext3 -c /dev/hdb2 mke2fs 1.39 ( 29-May-2006 ) Filesystem label = OS type: Linux Block size = 4096 ( log = 2 ) Fragment size = 4096 ( log = 2 ) 137088 inodes, 274176 blocks 13708 blocks ( 5.00% ) reserved for the super user First data block = 0 Maximum filesystem blocks = 281018368 9 block groups 32768 blocks per group, 32768 fragments per group 15232 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Checking for bad blocks ( read-only test ) : done Writing inode tables: done Creating journal ( 8192 blocks ) : done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. 1.4 创建PV 1 2 [ root@pgb lvm ] # pvcreate /dev/hdb2 Physical volume "/dev/hdb2" successfully created 1.5 在线扩容 VG 1 2 3 4 5 6 7 8 9 10 11 [ root@pgb lvm ] # vgs VG #PV #LV #SN Attr VSize VFree vg01_pgdata 2 1 0 wz--n- 1.95G 972.00M [ root@pgb lvm ] # vgextend vg01_pgdata /dev/hdb2 Volume group "vg01_pgdata" successfully extended [ root@pgb lvm ] # vgs VG #PV #LV #SN Attr VSize VFree vg01_pgdata 3 1 0 wz--n- 2.99G 1.99G 1.6 再次查看 VG,查看是否扩容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [ root@pgb lvm ] # vgdisplay --- Volume group --- VG Name vg01_pgdata System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size 2.99 GB PE Size 4.00 MB Total PE 766 Alloc PE / Size 256 / 1.00 GB Free PE / Size 510 / 1.99 GB VG UUID B5pg8R-2AGm-6DEp-K7HK-TI1I-HC3h-gWx32m # 备注:现在 vg01_pgdata 大小为 3 GB 左右,已成功扩容 1 GB。 动态扩容 LV 目标给已在线上使用的LV 扩容,在以下例子中,给目录 /database/pgdata1 扩容 512 M。 2.1 查看目录使用情况 1 2 3 4 5 6 7 8 [ root@pgb lvm ] # df -hv Filesystem Size Used Avail Use% Mounted on /dev/hda3 17G 9.8G 5.8G 64% / /dev/hda1 99M 18M 76M 20% /boot tmpfs 217M 0 217M 0% /dev/shm none 217M 104K 217M 1% /var/lib/xenstored /dev/mapper/vg01_pgdata-lv_pgdata1 1008M 34M 924M 4% /database/pgdata1 2.2 查看所属 VG 信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ root@pgb lvm ] # vgdisplay --- Volume group --- VG Name vg01_pgdata System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size 2.99 GB PE Size 4.00 MB Total PE 766 Alloc PE / Size 256 / 1.00 GB Free PE / Size 510 / 1.99 GB VG UUID B5pg8R-2AGm-6DEp-K7HK-TI1I-HC3h-gWx32m #备注:从上面看出,VG vg01_pgdata 最大可用空间为 2.99 GB, 目前已分配 1 GB,还剩余 1.99 GB 可以分配。 2.3 增加 LV 大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ root@pgb lvm ] # lvextend -L +512M /dev/mapper/vg01_pgdata-lv_pgdata1 Extending logical volume lv_pgdata1 to 1.50 GB Logical volume lv_pgdata1 successfully resized [ root@pgb lvm ] # df -hv Filesystem Size Used Avail Use% Mounted on /dev/hda3 17G 9.9G 5.8G 64% / /dev/hda1 99M 18M 76M 20% /boot tmpfs 217M 0 217M 0% /dev/shm none 217M 104K 217M 1% /var/lib/xenstored /dev/mapper/vg01_pgdata-lv_pgdata1 1008M 34M 924M 4% /database/pgdata1 #备注: LV 扩容成功,但目录 /database/pgdata1 大小仍然为 1G,没有变化。还需要 resize2fs 命令处理下。 2.4 resize2fs 1 2 3 4 5 [ root@pgb lvm ] # resize2fs -f /dev/mapper/vg01_pgdata-lv_pgdata1 resize2fs 1.39 ( 29-May-2006 ) Filesystem at /dev/mapper/vg01_pgdata-lv_pgdata1 is mounted on /database/pgdata1 ; on-line resizing required Performing an on-line resize of /dev/mapper/vg01_pgdata-lv_pgdata1 to 524288 ( 4k ) blocks. The filesystem on /dev/mapper/vg01_pgdata-lv_pgdata1 is now 524288 blocks long. 2.5 再次查看 1 2 3 4 5 6 7 8 [ root@pgb lvm ] # df -hv Filesystem Size Used Avail Use% Mounted on /dev/hda3 17G 9.8G 5.8G 64% / /dev/hda1 99M 18M 76M 20% /boot tmpfs 217M 0 217M 0% /dev/shm none 217M 104K 217M 1% /var/lib/xenstored /dev/mapper/vg01_pgdata-lv_pgdata1 1.5G 34M 1.4G 3% /database/pgdata1 备注:目录 /database/pgdata1 空间果然变大了。 --- ## Xgboost install by cluster yarn - URL: https://firsh.me/blog/0094.html - Date: 2026-07-02 - Keywords: XGBoost, YARN, 集群安装, 分布式机器学习, yum, Python包, JVM, 环境变量配置, Hadoop集群, 机器学习框架 Xgboost install by cluster yarn yum 安装基础的依赖 yum install gcc-c++ fuse-devel git hadoop-libhdfs-devel 配置环境变量 export MVN_HOME=/opt/soft/apache-maven-3.6.0 export PATH=$MVN_HOME/bin:$PATH export XGB_HOME=/home/download export PATH=$XGB_HOME:$PATH export HDFS_LIB_PATH=${XGB_HOME}/xgboost-packages/libhdfs export LD_LIBRARY_PATH=${XGB_HOME}/xgboost-packages/lib64:$JAVA_HOME/jre/lib/amd64/server:/${XGB_HOME}/xgboost-packages/libhdfs:$LD_LIBRARY_PATH export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=/opt/cloudera/parcels/CDH/lib/hadoop-hdfs export HADOOP_MAPRED_HOME=/opt/cloudera/parcels/CDH/lib/hadoop-yarn export HADOOP_YARN_HOME=$HADOOP_MAPRED_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop xgboost git clone and install mkdir -p xgboost-packages/lib64 cd xgboost-packages git clone --recursive https://github.com/dmlc/xgboost cd xgboost cp make/config.mk ./ vim config.mk add line # HADOOP_HOME = /usr/lib/hadoop mkdir build cd build cmake .. USE_HDFS=ON # 开启HDFS make -j4 install python package on env cd python-package/ && python setup.py install install jvm-package on env cd jvm-packages/ && mvn install:install-file -Dfile=xgboost4j-spark-0.83-jar-with-dependencies.jar -DgroupId=ml.dmlc -DartifactId=xgboost4j-spark -Dversion=0.7 -Dpackaging=jar --- ## 2025年9月11日股市上涨的原因 - URL: https://firsh.me/blog/0096.html - Date: 2026-07-02 - Keywords: 股市上涨, 2025年9月11日, A股, 美股, 股票市场, 市场行情, 股指上涨, 投资, 金融市场, market rally 2025年9月11日股市上涨的原因 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## QwQ.Chat 公益AI 流量记录一下 - URL: https://firsh.me/blog/0097.html - Date: 2026-07-02 - Keywords: QwQ.Chat, 公益AI, AI聊天, 免费AI, 流量统计, 人工智能, 公益项目, AI服务, 用户增长, 运营数据 QwQ.Chat 公益AI 流量记录一下 公益了8个月这个月的流量最大哇 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## AMA LAB 格斗实验室 北京 - URL: https://firsh.me/blog/0098.html - Date: 2026-07-02 - Keywords: AMA LAB, 格斗实验室, 北京, 格斗, 武术, 搏击, MMA, 训练, 健身, 北京格斗 AMA LAB 格斗实验室****北京 ### 那 些 美好的 瞬间 ** Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct ** Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## Nuitka for Python - URL: https://firsh.me/blog/0095.html - Date: 2026-07-02 - Keywords: Nuitka, Python编译器, AOT编译, CPython, libpython, C代码生成, 静态分析, Python打包, Python加速, 扩展模块 Nuitka****for Python Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct # Nuitka 实现原理与功能点(面向开发者) 一句话总结:Nuitka 通过静态分析把 Python 模块转成调用 CPython API(libpython)的 C 源码,并与其自带的 C 运行时代码一起用系统 C 编译器编译成可执行文件/扩展模块,在保证与 CPython 语义兼容的前提下减少解释器循环开销,从而获得加速并便于打包发布。 实现原理(How it works) 源码到 AST:读取你的 Python 源码,建立与 CPython 兼容的语法树表示。 优化/重写:做一系列静态优化(如常量折叠、消除不必要的动态开销、特定语义重写),尽量在保持语义完全一致的情况下移除解释开销。 代码生成:把优化后的内部表示转为 C 源码,并链接 Nuitka 自带的静态 C 运行时代码。 编译与链接:调用系统 C 编译器(GCC/Clang/MSVC),链接到本机的 libpython(即 CPython 运行时)生成目标产物(可执行文件或扩展模块)。 运行时:最终程序在 CPython 运行时环境中执行(通过 libpython),因此对标准库及大多数第三方 C 扩展模块保持高兼容性。 参考: Nuitka User Manual — Nuitka translates the Python modules into a C level program that then uses libpython… Nuitka User Manual(系统需求,C11 或旧版需 C++03 编译器) Nuitka Developer Manual(设计/架构综述) 编译流水线(简版) 解析 Python 源码 → AST 语义重写与静态优化(减少动态查找/函数调用等不必要开销) 生成 C 源码 + 链接 Nuitka 自带运行时代码 使用本机 C 编译器编译并与 libpython 链接 → 产出 .exe / .so/.pyd 教程/背景阅读: Nuitka Tutorial – Creating a Python Exe for Distribution DeepWiki: Nuitka(概述:转成 C,使用 libpython 执行,保持与 CPython 行为一致) 功能点与适用场景 加速运行:通过 AOT 编译和静态优化减少解释器循环与动态分派带来的开销;加速效果取决于代码特征(函数调用密集、属性查找多、纯 Python 热路径往往收益更明显)。 原生产物:输出本机可执行文件或 Python 扩展模块,便于部署与集成。 打包发布: 可打包为独立目录(–standalone)或单文件(–onefile)分发。 兼容标准库与大多数第三方 C 扩展。 兼容 CPython:使用 libpython 执行,语义保持与 CPython 一致,减少“行为差异”的风险。 跨平台与编译器支持:Windows/macOS/Linux;现代 Python 版本需要支持 C11 的 C 编译器(旧 Python 可用 C++03 编译器)。 注意与局限 非 JIT:不改变 GIL 行为;IO 密集型场景加速有限;高度动态特性(如大量 eval/exec )可运行但优化空间有限。 编译成本与体积:构建时间增加;–onefile 初次启动有解包开销;产物体积通常大于纯脚本。 工具链依赖:需要合适的本机编译器与对应的 Python/系统头文件环境。 参考链接(官方/权威优先) Nuitka User Manual(官方) Nuitka User Manual — 系统需求(官方) Nuitka Developer Manual(官方) Nuitka Tutorial – CodersLegacy(教程) DeepWiki: Nuitka(综述/整理) 本次搜索使用的关键词 “Nuitka how it works” “Nuitka implementation principle 原理” “Nuitka libpython CPython API” “Nuitka generates C or C++” “Nuitka developer manual AST optimization code generation C11” Nuitka 的原理是一边做静态分析一边把 Python 代码转译成调用 CPython API(libpython)的 C 源码,连同它自带的运行时代码一起用本地 C 编译器编译成可执行文件/扩展模块,从而在保持与 CPython 语义兼容的前提下减少解释器循环开销、获得加速并便于打包,虽然没有混淆 但是 一般的菜鸡逆向也费劲 。 --- ## FPGA 外挂猖獗笔记 - URL: https://firsh.me/blog/0099.html - Date: 2026-07-02 - Keywords: FPGA, 外挂, 游戏作弊, 硬件外挂, 反作弊, FPGA外挂, 游戏安全, 硬件加速, 作弊检测, 网络游戏安全 FPGA 外挂猖獗笔记 https://github.com/ufrisk/pcileech https://github.com/ufrisk/pcileech-fpga --- ## 屌丝大模型部署方案+1 - URL: https://firsh.me/blog/0100.html - Date: 2026-07-02 - Keywords: V100 SXM2, AOM-SXMV, 大模型部署, GPU集群, PCIe适配, Supermicro, EPYC 7742, 闲鱼淘宝, 低成本AI服务器, 显卡扩展卡 屌丝大模型部署方案+1 SXM2 over PCIe (V100 on AOM-SXMV) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct I can’t take credit for this, but I’m probably one of only a handful of people to do it this way. I’m posting more as an exhibition rather than a “It’s so easy, a caveman could do it” guide. Some of the parts are very hard to get, supply is the limiting factor in recreating this IMO. I just thought some folks might find it interesting/cool. So I saw this idea a couple years ago on STH. The idea was to use an SMX2 GPU daughter board from Supermicro, and plug into a normal computer. The part number is AOM-SXMV, which supports V100 SXM2 GPU modules, which are getting to be VERY cheap. (Note: there also exists a similar board “AOM-SXM2” which only supports P100s, not V100s, be careful about that). The problem with using many SXM2 daughter boards from pretty much every other vendor is that they are hardware locked to their respective platforms and cannot be used on something else. This makes the platforms both old/outdated and overpriced. But the AOM-SXMV is not locked in any way and communicates with its host over normal PCIe. The only “problem” is that the PCIe connector on the board is a proprietary connector. The missing link came when some Chinese vendors started making adapters and PCIe cables to convert this over to normal PCIe. (The board has some Oculink 8i connectors, but GPUs are not visible over those links, I think they’re only used for RDMA). The board takes 4x 8-pin EPS power inputs, NOT VGA/PCIe. I’ll admit that these boards are very hard to find in the western markets, and if you do, they are usually exorbitantly priced. I’m fortunate to have some experience buying and importing from the Chinese market and was able to buy some things from there (Taobao, Xianyu). You’ll need to be fluent in Chinese to negotiate with sellers, as well as having a reshipper agent in China and the ability to pay in RMB/CNY. So the parts list is basically: AOM-SXMV ~$200-$250 USD from Xianyu Custom adapter cables ~$70 USD from Xianyu (Or AOM-SXMV-PIO adapters ~$20, bring your own PCIe extensions) 4x V100 SXM2 16GB ~$175/ea from eBay 4x HP 3U SXM2 heatsinks ~$15/ea from Xianyu, or like 50-100/ea from western markets) 4x VGA to EPS power adapters if you don’t have enough EPS Some kind of fans strapped to the heatsinks So on the very low end of pricing you can get a 4x V100 setup for $1300ish, if you can get the board. But I’ll warn you that a lot of the Chinese vendors are hoarding these boards for selling complete setups at considerable markup. I was able to get my hands on two boards, and bought everything needed to build out and connected them both to the same system (H11DSi-NT, 2x EPYC 7742) for 8x V100. I also bought a custom case ( $190/ea shipped w/ 1400w PSU) from Xianyu. Yes, two cables are connected via x8 links on the H11DSi, but PCIe is not a limit for my use case. The cases are perfect width for server rack, but no rails available, have to sit them on a shelf. Pics: First testing:  https://imgur.com/a/LOyTK92  Final setup:  https://imgur.com/a/mzK3nAb --- ## [NES] 激龟快打忍者神龟格斗版中文 - URL: https://firsh.me/blog/0102.html - Date: 2026-07-02 - Keywords: 忍者神龟, 激龟快打, NES, 红白机, 格斗游戏, 中文汉化, TMNT, FC游戏, 经典游戏, 汉化ROM [NES] 激龟快打忍者神龟格斗版中文 来源 **:** ** http://www.downyi.com/downinfo/174435.html **** Nintendo NES - rzsg3.nes ⏳ Loading... ⛶ Fullscreen 💾 Save 📂 Load 🔄 Reset --> ⬇ ROM 📦 Format: .nes 🎮 System: Nintendo Entertainment System 🏷️ Core: FCEUmm / Nestopia 💡 提示:按 Tab 键打开模拟器菜单。支持手柄控制和键盘映射自定义。 Initializing NES Emulator... ⚡ Turbo Mode 🔊 Volume: 🎮 Default Keyboard Controls WSAD D-Pad U A Button I B Button O Turbo A P Turbo B K Start J Select Tab Menu 💡 支持 USB/蓝牙游戏手柄。可以在菜单中自定义按键映射。 ** --- ## [JAR] Game ForgottenWarrior - URL: https://firsh.me/blog/0103.html - Date: 2026-07-02 - Keywords: ForgottenWarrior, JAR游戏, Java手机游戏, JAR文件, 移动游戏, 复古游戏, 战士游戏, J2ME, 手机游戏, forgotten warrior [JAR] Game ForgottenWarrior NOKIA 📱 ForgottenWarrior.jar Loading... ↻ ⬇ Wait Starting... Initializing... L Q ↑ W R E ← A OK X → D ↓ S 1 Y 2 U 3 I * [ 4 O 5 P 6 H 0 ; 7 J 8 K 9 L # ] * [ 0 ; # ] ⌨️ Keyboard Controls W/A/S/D → 方向键 Q → 左功能键 E → 右功能键 X → 确认键 Y~P,H~L,; → 数字1-9,0 [ ] → * # --> --- ## [TODO] Dos Game 模拟器 - URL: https://firsh.me/blog/0105.html - Date: 2026-07-02 - Keywords: DOS游戏, DOS模拟器, DOS Game, 模拟器, 复古游戏, 老游戏, DOSBox, 游戏模拟, 经典游戏, retro game [ T ODO **] D os** G****ame 模拟器 https://playclassic.games/play-dos-games-online/ https://playclassic.games/games/windows-games/ Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## [Sega MD] 忍者神龟:施莱德的再次复仇 - URL: https://firsh.me/blog/0111.html - Date: 2026-07-02 - Keywords: 忍者神龟, 施莱德的再次复仇, Sega MD, Mega Drive, TMNT, 横版过关, 街机游戏, 动作游戏, 经典游戏, Konami [Sega MD] 忍者神龟:施莱德的再次复仇 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct SEGA MEGA DRIVE tmnt-shredders-rerevenge.md ⏳ Loading ⛶ 💾 📂 🔄 --> ⬇ LOADING... System: 16-BIT Core: Genesis Plus GX Format: .md Region: NTSC/PAL 🎮 Controller Mapping D-Pad WSAD A U B I X O Y P Select J Start K Menu Tab --- ## MongoDB 集群终极方案 - URL: https://firsh.me/blog/0117.html - Date: 2026-07-02 - Keywords: MongoDB集群, MongoDB Sharding, 副本集, ReplicaSet, ConfigServer, mongos路由, 分片集群, NUMA, MongoDB部署, 数据库集群 MongoDB 集群终极方案 查看硬盘分配情况 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [ root@dscn022 mongodb ] # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 278.5G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 224.9G 0 part ├─rhel-root 253:0 0 50G 0 lvm / ├─rhel-swap 253:1 0 4G 0 lvm [ SWAP ] ├─rhel-home 253:2 0 100.9G 0 lvm /home ├─rhel-var 253:3 0 20G 0 lvm /var └─rhel-var_log 253:4 0 50G 0 lvm /var/log sdb 8:16 0 3.7T 0 disk └─sdb1 8:17 0 3.7T 0 part /home/hadmin/logs sdc 8:32 0 3.7T 0 disk └─sdc1 8:33 0 3.7T 0 part sdd 8:48 0 3.7T 0 disk └─sdd1 8:49 0 3.7T 0 part sde 8:64 0 3.7T 0 disk └─sde1 8:65 0 3.7T 0 part sdf 8:80 0 3.7T 0 disk └─sdf1 8:81 0 3.7T 0 part /home/hadmin/data/mongodb/prev sdg 8:96 0 3.7T 0 disk └─sdg1 8:97 0 3.7T 0 part /home/hadmin/data/mongodb/curr sdh 8:112 0 3.7T 0 disk └─sdh1 8:113 0 3.7T 0 part /home/hadmin/data/mongodb/next sdi 8:128 0 3.7T 0 disk └─sdi1 8:129 0 3.7T 0 part sdj 8:144 0 3.7T 0 disk └─sdj1 8:145 0 3.7T 0 part sdk 8:160 0 3.7T 0 disk └─sdk1 8:161 0 3.7T 0 part sdl 8:176 0 3.7T 0 disk └─sdl1 8:177 0 3.7T 0 part sdm 8:192 0 3.7T 0 disk └─sdm1 8:193 0 3.7T 0 part loop0 7:0 0 3.8G 0 loop /mnt 进行配置 ——- —— ——- curr 1 2 prev 5 1 next 2 3 分配mongoDB 目录 1 2 3 mkdir -p /home/hadmin/data/mongodb/prev mkdir -p /home/hadmin/data/mongodb/curr mkdir -p /home/hadmin/data/mongodb/next 进行mount 1 2 3 4 mount /dev/sdf1 /home/hadmin/data/mongodb/prev mount /dev/sdg1 /home/hadmin/data/mongodb/curr mount /dev/sdh1 /home/hadmin/data/mongodb/next 查看硬盘大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ root@dscn022 mongodb ] # df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 50G 5.1G 45G 11% / devtmpfs 126G 0 126G 0% /dev tmpfs 126G 0 126G 0% /dev/shm tmpfs 126G 50M 126G 1% /run tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/sda1 494M 127M 368M 26% /boot /dev/mapper/rhel-var 20G 101M 20G 1% /var /dev/mapper/rhel-home 101G 1.5G 100G 2% /home /dev/mapper/rhel-var_log 50G 58M 50G 1% /var/log /dev/loop0 3.8G 3.8G 0 100% /mnt tmpfs 126G 64K 126G 1% /tmp tmpfs 26G 0 26G 0% /run/user/0 /dev/sdb1 3.6T 89M 3.4T 1% /home/hadmin/logs /dev/sdf1 3.6T 390M 3.4T 1% /home/hadmin/data/mongodb/prev /dev/sdg1 3.6T 390M 3.4T 1% /home/hadmin/data/mongodb/curr /dev/sdh1 3.6T 390M 3.4T 1% /home/hadmin/data/mongodb/next 脚本 (傻瓜模式) 重要 numactl yum install -y numactl 配置Mongodb用到的文件夹都要 mkdir common.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/bin/bash # $1就是shard几 # $2目录,重新规划磁盘后可以修改此处 # $3是关闭位,启动不传,关闭传 --shutdown INDEX = $1 PORT = $(( 27018 + $INDEX )) HOSTNAME = ` cat /etc/hostname ` SHARD = "TOD-Shard- $INDEX " DB_PATH = " /home/hadmin/data/mongodb/" $2 PID_FILE = "/home/hadmin/data/pids/mongodb/ $SHARD .pid" LOG_FILE = "/home/hadmin/data/logs/mongodb/ $SHARD .log" numactl --interleave = all /home/hadmin/mongodb/bin/mongod --logpath $LOG_FILE --logappend --logRotate rename --timeStampFormat ctime --fork --pidfilepath $PID_FILE --port $PORT --bind_ip $HOSTNAME --dbpath $DB_PATH --journalCommitInterval 100 --storageEngine wiredTiger --wiredTigerCacheSizeGB 4 --replSet $SHARD --enableMajorityReadConcern --shardsvr --oplogSize 10240 $3 cfgsvr.start 1 2 3 4 5 #!/bin/bash numactl --interleave = all /home/hadmin/mongodb/bin/mongod -f /home/hadmin/mongodb/conf/configserver.conf route 1 2 3 4 5 #!/bin/bash /home/hadmin/mongodb/bin/mongos -f /home/hadmin/mongodb/conf/router.conf shard_curr.start 1 2 3 4 5 #!/bin/bash /home/hadmin/mongodb/sbin/common.sh 1 curr shard_next.start 1 2 3 4 5 #!/bin/bash /home/hadmin/mongodb/sbin/common.sh 2 next shard_prev.start 1 2 3 4 5 #!/bin/bash /home/hadmin/mongodb/sbin/common.sh 5 prev initConfig.sh 初始化副本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/bash /home/hadmin/mongodb/bin/mongo dscn022:27018 < 如果这个值不为 0 , 则说明有丢包现象 9.网卡的工作状态 ifconfig -a 如果网卡中状态无为down状态 ethtool eth1 ethtool -i eth1 iftop -B -n -N -p fftop -i eth1 -B -n -N -p 查看网卡速度 10.CPU是否存在瓶颈 .CPU IDel大于90%则OK top -i -n 1|grep id|awk ‚{print $8}' .CPU load average 正常值:< CPU个数 * 核数 *0.7 top -i -n 1|grep load|awk ‚{print $13}' 一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的, 如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。 实际上这个进程数就是每个CPU的负载. 11.检查内存是否充足 内存有足够空间 free -m 没有发生换页 vmstat 1 6 如果 si 和so 的值总是不为零,则说明,swap 有很高的换页率 如果 bi 和 bo 的值很高说明系统在进行大量的IO读些操作 12.检查IO 查看读写速度 iostat -d -x -k 1 5 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util xvdb 0.00 23.00 0.00 47.00 0.00 280.00 11.91 0.54 11.55 0.49 2.30 xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 xvdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 xvdd 0.00 2.00 0.00 388.00 0.00 1560.00 8.04 1.26 3.26 0.34 13.10 rrqm/s 每秒读请求合并的次数 wrqm/s 每秒写请求合并的次数 r/s 每秒读请求次数,这个值通常会跟avgrq-sz一起观察,avgrq-sz大则有可能r/s比较小 w/s 每秒写请求次数,这个值通常会跟avgrq-sz一起观察,avgrq-sz大则有可能w/s比较小 rkB/s 这个指标跟vmstat的bi值通常应该是很接近的 wkB/s 这个指标跟vmstat的bo值通常应该是很接近的 avgrq-sz 每个请求平均大小,单位是扇区数,一般在200~400之间算是正常和理想的状态,如果这个值比较小,比方说只在100左右,说明太多的IO请求没有被合并,或者大的IO请求被“打散”,在写操作时,过多小的请求会造成磁盘磁头的频繁移动,降低IO性能。 avgqu-sz 平均请求队列长度,这个值在正常的系统中不应超过113太多,如果在200左右,甚至上千那说明发生了IO拥塞,而系统还在向IO请求队列中放请求(有一个例外是在执行sync,fsync操作时,该值到达最大值8192是正常的) await 单位是毫秒,不应超过两位数,几百甚至上千都是不可接受的。 svctm 平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio) %util 尽可能的让该值达到100%,否则说明IO能力没有完全被利用。 如果svctm比较接近await,说明I/O几乎没有等待时间; 如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢。 磁盘平均队列长度 avgqu-sz 大于 3 就需要关注, iostat -xt 1 查看磁盘统计信息 cat /proc/diskstats 主设备号 次 设备名称 第1个域 202 32 xvdc 4959692 347 411803562 33790444 8109304 76242434 674813944 1340903295 0 14873863 1374687623 202 33 xvdc1 4959649 347 411803218 33790119 8109304 76242434 674813944 1340903295 0 14873753 1374687299 202 48 xvdd 222375610 17443 16714996538 923047010 5307720710 1063308104 50968261080 2447567938 0 1816063211 3368385818 202 49 xvdd1 222375567 17443 16714996194 923046942 5307720710 1063308104 50968261080 2447567938 0 1816063228 3368386366 第1个域:读完成次数 —– 读磁盘的次数,成功完成读的总次数。 (number of issued reads. This is the total number of reads completed successfully.) 第2个域:合并读完成次数, 第6个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。 (number of reads merged) 第3个域:读扇区的次数,成功读过的扇区总次数。 (number of sectors read. This is the total number of sectors read successfully.) 第4个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。 (number of milliseconds spent reading. This is the total number of milliseconds spent by all reads (as measured from __make_request() to end_that_request_last()).) 第5个域:写完成次数 —-写完成的次数,成功写完成的总次数。 (number of writes completed. This is the total number of writes completed successfully.) 第6个域:合并写完成次数 —–合并写次数。 (number of writes merged Reads and writes which are adjacent to each other may be merged for efficiency. Thus two 4K reads may become one 8K read before it is ultimately handed to the disk, and so it will be counted (and queued) as only one I/O. This field lets you know how often this was done.) 第7个域:写扇区次数 —- 写扇区的次数,成功写扇区总次数。 (number of sectors written. This is the total number of sectors written successfully.) 第8个域:写操作花费的毫秒数 — 写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。 (number of milliseconds spent writing This is the total number of milliseconds spent by all writes (as measured from __make_request() to end_that_request_last()).) 第9个域:正在处理的输入/输出请求数 – -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小。 (number of I/Os currently in progress. The only field that should go to zero. Incremented as requests are given to appropriate request_queue_t and decremented as they finish.) 第10个域:输入/输出操作花费的毫秒数 —-花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。 (number of milliseconds spent doing I/Os. This field is increased so long as field 9 is nonzero.) 第11个域:输入/输出操作花费的加权毫秒数 —– 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。 (number of milliseconds spent doing I/Os. This field is incremented at each I/O start, I/O completion, I/O merge, or read of these stats by the number of I/Os in progress (field 9) times the number of milliseconds spent doing I/O since the last update of this field. This can provide an easy measure of both I/O completion time and the backlog that may be accumulating.) --- ## 利用Whois传输小文件 - URL: https://firsh.me/blog/0119.html - Date: 2026-07-02 - Keywords: Whois, 文件传输, Whois协议, 数据隐蔽传输, 端口43, covert channel, 小文件传输, 网络协议, DNS替代传输, 信息安全 利用Whois传输小文件 1 2 3 4 传输机: root@john:~# whois -h 127.0.0.1 -p 4444 ` cat /etc/passwd | base64 ` 接受机: root@john:/tmp# nc -l -v -p 4444 | sed "s/ //g" | base64 -d --- ## 一次磁盘挂载 - URL: https://firsh.me/blog/0120.html - Date: 2026-07-02 - Keywords: 磁盘挂载, LVM, Linux磁盘管理, CentOS 7, 数据盘, parted分区, 逻辑卷管理, 扩容, 服务器运维, Shell脚本 一次磁盘挂载 服务器10台每台16块盘 其中两块系统盘,剩下的皆为数据盘,因为涉及到扩容,所以有一个大目录采用lvm挂载。 一次磁盘挂载(Centos7) 1 2 3 4 5 6 7 8 9 #!/usr/bin/env bash ################## base ############### bashPath = $( cd ` dirname $0 ` ; pwd ) ${ bashPath } /lvms.sh sleep 2 ${ bashPath } /parted.sh lvms.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #!/bin/bash yum install -y lvm2 ## disk--->pv--->vg--->lv disk_index = 14 # 第14块盘 partition = /data # 定义最终挂载的名称 j = ` echo $disk_index | awk '{printf "%c",97+$disk_index}' ` ## 直接disk fdisk /dev/sd $j << FORMAT d w FORMAT parted /dev/sd $j <>/etc/fstab #写入分区表 sleep 1s mount -a parted.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #!/bin/bash PATH = /bin:/sbin:/usr/bin:/usr/sbin export PATH i = 1 while [ $i -lt 14 ] #硬盘数量,除系统盘之外是13块 do j = ` echo $i | awk '{printf "%c",97+$i}' ` #系统盘是sda1,如果是其它的需要修改脚本97=a unmount -v /dev/sd $j parted /dev/sd $j <>/etc/fstab #写入分区表 i = $(( $i + 1 )) done echo -e "\033[32m *****Formating and Mounting have finished wait 5s **** \033[0m" chmod -R 777 /data/* sleep 5 mount -a --- ## python 监控binlog实现hue一个小插件 - URL: https://firsh.me/blog/0121.html - Date: 2026-07-02 - Keywords: Python, binlog, MySQL binlog, Hue插件, 数据库监控, binlog监控, pymysqlreplication, 实时数据同步, MySQL, 插件开发 python 监控binlog实现hue一个小插件 代码Python可以使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 from pymysqlreplication import BinLogStreamReader from pymysqlreplication.row_event import ( DeleteRowsEvent , UpdateRowsEvent , WriteRowsEvent , ) import threading import paramiko import logging.handlers LOG_FILE = r 'hue_auto_create_user.log' handler = logging . handlers . RotatingFileHandler ( LOG_FILE , maxBytes = 1024 * 1024 , backupCount = 5 , encoding = 'utf-8' ) # 实例化handler fmt = ' %(asctime)s - %(levelname)s - %(message)s ' formatter = logging . Formatter ( fmt ) # 实例化formatter handler . setFormatter ( formatter ) # 为handler添加formatter logger = logging . getLogger ( 'hue_auto_create_user' ) # 获取名为hue_auto_create_user的logger logger . addHandler ( handler ) # 为logger添加handler logger . setLevel ( logging . DEBUG ) MYSQL_SETTINGS = { "host" : "cdh-m1.temp.online" , "port" : 3306 , "user" : "root" , "passwd" : "12345" } HOST_ARRAY = [ '10.50.40.1' , '10.50.40.2' , '10.50.40.3' , '10.50.40.4' , '10.50.40.5' , '10.50.40.6' , '10.50.40.7' , '10.50.40.8' , '10.50.40.9' , '10.50.40.10' , ] def ssh_host_createUserAndGroup ( ip , username , passwd , cmd ): try : # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数 # pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa') ssh = paramiko . SSHClient () ssh . set_missing_host_key_policy ( paramiko . AutoAddPolicy ()) ssh . connect ( ip , 22 , username , passwd , timeout = 5 ) for m in cmd : stdin , stdout , stderr = ssh . exec_command ( m ) out = stdout . readlines () # 屏幕输出 for o in out : print ( o ) logger . info ( u "ssh 远程执行 {} Success" . format ( ip )) ssh . close () except : logger . error ( u "ssh 远程执行 {} Error" . format ( ip )) def startTask ( user ): cmd = [ 'useradd {} ' . format ( user ), 'groupadd {} ' . format ( user ), 'usermod -a -G {} {} ' . format ( user , user )] # 你要执行的命令列表 username = "root" # 用户名 passwd = "123456" # 密码 for ip in HOST_ARRAY : a = threading . Thread ( target = ssh_host_createUserAndGroup , args = ( ip , username , passwd , cmd )) logger . info ( u "Host {} 执行命令 {} " . format ( ip , cmd )) a . start () def updateMysql ( uid , userName ): import pymysql cnx = pymysql . connect ( user = 'root' , password = '123456' , host = 'cdh-m1.temop.online' , database = 'hue' , port = 3306 , charset = 'utf8' ) cursor = cnx . cursor () try : cursor . execute ( "update auth_user set is_superuser=0 where id= {} " . format ( uid )) #INSERT IGNORE INTO cursor . execute ( "insert INTO hue.auth_group ( id, name) SELECT (auth_group.id+1), ' {} ' FROM hue.auth_group order by id DESC limit 1" . format ( userName )) except Exception : logger . error ( "已经存在 Group {} " . format ( userName )) print ( "已经存在 Group {} " . format ( userName )) cursor . execute ( "insert INTO hue.auth_user_groups(user_id,group_id) SELECT {} ,auth_group.id FROM hue.auth_group where hue.auth_group.name=' {} '" . format ( uid , userName )) cnx . commit () cnx . close () def main (): stream = BinLogStreamReader ( connection_settings = MYSQL_SETTINGS , server_id = 100 , blocking = True , resume_stream = True , only_events = [ DeleteRowsEvent , WriteRowsEvent , UpdateRowsEvent ]) for binlogevent in stream : e_start_pos , last_pos = stream . log_pos , stream . log_pos for row in binlogevent . rows : event = { "schema" : binlogevent . schema , "table" : binlogevent . table , "type" : type ( binlogevent ) . __name__ , "row" : row }; if binlogevent . table == "auth_user" and type ( binlogevent ) . __name__ == "DeleteRowsEvent" : logger . info ( u "DELETE User " + row [ 'values' ][ 'username' ]) print ( u "DELETE User " + row [ 'values' ][ 'username' ]) if binlogevent . table == "auth_user" and type ( binlogevent ) . __name__ == "WriteRowsEvent" : userName = row [ 'values' ][ 'username' ]; uid = row [ 'values' ][ 'id' ]; print ( u "INSERT User {} Uid {} " . format ( row [ 'values' ][ 'username' ], uid )) startTask ( userName ) logger . info ( u "[INFO] 添加用户到集群所有节点 -> {} " . format ( userName ) + " \n " ) updateMysql ( uid , userName ) logger . info ( u "[INFO] 去掉Hue SuperUser {} Uid= {} " . format ( userName , uid ) + " \n " ) if __name__ == "__main__" : main () --- ## Java实现DirectIo文件方式操作文件系统 - URL: https://firsh.me/blog/0122.html - Date: 2026-07-02 - Keywords: Java DirectIO, Direct I/O, JNA, Linux系统调用, 文件系统, 高并发, 内存优化, APIServer, Java文件操作, bypass page cache Java实现DirectIo文件方式操作文件系统 场景 APIServer接口要求较高的并发,而且还要将数据文件存储到本地备份,在低消耗内存CPU情况下提高程序的运行速度以及稳定性。 相关文章 http://man7.org/linux/man-pages/man2/open.2.html 实现思路 调用Linux本身的接口 Java采用JNA实现 具体方法调用 1 2 3 4 5 private native int open ( String pathname , int flags , int mode ); private native int fcntl ( int id , int cmd , int flags ); private native int write ( int fd , Pointer buf , int count ); private native int posix_memalign ( PointerByReference memptr , int alignment , int size ); private native int close ( int fd ); 核心代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 package com.huadi.utils.directio.io ; import java.io.IOException ; import java.io.OutputStream ; import com.sun.jna.Native ; import com.sun.jna.Pointer ; import com.sun.jna.ptr.PointerByReference ; public class JNAOutputStream extends OutputStream { //just a couple of them are used, here for eventual future uses protected static final int O_RDONLY = 00 ; protected static final int O_WRONLY = 01 ; protected static final int O_RDWR = 02 ; protected static final int O_CREAT = 0100 ; protected static final int O_EXCL = 0200 ; protected static final int O_NOCTTY = 0400 ; protected static final int O_TRUNC = 01000 ; protected static final int O_APPEND = 02000 ; protected static final int O_NONBLOCK = 04000 ; protected static final int O_NDELAY = O_NONBLOCK ; protected static final int O_SYNC = 010000 ; protected static final int O_ASYNC = 020000 ; protected static final int O_DIRECT = 040000 ; protected static final int O_DIRECTORY = 0200000 ; protected static final int O_NOFOLLOW = 0400000 ; protected static final int O_NOATIME = 01000000 ; protected static final int O_CLOEXEC = 02000000 ; //fcntl has also other flags, not presented here protected static final int F_SETFL = 4 ; public static final int BLOCK_SIZE = 512 ; static { Native . register ( "c" ); } private native int open ( String pathname , int flags , int mode ); private native int fcntl ( int id , int cmd , int flags ); private native int write ( int fd , Pointer buf , int count ); private native int posix_memalign ( PointerByReference memptr , int alignment , int size ); private native int close ( int fd ); private int fd ; private Pointer bufPnt ; private byte [] buffer ; private int pos ; public JNAOutputStream ( String pathname , boolean direct ) throws IOException { if (! direct ) { fd = open ( pathname , O_CREAT | O_TRUNC | O_WRONLY , 00755 ); } else { // fd = open(pathname, O_CREAT|O_TRUNC|O_WRONLY|O_DIRECT, 00755); fd = open ( pathname , O_CREAT | O_APPEND | O_WRONLY | O_DIRECT , 00755 ); } PointerByReference pntByRef = new PointerByReference (); posix_memalign ( pntByRef , BLOCK_SIZE , BLOCK_SIZE ); bufPnt = pntByRef . getValue (); buffer = new byte [ BLOCK_SIZE ]; } @Override public void close () throws IOException { if ( pos % BLOCK_SIZE != 0 ) { if ( fcntl ( fd , F_SETFL , ~ O_DIRECT ) < 0 ) { throw new IOException ( "Impossible to modify fd on close()" ); } bufPnt . write ( 0 , buffer , 0 , pos ); int rtn = write ( fd , bufPnt , pos ); if ( rtn != pos ) { throw new IOException ( rtn + "/" + pos + " bytes written to disk on close()" ); } } if ( close ( fd )< 0 ) { throw new IOException ( "Problems occured while doing close()" ); } } @Override public void write ( int b ) throws IOException { if ( pos < BLOCK_SIZE ) { buffer [ pos ++] = ( byte ) b ; } if ( pos == BLOCK_SIZE ) { bufPnt . write ( 0 , buffer , 0 , BLOCK_SIZE ); int rtn = write ( fd , bufPnt , BLOCK_SIZE ); if ( rtn != BLOCK_SIZE ) { throw new IOException ( rtn + "/" + BLOCK_SIZE + " bytes written to disk" ); } pos = 0 ; } } } 使用方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 package com.huadi.utils.directio.io ; import java.io.* ; import java.util.Random ; public class Run { /** * @ower 张建新 * @param args * @throws IOException */ private static final int BLOCK_SIZE = 4 * 1024 ; public static void main ( String [] args ) throws IOException { Random rand = new Random ( System . nanoTime ()); int runs = Integer . parseInt ( args [ 0 ]); int integers = Integer . parseInt ( args [ 1 ]); long [] sio = new long [ 2 ]; long [] jnaio = new long [ 2 ]; long [] djnaio = new long [ 2 ]; int [] data = new int [ integers ]; for ( int i = 0 ; i < integers ; i ++) { data [ i ] = rand . nextInt (); } for ( int i = 0 ; i < runs ; i ++) { runStd ( data , sio ); runJNA ( data , jnaio , false ); runJNA ( data , djnaio , true ); } System . out . println ( "JNA I/O (ns): " + jnaio [ 1 ]/( double ) runs + "/" + jnaio [ 0 ]/( double ) runs ); System . out . println ( "O_DIRECT JNA I/O (ns): " + djnaio [ 1 ]/( double ) runs + "/" + djnaio [ 0 ]/( double ) runs ); System . out . println ( "Standard I/O (ns): " + sio [ 1 ]/( double ) runs + "/" + sio [ 0 ]/( double ) runs ); } public static void writeLineToFile2 ( byte [] data , String filename ) throws IOException { DataOutputStream out = new DataOutputStream ( new JNAOutputStream ( filename , true )); write ( out , data ); out . close (); } public static void runStd ( int data [], long time []) throws IOException { String filename = "/tmp/" + System . nanoTime ()+ ".bin" ; DataOutputStream out = new DataOutputStream ( new BufferedOutputStream ( new FileOutputStream ( filename ), 512 )); time [ 0 ] += write ( out , data ); out . close (); DataInputStream in = new DataInputStream ( new BufferedInputStream ( new FileInputStream ( filename ), 512 )); time [ 1 ] += read ( in , data ); in . close (); } public static void runJNA ( int data [], long time [], boolean o_direct ) throws IOException { String filename = "/tmp/" + System . nanoTime ()+ ".bin" ; DataOutputStream out = new DataOutputStream ( new JNAOutputStream ( filename , o_direct )); time [ 0 ] += write ( out , data ); out . close (); DataInputStream in = new DataInputStream ( new JNAInputStream ( filename , o_direct )); time [ 1 ] += read ( in , data ); in . close (); } public static long write ( DataOutputStream out , int [] data ) throws IOException { long t = System . nanoTime (); for ( int i = 0 ; i < data . length ; i ++ ) { out . writeInt ( data [ i ]); } out . flush (); return System . nanoTime () - t ; } public static long write ( DataOutputStream out , byte [] data ) throws IOException { long t = System . nanoTime (); for ( int i = 0 ; i < data . length ; i ++ ) { out . write ( data [ i ]); } out . flush (); return System . nanoTime () - t ; } public static long read ( DataInputStream in , int [] data ) throws IOException { long t = System . nanoTime (); for ( int i = 0 ; i < data . length ; i ++) { if ( data [ i ] != in . readInt ()) { throw new IOExceptio… --- ## 【OBS插件屏蔽谩骂等关键字】 obs-cleanstream 中文使用教程 - URL: https://firsh.me/blog/0126.html - Date: 2026-07-02 - Keywords: obs-cleanstream, OBS插件, 屏蔽关键字, 直播过滤, Whisper模型, ggml, CUDA, 语音识别, beep消音, 中文教程 **【** OBS插件屏蔽谩骂等关键字】 obs-cleanstream 中文使用教程 本教程的所有文件内容: 通过百度网盘分享的文件: obs 链接: https://pan.baidu.com/s/1BjKDdDiYcTsBL3NC0ATYsA?pwd=carg 复制这段内容打开「百度网盘 APP 即可获取」 文件介绍 CPU就是使用CPU进行计算并且处理模型检测内容(i7,i9可以使用这个具体看游戏,比如CSGO就推荐使用CUDA而不是CPU) Cuda 就是使用GPU进行计算并且处理模型检测内容(RTX30系列推荐用这个大约会使用800MB显存) x-ggml-model.zh.bin 中文语言TTS模型 Obs-cleanstream 插件(CPU,CUDA) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 安装好obs后的调整 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 进行麦克风配置(防止自己骂人)点击麦克风或桌面音频标记的红框 点击滤镜(英文版Filter) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 点击加号进行添加红框标记的过滤器 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 最重要的一个步骤,添加模型将网盘内的(ggml-model-whisper-medium-q5_0_zh.bin,也可以使用x或者k任意一个将名字改为ggml-model-whisper-medium-q5_0.bin) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 复制到指定位置: C:\Users\用户名\AppData\Roaming\obs-studio\plugin_config\obs-cleanstream\models 在当前文件夹下创建一个子文件夹(ggml-model-whisper-medium-q5_0)将bin文件放进去. 样例 C:\Users\administrator\AppData\Roaming\obs-studio\plugin_config\obs-cleanstream\models 如果没有这个目录请添加完插件,直接重启obs(管理员模式) C:\Users\用户名\AppData\Roaming\obs-studio\plugin_config\obs-cleanstream\models\ggml-model-whisper-medium-q5_0\ ggml-model-whisper-medium-q5_0.bin 最后应该如下图所示: Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 然后点击插件就能在右侧看到以下内容,如果不一致按照我的选择即可,(这样就不用在联网huggingface去下载模型了)       下图的第一个红框内你需要按照原来的格式添加中文的关键字,保证格式即可,数量越少检测速度越快, 建议:       两个字,三个字,为一组 格式如下: (关键字A)|(关键字B)|(xxxx)|(xxxx)|(xxxx) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 设置完成后点击关闭即可。 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 打开压缩文件 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 直接将文件(data-obs-plugins)拖入到obs-studio目录即可 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 右键属性 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 按照这个操作 点击红色框的位置进行跳转文件夹 将obs-cleanstream文件直接粘贴进来 打开obs 开始本地测试 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 选择监听测试(到这里你可以口吐莲花开始喷了,他会在300ms内检测到并且播放beep音效) 教程内容全部免费,不要相信任何花钱安装的教程,请严格按照教程去操作,注意带颜色的文字。 教程内容全部免费,不要相信任何花钱安装的教程,请严格按照教程去操作,注意带颜色的文字。 教程内容全部免费,不要相信任何花钱安装的教程,请严格按照教程去操作,注意带颜色的文字。 --- ## Supermini CC Tools - URL: https://firsh.me/blog/0087.html - Date: 2026-07-02 - Keywords: Supermini, CC Tools, 破解工具, 论坛资源, Supermini CC, 激活工具, CC破解, 软件工具, Adobe CC, 序列号工具 Supermini CC Tools 论坛偷的 🐍 ChiHULK.py Python file Download Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 解决openvpn的CRL has expired笔记 - URL: https://firsh.me/blog/0131.html - Date: 2026-07-02 - Keywords: OpenVPN, CRL has expired, 证书撤销列表, CRL过期, OpenWrt, VPN证书, TLS证书, 证书续期, easy-rsa, VPN故障排查 解决openvpn的CRL has expired笔记 我的openvpn 部署在内蒙古的openwrt上今天突然无法连接了 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 根据log发现是CRL证书过期了。 1 2 3 4 5 6 7 8 9 10 11 root@BleachWrt:/etc/openvpn# cd /etc/easy-rsa/ root@BleachWrt:/etc/easy-rsa# ls easyrsa openssl-1.0.0.cnf openssl-easyrsa.cnf ta.key x509-types keys openssl-1.0.cnf pki vars root@BleachWrt:/etc/easy-rsa# pwd /etc/easy-rsa root@BleachWrt:/etc/easy-rsa# EASYRSA_CRL_DAYS = 3650 ./easyrsa gen-crl Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## RAID5 DELL R730XD 重建 - URL: https://firsh.me/blog/0133.html - Date: 2026-07-02 - Keywords: RAID5重建, Dell PowerEdge R730xd, PERC H730, Auto Rebuild, Hot Spare热备, perccli, iDRAC8, Foreign Config, Patrol Read, 企业级存储运维 RAID5 DELL R730XD 重建 Dell PowerEdge R730xd RAID5 磁盘自动重建实践与运维手册 适用场景:Dell PowerEdge R730xd + PERC H730 / H730P / H730 Mini 控制器(同代 PERC 系列原理基本一致),RAID5 阵列使用在线热插拔(HotSwap)SAS/SATA 企业级硬盘。 目标:梳理 RAID5 自动重建(Auto Rebuild)触发条件、操作步骤、监控手段、性能影响、风险控制与故障排查。 1. 背景概述 RAID5 通过条带化(Striping)+ 分布式奇偶校验(Parity)实现: 容量利用率: (N - 1) 块盘 容错能力:允许 1 块物理磁盘故障 特点:重建期间存在“第二块盘出错即全阵列风险” 适用:以读多写少、对成本敏感的中容量业务(文件服务、归档、日志等) R730xd 多达 24 x 2.5" 或 12 x 3.5"(或混合)前置盘位 + 侧/后置,可满足高密度存储。PERC 控制器固件默认启用自动重建功能(Auto Rebuild = Enabled)。 2. 自动重建(Auto Rebuild)触发条件 控制器在检测到 RAID5 某成员离线(Failed / Offline)后,出现以下任一条件会自动开始 Rebuild: 存在已绑定的 Dedicated Hot Spare(专用热备)。 存在容量/类型匹配的 Global Hot Spare(全局热备),并符合替换策略。 管理员物理热插拔并插入一块: 状态为“Unconfigured Good”(UGood)的新硬盘; 容量 ≥ 原丢失成员,接口兼容(SAS ↔ SAS,SATA ↔ SATA,或按控制器兼容矩阵); 未携带冲突的 Foreign Config(外来阵列元数据)。 被插入的硬盘含有与丢失成员匹配的 Foreign Config,且被“Import”(适用于同位置快速更换,或控制器曾掉电后再上线)。 若新盘为 “Foreign” 状态而未 Import,则不会自动重建,需管理员处理。 3. 核心概念梳理 名称 说明 UGood Unconfigured Good,新盘可被加入阵列或设为热备 Foreign Config 盘上残留的 RAID 元数据(来自其他/旧控制器或阵列),需 Import 或 Clear Rebuild 控制器根据奇偶校验数据重构缺失磁盘数据 Consistency Check (CC) 校验并修正条带奇偶一致性,建议定期执行 Predictive Failure 预测性故障(S.M.A.R.T / 媒体错误累积),需预防性更换 Patrol Read 后台巡检,提前发现并重映射坏扇区,降低重建期二次出错风险 4. 操作工具 常用管理途径: iDRAC8 Web 界面(Storage → Virtual Disks / Physical Disks) RACADM 命令行(远程 out-of-band) OMSA( omreport / omconfig ) perccli (或同代 storcli 工具)→ 推荐自动化脚本使用 系统日志( /var/log/messages 、 dmesg 仅在 HBA 直通或 OS 层能看到部分信息) 以下示例以 perccli 为主。 5. 常用命令速查(perccli) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # 控制器概览 perccli /c0 show # 虚拟磁盘 (VD) 列表与状态 perccli /c0 /vall show # 指定虚拟磁盘详细 perccli /c0 /v0 show all # 物理磁盘 (PD) 概览 perccli /c0 /eall /sall show # 查看重建进度 perccli /c0 /v0 show rebuild # 或 perccli /c0 /v0 show prog # 设置全局热备(示例:机箱号 e252 槽位 s7) perccli /c0 /e252 /s7 add hotsparedrive # 设置专用热备给虚拟磁盘 0 perccli /c0 /e252 /s7 add hotsparedrive = vd:0 # 清除 Foreign Config(如果误插旧盘且不想导入) perccli /c0 /fall delete # 导入所有 Foreign(确认来源正确且希望自动加入) perccli /c0 /fall import # 标记一块盘 Offline(用于演练) perccli /c0 /e252 /s3 set offline # 模拟 Fail perccli /c0 /e252 /s3 set failed # 手动用一块 UGood 盘替换(强制加入重建) perccli /c0 /v0 add drives = 252:7 # 启用 / 查看自动重建策略 perccli /c0 show | grep -i "Auto Rebuild" 6. 故障到自动重建流程示例 原阵列:RAID5 由 6 块盘组成(VD0)。 其中一块盘出现 Predictive Failure(SMART 媒体错误计数攀升)。 管理员预防性 Offline 该盘: perccli /c0 /e252 /s3 set offline 确认 VD 状态为 Degraded(降级): perccli /c0 /v0 show 拔出故障盘 → 插入一块新盘(或已准备的热备自动接管)。 控制器识别新盘为 UGood → 自动开始 Rebuild(或热备即刻介入)。 期间可监控进度: perccli /c0 /v0 show rebuild Rebuild 完成后 VD 状态回到 Optimal。 建议执行一次 Consistency Check(低峰时段): perccli /c0 /v0 start cc 7. Foreign Config 处理策略 场景 盘状态 建议操作 新出厂空盘 UGood 直接自动重建 拔旧盘立刻插回同槽 Foreign Import(保留原元数据) 来自其他服务器旧盘 Foreign 通常 Clear,避免污染现有阵列 误操作清空或控制器更换 Foreign 按序 Import(需核对正确性) 命令: 1 2 3 4 5 6 7 8 # 查看 Foreign perccli /c0 /fall show # 导入 perccli /c0 /fall import # 清除 perccli /c0 /fall delete 8. 重建时间评估 影响因素: 磁盘容量(越大时间越长) 后台 I/O 负载(业务写入拖慢重建) 磁盘类型:SAS 10K、SATA 7.2K、SSD 控制器缓存 & 电池(BBU / CVM)状态 Stripe Size 与并行度 是否启用 Patrol Read/Consistency Check(同时间会竞争 I/O) 粗略估算公式(经验值): 重建时长(小时) ≈ 磁盘容量(GB) / (有效重建速率(MB/s) / 3600) 例如:4TB (≈4000GB) SATA 7.2K,重建速率 ~80 MB/s 4000 *1024 / 80 / 3600 ≈ 14 小时 实际可能 10–24 小时(视负载波动)。 建议:重建期间尽量降低大量随机写。 9. 性能与风险控制 阶段 风险 缓解措施 预测性故障阶段 第二块潜在介质错误导致不可恢复 监控 SMART & Media Error,提前更换 重建中 URE(不可恢复读错误)触发阵列失效 使用企业级盘 + 启用 Patrol Read 重建拖慢业务 I/O 饱和 低峰执行,或临时调整 QoS / 限流 长时间不做 Consistency Check 隐性奇偶不一致积累 定期(月度/季度)执行 CC 固件 Bug 重建异常终止 保持 PERC & iDRAC 固件更新 Patrol Read: 1 2 3 4 5 6 # 查看 perccli /c0 show | grep -i "Patrol" # 启动(手动) perccli /c0 start patrolread # 暂停 perccli /c0 stop patrolread 10. 监控与告警 iDRAC Web & Email/SNMP 告警(Storage Events) RACADM: 1 2 3 racadm storage get vdisks racadm storage get pdisks controller = RAID.Integrated.1-1 racadm getsel # 查看系统事件日志 OMSA: 1 2 omreport storage vdisk omreport storage pdisk controller = 0 日志自动采集:将 perccli 输出整合进 Prometheus Exporter(自写脚本定期解析),对关键状态(Degraded/Rebuild/Failed)发出告警。 关键字段关注: Media Error Count Predictive Failure Count Rebuild Progress (%) PD State:Online / Rebuild / Failed / Foreign / Hotspare 11. 预防性策略 & 最佳实践 项目 建议 热备策略 至少 1 块 Global Hot Spare,容量足以替代最大单盘 盘模型统一 固件/转速/容量尽量一致,避免性能抖动 固件升级 控制器 & 硬盘固件(Dell 支持站点) 监控阈值 Media Error > 0 且持续增长 → 申请更换 备份 RAID ≠ 备份,重建前确保最近一次数据可恢复 更换操作 先 Offline 再拔盘(除非盘已 Failed) 重建窗口 低峰操作,并预估时长 巡检 月度:omreport / perccli 汇总;季度:Consistency Check 文档化 记录阵列拓扑(槽位 ↔ 逻辑成员映射) 12. 常见问题 FAQ Q: 新盘插入为什么不自动重建? A: 可能是新盘带 Foreign Config 未处理 / 盘容量小于成员 / 状态非 UGood / 控制器自动重建被禁用。 Q: 重建进度长时间不增长? A: 检查 I/O 负载、后台 Patrol Read 是否同时运行、是否存在介质错误重试;必要时暂停大批量写。 Q: 如何判断盘需预换? A: Media Error 或 Predictive Failure Count 增长;iDRAC 变黄告警; omreport storage pdisk 显示 SMART 异常。 Q: RAID5 是否依旧推荐? A: 对于大容量 SATA(>8TB)和高恢复时间场景不再推荐,RAID6 / RAID10 或对象存储冗余更稳。R730xd 使用 2~4TB SAS 时尚可。 Q: Rebuild 时能否重启服务器? A: 不建议(除非紧急),重启会中断并在恢复后续建(状态保存),但增加风险window。 13. 故障排查矩阵(摘选) 现象 排查顺序 处理 VD 一直 Degraded 确认缺失槽位 → 新盘是否识别 → Foreign 状态? Import / Clear 后重新加入 Rebuild 卡住 查看 show prog → 查 PD 错误计数 → 控制器日志 备份 → 更换存在读错误的盘 新盘被标记 Failed 兼容性 / 固件 / 伪劣盘 换同型号认证盘 Import 后阵列丢失 可能顺序错/不匹配 立即停止写入,联系高级数据恢复 热备未介入 热备未匹配类型/容量 / 指定为专用但不属该 VD 调整为 Global 或更换更大盘 14. 演练建议(非生产) 选一测试阵列(有备份/无生产数据)。 标记其中一块为 Offline: set offline 。 拔盘 → 插入另一空盘。观察自动重建。 记录:启动时间、完成时间、平均速率。 验证:完成后读写一致性(md5sum 样本文件比对)。 15. 安全与合规提示 在生产环境操作前务必:备份校验 → 变更审批 → 维护窗口。 不要在重建期间同时扩容、迁移或执行高负载写入测试。 保留关键操作命令与输出日志用于审计。 16. 参考(可搜索关键字) Dell PERC H730/H730P User Guide Dell PowerEdge RAID Controller (PERC) CLI Guide (perccli / storcli) Dell iDRAC8 RACADM Command Line Reference Storage Advisory: Patrol Read / Consistency Check Best Practices 17. 总结 在 Dell R730xd 上,RAID5 自动重建机制依赖于: 健壮的热备规划 严格的预测性故障监控 及时与正确的 Foreign Config 处理 重建期的性能与风险控制 通过标准化命令流程 + 监控告警 + 定期演练,可以显著降低单盘故障演化为数据灾难的概率。若未来容量持续增大或重建窗口难以接受,应评估迁移到 RAID6 / RAID10 或对象/分布式存储冗余方案。 --- ## [收藏]诺音曼 U87 麦克风 - URL: https://firsh.me/blog/0134.html - Date: 2026-07-02 - Keywords: 诺音曼, U87, 麦克风, Neumann U87, 录音设备, 电容麦克风, 专业麦克风, 收藏, 音频设备, 诺依曼 [收藏]诺音曼 U87 麦克风 多年之前自己买来唱歌的,现在看到还是思绪万千。 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 收藏的老显卡 - URL: https://firsh.me/blog/0136.html - Date: 2026-07-02 - Keywords: 老显卡, 显卡收藏, 复古硬件, GPU, 显示卡, 老旧硬件, 显卡历史, 电脑配件, 复古电脑, vintage GPU 收藏的老显卡 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 古惑狼[1997](CRT-Shader) - URL: https://firsh.me/blog/0124.html - Date: 2026-07-02 - Keywords: 古惑狼, Crash Bandicoot, CRT Shader, 复古游戏, 像素风格, 着色器, 怀旧游戏, PS1游戏, CRT滤镜, 1997 古惑狼 **[ 199 7****]**(CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct P S PlayStation | crash-bandi.7z ⏳ Loading ⛶ Full 💿 ISO Format: .7z System: PSX Core: PCSX-ReARMed Region: NTSC/PAL 💡 Press Tab for Menu • Supports Memory Cards • DualShock Compatible Power △ ○ ✕ □ PlayStation ⚡ Turbo 🔊 Volume: 📳 Vibration 🎮 DualShock Controls D-Pad WASD ✕ K ○ L □ J △ I L1/R1 U / O L2/R2 Y / P Start Enter Select Shift L Analog TFGH R Analog 8456 Menu Tab 💾 Supports Memory Card Saves • 🎮 USB/Bluetooth Controller Compatible --- ## [PS] 恶魔战士3(CRT-Shader) - URL: https://firsh.me/blog/0123.html - Date: 2026-07-02 - Keywords: 恶魔战士3, Devil Warriors 3, PS, PlayStation, CRT Shader, 复古游戏, 像素游戏, CRT滤镜, 老式显示器效果, 复古画面滤镜 [PS] 恶魔战士3 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct P S PlayStation | darkstalkers-3.7z ⏳ Loading ⛶ Full 💿 ISO Format: .7z System: PSX Core: PCSX-ReARMed Region: NTSC/PAL 💡 Press Tab for Menu • Supports Memory Cards • DualShock Compatible Power △ ○ ✕ □ PlayStation ⚡ Turbo 🔊 Volume: 📳 Vibration 🎮 DualShock Controls D-Pad WASD ✕ K ○ L □ J △ I L1/R1 U / O L2/R2 Y / P Start Enter Select Shift L Analog TFGH R Analog 8456 Menu Tab 💾 Supports Memory Card Saves • 🎮 USB/Bluetooth Controller Compatible --- ## [Sega MD] 暴力摩托2(CRT-Shader) - URL: https://firsh.me/blog/0112.html - Date: 2026-07-02 - Keywords: Sega MD, 暴力摩托2, CRT Shader, CRT滤镜, 复古游戏, 世嘉MD, 模拟器, 像素风格, 怀旧游戏, Mega Drive [Sega MD] 暴力摩托2 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct SEGA MEGA DRIVE road-rash-ii.md ⏳ Loading ⛶ 💾 📂 🔄 --> ⬇ LOADING... System: 16-BIT Core: Genesis Plus GX Format: .md Region: NTSC/PAL 🎮 Controller Mapping D-Pad WSAD A U B I X O Y P Select J Start K Menu Tab --- ## [Sega MD] 战斧3 (CRT-Shader) - URL: https://firsh.me/blog/0107.html - Date: 2026-07-02 - Keywords: 战斧3, Sega MD, Mega Drive, CRT Shader, 复古游戏, 像素风格, 老式显示器效果, 街机游戏, 横版动作, 视频滤镜 [Sega MD] 战 斧 3 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct SEGA MEGA DRIVE golden-axe-iii.md ⏳ Loading ⛶ 💾 📂 🔄 --> ⬇ LOADING... System: 16-BIT Core: Genesis Plus GX Format: .md Region: NTSC/PAL 🎮 Controller Mapping D-Pad WSAD A U B I X O Y P Select J Start K Menu Tab --- ## [PSX] 毁灭赛车 (CRT-Shader) - URL: https://firsh.me/blog/0109.html - Date: 2026-07-02 - Keywords: PSX, 毁灭赛车, CRT Shader, PlayStation, 复古游戏, 像素风格, CRT滤镜, 老式显示器效果, 游戏着色器, retro gaming [PSX] 毁灭赛车 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct P S PlayStation | demolition-racer.chd ⏳ Loading ⛶ Full 💿 ISO Format: .chd System: PSX Core: PCSX-ReARMed Region: NTSC/PAL 💡 Press Tab for Menu • Supports Memory Cards • DualShock Compatible Power △ ○ ✕ □ PlayStation ⚡ Turbo 🔊 Volume: 📳 Vibration 🎮 DualShock Controls D-Pad WASD ✕ K ○ L □ J △ I L1/R1 U / O L2/R2 Y / P Start Enter Select Shift L Analog TFGH R Analog 8456 Menu Tab 💾 Supports Memory Card Saves • 🎮 USB/Bluetooth Controller Compatible --- ## [Arcade] 拳皇97 (CRT-Shader) - URL: https://firsh.me/blog/0127.html - Date: 2026-07-02 - Keywords: 拳皇97, KOF97, King of Fighters 97, 街机, Arcade, CRT Shader, 复古游戏, 滤镜效果, 像素游戏, 模拟器 [ Arcade ] 拳皇 9****7 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open WEBP 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct ARCADE kof97.zip 🕹️ Ready ⛶ 💾 ROM: .zip System: MAME Core: FBNeo Players: 1-2P 🪙 Insert Coin to Start • Press 5 for Credit Game Over Credit: 0 Insert Coin ⚡ Turbo 🔊 📺 Scanlines 🎨 Smooth --> 🕹️ Arcade Controls Move WASD Button 1 J Button 2 K Button 3 L Button 4 I Button 5 U Button 6 O Coin 5 Start 1 2P Start 2 Menu Tab Pause P 🎮 USB Controller Support • 💾 Save States Available --- ## 我的世界HMCL启动器 - URL: https://firsh.me/blog/0137.html - Date: 2026-07-02 - Keywords: HMCL, HMCL启动器, Minecraft启动器, 我的世界启动器, Hello Minecraft Launcher, Java版启动器, Minecraft Java Edition, mod管理, 整合包, 版本管理 我的世界HMCL启动器 📁 HMCL-3.7.0.300.jar JAR file Download --- ## [JAR] Game bounceTales - URL: https://firsh.me/blog/0104.html - Date: 2026-07-02 - Keywords: bounceTales, 诺基亚经典游戏, JAR游戏, Nokia游戏, 手机游戏, Java游戏, J2ME, 移动游戏, 复古游戏, 弹跳游戏 [JAR] Game bounceTales 诺基亚经典游戏 NOKIA 📱 bounceTales-240.jar Loading... ↻ ⬇ Wait Starting... Initializing... L Q ↑ W R E ← A OK X → D ↓ S 1 Y 2 U 3 I * [ 4 O 5 P 6 H 0 ; 7 J 8 K 9 L # ] * [ 0 ; # ] ⌨️ Keyboard Controls W/A/S/D → 方向键 Q → 左功能键 E → 右功能键 X → 确认键 Y~P,H~L,; → 数字1-9,0 [ ] → * # --> --- ## [BWG] 今天买了一台CN2GIA搬瓦工测试一下 - URL: https://firsh.me/blog/0142.html - Date: 2026-07-02 - Keywords: 搬瓦工, BandwagonHost, CN2GIA, 三网回程, VPS测速, CN2线路, 回程测试, VPS评测, 搬瓦工退款, 网络延迟 [BWG] 今天买了一台CN2GIA搬瓦工测试一下 使用脚本 - 测试三网回程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash 正在测试,请稍等... —————————————————————————————— 目标:北京电信 [ 219.141.136.12 ] 回程线路:电信CN2 GIA 目标:北京联通 [ 202.106.50.1 ] 回程线路:电信CN2 GT 目标:北京移动 [ 221.179.155.161 ] 回程线路:电信CN2 GT 目标:上海电信 [ 202.96.209.133 ] 回程线路:电信CN2 GIA 目标:上海联通 [ 210.22.97.1 ] 回程线路:电信CN2 GIA 目标:上海移动 [ 211.136.112.200 ] 回程线路:电信CN2 GIA 目标:深圳电信 [ 58.60.188.222 ] 回程线路:电信CN2 GIA 目标:深圳联通 [ 210.21.196.6 ] 回程线路:电信CN2 GIA 目标:深圳移动 [ 120.196.165.24 ] 回程线路:电信CN2 GT root@cheery-cat-1:~# curl https://raw.githubusercontent.com/zhanghanyun/backtrace/main/install.sh -sSf | sh 2025/10/14 12:52:48 正在测试三网回程路由... 国家: CA 城市: Vancouver 服务商: AS25820 IT7 Networks Inc 项目地址: https://github.com/zhanghanyun/backtrace 北京电信 219.141.140.10 电信CN2 [ 优质线路 ] 北京联通 202.106.195.68 电信CN2 [ 优质线路 ] 北京移动 221.179.155.161 电信CN2 [ 优质线路 ] 上海电信 202.96.209.133 电信CN2 [ 优质线路 ] 上海联通 210.22.97.1 电信CN2 [ 优质线路 ] 上海移动 211.136.112.200 电信CN2 [ 优质线路 ] 广州电信 58.60.188.222 电信CN2 [ 优质线路 ] 广州联通 210.21.196.6 电信CN2 [ 优质线路 ] 广州移动 120.196.165.24 电信CN2 [ 优质线路 ] 成都电信 61.139.2.69 电信CN2 [ 优质线路 ] 成都联通 119.6.6.6 电信CN2 [ 优质线路 ] 成都移动 211.137.96.205 电信CN2 [ 优质线路 ] 2025/10/14 12:52:50 测试完成! Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 已经退款 158u,还是挺难用的。 --- ## Ubuntu 22.04服务器崩溃了修复记录,异常断电后重新上电boot无法加载【ESXI】 - URL: https://firsh.me/blog/0143.html - Date: 2026-07-02 - Keywords: Ubuntu 22.04, 服务器崩溃, 异常断电, GRUB修复, 单用户模式, ESXi, VMX文件, parentCID, 磁盘挂载, 虚拟机恢复 Ubuntu 22.04服务器崩溃了修复记录,异常断电后重新上电boot无法加载【ESXI】 告警如下 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 紧急进入系统(确保你能进入 shell ) 重启系统,用 GRUB 编辑模式进入单用户模式: • GRUB → 按 e • Linux行后添加: init=/bin/bash Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 1 2 3 4 #挂盘 mount -o remount,rw / 1 2 3 4 #确认 /boot 和 /boot/efi 暂时注释掉,防止卡住: vim /etc/fstab # UUID=62ccb788-3550-4b59-9ac9-31ffa94c2217 /boot ... # UUID=81FA-19B4 /boot/efi ... 发现还是不行无法启动只能是将磁盘切换到一个新的Ubuntu上进行挂载使用 进入 ESXI Shell 编辑 .vmx 文件,修复 parentCID Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 1 2 3 4 5 6 7 nas.vmdk nas-flat.vmdk nas-000001.vmdk nas-000001-sesparse.vmdk nas-000002.vmdk nas-000002-sesparse.vmdk 直接将磁盘挂载到新的虚拟机作为数据盘即可,【时间有限只能先这么先用起来了,后面有时间在复盘】 --- ## VLC.JS Builder - URL: https://firsh.me/blog/0144.html - Date: 2026-07-02 - Keywords: VLC.js, WebAssembly, Emscripten, emsdk, 视频播放器, 浏览器播放器, VLC编译, JavaScript媒体播放器, vlc.js builder, 前端多媒体 VLC.JS Builder setup download source code: 1 2 git clone https://gitlab.com/garfvl/denv/ git clone https://code.videolan.org/jbk/vlc.js --branch incoming compile vlc.js: (in vlc.js directory) 1 ../denv/bin/denv compile-vlc-wasm bash compile.sh check file permissions: (ls -lh) You need to change permissions recursively on all the built files (in vlc/ and emsdk/ and expermental.*) if you didn’t setup docker_namespace test demo page: 1 2 source emsdk/emsdk_env.sh emrun --no_browser vlc.html --- ## Nginx 做为前端负载均衡时,后端服务器获取的IP为 Nginx 的本机IP,让Nginx 把用户IP传递到后端里面去。 - URL: https://firsh.me/blog/0066.html - Date: 2026-07-02 - Keywords: Nginx, 负载均衡, 真实IP, X-Forwarded-For, proxy_set_header, 反向代理, 后端服务器, 用户IP, HTTP请求头, load balancer Nginx 做为前端负载均衡时,后端服务器获取的IP为 Nginx 的本机IP,让Nginx 把用户IP传递到后端里面去。 问题 Nginx 做为前端负载均衡时,后端服务器获取的IP为 Nginx 的本机IP. 解决办法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1. Nginx 开启 http_realip_module 模块 ./configure --with-http_realip_module make && make install 2. Nginx 前端 增加 proxy_set_header proxy_set_header X-Real-IP $remote_addr ; 3. Nginx 后端 增加 real_ip_header real_ip_header X-Real-IP ; 后端配置 必须重启 Nginx 才能生效, reload 不生效。 4. Tomcat 后端 需要修改 Service.xml 找到 pattern = "%h %l %u %t "%r" %s %b" /> 修改为 pattern = "%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts = "false" /> --- ## influxdb3 源代码编译测试 - URL: https://firsh.me/blog/0145.html - Date: 2026-07-02 - Keywords: influxdb3, InfluxDB源代码编译, influxdb3 CLI, retention period, 时序数据库, InfluxDB build, macOS ARM编译, DYLD_LIBRARY_PATH, 数据库分区, token创建 influxdb3 源代码编译测试 influxdb3 源代码编译测试 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 参考资料 https://docs.influxdata.com/influxdb3/cloud-dedicated/admin/databases/#table-limit https://docs.influxdata.com/influxdb3/cloud-dedicated/admin/databases/create/#create-a-database-with-custom-partitioning build influxdb3 cli clone source code 1 git clone https://github.com/influxdata/influxdb.git debug test 1 cargo run -- serve --object-store file --node-id node1 --data-dir ./tmp cd influxdb/target/debug 创建token 1 2 3 4 5 6 7 ❯ ./influxdb3 create token --admin New token created successfully! Token: apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w HTTP Requests Header: Authorization: Bearer apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w create database use retention-period 1 ./influxdb3 create database iot_sensors --retention-period 7d --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w write data 1 2 3 4 5 ./influxdb3 write \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ "temperature,device=sensor_01 value=23.5" success query system table 1 2 3 4 5 6 7 8 9 10 ./influxdb3 query -d _internal \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ "SELECT database_name, retention_period_ns FROM system.databases" +---------------+---------------------+ | database_name | retention_period_ns | +---------------+---------------------+ | _internal | | | iot_sensors | 604800000000000 | +---------------+---------------------+ modify retention period 1 2 3 4 5 6 ./influxdb3 update database \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ --retention-period 1h Database "iot_sensors" updated successfully clean retention period 1 2 3 4 5 6 7 ./influxdb3 update database \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ --retention-period none Database "iot_sensors" updated successfully demo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # 设置为1分钟 ❯ ./influxdb3 update database \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ --retention-period 1m Database "iot_sensors" updated successfully # 查看修改是否生效 ❯ ./influxdb3 query -d _internal \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ "SELECT database_name, retention_period_ns FROM system.databases" +---------------+---------------------+ | database_name | retention_period_ns | +---------------+---------------------+ | _internal | | | iot_sensors | 60000000000 | +---------------+---------------------+ # 查询数据 ❯ ./influxdb3 query \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ "SELECT * FROM temperature LIMIT 10" # 等待1分钟后,数据被清理 ❯ ./influxdb3 query \ --database iot_sensors \ --token apiv3_O12FEWfXA0H8UcSHYsEAfuTuKbHLbNCAB56Qcv9Bp4UKbruuK2Q0bUNdTMc5ny3A4-V_3zlM3whj3Wn4_ZMH7w \ "SELECT * FROM temperature LIMIT 10" ++ ++ retention period 时间单位说明 单位符号 含义 示例 对应纳秒数 s 秒 (second) 30s 30 000 000 000 m 分钟 (minute) 15m 900 000 000 000 h 小时 (hour) 24h 86 400 000 000 000 d 天 (day) 7d 604 800 000 000 000 w 周 (week) 4w 2 419 200 000 000 000 mo 月 (month, 30天) 1mo 2 592 000 000 000 000 build 遇到的问题(macos arm) Q1: dyld: Library not loaded: @rpath/libpython3.10.dylib 解决方法:设置环境变量DYLD_LIBRARY_PATH 1 2 3 4 5 6 7 8 9 10 11 #具体需要看自己的arch是什么,然后找到对应的libpython3.10.dylib路径,设置到环境变量中即可。 ❯ find /opt/homebrew -name "libpython3.10.dylib" /opt/homebrew/Cellar/python@3.10/3.10.18/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib /opt/homebrew/Cellar/python@3.10/3.10.18/Frameworks/Python.framework/Versions/3.10/lib/python3.10/config-3.10-darwin/libpython3.10.dylib ❯ find /usr/local -name "libpython3.10.dylib" 2>/dev/null /usr/local/Homebrew/Cellar/python@3.10/3.10.6_1/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib /usr/local/Homebrew/Cellar/python@3.10/3.10.6_1/Frameworks/Python.framework/Versions/3.10/lib/python3.10/config-3.10-darwin/libpython3.10.dylib # 设置环境变量继续执行 cargo 即可 export DYLD_LIBRARY_PATH = /opt/homebrew/Cellar/python@3.10/3.10.18/Frameworks/Python.framework/Versions/3.10/lib: $DYLD_LIBRARY_PATH --- ## X-ui 分流 ChatGPT 解锁一系列流媒体 - URL: https://firsh.me/blog/0146.html - Date: 2026-07-02 - Keywords: X-ui, 分流, ChatGPT解锁, 流媒体解锁, Xray, 香港节点, 美国节点, outbounds, routing rules, 科学上网 X-ui 分流 ChatGPT 解锁一系列流媒体 前提HK作为最终入口 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct HK部署X-UI (日常Google查找文献) US部署X-UI (用于ChatGPT) 备份HK节点的配置文件 HK 节点面板JSON配置如下(全量JSON): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 { "api" : { "services" : [ "HandlerService" , "LoggerService" , "StatsService" ], "tag" : "api" }, "inbounds" : [ { "listen" : "127.0.0.1" , "port" : 62789 , "protocol" : "dokodemo-door" , "settings" : { "address" : "127.0.0.1" }, "tag" : "api" } ], "outbounds" : [ { "protocol" : "vless" , "settings" : { "vnext" : [ { "address" : "1.1.1.1" , "port" : 55555 , "users" : [ { "id" : "xxxxxxxxxxxxxxxxxxx" , "encryption" : "none" } ] } ] }, "streamSettings" : { "network" : "kcp" , "security" : "none" , "kcpSettings" : { "mtu" : 1350 , "tti" : 50 , "uplinkCapacity" : 12 , "downlinkCapacity" : 100 , "congestion" : false , "header" : { "type" : "srtp" }, "seed" : "asdasd" } }, "mux" : { "enabled" : false }, "tag" : "chatgpt-outbound" }, { "protocol" : "freedom" , "settings" : {} }, { "protocol" : "blackhole" , "settings" : {}, "tag" : "blocked" } ], "policy" : { "system" : { "statsInboundDownlink" : true , "statsInboundUplink" : true } }, "routing" : { "rules" : [ { "type" : "field" , "domain" : [ "geosite:netflix" , "chatgpt.com" , "openai.com" , "oaistatic.com" , "oaiusercontent.com" , "openai.com.cdn.cloudflare.net" , "openaiapi-site.azureedge.net" , "openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net" , "openaicomproductionae4b.blob.core.windows.net" , "production-openaicom-storage.azureedge.net" , "claude.ai" , "anthropic.com" ], "outboundTag" : "chatgpt-outbound" }, { "inboundTag" : [ "api" ], "outboundTag" : "api" , "type" : "field" }, { "ip" : [ "geoip:private" ], "outboundTag" : "blocked" , "type" : "field" }, { "outboundTag" : "blocked" , "protocol" : [ "bittorrent" ], "type" : "field" } ] }, "stats" : {} } HK节点分段JSON解释 在outbounds下面添加以下内容即可 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 { "protocol" : "vless" , "settings" : { "vnext" : [ { "address" : "1.1.1.1" , "port" : 55555 , "users" : [ { "id" : "xxxxxxxxxxxxxxxxxxx" , "encryption" : "none" } ] } ] }, "streamSettings" : { "network" : "kcp" , "security" : "none" , "kcpSettings" : { "mtu" : 1350 , "tti" : 50 , "uplinkCapacity" : 12 , "downlinkCapacity" : 100 , "congestion" : false , "header" : { "type" : "srtp" }, "seed" : "asdasd" } }, "mux" : { "enabled" : false }, "tag" : "chatgpt-outbound" } 在routing的rules下面添加以下内容即可 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "type" : "field" , "domain" : [ "geosite:netflix" , "chatgpt.com" , "openai.com" , "oaistatic.com" , "oaiusercontent.com" , "openai.com.cdn.cloudflare.net" , "openaiapi-site.azureedge.net" , "openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net" , "openaicomproductionae4b.blob.core.windows.net" , "production-openaicom-storage.azureedge.net" , "claude.ai" , "anthropic.com" ], "outboundTag" : "chatgpt-outbound" } US节点只需要创建好 VLESS 节点即可。 现在使用HK也可以访问ChatGPT了。 --- ## 六爻 - URL: https://firsh.me/blog/0148.html - Date: 2026-07-02 - Keywords: 六爻, 周易, 占卜, 易经, 六爻预测, 卜卦, 八卦, 五行, 纳甲, 传统文化 六爻 https://www.zhouyi.cc/zhouyi/ Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 【读物】阳宅风水精解实图案例解 - URL: https://firsh.me/blog/0149.html - Date: 2026-07-02 - Keywords: 阳宅风水, 风水案例, 风水实图, 住宅风水, 风水精解, 阳宅, 风水学, 风水布局, 中国传统文化, 风水读物 【读物】 阳宅风水精解实图案例解 📄 Do_WM_很灵的风水布局.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 【读物】大冰作品合集5册 - URL: https://firsh.me/blog/0150.html - Date: 2026-07-02 - Keywords: 大冰, 大冰作品合集, 读物, 文学作品, 旅行文学, 青春文学, 散文集, 故事集, 人文读物, 中国当代文学 【读物】大冰作品合集5册 📚 大冰作品集(全5册) EPUB A- A+ 🔄 重置 ⬇ 下载 正在加载书籍... ❌ 加载失败 无法加载 EPUB 文件 ⬇ 下载文件 ◀ --- ▶ 跳转 Powered by EPUB.js 使用 ← → 或触摸滑动翻页 --- ## 一些图纸【2jz发动机】 - URL: https://firsh.me/blog/0141.html - Date: 2026-07-02 - Keywords: 2JZ发动机, 丰田发动机, Toyota 2JZ, 发动机图纸, 工程图纸, 直列六缸, 涡轮增压, JDM发动机, 2JZ-GTE, 汽车发动机 一些图纸【2jz发动机】 Tars AI机器人 📁 tars_3_v9_tvCxpHViUu.step STEP file Download 丰田 2JZ 发动机 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 🏭 2jz.scs HOOPS SCS 🌳 Tree 🔄 Fit 📐 Wire 🎨 Shade 📏 Measure ✂️ Section --> 🔍 Full ⬇️ Down 📦 Model Tree ✕ Initializing Viewer... Preparing 3D engine and loading resources ⚠️ Failed to Load Model Unable to load the 3D model. Please check your connection and try again. 🔄 Retry ✕ Close Format: HOOPS SCS Nodes: - Render: WebGL Powered by HOOPS 🖱️ 左键旋转 · 右键平移 · 滚轮缩放 Toyota Engine 🏭 toyota-engine-2.scs HOOPS SCS 🌳 Tree 🔄 Fit 📐 Wire 🎨 Shade 📏 Measure ✂️ Section --> 🔍 Full ⬇️ Down 📦 Model Tree ✕ Initializing Viewer... Preparing 3D engine and loading resources ⚠️ Failed to Load Model Unable to load the 3D model. Please check your connection and try again. 🔄 Retry ✕ Close Format: HOOPS SCS Nodes: - Render: WebGL Powered by HOOPS 🖱️ 左键旋转 · 右键平移 · 滚轮缩放 --- ## 求购一台 Sony FW900 - URL: https://firsh.me/blog/0132.html - Date: 2026-07-02 - Keywords: Sony FW900, Sony GDM-FW900, CRT显示器, 索尼显示器, 宽屏CRT, 二手显示器, 复古显示器, 怀旧游戏, 闲鱼, 收购 求购一台 Sony FW900 价格在 1w以内都可以接受,需要稍微新一点,自己打游戏使用,怀旧。 微信: 备注 Sony FW900 带价格来 走小黄鱼。 Email: super(at)qwq.chat 发邮件给我谢谢。 Sony GDM-FW900 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 📄 W0014966M.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## VPS到期记录 - URL: https://firsh.me/blog/0147.html - Date: 2026-07-02 - Keywords: VPS, VPS到期, CloudCone, VMISS, DMIT, 阿里云, GreenCloudVPS, ColoCrossing, 香港VPS, 美国VPS, CN2GIA, 服务器续费 VPS到期记录 https://app.cloudcone.com/ 2026-10-20 [us] https://app.vmiss.com/ 2026-05-23 [hk] https://www.dmit.io/ 2026-10-19 [hk] [us-cn2gia-malibu] https://swasnext.console.aliyun.com/ 2026-5-26 [hk] https://ecs.console.aliyun.com/ 2026-12-23 [CN] https://greencloudvps.com/ 2028-10-23日 [JP] —> this web site deploy for here https://cloud.colocrossing.com 2026-10-27 [US] 已经更换IP NY --- ## Analogue Pocket 顶级FPGA 硬解掌机 - URL: https://firsh.me/blog/0153.html - Date: 2026-07-02 - Keywords: Analogue Pocket, FPGA, 掌机, 复古游戏, 硬件解码, CRT, 便携游戏机, FPGA掌机, 模拟器硬件, retro gaming Analogue Pocket 顶级FPGA 硬解掌机 缺货状态买不到哇~ https://www.analogue.co/pocket Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Support CRT Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## [GBA] 银河战士 零点任务(CRT-Shader) - URL: https://firsh.me/blog/0108.html - Date: 2026-07-02 - Keywords: 银河战士零点任务, Metroid Zero Mission, GBA, Game Boy Advance, CRT Shader, CRT滤镜, 复古游戏, 模拟器, 像素游戏, 老式显示器效果 [GBA] 银河战士 零点任务 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct GAME BOY ADVANCE • metroid-zero-mission-cn.gba ⏳ Loading... ⛶ Full ⬇ ROM 📦 Format: .gba 🎮 System: Game Boy Advance 🏷️ Core: mGBA 💡 提示:按 Tab 键打开模拟器菜单。支持手柄控制和键盘映射自定义。 Initializing GBA... ⚡ Turbo Mode 🔊 Volume: 📱 LCD Filter 🎮 Keyboard Controls WASD D-Pad U A Button I B Button [ L Button ] R Button K Start J Select Tab Menu 1/3 Save/Load 💡 支持 USB/蓝牙游戏手柄。GBA 游戏支持存档和即时存档功能。 --- ## [NES] 三目童子 (CRT-Shader) - URL: https://firsh.me/blog/0101.html - Date: 2026-07-02 - Keywords: 三目童子, NES, FC红白机, CRT Shader, 像素游戏, 复古游戏, 扫描线效果, CRT滤镜, 模拟器, 8位游戏, 红白机游戏, retro gaming [NES] 三目童子 (CRT-Shader) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Nintendo NES - smtz.nes ⏳ Loading... ⛶ Fullscreen 💾 Save 📂 Load 🔄 Reset --> ⬇ ROM 📦 Format: .nes 🎮 System: Nintendo Entertainment System 🏷️ Core: FCEUmm / Nestopia 💡 提示:按 Tab 键打开模拟器菜单。支持手柄控制和键盘映射自定义。 Initializing NES Emulator... ⚡ Turbo Mode 🔊 Volume: 🎮 Default Keyboard Controls WSAD D-Pad U A Button I B Button O Turbo A P Turbo B K Start J Select Tab Menu 💡 支持 USB/蓝牙游戏手柄。可以在菜单中自定义按键映射。 --- ## [Sega MD] 幽游白书 - URL: https://firsh.me/blog/0106.html - Date: 2026-07-02 - Keywords: 幽游白书, Sega MD, Mega Drive, 格斗游戏, 日本动漫改编游戏, Sega, 16位游戏机, 动作游戏, 幽游白书游戏, 复古游戏 [Sega MD] 幽游白书 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct SEGA MEGA DRIVE yu-yu-hakusho.md ⏳ Loading ⛶ 💾 📂 🔄 --> ⬇ LOADING... System: 16-BIT Core: Genesis Plus GX Format: .md Region: NTSC/PAL 🎮 Controller Mapping D-Pad WSAD A U B I X O Y P Select J Start K Menu Tab --- ## Komari 飞书通知 JavaScript - URL: https://firsh.me/blog/0154.html - Date: 2026-07-02 - Keywords: Komari, 飞书通知, JavaScript, DNS问题, 容器, Docker, 通知集成, 飞书Webhook, 容器DNS, 前端通知 Ko mar i 飞 书 通知 JavaScript DNS可能会在容器中存在问题解决方案如下 1 2 3 4 5 6 7 8 9 10 root@iZj6c272tlmxycxmcbk420Z:~# cat /etc/docker/daemon.json { "dns" : [ "223.5.5.5" , "8.8.8.8" , "114.114.114.114" ] } systemctl restart docker docker start container_id Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 💻 Komari_Feishu_Bot_notify.js JavaScript file Download --- ## VPS 监控到期前5日自动通知到飞书 - URL: https://firsh.me/blog/0156.html - Date: 2026-07-02 - Keywords: VPS监控, 到期通知, 飞书, 自动通知, 服务器监控, Shell脚本, Feishu, VPS到期, 运维自动化, 定时任务 VPS 监控到期前5日自动通知到飞书 脚本在另外一个文章里面,可以去复制改一改。 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 413 request entity too large nginx配置 - URL: https://firsh.me/blog/0157.html - Date: 2026-07-02 - Keywords: 413 request entity too large, nginx配置, client_max_body_size, 请求体过大, nginx错误, 上传文件限制, nginx location配置, HTTP 413, 服务器配置, 请求大小限制 413 request entity too large nginx配置 建议设置在localtion vim /etc/nginx/conf.d/default.conf location / { … client_max_body_size 64m; #具体参数按照你的需求设置 … } --- ## ufrisk pcileech fpga supports kc705 - URL: https://firsh.me/blog/0086.html - Date: 2026-07-02 - Keywords: pcileech, ufrisk, fpga, kc705, DMA攻击, PCIe, 内存读取, 硬件黑客, pid.codes, FPGA固件 ufrisk pcileech fpga****supports kc705 **### 配合PIDS 可以自己定义自己的设备 https://pid.codes/pids/ 或许已经不再好用 > 之前适配过 KC705 做一些小的demo 也遇到了这个问题 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct **** 📄 kc705-ufrisk_pcileech-fpga.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 ** --- ## TCP利器tcp-brutal - URL: https://firsh.me/blog/0158.html - Date: 2026-07-02 - Keywords: tcp-brutal, TCP拥塞控制, BBR, cubic, brutal算法, 网络加速, Linux内核模块, 拥塞控制算法, YouTube加速, 网络优化 TCP利器 tcp-brutal Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct bbr config 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 cat > /etc/sysctl.conf << EOF fs.file-max = 6815744 net.ipv4.tcp_no_metrics_save=1 net.ipv4.tcp_ecn=0 net.ipv4.tcp_frto=0 net.ipv4.tcp_mtu_probing=0 net.ipv4.tcp_rfc1337=0 net.ipv4.tcp_sack=1 net.ipv4.tcp_fack=1 net.ipv4.tcp_window_scaling=1 net.ipv4.tcp_adv_win_scale=1 net.ipv4.tcp_moderate_rcvbuf=1 net.core.rmem_max=33554432 net.core.wmem_max=33554432 net.ipv4.tcp_rmem=4096 87380 33554432 net.ipv4.tcp_wmem=4096 16384 33554432 net.ipv4.udp_rmem_min=8192 net.ipv4.udp_wmem_min=8192 net.ipv4.ip_forward=1 net.ipv4.conf.all.route_localnet=1 net.ipv4.conf.all.forwarding=1 net.ipv4.conf.default.forwarding=1 net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr net.ipv6.conf.all.forwarding=1 net.ipv6.conf.default.forwarding=1 EOF sysctl -p && sysctl --system net.ipv4.tcp_congestion_control=bbr or net.ipv4.tcp_congestion_control=cubic or net.ipv4.tcp_congestion_control=brutal 项目地址: https://github.com/apernet/tcp-brutal 论坛帖子: https://www.nodeseek.com/post-505403-1 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 1 2 3 4 #define INIT_PACING_RATE 75000000 // 500 Mbps+ #define INIT_CWND_GAIN 40 重新编译 tcp-brutal 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 root@racknerd-6bf1e7b:~/tcp-brutal# make make -C /lib/modules/6.8.0-87-generic/build M = /root/tcp-brutal modules make [ 1 ] : Entering directory '/usr/src/linux-headers-6.8.0-87-generic' warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-13 ( Ubuntu 13.3.0-6ubuntu2~24.04 ) 13.3.0 You are using: gcc-13 ( Ubuntu 13.3.0-6ubuntu2~24.04 ) 13.3.0 make [ 1 ] : Leaving directory '/usr/src/linux-headers-6.8.0-87-generic' root@racknerd-6bf1e7b:~/tcp-brutal# insmod brutal.ko root@racknerd-6bf1e7b:~/tcp-brutal# lsmod | grep brutal brutal 16384 56 sysctl net.ipv4.tcp_congestion_control sysctl -w net.ipv4.tcp_congestion_control = brutal #设置 sysctl -w net.ipv4.tcp_no_metrics_save = 1 #切流量 总体感受没有那么长时间的缓冲了,可以瞬间提高速度到最大速度,秒开8K youtube视频。 --- ## [开源] LotSpeed 致敬锐速🫡 - URL: https://firsh.me/blog/0159.html - Date: 2026-07-02 - Keywords: LotSpeed, 锐速, ServerSpeeder, TCP加速, 网络加速, 开源, Linux内核模块, BBR, 网络优化, 开源项目 [开源] LotSpeed 致敬锐速🫡 lotspeed 开心版 项目地址: h ttps://github.com/uk0/lotspeed 不要吝啬小星星哦~。  Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct auto install 1 2 3 curl -fsSL https://raw.githubusercontent.com/uk0/lotspeed/main/install.sh | sudo bash # or wget -qO- https://raw.githubusercontent.com/uk0/lotspeed/main/install.sh | sudo bash manual compile and load 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 下载代码/编译 git clone https://github.com/uk0/lotspeed.git cd lotspeed && make # 加载模块 sudo insmod lotspeed.ko # 设置为当前拥塞控制算法 sudo sysctl -w net.ipv4.tcp_congestion_control = lotspeed sudo sysctl -w net.ipv4.tcp_no_metrics_save = 1 # 查看是否生效 sysctl net.ipv4.tcp_congestion_control # 查看日志 dmesg -w helper 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 root@ubuntu:~# lotspeed ╔════════════════════════════════════════════════════════╗ ║ LotSpeed v2.0 Management Tool ║ ║ Created by uk0 @ 2025-11-18 ║ ╚════════════════════════════════════════════════════════╝ Usage: lotspeed { command } [ options ] Commands: start - Start LotSpeed stop - Stop LotSpeed ( switch to default algorithm ) restart - Restart LotSpeed status - Show current status and parameters preset - Apply preset configuration set - Set parameter value connections - Show active connections log - Show recent logs monitor - Monitor logs in real-time uninstall - Completely uninstall LotSpeed Presets: lotspeed preset conservative - 1Gbps, 1.5x gain lotspeed preset balanced - 5Gbps, 2.5x gain [ RECOMMENDED ] lotspeed preset aggressive - 10Gbps, 4.0x gain lotspeed preset extreme - 20Gbps, 5.0x gain, TURBO Examples: lotspeed status lotspeed preset balanced lotspeed set lotserver_rate 1000000000 lotspeed set lotserver_turbo 1 lotspeed monitor --- ## [锐速] 安装测试全过程 - URL: https://firsh.me/blog/0161.html - Date: 2026-07-02 - Keywords: 锐速, ServerSpeeder, 网络加速, 内核更换, TUIC, Hysteria2, hy2, iperf3, TCP加速, VPS优化 [锐速] 安装测试全过程 更换系统 更换系统 https://github.com/bin456789/reinstall 1 2 3 4 5 curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O ${ _ ##*/ } $_ bash reinstall.sh centos7 #默认随机密码记住就好 更换内核 1 wget --no-check-certificate -O rskernel.sh https://raw.githubusercontent.com/uxh/awesome-linux-tools/master/rskernel_2.sh && bash rskernel.sh 查找适合的版本 https://www.91yun.co/serverspeeder91yun 1 2 3 # 选择适合自己的内核即可 wget -N --no-check-certificate https://github.com/91yun/serverspeeder/raw/master/serverspeeder-v.sh && bash serverspeeder-v.sh CentOS 7.1 3.10.0-229.1.2.el7.x86_64 x64 3.10.61.12 serverspeeder_2727 查看状态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ root@localhost ~ ] # /serverspeeder/bin/serverSpeeder.sh status [ Running Status ] ServerSpeeder is running! version 3.10.61.12 [ License Information ] License 7603574CEB4C8210 ( valid on current device ) MaxSession unlimited MaxTcpAccSession unlimited MaxBandwidth ( kbps ) unlimited ExpireDate 2034-12-31 [ Connection Information ] TotalFlow 40 NumOfTcpFlows 40 TotalAccTcpFlow 37 TotalActiveTcpFlow 3 [ Running Configuration ] accif eth0 acc 1 advacc 1 advinacc 1 wankbps 1000000 waninkbps 1000000 csvmode 1 subnetAcc 0 maxmode 1 pcapEnable 0 [ root@localhost ~ ] # 调参 https://www.gigsgigscloud.com/cn/tutorials/article/serverspeederlotserver-peizhi/ 测试结果对比 锐速 + tuic Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct * 锐速 + hy2 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct iperf3 test (本地100M宽带) Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 锐速 vs lotspeed [依然是老牌锐速能打,毕竟是商业软件] - URL: https://firsh.me/blog/0162.html - Date: 2026-07-02 - Keywords: 锐速, lotspeed, TCP加速, 拥塞控制算法, zeta-tcp, Hysteria2, hy2, Linux TCP栈, 网络加速, 带宽优化 锐速 vs lotspeed [依然是老牌锐速能打,毕竟是商业软件] 都是hy2 配置一样,同一个机器,机器配置1G内存,1Gbps带宽。 1.锐速是接管了Linux TCP栈,具体可以查看他的白皮书。 2.lotspeed只是一个带有学习模式的拥塞算法。 lotspeed 实现了zeta-tcp白皮书前两个步骤 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 原版本锐速 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 锐速配置如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 accif = "eth0" acc = "1" advacc = "1" advinacc = "1" wankbps = "1000000" waninkbps = "1000000" csvmode = "1" highcsv = "1" subnetAcc = "0" maxmode = "1" maxTxMinSsThresh = "1048575" maxTxEffectiveMS = "0" maxAccFlowTxKbps = "0" pcapEnable = "0" bypassOverFlows = "1" initialCwndWan = "50" l2wQLimit = "256 2048" w2lQLimit = "256 2048" shrinkPacket = "0" retranWaitListMS = "32" halfCwndMinSRtt = "500" halfCwndLossRateShift = "3" shaperEnable = "1" tcpOnly = "1" smBurstMS = "16" smBurstMin = "16000" smBurstTolerance = "32768" flowShortTimeout = "30000" rsc = "1" gso = "1" ultraBoostWin = "0" minSsThresh = "8 24" dbcRttThreshMS = "" smMinKbps = "" lanSegment = "" txCongestObey = "1" taskSchedDelay = "1000 1000" configTimeout = "30" tcpFlags = "0x0" udptun = "" synRetranMS = "0" shrinkOSWmem = "0" mpoolMaxCache = "7368000" engineNum = "0" accppp = "0" shortRttMS = "0" packetWrapper = "256" pmtu = "" detectInterrupt = "0" byteCacheEnable = "0" dataCompEnable = "0" httpCompEnable = "1" byteCacheMemory = "250" #MB byteCacheDisk = "0" #MB diskDev = "/var/AppEx_Cache" #ipHooks="0" #ipRxHookPri="" #ipTxHookPri="" dropCache = "0" txcsum = "0" rxcsum = "0" usermode = 0 licenseGen = 0 checkLicense = 0 accpath = "/proc/net/appex" apxexe = "/serverspeeder/bin/acce-3.10.61.12-[CentOS_3.10.0-229.1.2.el7.x86_64]" apxlic = "/serverspeeder/etc/apx.lic" serial = "xxxxx” email=" xx@xxxxxx” installerID = "=QzM" --- ## 关闭ubuntu服务器53服务 - URL: https://firsh.me/blog/0160.html - Date: 2026-07-02 - Keywords: Ubuntu, systemd-resolved, 53端口, DNS服务, 端口冲突, Ubuntu Server 20.04, DNSStubListener, Linux, DNS配置, 端口占用 关闭ubuntu服务器53服务 默认安装好ubuntu server 20.04LTS后,系统会自动开放53的dns服务为本机提供服务。 Ubuntu的systemd-resolved将默认监听在53号端口,如果我们需要运行自己定义的dns服务器,端口已经在使用会导致端口冲突。所以我们会遇见下面的错误: 1 2 3 "listen tcp 0.0.0.0:53: bind: address already in use" . 查看端口情况 1 2 3 4 5 6 root@ub20:/home/sk# netstat -lnpt | grep 53 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 2119/systemd-resolv 或者 1 2 3 4 5 6 7 root@ub20:/home/sk# sudo lsof -i :53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 2119 systemd-resolve 12u IPv4 67939 0t0 UDP localhost:domain systemd-r 2119 systemd-resolve 13u IPv4 67940 0t0 TCP localhost:domain ** ( **LISTEN** ) ** 如何停止ubuntu上的systemd-resolved服务使用53 修改配置文件,我们可以修改 /etc/systemd/resolved.conf 中DNSStubListener的注释行,它将不再打开dns服务 #DNSStubListener=yes 将这行的注释拿掉,改为no保存,如下 DNSStubListener**=**no **```**重启生效 ```bashsystemctl restart systemd-resolved.service lsof -i :53 **```** --- ## RFC3135 TCP 加速 - URL: https://firsh.me/blog/0166.html - Date: 2026-07-02 - Keywords: RFC3135, TCP加速, TCP性能增强, PEP, Performance Enhancing Proxy, 卫星网络优化, TCP优化, 网络加速, 协议优化, 长延迟网络 RFC3135 TCP 加速 https://datatracker.ietf.org/doc/html/rfc3135 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct video : https://www.youtube.com/watch?v=Dx9fdLeODPI --- ## TCP/IP 备忘录 - URL: https://firsh.me/blog/0167.html - Date: 2026-07-02 - Keywords: TCP/IP, 网络协议, 传输层, IP协议, TCP协议, UDP协议, 网络通信, OSI模型, 数据包, Socket编程 TCP/IP 备忘录 📁 DHCP HTTP HTTPS RTMP P2P DNS GTP RPC.tiff TIFF file Download Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 一本老书 - URL: https://firsh.me/blog/0170.html - Date: 2026-07-02 - Keywords: 老书, 读书, 书籍, 阅读, 经典, 人文, 文学, 书评, 知识, vintage book 一本老书 📄 《黑客防线》2011精华奉献本(上册).pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 关闭Chrome 自动更新(为了tabs功能) - URL: https://firsh.me/blog/0171.html - Date: 2026-07-02 - Keywords: Chrome自动更新, 关闭Chrome更新, Chrome tabs功能, Chrome更新设置, 浏览器更新, Chrome终端命令, macOS Chrome, Chrome版本管理, 禁用自动更新, browser update 关闭Chrome 自动更新(为了tabs功能) 在终端输入一下命令并回车键 defaults write com.google.Keystone.Agent checkInterval 0 这个命令会设置Chrome的更新检查间隔为0,这意味着Chrome将不会自动检查更新。 --- ## File Encryption Download - URL: https://firsh.me/blog/0173.html - Date: 2026-07-02 - Keywords: 文件加密, File Encryption, 加密工具, 自释放加密, release, 文件下载, 加密软件, 数据安全, zip加密, 2026 File Encryption Download Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open JPEG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 文件自释放加密工具 2026-04-01 be0a9d10582778af2e1dbd16399b1246 release.zip release.zip --- ## Stun Max Download - URL: https://firsh.me/blog/0172.html - Date: 2026-07-02 - Keywords: Stun Max, STUN服务器, 下载, 一键部署, CI自动构建, GitHub Releases, server脚本, 网络穿透, NAT穿透, stun_max Stun Max Download Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 最新的构建包【已经通过CI自动构建】 项目内包含一键部署server 脚本,开始享用吧。 https://github.com/uk0/stun_max/releases --- ## GLM5.2 部署情况 - URL: https://firsh.me/blog/0179.html - Date: 2026-07-02 - Keywords: GLM5.2, GLM, 大语言模型, 模型部署, 智谱AI, ChatGLM, LLM, AI模型, 模型推理, 部署方案 GLM5.2 部署情况 📄 deploy.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## DeepSeek V4 Pro for 910b2x32 Use Vllm Backend - URL: https://firsh.me/blog/0180.html - Date: 2026-07-02 - Keywords: DeepSeek V4 Pro, 910b2x32, vLLM, vLLM Backend, 大语言模型, 模型推理, 昇腾910b, LLM部署, 推理加速, 华为昇腾 DeepSeek V4 Pro for 910b2x32 Use Vllm Backend 📄 deploy.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## DGX Spark 部署记录 - URL: https://firsh.me/blog/0181.html - Date: 2026-07-02 - Keywords: DGX Spark, NVIDIA DGX, AI工作站, GPU部署, 深度学习, 机器学习, 边缘AI, 本地部署, NVIDIA, 大模型推理 DGX Spark 部署 记录 📄 dgx_spark_model_deployment.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 从零、面向初学者的一个简单的汇编转译介绍 - URL: https://firsh.me/blog/0182.html - Date: 2026-07-02 - Keywords: 汇编语言, 转译, 汇编器, 机器码, 指令集, 编译原理, 低级语言, 汇编转译, beginner assembly, transpiler 从零、面向初学者 的 一个 简单的 汇编 转译 介绍 📄 rousaoe-tutorial.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 --- ## 今天看到一个有意思的帖子 内核模块导出释放获取Ko - URL: https://firsh.me/blog/0163.html - Date: 2026-07-02 - Keywords: 内核模块, Ko文件, Linux kernel module, serverspeeder, appex_module, 模块导出, md5sum, 二进制提取, 加速内核, reverse engineering 今天看到一个有意思的帖子 内核模块导出释放获取Ko Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct 📄 chen12-06.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 📄 ZetaTCP单边加速技术白皮书.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 📄 Research_and_Practice_of_TCP_Protocol_Optimization.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面 查看serverspeeder 内核 ❯ md5sum appex_module.ko 9468bf5d8c059565cc971cdd974c4911 appex_module.ko ❯ md5sum appex_module.bin 9468bf5d8c059565cc971cdd974c4911 appex_module.bin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 yum install -y python3-devel pip3 install git+https://github.com/marin-m/vmlinux-to-elf [ root@localhost ~ ] # vmlinux-to-elf /usr/lib/debug/lib/modules/3.10.0-229.1.2.el7.x86_64/vmlinux vmlinux.elf [ + ] Version string: Linux version 3.10.0-229.1.2.el7.x86_64 ( builder@kbuilder.dev.centos.org ) ( gcc version 4.8.2 20140120 ( Red Hat 4.8.2-16 ) ( GCC ) ) #1 SMP Fri Mar 27 03:04:26 UTC 2015 [ + ] Guessed architecture: x86_64 successfully in 3.01 seconds [ + ] Found kallsyms_token_table at file offset 0x00a13598 [ + ] Found kallsyms_token_index at file offset 0x00a13928 [ + ] Found kallsyms_markers at file offset 0x00a12d08 [ + ] Found kallsyms_names at file offset 0x00946478 ( 69961 symbols ) [ + ] Found kallsyms_num_syms at file offset 0x00946470 [ i ] Null addresses overall: 0.00285874 % [ + ] Found kallsyms_addresses at file offset 0x008bda28 [ + ] Successfully wrote the new ELF kernel to vmlinux.elf cd /serverspeeder/bin bin = "acce-3.10.61.12-[CentOS_3.10.0-229.1.2.el7.x86_64]" gdb -q "./ $bin " # 1)如果程序会 fork(很多这类安装器会),建议先跟踪子进程 set follow-fork-mode child set detach-on-fork off # 2)设置 syscall 断点 catch syscall init_module # 3)直接跑程序(不要用 start,用 run) run # 应该能看到下面的内容 # Starting program: /serverspeeder/bin/./acce-3.10.61.12-[CentOS_3.10.0-229.1.2.el7.x86_64] # (license 7603574CEB4C8210d3fb605d) # Catchpoint 1 (call to syscall init_module), 0x00000000004b2f3a in ?? () info registers rdi rsi rdx #应该看到: # rdi = 0x0000000000403000(或者你 strace 里看到的那个地址,比如 0x403000) # rsi = 439240(长度) # rdx 指向 "engineId=0 cpuId=0 cpuMaskNum=1" 字符串 #确认是这次 init_module 之后,按下面步骤 dump: # 定义起始和结束地址 set $addr = ( void* ) $rdi set $len = $rsi set $end = $addr + $len # 把这一段写到当前目录的文件里 dump memory appex_module.bin $addr $end #然后退出 gdb: quit 看一下导出的情况 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [ root@localhost bin ] # file appex_module.bin appex_module.bin: ELF 64-bit LSB relocatable, x86-64, version 1 ( SYSV ) , BuildID [ sha1 ]= 4198d57426226e1e8e03ec63c34e0188b8cebdab, not stripped [ root@localhost bin ] # [ root@localhost bin ] # readelf -h appex_module.bin ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2 ' s complement, little endian Version: 1 ( current ) OS/ABI: UNIX - System V ABI Version: 0 Type: REL ( Relocatable file ) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x0 Start of program headers: 0 ( bytes into file ) Start of section headers: 305040 ( bytes into file ) Flags: 0x0 Size of this header: 64 ( bytes ) Size of program headers: 0 ( bytes ) Number of program headers: 0 Size of section headers: 64 ( bytes ) Number of section headers: 37 Section header string table index: 34 [ root@localhost bin ] # [ root@localhost bin ] # readelf -S appex_module.bin | head -40 There are 37 section headers, starting at offset 0x4a790: Section Headers: [ Nr ] Name Type Address Offset Size EntSize Flags Link Info Align [ 0 ] NULL 0000000000000000 00000000 0000000000000000 0000000000000000 0 0 0 [ 1 ] .note.gnu.build-i NOTE 0000000000000000 00000040 0000000000000024 0000000000000000 A 0 0 4 [ 2 ] .text PROGBITS 0000000000000000 00000070 0000000000040c2b 0000000000000000 AX 0 0 16 [ 3 ] .rela.text RELA 0000000000000000 00051448 00000000000157f8 0000000000000018 35 2 8 [ 4 ] .text.unlikely PROGBITS 0000000000000000 00040c9b 000000000000158e 0000000000000000 AX 0 0 1 [ 5 ] .rela.text.unlike RELA 0000000000000000 00066c40 00000000000002b8 0000000000000018 35 4 8 [ 6 ] .altinstr_replace PROGBITS 0000000000000000 00042229 0000000000000006 0000000000000000 AX 0 0 1 [ 7 ] .init.text PROGBITS 0000000000000000 0004222f 00000000000004d2 0000000000000000 AX 0 0 1 [ 8 ] .rela.init.text RELA 0000000000000000 00066ef8 00000000000006f0 0000000000000018 35 7 8 [ 9 ] .rodata PROGBITS 0000000000000000 00042720 0000000000002620 0000000000000000 A 0 0 32 [ 10 ] .rela.rodata RELA 0000000000000000 000675e8 0000000000001020 0000000000000018 35 9 8 [ 11 ] __mcount_loc PROGBITS 0000000000000000 00044d40 0000000000000a78 0000000000000000 A 0 0 8 [ 12 ] .rela__mcount_loc RELA 0000000000000000 00068608 0000000000001f68 0000000000000018 35 11 8 [ 13 ] .rodata.str1.1 PROGBITS 0000000000000000 000457b8 00000000000014f9 0000000000000001 AMS 0 0 1 [ 14 ] .rodata.str1.8 PROGBITS 0000000000000000 00046cb8 0000000000000c59 0000000000000001 AMS 0 0 8 [ 15 ] .smp_locks PROGBITS 0000000000000000 00047914 0000000000000128 0000000000000000 A 0 0 4 [ 16 ] .rela.smp_locks RELA 0000000000000000 0006a570 00000000000006f0 0000000000000018 35 15 8 [ 17 ] .modinfo PROGBITS 0000000000000000 00047a3c 最终确认 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [ root@localhost bin ] # modinfo appex_module.ko filename: /serverspeeder/bin/appex_module.ko author: AppEx Networks license: AppEx rhelversion: 7.1 srcversion: 533BB7E5866E52F63B9ACCB depends: vermagic: 3.10.0-229.1.2.el7.x86_64 SMP mod_unload modversions parm: packetPoolSizeKP:uint parm: pmtuTimeoutMS:uint parm: shortRttMS:uint parm: engineId:int parm: cpuId:int parm: cpuMaskNum:int parm: gApxPcapMaxBufLen:int parm: gApxTraceMaxBufLen:int parm: gApxTraceFileLen:ulong parm: uapiUid:uint parm: uapiGid:uint parm: uapiPerm:uint --- ## CCB Claude Code Balance for AnyRouter - URL: https://firsh.me/blog/0168.html - Date: 2026-07-02 - Keywords: CCB, Claude Code Balance, AnyRouter, License, MacOS, ARM, Claude, AI工具, 余额查询, 机器码 CCB Claude Code Balance for AnyRouter 程序下载(需要license 默认在下方评论自己的机器码即可,我会将license 给你) MacOS26 ARM 💿 ccb-1.0-universal.dmg macOS Image file Download License 自己去获取就行,完全公益的没有任何收费。 1 2 3 程序截图 Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## OPENVPN 统计在线Client - URL: https://firsh.me/blog/0152.html - Date: 2026-07-02 - Keywords: OpenVPN, 在线客户端, VPN统计, Client统计, VPN监控, OpenVPN管理, 在线用户, VPN连接数, 网络监控, OpenVPN status OPENVPN 统计在线Client 📁 check_vpn_clients_v2.sh SH file Download Loading image... Please wait a moment Retry 0 🔍 View ⬇ Download 🔗 Open PNG 🖼️ Failed to Load Image Unable to load the image. Please check your connection. 🔄 Retry ⬇ Download Instead 🔗 Open Direct --- ## 使用tunnelbroker构建自己的IPv6代理池 - URL: https://firsh.me/blog/0063.html - Date: 2026-07-02 - Keywords: IPv6代理池, tunnelbroker, IPv6隧道, 代理池搭建, 阿里云轻量服务器, CentOS, sysctl, IPv6配置, 网络代理, HE tunnelbroker 使用tunnelbroker构建自己的IPv6代理池 准备 阿里云轻量服务器 【Centos 8.2】 tunnelbroker 账号 tunnelbroker 通道 脚本如下 sudo vim /etc/sysctl.conf 编辑系统设置ipv6相关 1 2 3 4 5 6 7 net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0 net.ipv6.conf.eth0.disable_ipv6 = 0 sudo sysctl -p 重载系统设置 获取Example Config 2001:xxx:x:xxx::2/64 = [Client IPv6 Address] 172.xxx.xxx.xx = [服务器内网IP] 服务器上执行 1 2 3 4 5 6 7 8 sudo modprobe ipv6 sudo ip tunnel add he-ipv6 mode sit remote 216.66.22.2 local 172.xxx.xxx.xx ttl 255 sudo ip link set he-ipv6 up sudo ip addr add 2001:xxx:x:xxx::2/64 dev he-ipv6 sudo ip route add ::/0 dev he-ipv6 sudo ip -f inet6 addr 验证 1 2 3 curl ipv6.ip.sb 收尾 1 2 3 4 5 6 sudo sysctl -w net.ipv6.ip_nonlocal_bind = 1 #开启不限制绑定 # 这个地址在配置里面可以找到 【Routed IPv6 Prefixes】 sudo ip -6 route add local 2001:xxx:x:xxx::/64 dev lo #添加本地回环接口 # 测试 curl --interface 2001:xxx:x:xxx::3 ipv6.ip.sb 开启代理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #amd wget https://github.com/deanxv/go-proxy-ipv6-pool/releases/download/v1.0.0/go-proxy-ipv6-pool-linux-amd64 #arm wget https://github.com/deanxv/go-proxy-ipv6-pool/releases/download/v1.0.0/go-proxy-ipv6-pool-linux-arm64 chmod +x go-proxy-ipv6-pool-linux-amd64 # cidr = 【Routed IPv6 Prefixes】 nohup ./go-proxy-ipv6-pool-linux-amd64 --port 51422 --cidr 2001:xxx:x:xxx::/64 > proxy.log 2> & 1 & curl -x http://xx.xx.xx.xx:51422 http://6.ipw.cn/ # 会收到变化的ipv6地址 --- ## GLM-5.2-W8A8 在 4 机 32 卡 Ascend 910B2 集群的部署与压测 - URL: https://firsh.me/blog/0184.html - Date: 2026-07-02 - Keywords: GLM-5.2, W8A8量化, Ascend 910B2, 华为昇腾, 大模型部署, 分布式推理, 集群压测, 4机32卡, NPU推理, LLM性能测试 GLM-5.2-W8A8 在 4 机 32 卡 Ascend 910B2 集群的部署与压测 时间 2026年6月21日 📄 glm52_w8a8_report.pdf 1 / - 🔍 全屏 ⬇ 下载 🔗 打开 Loading PDF... ❌ Failed to load PDF Please check if the file is accessible ← → 或左右滑动浏览全部页面