<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Labib</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://hackerbs.com/</id>
  <link href="https://hackerbs.com/" rel="alternate"/>
  <link href="https://hackerbs.com/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Labib</rights>
  <subtitle>探索知识的宇宙</subtitle>
  <title>hackerbs's Blog</title>
  <updated>2026-09-27T10:09:08.026Z</updated>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="文学" scheme="https://hackerbs.com/categories/%E6%96%87%E5%AD%A6/"/>
    <category term="随笔" scheme="https://hackerbs.com/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="自我认知" scheme="https://hackerbs.com/tags/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5/"/>
    <category term="我始终是我" scheme="https://hackerbs.com/tags/%E6%88%91%E5%A7%8B%E7%BB%88%E6%98%AF%E6%88%91/"/>
    <category term="心态" scheme="https://hackerbs.com/tags/%E5%BF%83%E6%80%81/"/>
    <category term="理性与感性" scheme="https://hackerbs.com/tags/%E7%90%86%E6%80%A7%E4%B8%8E%E6%84%9F%E6%80%A7/"/>
    <content>
      <![CDATA[<h1 id="《我始终是我》"><a href="#《我始终是我》" class="headerlink" title="《我始终是我》"></a>《我始终是我》</h1><hr><p>上一篇文章里，我讲了一套很冷的东西。重量、杠杆、交易、破圈——听起来像一台精密运转的机器。有人可能会觉得，这个人是不是太理性了，是不是把一切都算得太清楚了，是不是已经把自己活成了一个算法。</p><p>不是。</p><p>所以这篇文章，我想讲讲框架之下的那个人。</p><hr><p>我确实热衷于拆解世界。GPU 集群怎么互联、IPO 招股书里的商业模式怎么运转、社会资源怎么流动、人脉的本质是什么——我看到任何复杂的东西，第一反应都是：它的底层逻辑是什么？它为什么会是这个样子？既然它是人制造出来的，那我就应该能理解它。</p><p>这是我的乐趣所在。我不满足于”它很厉害”这种模糊的评价，我要知道<strong>它厉害在哪，为什么能成立，以及这个逻辑能不能被我用在自己身上。</strong></p><p>但这种拆解世界的冲动，并没有把我变成一个冷血的人。</p><p>我会在网络上刷到一个陌生人受苦的视频，沉默很久。我会因为路边一朵桂花被雨打落满地，站在那儿看半天，然后写”百年古树千年朽木，十里繁荣万里荒芜”。我会在看到国际新闻里某些无力改变的事情时，心里堵着，说不出来。</p><p>我没有关掉我的感性。我只是给它画了一条边界。</p><hr><p><strong>这条边界是：我的情绪和共情能力，只分配给那些我力所能及的事情。</strong></p><p>听起来像一种冷漠。但恰恰相反——这是一种保护。如果我每天对世界上的每一件苦难都倾注全部情感，我会被压垮。不是因为我不行，是因为任何人都不行。人类的共情能力是一种有限资源，像体力一样，会耗尽。心理学管这个叫”同情疲劳”——长期沉浸在无法改变的苦难中，人会从共情变为麻木。</p><p>我不允许自己麻木。所以我做了选择：我能帮的，我尽全力；我帮不了的，我承认，然后暂时放下。</p><p>这不是”不在乎”。这是<strong>先让自己足够强，再回来面对那些我现在还扛不动的东西。</strong></p><hr><p>很多人以为，像我这样一天到晚想着”重量””杠杆””涟漪”的人，一定活得很紧绷、很累、很焦虑。</p><p>不是的。</p><p>我是一个会摆烂的人。我会刷一天抖音，打一整天游戏，什么都不想，什么都不做。但我不会因为摆烂而愧疚。因为我心里清楚：我远期的方向没有变，我今天躺平，不代表我迷失了。我只是在休息，不是在放弃。</p><p>这个区别很重要。</p><p>很多人摆烂之后会陷入自责——“我又浪费了一天””我怎么这么不自律””我是不是根本不够努力”。这种自责本质上是因为你没有一个锚。你不知道自己要去哪，所以每一分钟的偏离都会让你恐慌。但如果你有方向——一个真正想清楚了的、长期的方向——那短暂的偏离就不是迷失，是休整。</p><p><strong>方向感比执行力更稳定。执行力会波动，方向不会。</strong></p><p>这就是我这几年建立起来的松弛感。松弛不是因为不在乎，是因为我知道自己在哪条路上。走快走慢不是问题，只要方向对。</p><hr><p>还有一个我想说的。</p><p>这套”重量-杠杆”的思维模型，只是我个人打磨出来的。但我不希望读者把它当成一个”人生公式”去套。因为没有一个模型能解释全部的人生。</p><p>纯粹理性的逻辑思维能分析商业，但它分析不了为什么一个母亲会在深夜给孩子掖被角。</p><p>纯粹理性的逻辑思维能拆解人脉的本质，但它拆解不了人为什么会在雨天的桂花树下站一整个黄昏。</p><p>纯粹理性的逻辑思维能用来优化我自己的成长路径，但当我的理性触达边界——碰到那些怎么想也想不通的东西——我会停下来。托靠于Allah。承认自己的有限。</p><p>这听起来矛盾：一个用逻辑拆解一切的人，同时也是一个信Allah的人。但在我看来，这两者恰恰构成一个完整的闭环：</p><p><strong>穷尽理性，承认边界，交托信仰。</strong></p><p>这不是分裂，这是自知。</p><hr><p>这篇文章没有方法论，没有框架图，没有”第一步第二步第三步”。</p><p>它只是一份诚实的自述。</p><p>我是一个理性的人，但我没有抛弃感性。我是一个拆解系统的人，但我承认系统的边界。我会因为远方的苦难感到无力，但我选择聚焦于眼前能改变的事情。我会摆烂、会偷懒、会刷一天抖音什么都不做，但我清楚地知道我明天要去哪。</p><p>我的理想和道路，充满了冷静的解构和计算。但驱动这一切向前走的那个东西——不是理性。</p><p>是雨中的桂花。是陌生人的眼泪。是不愿意再做一个无能为力的旁观者的那种决心。</p><p><strong>我自始至终都是我。</strong></p><p>浮尘落尽后的清醒，没有让我冷漠。破局的物理学，没有让我变成机器。我依然会哭，会笑，会在某些瞬间停下来，认真地看着这个世界，然后对自己说——好的，继续走吧。</p><hr><p><em>无论世界如何复杂，我始终是我。</em><br><em>无论世界如何苦难，我托靠真主。</em><br><em>即使世界终将毁灭，那便回归主。</em></p><hr><p><strong>I Have Always Been Myself</strong></p><p>In the previous essay, I laid out something very cold. Weight, leverage, transactions, breaking out of one’s circle—it sounds like a precision machine running at full tilt. Some might wonder: is this person too rational? Does he calculate everything too clearly? Has he turned himself into an algorithm?</p><p>No.</p><p>So in this essay, I want to talk about the person beneath the framework.</p><hr><p>I am indeed obsessed with taking the world apart. How GPU clusters interconnect, how the business model inside an IPO prospectus operates, how social resources flow, what the essence of personal connections really is—whenever I see anything complex, my first reaction is: what is its underlying logic? Why is it the way it is? Since it was built by humans, I ought to be able to understand it.</p><p>This is where my joy lies. I am not satisfied with a vague verdict like “it’s impressive.” I want to know <strong>precisely what makes it impressive, why it holds together, and whether that logic can be used on myself.</strong></p><p>But this urge to dismantle the world has not turned me into a cold-blooded person.</p><p>I will come across a video of a stranger suffering and sit in silence for a long time. I will see a roadside osmanthus beaten to the ground by the rain, stand there watching it for ages, and then write: “A tree may stand a hundred years, yet becomes rotten wood across a thousand; ten miles of prosperity, ten thousand miles of desolation.” When I see things in the international news that I am powerless to change, something presses on my chest and I cannot put it into words.</p><p>I have not switched off my sensitivity. I have only drawn a boundary around it.</p><hr><p><strong>The boundary is this: my emotions and my capacity for empathy are given only to what lies within my power to affect.</strong></p><p>It sounds like a kind of coldness. But it is exactly the opposite—it is a form of protection. If I poured all my feeling into every suffering in the world each day, I would be crushed. Not because I am incapable, but because no one is capable of it. Human empathy is a finite resource, like physical strength—it can be exhausted. Psychology calls this “compassion fatigue”: immersed for too long in suffering one cannot change, a person slides from empathy into numbness.</p><p>I will not allow myself to go numb. So I have made a choice: what I can help, I help with everything I have; what I cannot help, I acknowledge, and then set it down for now.</p><p>This is not “not caring.” It is <strong>making myself strong enough first, and then coming back to face the things I cannot yet carry.</strong></p><hr><p>Many people assume that someone like me, thinking about “weight,” “leverage,” and “ripples” all day long, must live in a state of constant tension, exhaustion, and anxiety.</p><p>Not so.</p><p>I am someone who slacks off. I can scroll Douyin for an entire day, play games all day long, think about nothing, do nothing. But I do not feel guilty about slacking off. Because I know clearly in my heart: my long-term direction has not changed. That I lie flat today does not mean I am lost. I am resting, not giving up.</p><p>That distinction matters.</p><p>Many people fall into self-reproach after slacking off—“I wasted another day,” “Why am I so undisciplined,” “Maybe I’m simply not hard-working enough.” At bottom, this self-reproach comes from having no anchor. You do not know where you are going, so every minute of deviation throws you into panic. But if you have a direction—one you have genuinely thought through, a long-term direction—then a brief detour is not being lost. It is regrouping.</p><p><strong>A sense of direction is steadier than execution. Execution fluctuates; direction does not.</strong></p><p>This is the ease I have built up over the past few years. Ease is not because I do not care. It is because I know which road I am on. Whether I walk fast or slow is not the problem—so long as the direction is right.</p><hr><p>One more thing I want to say.</p><p>This “weight–leverage” mental model is something I hammered out for myself alone. But I do not want readers to treat it as a “life formula” to apply. Because no single model can account for an entire life.</p><p>Purely rational, logical thinking can analyze business, but it cannot explain why a mother tucks the blanket around her child in the middle of the night.</p><p>Purely rational, logical thinking can take apart the essence of personal connections, but it cannot account for why a person would stand beneath an osmanthus tree in the rain for an entire evening.</p><p>Purely rational, logical thinking can be used to optimize my own path of growth—but when my reason reaches its boundary, when it runs into what cannot be thought through no matter how hard I try, I stop. I entrust myself to Allah. I acknowledge my own limits.</p><p>This may sound contradictory: a person who dismantles everything with logic is also a person who believes in Allah. But to me, these two form precisely one complete loop:</p><p><strong>Exhaust reason, acknowledge the boundary, entrust it to faith.</strong></p><p>This is not a split. This is self-knowledge.</p><hr><p>This essay has no methodology, no framework diagram, no “step one, step two, step three.”</p><p>It is only an honest account of myself.</p><p>I am a rational person, but I have not abandoned my sensitivity. I am someone who dismantles systems, but I acknowledge the limits of systems. I feel powerless before suffering in distant places, but I choose to focus on what I can change right in front of me. I slack off, I get lazy, I can scroll Douyin all day doing nothing—but I know clearly where I am going tomorrow.</p><p>My ideals and my path are filled with cold dissection and calculation. But the thing that drives all of it forward—is not reason.</p><p>It is the osmanthus in the rain. It is the tears of strangers. It is the resolve never to be a powerless bystander again.</p><p><strong>I have, from beginning to end, always been myself.</strong></p><p>The clarity after the floating dust settled did not make me cold. The physics of breaking through did not turn me into a machine. I still cry, still laugh, still stop at certain moments to look earnestly at this world, and then say to myself—alright, keep going.</p><hr><p><em>However complex the world may be, I remain myself.</em><br><em>However full of suffering the world may be, I place my trust in Allah.</em><br><em>Even if the world is doomed to perish, then I return to the Lord.</em></p>]]>
    </content>
    <id>https://hackerbs.com/posts/e836243c.html</id>
    <link href="https://hackerbs.com/posts/e836243c.html"/>
    <published>2026-07-18T00:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="《我始终是我》"><a href="#《我始终是我》" class="headerlink" title="《我始终是我》"></a>《我始终是我》</h1><hr>]]>
    </summary>
    <title>随笔 - 《我始终是我》</title>
    <updated>2026-09-27T10:09:08.026Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="文学" scheme="https://hackerbs.com/categories/%E6%96%87%E5%AD%A6/"/>
    <category term="随笔" scheme="https://hackerbs.com/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="人生价值" scheme="https://hackerbs.com/tags/%E4%BA%BA%E7%94%9F%E4%BB%B7%E5%80%BC/"/>
    <category term="破局的物理学" scheme="https://hackerbs.com/tags/%E7%A0%B4%E5%B1%80%E7%9A%84%E7%89%A9%E7%90%86%E5%AD%A6/"/>
    <category term="重量与杠杆" scheme="https://hackerbs.com/tags/%E9%87%8D%E9%87%8F%E4%B8%8E%E6%9D%A0%E6%9D%86/"/>
    <category term="自我认知" scheme="https://hackerbs.com/tags/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5/"/>
    <category term="人脉" scheme="https://hackerbs.com/tags/%E4%BA%BA%E8%84%89/"/>
    <content>
      <![CDATA[<h1 id="《破局的物理学：重量、杠杆与涟漪》"><a href="#《破局的物理学：重量、杠杆与涟漪》" class="headerlink" title="《破局的物理学：重量、杠杆与涟漪》"></a>《破局的物理学：重量、杠杆与涟漪》</h1><hr><p>成年人的世界里，一切关系本质上都是交易。</p><p>这话不好听。但它让我站起来了。</p><hr><p>很长一段时间我活在一种撕裂里。一边是浮尘落尽后的清醒——知道那些百年基业、名门望族，拉长到千年尺度不过朽木一堆；一边是眼睁睁看着别人在往上走，自己却连”破圈”的踏板都摸不到。</p><p>我试过焦虑，没用。我试过混圈子，更没用。没有东西能给别人的人，站在谁身边都是空气。</p><p>后来我停止向外找答案，开始向内搭模型。我反复问自己一个问题：<strong>我能提供什么？不能提供任何东西的人，凭什么让别人把资源给你？</strong></p><p>答案在物理里。</p><hr><h2 id="重量"><a href="#重量" class="headerlink" title="重量"></a>重量</h2><p>重量是你的硬通货。你的技能、你的成果、你用时间验证过的不可替代性。</p><p>这玩意骗不了人。你有没有重量，上手一试就知道。你可以吹一万个字，但一个项目砸下来，重量为零的人瞬间透明。</p><p>怎么积累重量？四个字：努力、沉淀、勤奋、不急躁。</p><p>这四个字单独看像鸡汤，但真正做过事的人知道它的真正含义——把眼前每一件小事做到超出预期。不是为老板，不是为领导，是为自己。因为每一件被做到极致的事，都会变成你的履历上一条无法被抹去的刻度。重量是堆出来的。跳槽堆不出来，混日子堆不出来。</p><p>没有重量的人，所有的”向上社交”都是自己骗自己。</p><hr><h2 id="杠杆"><a href="#杠杆" class="headerlink" title="杠杆"></a>杠杆</h2><p>有重量，你能站在地上。但同等重量的两个人，撬动的世界可以天差地别。差在哪？</p><p>杠杆。</p><p>杠杆是你的认知、你的思维框架、你的信息差。</p><p>大多数人对认知提升的理解还停留在”多读书”。这太浅了。认知提升不是你读了多少本，而是你能不能看到别人看不到的底层结构。</p><p>拉长杠杆的方式除了读人物传记外，还可以读 IPO 招股书。</p><p>传记不是看故事，是看高手在命运交叉口的决策逻辑。那些瞬间里藏着一个人全部的认知框架，你可以直接拿过来装进自己的系统。</p><p>IPO 招股书是商业世界里最没水分的认知提纯。一份材料翻开，这家公司怎么赚钱、行业的底线在哪、市场如何运转，全在纸上。别人真金白银验证过的商业真相，你花几个小时就能看完。绝大多数人一辈子不会翻开一份招股书。你翻了，你的杠杆就比他们长了一截。</p><hr><h2 id="破圈"><a href="#破圈" class="headerlink" title="破圈"></a>破圈</h2><p>重量有了，杠杆有了，你就可以谈”人脉”了。</p><p>但人脉这个词已经被用烂了。太多人把它想象成”关系彩票”——偶遇一位大佬，对方一眼看中你的才华，从此平步青云。这不是人脉，这是幻想。</p><p>人脉不在圈子里，在你身边。</p><p>家庭资源好的人，家人朋友就是人脉。学历背景强的人，老师同学就是资源。如果你和我一样，什么都没有——<strong>你的直属领导、你的老板，就是你天然的人脉。</strong> 他们已经用结果证明了自己的成功，你要做的不是满世界找伯乐，而是成为他们手里最锋利的兵。</p><p>但这里有一个致命的顺序问题：不是先有人脉，再有能力。是先有能力，才有人脉。你不要去”找”人脉，你要让自己成为别人想资源的那个人。当你的重量足够沉、你的杠杆足够长，人脉会自己来找你。</p><p>而当你站到他们面前的时候，记住一件事：你不是去乞讨的。</p><p>你是去提供交易的选项。告诉对方”我能给你什么”，而不是”我需要你什么”。这是尊严。这是你多年努力堆出来的重量，赋予你的资格。</p><hr><h2 id="方向"><a href="#方向" class="headerlink" title="方向"></a>方向</h2><p>重量和杠杆回答了”怎么走”。但它回答不了”往哪走”。</p><p>这是我自己花了最长时间才想明白的问题。我建了这个模型，把刀磨得锋利，把认知拉得深远，积累出了足够沉甸甸的重量——但然后呢？我撬动世界以后，往什么方向撬？</p><p>我给出的答案是这样的。</p><p>2020 年的一个雨天，我下班途中看着桂花被雨打落满地，写下了”百年古树千年朽木，十里繁荣万里荒芜”。那时候我以为自己看透了——繁荣是假的，基业是虚的，一切都是浮尘。但那个视角漏掉了一个关键问题：如果我对这个世界的态度仅仅停留在”看透”，那我就只是一个清醒的旁观者。清醒地看着世界塌陷，什么都不做——这恰恰是另一种形式的麻木。</p><p>我不愿意做旁观者。</p><p>所以我又写了 2025 年的那篇——《存在的痕迹，不在于石碑，而于涟漪》。石碑再好，终将风化。但你作为一颗石子砸向水面时激起的涟漪——你改变过的人、你传递出去的力量、你在这个世界上砸出来的动静——会一层一层扩散，永远荡漾下去。</p><p>这，大概就是方向。</p><p>我不是为了革命，不是为了改变全世界。但如果前行路上，我足够强大了，能顺手拉起身边跌倒的一个人——那我活过。如果涟漪够远，能传递到我看不见的地方——那我没白活。</p><hr><p><em>浮尘落尽之后，石碑终成朽木，而涟漪不息……</em></p><hr><p><strong>The Physics of Breaking Through: Weight, Leverage, and Ripples</strong></p><p>In the adult world, every relationship is, at bottom, a transaction.</p><p>That is not a pleasant thing to say. But it is what got me back on my feet.</p><hr><p>For a long time I lived inside a tearing. On one side was the clarity after the floating dust settles—knowing that those century-old foundations and great families, stretched across a thousand years, are nothing but rotten wood. On the other side was watching other people climb upward while I could not even touch the stepping stone to break out of my circle.</p><p>I tried anxiety. Useless. I tried working the circles. Even more useless. Someone who has nothing to offer is like thin air, no matter who he stands beside.</p><p>Later I stopped searching outward for answers and started building the model inward. I asked myself one question over and over: <strong>What can I offer? What right does a person who can offer nothing have to expect others to hand their resources to him?</strong></p><p>The answer lies in physics.</p><hr><p><strong>Weight</strong></p><p>Weight is your hard currency. Your skills, your results, your irreplaceability as tested by time.</p><p>This cannot be faked. Whether you have weight becomes clear the moment you are put to the test. You can talk up ten thousand words, but the instant a project lands on you, someone with zero weight turns transparent.</p><p>How do you accumulate weight? Four words: effort, accumulation, diligence, patience.</p><p>Read separately, these four words sound like chicken soup for the soul—but anyone who has truly done the work knows what they really mean: do every small thing in front of you beyond what is expected. Not for the boss, not for the manager—for yourself. Because every thing carried to its utmost becomes a mark on your record that cannot be erased. Weight is piled up. Job-hopping cannot pile it up. Coasting through your days cannot pile it up.</p><p>For someone with no weight, all “upward networking” is nothing but deceiving oneself.</p><hr><p><strong>Leverage</strong></p><p>With weight, you can stand on the ground. But two people of equal weight can move worlds of vastly different size. Where does the difference lie?</p><p>Leverage.</p><p>Leverage is your cognition, your mental frameworks, your information asymmetry.</p><p>Most people’s understanding of raising their cognition still stops at “read more books.” That is far too shallow. Raising cognition is not about how many books you have read—it is about whether you can see the underlying structures that others cannot see.</p><p>Besides reading biographies, there is another way to lengthen the lever: read IPO prospectuses.</p><p>Biographies are not for the stories—they are for the decision logic of masters at the crossroads of fate. Those moments hold a person’s entire cognitive framework, and you can lift it straight out and install it into your own system.</p><p>An IPO prospectus is the most undiluted distillation of cognition in the business world. Open one document and it is all there on paper: how this company makes money, where the bottom line of the industry lies, how the market operates. Commercial truths that others have verified with real money—you can read through them in a few hours. The overwhelming majority of people never open a prospectus in their entire life. You did, and your lever is a notch longer than theirs.</p><hr><p><strong>Breaking Through</strong></p><p>With weight and leverage in place, you can finally talk about “personal network.”</p><p>But that word has been used to death. Too many people imagine it as a “relationship lottery”—you chance upon a big shot, he recognizes your talent at a glance, and from then on everything rises smoothly. That is not a network. That is fantasy.</p><p>Your network is not out in the circles. It is right beside you.</p><p>For those with good family resources, family and friends are their network. For those with strong academic backgrounds, teachers and classmates are their resources. If you are like me and have none of that—<strong>your direct supervisor, your boss, is your natural network.</strong> They have already proven their success with results. What you need to do is not roam the world looking for a talent scout, but become the sharpest soldier they have.</p><p>But here lies a fatal question of order: it is not network first and ability second. It is ability first, then network. Do not go out to “find” a network—make yourself into the person others want to invest in. When your weight is heavy enough and your leverage long enough, the network will come looking for you.</p><p>And when you stand before them, remember one thing: you are not there to beg.</p><p>You are there to offer a transaction. Tell the other person “this is what I can give you,” not “this is what I need from you.” That is dignity. That is the qualification your years of effort, piled into weight, have earned you.</p><hr><p><strong>Direction</strong></p><p>Weight and leverage answer the question “how to walk.” But they cannot answer “which way to walk.”</p><p>This is the question that took me the longest to work out. I built this model, sharpened the blade, drew my cognition deep, accumulated weight heavy enough—and then what? After I pry the world open, in which direction do I pry?</p><p>Here is the answer I arrived at.</p><p>On a rainy day in 2020, walking home from work, I watched osmanthus blossoms beaten to the ground by the rain and wrote: “A tree may stand a hundred years, yet becomes rotten wood across a thousand; ten miles of prosperity, ten thousand miles of desolation.” At the time I thought I had seen through everything—prosperity is false, foundations are hollow, all of it is floating dust. But that view left out one crucial question: if my attitude toward this world stops at “seeing through it,” then I am nothing more than a clear-eyed bystander. Watching lucidly as the world caves in and doing nothing—that is precisely another form of numbness.</p><p>I am not willing to be a bystander.</p><p>So I wrote that 2025 piece—“The Traces of Existence: Not in Stone Monuments, But in Ripples.” However fine a stone monument may be, it will weather away in the end. But the ripples you stir when you strike the water like a stone—the people you have changed, the strength you have passed on, the stir you have made in this world—will spread outward, layer by layer, and keep on rippling forever.</p><p>This, roughly speaking, is direction.</p><p>I am not here for revolution, not here to change the whole world. But if, on the road ahead, I become strong enough to pull up one person who has fallen beside me—then I have lived. If the ripples travel far enough to reach places I cannot see—then I have not lived in vain.</p><hr><p><em>After the floating dust settles, the stone monument becomes rotten wood in the end, while the ripples never cease……</em></p>]]>
    </content>
    <id>https://hackerbs.com/posts/fe4943a6.html</id>
    <link href="https://hackerbs.com/posts/fe4943a6.html"/>
    <published>2026-07-05T00:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="《破局的物理学：重量、杠杆与涟漪》"><a href="#《破局的物理学：重量、杠杆与涟漪》" class="headerlink" title="《破局的物理学：重量、杠杆与涟漪》"></a>《破局的物理学：重量、杠杆与涟漪》</h1><hr>]]>
    </summary>
    <title>随笔 - 《破局的物理学：重量、杠杆与涟漪》</title>
    <updated>2026-09-27T10:10:16.450Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="文学" scheme="https://hackerbs.com/categories/%E6%96%87%E5%AD%A6/"/>
    <category term="随笔" scheme="https://hackerbs.com/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="《存在的痕迹：不在于石碑，而于涟漪》" scheme="https://hackerbs.com/tags/%E3%80%8A%E5%AD%98%E5%9C%A8%E7%9A%84%E7%97%95%E8%BF%B9%EF%BC%9A%E4%B8%8D%E5%9C%A8%E4%BA%8E%E7%9F%B3%E7%A2%91%EF%BC%8C%E8%80%8C%E4%BA%8E%E6%B6%9F%E6%BC%AA%E3%80%8B/"/>
    <category term="文学" scheme="https://hackerbs.com/tags/%E6%96%87%E5%AD%A6/"/>
    <category term="哲学" scheme="https://hackerbs.com/tags/%E5%93%B2%E5%AD%A6/"/>
    <category term="思想" scheme="https://hackerbs.com/tags/%E6%80%9D%E6%83%B3/"/>
    <category term="人生价值" scheme="https://hackerbs.com/tags/%E4%BA%BA%E7%94%9F%E4%BB%B7%E5%80%BC/"/>
    <content>
      <![CDATA[<p>观此视频有感</p><p><a class="link"   href="https://www.douyin.com/video/7560968339707759924" >人为什么有虚岁 因为妈妈比其他人 单独的拥有了你一年<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p>《存在的痕迹：不在于石碑，而于涟漪》</p><p>小时候我就在想——<br>人生的价值是什么？<br>是钱吗？是权吗？是骄奢淫逸吗？</p><p>那些生不带来、死不带去的东西罢了。</p><p>人生没多长，<br>人生不应该只是一场体验，<br>人生应该留下些什么，<br>人生应该有价值。</p><p>钱、权，这些终将在你死去的那一刻消散。<br>或许你为家人带来了财富，让他们享了福，<br>我不能说这没有价值，<br>但这还不够，远远不够。<br>五十年、百年之后，他们也会逝去，<br>你的存在，也将被慢慢淡忘。</p><p>如果这世间没有了你存在的痕迹，<br>那么，你在这个世界上真的活过吗？</p><p>年幼的我，怀揣着科研的梦想，<br>认为知识是宝贵的财富。<br>我曾以为，一切都是虚妄，<br>唯有将知识——这人类的瑰宝——传承下去，<br>让若干年、数十年之后，<br>还有人使用这些知识，<br>那便是人生价值的体现。</p><p>后来，时间冲刷着一切。<br>麻木、迷茫，混杂着泥沙一团糟的日子，<br>似乎，好像也就这样活一辈子了。</p><p>苦难是什么？<br>是肉体上的饥寒交迫吗？<br>确实，那也是苦难。<br>可最痛苦的折磨是什么呢？<br>是当我遇见像那个视频里一样的事情时，<br>什么都做不了——<br>没有能力伸出援手，<br>没有能力改变任何，<br>只能眼睁睁地看着一切发生。<br>那种精神上的撕裂与无力，<br>不就是最大的苦难吗？</p><p>我年幼时满怀希望，<br>以科研去证明人生价值。<br>后来才发现，这并不如我想象中那般简单。<br>那是一个遥远的理想。<br>不过，无需气馁，也无需放弃。<br>在前行的路上，<br>若能拉起身边跌倒的人，<br>那亦是值得的。</p><p>无论如何，<br>我不喜欢这种苦难。<br>我不喜欢清醒地看着一切坍塌，<br>连逃避都成了奢望。</p><p>也许，这就是活着的意义吧——<br>即使努力是一种痛苦，<br>那就让更大的痛苦逼着自己前进。<br>比苦难甜，就行了。</p><p>勿要，力不能挽流年，唯有目送山河倾——追悔莫及</p><p><strong>The Traces of Existence: Not in Stone Monuments, But in Ripples</strong></p><p>When I was young, I often wondered—<br>What is the value of life?<br>Is it money? Power? Debauchery?<br>But these are merely things we cannot bring with us at birth, nor take with us in death.</p><p>Life is not long.<br>Life should not be just an experience.<br>Life ought to leave something behind,<br>Life ought to have value.</p><p>Money, power—these will vanish the moment you die.<br>Perhaps you have brought wealth to your family, granted them comfort.<br>I cannot say this holds no value,<br>But it is not enough, far from enough.<br>Fifty years, a century later, they too will pass away,<br>And your existence will slowly fade from memory.</p><p>If no trace of you remains in this world,<br>Then, have you truly lived at all?</p><p>As a child, I cherished dreams of scientific research,<br>Believing knowledge to be a precious treasure.<br>I once thought that all else was illusion,<br>That only knowledge—this gem of humanity—passed down through generations,<br>So that years, decades later,<br>People would still make use of this knowledge—<br>That would be the manifestation of life’s value.</p><p>But as time washed over everything,<br>Numbness, confusion, and days muddled with chaos<br>Made it seem as if living out a lifetime this way was just how things were.</p><p>What is suffering?<br>Is it the pangs of hunger and cold?<br>Yes, that too is suffering.<br>But what is the most agonizing torment?<br>It is when I encounter situations like the one in that video,<br>And can do nothing—<br>Unable to reach out and help,<br>Unable to change anything,<br>Only able to watch it all unfold before my eyes.<br>That spiritual tearing and powerlessness—<br>Is that not the greatest suffering of all?</p><p>In my youth, I was full of hope,<br>Determined to prove life’s value through scientific research.<br>Only later did I realize it was not as simple as I had imagined.<br>It was a distant ideal.<br>Yet, there is no need for despair, no need to give up.<br>On the path forward,<br>If we can lift up those who have fallen beside us,<br>That too is meaningful.</p><p>No matter what,<br>I do not like this kind of suffering.<br>I do not like watching everything collapse with clear eyes,<br>Where even escape becomes a luxury.</p><p>Perhaps this is the meaning of living—<br>Even if effort is a form of pain,<br>Let a greater pain compel you to move forward.<br>As long as it is sweeter than the suffering, it is enough.</p><p>Do not let it be<br>That you lack the strength to hold back the flowing years, and can only watch the mountains and rivers fall—<br>Left with nothing but regret.<br>​<br>​اللّٰهُ أَكْبَرُ</p>]]>
    </content>
    <id>https://hackerbs.com/posts/99f1bc53.html</id>
    <link href="https://hackerbs.com/posts/99f1bc53.html"/>
    <published>2025-10-17T08:15:00.000Z</published>
    <summary>
      <![CDATA[<p>观此视频有感</p>
<p><a class="link" href="https://www.douyin.com/video/7560968339707759924">人为什么有虚岁 因为妈妈比其他人 单独的拥有了你一年<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p>]]>
    </summary>
    <title>随笔 - 《存在的痕迹：不在于石碑，而于涟漪》</title>
    <updated>2026-09-23T13:04:04.171Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="基础" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%9F%BA%E7%A1%80/"/>
    <category term="IT专业术语" scheme="https://hackerbs.com/tags/IT%E4%B8%93%E4%B8%9A%E6%9C%AF%E8%AF%AD/"/>
    <category term="英语" scheme="https://hackerbs.com/tags/%E8%8B%B1%E8%AF%AD/"/>
    <category term="英文缩写" scheme="https://hackerbs.com/tags/%E8%8B%B1%E6%96%87%E7%BC%A9%E5%86%99/"/>
    <category term="中英对照" scheme="https://hackerbs.com/tags/%E4%B8%AD%E8%8B%B1%E5%AF%B9%E7%85%A7/"/>
    <content>
      <![CDATA[<h1 id="用于各IT场景的专业术语的中英文对照"><a href="#用于各IT场景的专业术语的中英文对照" class="headerlink" title="用于各IT场景的专业术语的中英文对照"></a>用于各IT场景的专业术语的中英文对照</h1><h2 id="工单场景"><a href="#工单场景" class="headerlink" title="工单场景"></a>工单场景</h2><table><thead><tr><th>英文</th><th>英文全称</th><th>中文</th><th>释义</th></tr></thead><tbody><tr><td>TC</td><td>Ticket Created</td><td>新建工单</td><td>工单已在系统中被成功创建，并进入待处理队列</td></tr><tr><td>PR</td><td>Pending Report</td><td>等待报告</td><td>工单处理因等待（用户、第三方或系统提供的）额外信息、日志或报告而暂时挂起</td></tr><tr><td>SM</td><td>Self-Maintenance</td><td>自行维护</td><td>问题由用户自行解决或无需运维团队介入（如过保服务器），随后工单可被关闭</td></tr><tr><td>R</td><td>Resolved</td><td>已解决</td><td>问题已被运维团队成功修复，该工单处理完毕</td></tr><tr><td>IW</td><td>In Warranty</td><td>在保内</td><td>表示设备或服务处于保修期内，维修通常由供应商免费提供</td></tr><tr><td>OOW</td><td>Out of Warranty</td><td>已过保</td><td>表示设备或服务已超出保修期，维修通常需要付费</td></tr><tr><td>TPM</td><td>Third-Party Maintenance</td><td>第三方维保</td><td>表示设备由原厂之外的第三方服务商提供维护支持</td></tr></tbody></table><h2 id="日常运维场景"><a href="#日常运维场景" class="headerlink" title="日常运维场景"></a>日常运维场景</h2><table><thead><tr><th>英文</th><th>英文全称</th><th>中文</th><th>释义</th></tr></thead><tbody><tr><td>Ops Task Status Board</td><td>Ops(Operations )</td><td>运维任务状态看板</td><td>一个实时展示运维任务进度和状态的可视化看板</td></tr></tbody></table>]]>
    </content>
    <id>https://hackerbs.com/posts/78f049b3.html</id>
    <link href="https://hackerbs.com/posts/78f049b3.html"/>
    <published>2025-10-17T05:45:45.000Z</published>
    <summary>
      <![CDATA[<h1 id="用于各IT场景的专业术语的中英文对照"><a href="#用于各IT场景的专业术语的中英文对照" class="headerlink" title="用于各IT场景的专业术语的中英文对照"></a>用于各IT场景的专业术语的中英文对照</h1><h2 id="工单场景"><a href="#工单场景" class="headerlink" title="工单场景"></a>工单场景</h2>]]>
    </summary>
    <title>IT场景专业术语表</title>
    <updated>2026-09-23T13:04:04.089Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="存储" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AD%98%E5%82%A8/"/>
    <category term="DELL" scheme="https://hackerbs.com/tags/DELL/"/>
    <category term="硬盘" scheme="https://hackerbs.com/tags/%E7%A1%AC%E7%9B%98/"/>
    <category term="排障" scheme="https://hackerbs.com/tags/%E6%8E%92%E9%9A%9C/"/>
    <category term="服务器" scheme="https://hackerbs.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <category term="运维" scheme="https://hackerbs.com/tags/%E8%BF%90%E7%BB%B4/"/>
    <category term="带外" scheme="https://hackerbs.com/tags/%E5%B8%A6%E5%A4%96/"/>
    <category term="浪潮" scheme="https://hackerbs.com/tags/%E6%B5%AA%E6%BD%AE/"/>
    <category term="联想" scheme="https://hackerbs.com/tags/%E8%81%94%E6%83%B3/"/>
    <category term="华三" scheme="https://hackerbs.com/tags/%E5%8D%8E%E4%B8%89/"/>
    <category term="超聚变" scheme="https://hackerbs.com/tags/%E8%B6%85%E8%81%9A%E5%8F%98/"/>
    <category term="故障" scheme="https://hackerbs.com/tags/%E6%95%85%E9%9A%9C/"/>
    <category term="日志" scheme="https://hackerbs.com/tags/%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<h2 id="情况说明"><a href="#情况说明" class="headerlink" title="情况说明"></a>情况说明</h2><p>收到系统发出IO占用率和IO延迟的告警，登录带外排查无任何错误日志，随后进入操作系统使用脚本批量排查smartctl日志，发现存在错误计数，因smartctl并非厂家带外的告警日志，所以特此向Inspur、H3C、Lenovo、DELL进行了咨询，其中提到了一些日志参数的告警，目前已收到H3C、Inspur的回复</p><p><strong>厂商对日志中以下内容的告警表示认可并作为报修依据</strong></p><table><thead><tr><th>硬盘类型</th><th>参数</th><th>翻译</th><th>说明</th><th>来源</th></tr></thead><tbody><tr><td>SSD</td><td>ID 5 Reallocated_Sector_Ct</td><td>重分配扇区计数</td><td>因坏块被重新分配的扇区数量，值越高健康状况越差</td><td>新华三</td></tr><tr><td>SSD</td><td>ID 197 Current_Pending_Sector</td><td>当前待处理扇区计数</td><td>有潜在读写错误、待重新映射的扇区数量(&gt;100更换)</td><td>浪潮&#x2F;新华三</td></tr><tr><td>SSD</td><td>ID 187 Reported_Uncorrect</td><td>已报告的不可纠正错误</td><td>硬盘向主机报告的读&#x2F;写过程中发生的不可恢复错误次数(&gt;10更换)</td><td>浪潮</td></tr><tr><td>HDD</td><td>Total uncorrected errors</td><td>总无法纠正错误</td><td>所有无法纠正的读&#x2F;写错误之和</td><td>浪潮&#x2F;新华三</td></tr><tr><td>HDD</td><td>Verify total uncorrected errors</td><td>校验无法纠正错误</td><td>硬盘控制器自检时无法通过ECC纠正的错误总数，高值表示可靠性下降</td><td>新华三</td></tr><tr><td>HDD</td><td>Read total uncorrected errors</td><td>读无法纠正错误</td><td>读取&#x2F;写入IO时无法通过ECC纠正的错误总数，高值表示可靠性下降</td><td>新华三</td></tr><tr><td>HDD</td><td>Elements in grown defect list</td><td>已增长缺陷列表中的元素</td><td>硬盘运行中登记的坏块数量，用于追踪坏块增长</td><td><a class="link"   href="https://github.com/icenowy" >@Icenowy<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>于清华TUNA协会技术群组内回复</td></tr></tbody></table><p><strong>以下是辅助日志，作为协助排障参考，不作为直接依据</strong></p><table><thead><tr><th>硬盘类型</th><th>参数</th><th>翻译</th><th>说明</th><th>来源</th></tr></thead><tbody><tr><td>SSD</td><td>Reallocated Sector Count</td><td>重分配扇区计数</td><td>记录因物理损坏被替换到备用扇区的次数，数值增加说明介质退化(&gt;500为不可靠)</td><td>浪潮</td></tr><tr><td>SSD</td><td>CRC Error Count</td><td>CRC 错误计数</td><td>记录主机与硬盘之间传输数据时发生的 CRC 校验错误次数，常见原因包括数据线接触不良、电磁干扰或接口问题，单盘较多则可能为该盘本体故障，多个硬盘则进一步筛查是否位于同一个硬盘背板或同一个SAS端口</td><td>浪潮</td></tr><tr><td>HDD</td><td>Non-medium error count</td><td>非介质故障</td><td>与上方SSD的是一样的意思</td><td>浪潮</td></tr></tbody></table><hr><p>清华大学TUNA协会技术群组</p><p>感谢<a class="link"   href="https://github.com/icenowy" >@Icenowy<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>于<em>清华TUNA协会技术群组</em>内回复提出参考<code>Elements in grown defect list</code>参数的值，该值是HDD独有的指标，记录的是在使用过长中新发现的物理坏块数，数值持续增长则意味着该硬盘可靠性正在下降</p><h2 id="排查过程"><a href="#排查过程" class="headerlink" title="排查过程"></a>排查过程</h2><h3 id="对于JBOD模式的硬盘"><a href="#对于JBOD模式的硬盘" class="headerlink" title="对于JBOD模式的硬盘"></a>对于JBOD模式的硬盘</h3><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用smartctl直接查询即可</span></span><br><span class="line">smartctl -a /dev/sdX</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">可以增加grep快速筛选想要查询的参数，在替换双引号中的即可</span></span><br><span class="line">smartctl -a /dev/sdX | grep -E &quot;Elements in grown defect list&quot;</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">配合<span class="keyword">for</span>迅速遍历磁盘，&#123;a..z&#125;则是遍历sda到sdz的所有盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如果盘很多那可以直接写为&#123;a..zz&#125;，则是遍历sda到sdzz共702个盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">[ -b <span class="string">&quot;/dev/sd<span class="variable">$i</span>&quot;</span> ] <span class="built_in">test</span>命令的简写，判断该设备是不是一个硬盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash"><span class="built_in">echo</span> <span class="string">&quot;sd<span class="variable">$i</span>&quot;</span>是在输出日志前输出盘号，避免不知道是哪个盘的报错</span></span><br><span class="line">for i in &#123;a..z&#125;; do [ -b &quot;/dev/sd$i&quot; ] &amp;&amp; echo &quot;sd$i:&quot; &amp;&amp; sudo smartctl -a &quot;/dev/sd$i&quot; | grep &quot;Elements in grown defect list&quot;; done</span><br></pre></td></tr></table></figure></div><h3 id="对于LSI-MegaRAID控制器，RAID模式的硬盘"><a href="#对于LSI-MegaRAID控制器，RAID模式的硬盘" class="headerlink" title="对于LSI MegaRAID控制器，RAID模式的硬盘"></a>对于LSI MegaRAID控制器，RAID模式的硬盘</h3><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">由于硬盘由阵列卡接管，所以需要调用MegaRAID驱动程序才可访问</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">/dev/sdX输入你挂载到系统的阵列，例如通常/dev/sda是RAID1系统盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中megaraid,后面的数字对应该硬盘是该阵列中的第几个盘，从编号0开始是第一个</span></span><br><span class="line">smartctl -a -d megaraid,0 /dev/sdX</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">同样的grep筛选</span></span><br><span class="line">smartctl -a -d megaraid,0 /dev/sdX | grep -E &quot;Non-medium error count&quot;</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">遍历快速排查所有盘</span></span><br><span class="line">for raid in &#123;a..z&#125;;do [ -b &quot;/dev/sd$raid&quot; ] &amp;&amp; for disk in &#123;0..20&#125;;do echo -e &quot;\033[36;1m阵列 sd$raid 中硬盘 $disk 日志: &quot; &amp;&amp; smartctl -a -d megaraid,$disk /dev/sd$raid | grep -E &quot;Non-medium error count&quot;;done;done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">上方命令为单行，方便复制粘贴执行，以下是拆解后可读的版本</span></span><br><span class="line">for raid in &#123;a..z&#125;; do # 遍历sda到sdz的设备</span><br><span class="line">    [ -b &quot;/dev/sd$raid&quot; ] &amp;&amp; # 判断是不是硬盘，不是就跳过</span><br><span class="line">    for disk in &#123;0..20&#125;; do # 预设是0到20共21个硬盘，可以自行设置</span><br><span class="line">        echo -e &quot;\033[36;1m阵列 sd$raid 中硬盘 $disk 日志: &quot; # 打印个开头，不然不知道是哪个设备的日志</span><br><span class="line">        smartctl -a -d megaraid,$disk /dev/sd$raid | grep -E &quot;Non-medium error count&quot; # 根据你的需要调整grep筛选的内容</span><br><span class="line">    done</span><br><span class="line">done</span><br></pre></td></tr></table></figure></div><h2 id="进阶脚本"><a href="#进阶脚本" class="headerlink" title="进阶脚本"></a>进阶脚本</h2><p><strong>该脚本会在当前目录输出<code>smartctl</code>的日志源码到<code>disk_error_$(date +%Y%m%d_%H%M%S).log</code>文件</strong></p><p>推荐使用此单行模式，复制粘贴直接用，不需要创建shell文件</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">log_file=&quot;disk_error_$(date +%Y%m%d_%H%M%S).log&quot;; for raid in &#123;a..d&#125;; do [ -b &quot;/dev/sd$raid&quot; ] &amp;&amp; for disk in &#123;0..23&#125;; do smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1 &amp;&amp; output=$(smartctl -a -d megaraid,$disk /dev/sd$raid) &amp;&amp; serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;) &amp;&amp; if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then reallocated_sectors=$(echo &quot;$output&quot; | grep &quot;Reallocated_Sector_Ct&quot; | awk &#x27;&#123;print $10&#125;&#x27;); reallocated_sectors=$&#123;reallocated_sectors:-0&#125;; current_pending=$(echo &quot;$output&quot; | grep &quot;Current_Pending_Sector&quot; | awk &#x27;&#123;print $10&#125;&#x27;); current_pending=$&#123;current_pending:-0&#125;; reported_uncorrect=$(echo &quot;$output&quot; | grep &quot;Reported_Uncorrect&quot; | awk &#x27;&#123;print $10&#125;&#x27;); reported_uncorrect=$&#123;reported_uncorrect:-0&#125;; offline_uncorrect=$(echo &quot;$output&quot; | grep &quot;Offline_Uncorrectable&quot; | awk &#x27;&#123;print $10&#125;&#x27;); offline_uncorrect=$&#123;offline_uncorrect:-0&#125;; crc_errors=$(echo &quot;$output&quot; | grep &quot;CRC_Error_Count&quot; | awk &#x27;&#123;print $10&#125;&#x27;); crc_errors=$&#123;crc_errors:-0&#125;; [ &quot;$reallocated_sectors&quot; -gt 0 ] || [ &quot;$current_pending&quot; -gt 0 ] || [ &quot;$reported_uncorrect&quot; -gt 0 ] || [ &quot;$offline_uncorrect&quot; -gt 0 ] || [ &quot;$crc_errors&quot; -gt 0 ] &amp;&amp; echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot; &amp;&amp; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n\033[36;1m05 重分配扇区计数(Reallocated Sector Count)：\033[31;1m$reallocated_sectors\033[0m\n\033[36;1m197 当前待处理扇区(Current Pending Sector Count)：\033[31;1m$current_pending\033[0m\n\033[36;1m已报告的不可纠正错误(Reported Uncorrectable Errors)：\033[31;1m$reported_uncorrect\033[0m\n\033[36;1m离线不可纠正错误(Offline Uncorrectable)：\033[31;1m$offline_uncorrect\033[0m\n\033[36;1m接口CRC错误计数(CRC Error Count)：\033[31;1m$crc_errors\033[0m\n&quot;; else read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); read_uncorrected=$&#123;read_uncorrected:-0&#125;; verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); verify_uncorrected=$&#123;verify_uncorrected:-0&#125;; total_uncorrected=$(echo &quot;$output&quot; | grep &quot;Total uncorrected errors&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); total_uncorrected=$&#123;total_uncorrected:-0&#125;; grown_defect_list=$(echo &quot;$output&quot; | grep &quot;Elements in grown defect list&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); grown_defect_list=$&#123;grown_defect_list:-0&#125;; non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); non_medium=$&#123;non_medium:-0&#125;; [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$total_uncorrected&quot; -gt 0 ] || [ &quot;$grown_defect_list&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ] &amp;&amp; echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot; &amp;&amp; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n\033[36;1m读无法纠正错误(Read total uncorrected errors)：\033[31;1m$read_uncorrected\033[0m\n\033[36;1m校验无法纠正错误(Verify total uncorrected errors)：\033[31;1m$verify_uncorrected\033[0m\n\033[36;1m总无法纠正错误(Total uncorrected errors)：\033[31;1m$total_uncorrected\033[0m\n\033[36;1m已增长缺陷列表元素(Elements in grown defect list)：\033[31;1m$grown_defect_list\033[0m\n\033[36;1m非介质错误(Non-medium error count)：\033[31;1m$non_medium\033[0m\n&quot;; fi; done; done</span><br></pre></td></tr></table></figure></div><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">#</span><span class="language-bash">!/bin/bash</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">日志文件以日期时间命名</span></span><br><span class="line">log_file=&quot;disk_error_$(date +%Y%m%d_%H%M%S).log&quot;</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">遍历可能的RAID设备（sda, sdb, sdc, sdd）</span></span><br><span class="line">for raid in &#123;a..d&#125;; do</span><br><span class="line">    if [ -b &quot;/dev/sd$raid&quot; ]; then</span><br><span class="line">        for disk in &#123;0..23&#125;; do</span><br><span class="line">            if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then</span><br><span class="line">                output=$(smartctl -a -d megaraid,$disk /dev/sd$raid)</span><br><span class="line"></span><br><span class="line">                serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then</span><br><span class="line">                    # ================= SSD =================</span><br><span class="line">                    reallocated_sectors=$(echo &quot;$output&quot; | grep &quot;Reallocated_Sector_Ct&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    reallocated_sectors=$&#123;reallocated_sectors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    current_pending=$(echo &quot;$output&quot; | grep &quot;Current_Pending_Sector&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    current_pending=$&#123;current_pending:-0&#125;</span><br><span class="line"></span><br><span class="line">                    reported_uncorrect=$(echo &quot;$output&quot; | grep &quot;Reported_Uncorrect&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    reported_uncorrect=$&#123;reported_uncorrect:-0&#125;</span><br><span class="line"></span><br><span class="line">                    offline_uncorrect=$(echo &quot;$output&quot; | grep &quot;Offline_Uncorrectable&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    offline_uncorrect=$&#123;offline_uncorrect:-0&#125;</span><br><span class="line"></span><br><span class="line">                    crc_errors=$(echo &quot;$output&quot; | grep &quot;CRC_Error_Count&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    crc_errors=$&#123;crc_errors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    if [ &quot;$reallocated_sectors&quot; -gt 0 ] || [ &quot;$current_pending&quot; -gt 0 ] || \</span><br><span class="line">                       [ &quot;$reported_uncorrect&quot; -gt 0 ] || [ &quot;$offline_uncorrect&quot; -gt 0 ] || [ &quot;$crc_errors&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m05 重分配扇区计数(Reallocated Sector Count)：\033[31;1m$reallocated_sectors\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m197 当前待处理扇区(Current Pending Sector Count)：\033[31;1m$current_pending\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m已报告的不可纠正错误(Reported Uncorrectable Errors)：\033[31;1m$reported_uncorrect\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m离线不可纠正错误(Offline Uncorrectable)：\033[31;1m$offline_uncorrect\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m接口CRC错误计数(CRC Error Count)：\033[31;1m$crc_errors\033[0m\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                else</span><br><span class="line">                    # ================= HDD =================</span><br><span class="line">                    read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    read_uncorrected=$&#123;read_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    verify_uncorrected=$&#123;verify_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    total_uncorrected=$(echo &quot;$output&quot; | grep &quot;Total uncorrected errors&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    total_uncorrected=$&#123;total_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    grown_defect_list=$(echo &quot;$output&quot; | grep &quot;Elements in grown defect list&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    grown_defect_list=$&#123;grown_defect_list:-0&#125;</span><br><span class="line"></span><br><span class="line">                    non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    non_medium=$&#123;non_medium:-0&#125;</span><br><span class="line"></span><br><span class="line">                    if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || \</span><br><span class="line">                       [ &quot;$total_uncorrected&quot; -gt 0 ] || [ &quot;$grown_defect_list&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m读无法纠正错误(Read total uncorrected errors)：\033[31;1m$read_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m校验无法纠正错误(Verify total uncorrected errors)：\033[31;1m$verify_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m总无法纠正错误(Total uncorrected errors)：\033[31;1m$total_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m已增长缺陷列表元素(Elements in grown defect list)：\033[31;1m$grown_defect_list\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m非介质错误(Non-medium error count)：\033[31;1m$non_medium\033[0m\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                fi</span><br><span class="line">            fi</span><br><span class="line">        done</span><br><span class="line">    fi</span><br><span class="line">done</span><br></pre></td></tr></table></figure></div><p>输出效果如下</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250918173418.png"                      alt="20250918173418"                ></p><h2 id="关于DELL-TSR日志-iDRAC-没有硬盘故障告警的报修办法"><a href="#关于DELL-TSR日志-iDRAC-没有硬盘故障告警的报修办法" class="headerlink" title="关于DELL TSR日志(iDRAC)没有硬盘故障告警的报修办法"></a>关于DELL TSR日志(iDRAC)没有硬盘故障告警的报修办法</h2><p>DELL通常只认可其自身硬件的告警日志。<br>在硬盘出现非致命故障，无法直观的在操作系统看到硬盘离线或RAID降级，同时TSR日志中没有记录到硬盘故障，iDRAC网页也没有显示硬盘故障时。<br>DELL通常不会认可运维工程师提供的smartctl日志和其他非DELL硬件报告的日志，<br>且有时smartctl也并不能很好的定位故障。</p><p>为此和DELL进行漫长的沟通后，最终定下来以下排障方式：</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_1760520869936.png"                      alt="DELL承认的额外日志"                ></p><ul><li>带外由故障日志时：提供TSR日志报修</li><li>带外没有故障日志时：提供TSR日志+perccli64 &#x2F;call show alilog的日志用于报修</li></ul><p>此外还可通过分析上文提到的smartctl日志和以下日志用于综合定位问题：</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ls -l /sys/class/block &gt; /tmp/lsblock.txt</span><br><span class="line">perccli64 /call show alilog &gt; /tmp/target.txt</span><br><span class="line">perccli64 /call/eall/sall show all &gt; /tmp/slot.txt</span><br></pre></td></tr></table></figure></div><p>以下是本次案例的记录，可以作为排障及报修的参考</p><p>情况说明：<br>本次是日常巡检时运维平台报障IO延迟大于100ms<br>随后排查了带外，没有告警，继续排查smartctl，定位slot8存在无法纠正的错误记录1次。<br>随后向DELL提出报修，并上传TSR日志，但因为没有记录告警，所以DELL并不认可，要求进一步调查故障。<br>排障过程中针对<code>smartctl -a -d megaraid</code>输出的<code>Error counter log</code>，也就是上文解释的smartctl日志；<br>其中有巨量的<code>Errors Corrected by ECC</code>的<code>fast纠正</code>错误计数，达到了<code>1737961798</code>次，<br>针对该项报错，DELL不参考，并且未对此进行分析，所以只能自行分析。<br>结合硬盘运行时间约5.8年，且几乎从未停机；而这份报错是由RAID卡报告给smartctl，<br>所以在计数准确性上无法验证，同时鉴于运行了很长时间，计数的累计也是可能的因素；<br>此处有个疑点：该天文数字般的ECC纠错计数是否可能是整个RAID5阵列的纠错被记录到了其中？<br>再加上硬盘存在故障长期未发现，导致了频繁的纠错？<br>以上两个疑问仅为猜测，不过该ECC纠错确实会导致IO延迟增加。<br>在进一步的排查中发现slot9才是故障盘，且其中的<code>Errors Corrected by ECC</code>的<code>fast纠正</code>为0，<br>反而是<code>delayed纠正</code>为<code>8396</code>次，因此进一步核实这块盘才是真正的故障盘。<br>因为<code>fast</code>纠正是常规现象，<code>delayed</code>纠正才是有可能存在问题的，<code>delayed</code>纠正是无法快速纠错时进行的深度纠错</p><p>见此处说明</p><p>接下来讲如何通过分析<code>perccli64 /call show alilog</code>定位到了真正故障的硬盘<br>首先，<code>perccli64</code>，顾名思义，这是DELL PERC官方的工具，用于操作DELL RAID卡。<br>因为日志内容较多，所以选择使用<code>perccli64 /call show alilog &gt; /tmp/target.txt</code>查询适配器日志并输出到文件。<br>随后使用vscode浏览发现，在35200行日志中，光是PD02和PD09的timeout就出现了11938行，<br>因此该日志足以说明<code>slot2</code>和<code>slot9</code>这两个硬盘出现了故障，<br>并进一步结合<code>smartctl</code>日志交叉验证了这两块盘存在故障，也就是上文说的<code>delayed</code>的错误计数。<br>随后同时将<code>TSR日志</code>和<code>perccli64</code>的<code>alilog</code>适配器日志提交给DELL，DELL认可并以此作为依据成功报修。</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">PD02的<span class="built_in">timeout</span></span></span><br><span class="line">24368: YY-MM-DD HH:MM:SS WARNING:Command timeout on PD 02(e0x20/s2) Path 5000c500cdda6095, CDB: 2a 00 0f 1a ee 00 00 00 80 00</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">PD09的<span class="built_in">timeout</span></span></span><br><span class="line">2413: YY-MM-DD HH:MM:SS WARNING:Command timeout on PD 09(e0x20/s9) Path 5000c500cdd04681, CDB: 4d 00 4e 00 00 00 00 00 04 00</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">同时在这份日志顶部部分也输出了RAID控制器和磁盘的详情</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Device Information部分的Slot Number也对应了PD02 PD09</span></span><br></pre></td></tr></table></figure></div><h3 id="2025-10-16最新消息：DELL高级工程师驳回了维修请求"><a href="#2025-10-16最新消息：DELL高级工程师驳回了维修请求" class="headerlink" title="2025-10-16最新消息：DELL高级工程师驳回了维修请求"></a>2025-10-16最新消息：DELL高级工程师驳回了维修请求</h3><p>然后给出了下面两篇文章</p><p><a class="link"   href="https://www.dell.com/support/kbdoc/zh-cn/000147878/poweredge-%E6%9F%90%E4%BA%9B%E4%BC%81%E4%B8%9A%E7%A1%AC%E7%9B%98%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E8%AF%BB%E5%8F%96%E5%92%8C%E9%AA%8C%E8%AF%81-ecc-%E9%94%99%E8%AF%AF%E7%9A%84-smart-%E9%94%99%E8%AF%AF%E7%8E%87%E8%BE%83%E9%AB%98" >PowerEdge：某些企业硬盘驱动器上读取和验证 ECC 错误的 SMART 错误率较高<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p><a class="link"   href="https://www.dell.com/support/kbdoc/zh-cn/000168487/scaleio-%E7%A1%AC%E4%BB%B6%E6%84%9F%E7%9F%A5%E5%8A%9F%E8%83%BD%E5%A1%AB%E5%86%99-perc-%E6%9C%AF%E8%AF%AD?lang=zh" >ScaleIO 硬件感知功能填写 PERC 术语<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p>故障盘PD 02&#x2F;09</p><p>slot2、9: TOSHIBA AL14SXB30ENY</p><p>slot3-8、10-13: Seagate ST300MP0026</p><p>结合上面两篇文章和硬盘情况来看，确实，iDRAC没有报故障，同时smartctl和perccli64调查出所谓的”故障”，恰好是两块TOSHIBA的硬盘。<br>TOSHIBA的其他硬盘确实也被记录到了文章中，提到了会在<code>perccli64</code>中误报<code>timeout</code>，<br>结合<code>smartctl</code>记录的ECC纠错数量为天文数字，侧面反映了DELL所说的<code>smartctl</code>ECC纠错计数不可靠也是事实。<br><strong>目前看来，维修诉求被DELL工程师驳回也属于合理范围</strong><br><strong>且故障仅仅体现在运维监测平台告警IO延迟达到128ms，持续时间不足1分钟，随后恢复</strong><br><strong>故本次报障取消</strong></p><p>补充：</p><p>该问题提交给了DELL客户经理</p><blockquote><p>您好，我这边有台XXX PowerEdge XXX，在我们运维监控平台发现告警 IO延迟过高，触发时值: XXXms。<br>针对该告警我们筛查了TSR日志，并未发现告警记录；<br>进一步筛查了smartctl日志，发现PD 02&#x2F;09存在 perccli64告警 Command timeout on PD 02&#x2F;09；<br>且smartctl记录到ECC delayed纠正8XXX次。</p><p>目前工程师回复提到了smartctl日志错误率，对于某些企业的硬盘仅供参考，实际现象：<br>其他Seagate硬盘存在1X亿次ECC fast纠错计数，故我们忽略该告警。<br>故障的PD02&#x2F;09为TOSHIBA，存在8XXX次 ECC delayed纠错计数，不过尚未出现无法纠错和扇区故障记录，我们暂时忽略。</p><p>工程师回复提到了perccli64日志告警timeout，文章解释为：<br>某个供应商的固态硬盘 （SSD） 不支持其中一个命令 （cdb&#x3D; 4d 00 51 00 00 00 00 00 00 04 00）<br>复查后发现，PD 02&#x2F;09恰好是TOSHIBA的硬盘，且在文章中也有提到TOSHIBA的某个型号SSD不支持该命令，且其他Seagate硬盘均为记录该错误。<br>故我们根据文章内容，忽略该告警。</p><p>鉴于本次排障报修涉及的日志和排障过程较为繁琐，目前理清楚前因后果之后，XXX要求我询问下您，看看这次的报障是驳回继续观察，还是说直接安排更换？</p></blockquote><p>目前尚未收到回复…</p>]]>
    </content>
    <id>https://hackerbs.com/posts/c82ca31d.html</id>
    <link href="https://hackerbs.com/posts/c82ca31d.html"/>
    <published>2025-09-18T07:49:46.000Z</published>
    <summary>
      <![CDATA[<h2 id="情况说明"><a href="#情况说明" class="headerlink" title="情况说明"></a>情况说明</h2><p>收到系统发出IO占用率和IO延迟的告警，登录带外排查无任何错误日志，随后进入操作系统使用脚本批量排查smartctl日志，发现存在错误计数，因smartctl并非厂家带外的告警日志，所以特此向Inspur、H3C、Lenovo、DELL进行了咨询，其中提到了一些日志参数的告警，目前已收到H3C、Inspur的回复</p>]]>
    </summary>
    <title>关于服务器硬盘故障但带外没有错误日志的排障与报修笔记</title>
    <updated>2026-09-23T13:04:04.114Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="存储" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AD%98%E5%82%A8/"/>
    <category term="DELL" scheme="https://hackerbs.com/tags/DELL/"/>
    <category term="IO告警" scheme="https://hackerbs.com/tags/IO%E5%91%8A%E8%AD%A6/"/>
    <category term="硬盘" scheme="https://hackerbs.com/tags/%E7%A1%AC%E7%9B%98/"/>
    <category term="排障" scheme="https://hackerbs.com/tags/%E6%8E%92%E9%9A%9C/"/>
    <category term="阵列" scheme="https://hackerbs.com/tags/%E9%98%B5%E5%88%97/"/>
    <category term="RAID" scheme="https://hackerbs.com/tags/RAID/"/>
    <content>
      <![CDATA[<h2 id="系统报IO告警，在带外无异常的情况下，在操作系统中进行排障"><a href="#系统报IO告警，在带外无异常的情况下，在操作系统中进行排障" class="headerlink" title="系统报IO告警，在带外无异常的情况下，在操作系统中进行排障"></a>系统报IO告警，在带外无异常的情况下，在操作系统中进行排障</h2><h3 id="故障现象"><a href="#故障现象" class="headerlink" title="故障现象"></a>故障现象</h3><p>监测平台报障IO占用率和延迟过高</p><h3 id="初步排障"><a href="#初步排障" class="headerlink" title="初步排障"></a>初步排障</h3><p>登录带外观察是否有故障日志，无论是否有故障日志，均需要进一步进行二次核对</p><h3 id="JBOD直通无RAID排障"><a href="#JBOD直通无RAID排障" class="headerlink" title="JBOD直通无RAID排障"></a>JBOD直通无RAID排障</h3><p>使用<code>smartctl</code>命令观察磁盘健康状态，网络上有大量教程，不再赘述</p><p>如果磁盘本身无故障，观察输出结果中的<code>199  UltraDMA CRC Error Count</code>这一行是否有记录，这是硬件通信错误的日志，如果有记录到纠正次数，那就说明发生了硬件连接的问题，如硬盘背板故障，连接线故障，接口松动等</p><p>批量排障命令参考</p><p><code>for i in {a..z}; do [ -b &quot;/dev/sd$i&quot; ] &amp;&amp; echo &quot;sd$i:&quot; &amp;&amp; sudo smartctl -a &quot;/dev/sd$i&quot; | grep &quot;199&quot;; done</code></p><h3 id="RAID阵列模式排障"><a href="#RAID阵列模式排障" class="headerlink" title="RAID阵列模式排障"></a>RAID阵列模式排障</h3><p>做了阵列的磁盘无法直接使用<code>smartctl</code>进行排障，需要改为<code>smartctl -a -d megaraid,3 /dev/sdX</code>的方式排障，<code>megaraid,</code>后面跟你的硬盘的编号，<code>/dev/sdX</code>则是对应这个阵列在系统中的编号</p><p>范例：</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">raid5阵列，挂载为/dev/sdb</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">阵列中disk2存在故障</span></span><br><span class="line">smartctl -a -d megaraid,2 /dev/sdb</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">批量查询所有阵列所有盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中a..d是用于遍历/dev/sda-d，根据你的阵列情况调整</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中0..10是用于遍历一个阵列下有多少个硬盘，根据你的阵列情况调整</span></span><br><span class="line">for raid in &#123;a..d&#125;;do for disk in &#123;0..10&#125;;do smartctl -a -d megaraid,$disk /dev/sd$raid | grep -i &quot;CRC\|Error&quot;;done;done</span><br></pre></td></tr></table></figure></div><p>HDD SSD二合一版</p><p><strong>该脚本会在当前目录输出<code>smartctl</code>的日志源码到<code>disk_error_$(date +%Y%m%d_%H%M%S).log</code>文件</strong></p><p>推荐使用此单行模式，复制粘贴直接用，不需要创建shell文件</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">log_file=&quot;disk_error_$(date +%Y%m%d_%H%M%S).log&quot;; for raid in &#123;a..d&#125;; do [ -b &quot;/dev/sd$raid&quot; ] &amp;&amp; for disk in &#123;0..23&#125;; do smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1 &amp;&amp; output=$(smartctl -a -d megaraid,$disk /dev/sd$raid) &amp;&amp; serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;) &amp;&amp; if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then reallocated_sectors=$(echo &quot;$output&quot; | grep &quot;Reallocated_Sector_Ct&quot; | awk &#x27;&#123;print $10&#125;&#x27;); reallocated_sectors=$&#123;reallocated_sectors:-0&#125;; current_pending=$(echo &quot;$output&quot; | grep &quot;Current_Pending_Sector&quot; | awk &#x27;&#123;print $10&#125;&#x27;); current_pending=$&#123;current_pending:-0&#125;; reported_uncorrect=$(echo &quot;$output&quot; | grep &quot;Reported_Uncorrect&quot; | awk &#x27;&#123;print $10&#125;&#x27;); reported_uncorrect=$&#123;reported_uncorrect:-0&#125;; offline_uncorrect=$(echo &quot;$output&quot; | grep &quot;Offline_Uncorrectable&quot; | awk &#x27;&#123;print $10&#125;&#x27;); offline_uncorrect=$&#123;offline_uncorrect:-0&#125;; crc_errors=$(echo &quot;$output&quot; | grep &quot;CRC_Error_Count&quot; | awk &#x27;&#123;print $10&#125;&#x27;); crc_errors=$&#123;crc_errors:-0&#125;; [ &quot;$reallocated_sectors&quot; -gt 0 ] || [ &quot;$current_pending&quot; -gt 0 ] || [ &quot;$reported_uncorrect&quot; -gt 0 ] || [ &quot;$offline_uncorrect&quot; -gt 0 ] || [ &quot;$crc_errors&quot; -gt 0 ] &amp;&amp; echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot; &amp;&amp; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n\033[36;1m05 重分配扇区计数(Reallocated Sector Count)：\033[31;1m$reallocated_sectors\033[0m\n\033[36;1m197 当前待处理扇区(Current Pending Sector Count)：\033[31;1m$current_pending\033[0m\n\033[36;1m已报告的不可纠正错误(Reported Uncorrectable Errors)：\033[31;1m$reported_uncorrect\033[0m\n\033[36;1m离线不可纠正错误(Offline Uncorrectable)：\033[31;1m$offline_uncorrect\033[0m\n\033[36;1m接口CRC错误计数(CRC Error Count)：\033[31;1m$crc_errors\033[0m\n&quot;; else read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); read_uncorrected=$&#123;read_uncorrected:-0&#125;; verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); verify_uncorrected=$&#123;verify_uncorrected:-0&#125;; total_uncorrected=$(echo &quot;$output&quot; | grep &quot;Total uncorrected errors&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); total_uncorrected=$&#123;total_uncorrected:-0&#125;; grown_defect_list=$(echo &quot;$output&quot; | grep &quot;Elements in grown defect list&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); grown_defect_list=$&#123;grown_defect_list:-0&#125;; non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); non_medium=$&#123;non_medium:-0&#125;; [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$total_uncorrected&quot; -gt 0 ] || [ &quot;$grown_defect_list&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ] &amp;&amp; echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot; &amp;&amp; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n\033[36;1m读无法纠正错误(Read total uncorrected errors)：\033[31;1m$read_uncorrected\033[0m\n\033[36;1m校验无法纠正错误(Verify total uncorrected errors)：\033[31;1m$verify_uncorrected\033[0m\n\033[36;1m总无法纠正错误(Total uncorrected errors)：\033[31;1m$total_uncorrected\033[0m\n\033[36;1m已增长缺陷列表元素(Elements in grown defect list)：\033[31;1m$grown_defect_list\033[0m\n\033[36;1m非介质错误(Non-medium error count)：\033[31;1m$non_medium\033[0m\n&quot;; fi; done; done</span><br></pre></td></tr></table></figure></div><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">#</span><span class="language-bash">!/bin/bash</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">日志文件以日期时间命名</span></span><br><span class="line">log_file=&quot;disk_error_$(date +%Y%m%d_%H%M%S).log&quot;</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">遍历可能的RAID设备（sda, sdb, sdc, sdd）</span></span><br><span class="line">for raid in &#123;a..d&#125;; do</span><br><span class="line">    if [ -b &quot;/dev/sd$raid&quot; ]; then</span><br><span class="line">        for disk in &#123;0..23&#125;; do</span><br><span class="line">            if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then</span><br><span class="line">                output=$(smartctl -a -d megaraid,$disk /dev/sd$raid)</span><br><span class="line"></span><br><span class="line">                serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then</span><br><span class="line">                    # ================= SSD =================</span><br><span class="line">                    reallocated_sectors=$(echo &quot;$output&quot; | grep &quot;Reallocated_Sector_Ct&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    reallocated_sectors=$&#123;reallocated_sectors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    current_pending=$(echo &quot;$output&quot; | grep &quot;Current_Pending_Sector&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    current_pending=$&#123;current_pending:-0&#125;</span><br><span class="line"></span><br><span class="line">                    reported_uncorrect=$(echo &quot;$output&quot; | grep &quot;Reported_Uncorrect&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    reported_uncorrect=$&#123;reported_uncorrect:-0&#125;</span><br><span class="line"></span><br><span class="line">                    offline_uncorrect=$(echo &quot;$output&quot; | grep &quot;Offline_Uncorrectable&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    offline_uncorrect=$&#123;offline_uncorrect:-0&#125;</span><br><span class="line"></span><br><span class="line">                    crc_errors=$(echo &quot;$output&quot; | grep &quot;CRC_Error_Count&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    crc_errors=$&#123;crc_errors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    if [ &quot;$reallocated_sectors&quot; -gt 0 ] || [ &quot;$current_pending&quot; -gt 0 ] || \</span><br><span class="line">                       [ &quot;$reported_uncorrect&quot; -gt 0 ] || [ &quot;$offline_uncorrect&quot; -gt 0 ] || [ &quot;$crc_errors&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m05 重分配扇区计数(Reallocated Sector Count)：\033[31;1m$reallocated_sectors\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m197 当前待处理扇区(Current Pending Sector Count)：\033[31;1m$current_pending\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m已报告的不可纠正错误(Reported Uncorrectable Errors)：\033[31;1m$reported_uncorrect\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m离线不可纠正错误(Offline Uncorrectable)：\033[31;1m$offline_uncorrect\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m接口CRC错误计数(CRC Error Count)：\033[31;1m$crc_errors\033[0m\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                else</span><br><span class="line">                    # ================= HDD =================</span><br><span class="line">                    read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    read_uncorrected=$&#123;read_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    verify_uncorrected=$&#123;verify_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    total_uncorrected=$(echo &quot;$output&quot; | grep &quot;Total uncorrected errors&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    total_uncorrected=$&#123;total_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    grown_defect_list=$(echo &quot;$output&quot; | grep &quot;Elements in grown defect list&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    grown_defect_list=$&#123;grown_defect_list:-0&#125;</span><br><span class="line"></span><br><span class="line">                    non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    non_medium=$&#123;non_medium:-0&#125;</span><br><span class="line"></span><br><span class="line">                    if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || \</span><br><span class="line">                       [ &quot;$total_uncorrected&quot; -gt 0 ] || [ &quot;$grown_defect_list&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; &quot;$log_file&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD 磁盘 \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) 检测到异常：\033[0m\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m读无法纠正错误(Read total uncorrected errors)：\033[31;1m$read_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m校验无法纠正错误(Verify total uncorrected errors)：\033[31;1m$verify_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m总无法纠正错误(Total uncorrected errors)：\033[31;1m$total_uncorrected\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m已增长缺陷列表元素(Elements in grown defect list)：\033[31;1m$grown_defect_list\033[0m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m非介质错误(Non-medium error count)：\033[31;1m$non_medium\033[0m\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                fi</span><br><span class="line">            fi</span><br><span class="line">        done</span><br><span class="line">    fi</span><br><span class="line">done</span><br></pre></td></tr></table></figure></div><p>输出效果如下</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250918173451.png"                      alt="20250918173451"                ></p><p><strong>以下部分的忽略掉即可，老版本的</strong></p><hr><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">批量巡检脚本 - 适用于HDD</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">遍历可能的RAID设备（sda, sdb, sdc, sdd）</span></span><br><span class="line">for raid in &#123;a..d&#125;; do</span><br><span class="line">    # 检查设备是否存在</span><br><span class="line">    if [ -b &quot;/dev/sd$raid&quot; ]; then</span><br><span class="line">        # 遍历每个RAID设备上的物理磁盘（0到23号）</span><br><span class="line">        for disk in &#123;0..23&#125;; do</span><br><span class="line">            # 检查磁盘是否可访问（尝试获取基本信息，输出重定向到/dev/null）</span><br><span class="line">            if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then</span><br><span class="line">                # 获取完整的SMART数据</span><br><span class="line">                output=$(smartctl -a -d megaraid,$disk /dev/sd$raid)</span><br><span class="line"></span><br><span class="line">                # 从输出中提取序列号</span><br><span class="line">                serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                # 提取读取无法纠正错误次数（最后一列）</span><br><span class="line">                read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                # 提取验证无法纠正错误次数（最后一列）</span><br><span class="line">                verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                # 提取非介质错误次数（最后一列）</span><br><span class="line">                non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                # 检查是否有任何错误（任一错误计数大于0）</span><br><span class="line">                if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then</span><br><span class="line">                    # 将有错误的磁盘完整SMART数据追加到日志文件</span><br><span class="line">                    echo &quot;$output&quot; &gt;&gt; disk_error.log</span><br><span class="line"></span><br><span class="line">                    # 输出格式化错误信息</span><br><span class="line">                    echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;</span><br><span class="line">                    echo -e &quot;\033[36;1m读取错误无法纠正次数：\033[31;1m$read_uncorrected\033[36;1m&quot;</span><br><span class="line">                    echo -e &quot;\033[36;1m磁盘自检无法纠错次数：\033[31;1m$verify_uncorrected\033[36;1m&quot;</span><br><span class="line">                    echo -e &quot;\033[36;1m非介质错误次数：\033[31;1m$non_medium\033[36;1m&quot;</span><br><span class="line">                    echo -e &quot;\n&quot;</span><br><span class="line">                fi</span><br><span class="line">            fi</span><br><span class="line">        done</span><br><span class="line">    fi</span><br><span class="line">done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">整合为一行，一条龙服务</span></span><br><span class="line">for raid in &#123;a..d&#125;; do if [ -b &quot;/dev/sd$raid&quot; ]; then for disk in &#123;0..23&#125;; do if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then output=$(smartctl -a -d megaraid,$disk /dev/sd$raid); serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;); read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then echo &quot;$output&quot; &gt;&gt; disk_error.log; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;; echo -e &quot;\033[36;1m读取错误无法纠正次数：\033[31;1m$read_uncorrected\033[36;1m&quot;; echo -e &quot;\033[36;1m磁盘自检无法纠错次数：\033[31;1m$verify_uncorrected\033[36;1m&quot;; echo -e &quot;\033[36;1m非介质错误次数：\033[31;1m$non_medium\033[36;1m&quot;; echo -e &quot;\n&quot;; fi; fi; done; fi; done</span><br></pre></td></tr></table></figure></div><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">批量巡检脚本 - 适用于SSD</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">遍历可能的RAID设备（sda, sdb, sdc, sdd）</span></span><br><span class="line">for raid in &#123;a..d&#125;; do</span><br><span class="line">    # 检查设备是否存在</span><br><span class="line">    if [ -b &quot;/dev/sd$raid&quot; ]; then</span><br><span class="line">        # 遍历每个RAID设备上的物理磁盘（0到23号）</span><br><span class="line">        for disk in &#123;0..23&#125;; do</span><br><span class="line">            # 检查磁盘是否可访问（尝试获取基本信息，输出重定向到/dev/null）</span><br><span class="line">            if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then</span><br><span class="line">                # 获取完整的SMART数据</span><br><span class="line">                output=$(smartctl -a -d megaraid,$disk /dev/sd$raid)</span><br><span class="line"></span><br><span class="line">                # 从输出中提取序列号</span><br><span class="line">                serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">                # 检测磁盘类型（SSD或HDD）</span><br><span class="line">                if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then</span><br><span class="line">                    # SSD磁盘：使用Media_and_Data_Integrity_Errors等属性</span><br><span class="line">                    media_errors=$(echo &quot;$output&quot; | grep &quot;Media_and_Data_Integrity_Errors&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    media_errors=$&#123;media_errors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    # 对于SSD，我们主要关注媒体错误和ECC错误</span><br><span class="line">                    uncorrected_errors=$(echo &quot;$output&quot; | grep &quot;Error_Information_Log_Entries&quot; | awk &#x27;&#123;print $10&#125;&#x27;)</span><br><span class="line">                    uncorrected_errors=$&#123;uncorrected_errors:-0&#125;</span><br><span class="line"></span><br><span class="line">                    # 检查SSD错误</span><br><span class="line">                    if [ &quot;$media_errors&quot; -gt 0 ] || [ &quot;$uncorrected_errors&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; disk_error.log</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m媒体和数据完整性错误：\033[31;1m$media_errors\033[36;1m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m错误信息日志条目：\033[31;1m$uncorrected_errors\033[36;1m&quot;</span><br><span class="line">                        echo -e &quot;\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                else</span><br><span class="line">                    # HDD磁盘：使用原有的错误计数器</span><br><span class="line">                    read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    read_uncorrected=$&#123;read_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    verify_uncorrected=$&#123;verify_uncorrected:-0&#125;</span><br><span class="line"></span><br><span class="line">                    non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">                    non_medium=$&#123;non_medium:-0&#125;</span><br><span class="line"></span><br><span class="line">                    # 检查HDD错误</span><br><span class="line">                    if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then</span><br><span class="line">                        echo &quot;$output&quot; &gt;&gt; disk_error.log</span><br><span class="line">                        echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m读取错误无法纠正次数：\033[31;1m$read_uncorrected\033[36;1m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m磁盘自检无法纠错次数：\033[31;1m$verify_uncorrected\033[36;1m&quot;</span><br><span class="line">                        echo -e &quot;\033[36;1m非介质错误次数：\033[31;1m$non_medium\033[36;1m&quot;</span><br><span class="line">                        echo -e &quot;\n&quot;</span><br><span class="line">                    fi</span><br><span class="line">                fi</span><br><span class="line">            fi</span><br><span class="line">        done</span><br><span class="line">    fi</span><br><span class="line">done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">一条龙服务</span></span><br><span class="line">for raid in &#123;a..d&#125;; do if [ -b &quot;/dev/sd$raid&quot; ]; then for disk in &#123;0..23&#125;; do if smartctl -d megaraid,$disk /dev/sd$raid -i &gt;/dev/null 2&gt;&amp;1; then output=$(smartctl -a -d megaraid,$disk /dev/sd$raid); serial=$(echo &quot;$output&quot; | grep &quot;Serial number:&quot; | awk &#x27;&#123;print $3&#125;&#x27;); if echo &quot;$output&quot; | grep -q &quot;SSD&quot;; then media_errors=$(echo &quot;$output&quot; | grep &quot;Media_and_Data_Integrity_Errors&quot; | awk &#x27;&#123;print $10&#125;&#x27;); media_errors=$&#123;media_errors:-0&#125;; uncorrected_errors=$(echo &quot;$output&quot; | grep &quot;Error_Information_Log_Entries&quot; | awk &#x27;&#123;print $10&#125;&#x27;); uncorrected_errors=$&#123;uncorrected_errors:-0&#125;; if [ &quot;$media_errors&quot; -gt 0 ] || [ &quot;$uncorrected_errors&quot; -gt 0 ]; then echo &quot;$output&quot; &gt;&gt; disk_error.log; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 SSD Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;; echo -e &quot;\033[36;1m媒体和数据完整性错误：\033[31;1m$media_errors\033[36;1m&quot;; echo -e &quot;\033[36;1m错误信息日志条目：\033[31;1m$uncorrected_errors\033[36;1m&quot;; echo -e &quot;\n&quot;; fi; else read_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^read:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); read_uncorrected=$&#123;read_uncorrected:-0&#125;; verify_uncorrected=$(echo &quot;$output&quot; | grep -A 10 &quot;Error counter log:&quot; | grep &quot;^verify:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); verify_uncorrected=$&#123;verify_uncorrected:-0&#125;; non_medium=$(echo &quot;$output&quot; | grep &quot;Non-medium error count:&quot; | awk &#x27;&#123;print $NF&#125;&#x27;); non_medium=$&#123;non_medium:-0&#125;; if [ &quot;$read_uncorrected&quot; -gt 0 ] || [ &quot;$verify_uncorrected&quot; -gt 0 ] || [ &quot;$non_medium&quot; -gt 0 ]; then echo &quot;$output&quot; &gt;&gt; disk_error.log; echo -e &quot;\033[36;1mRAID \033[32;1msd$raid \033[36;1m中的 HDD Disk \033[32;1m#$disk \033[36;1m(SN:\033[33;1m $serial) \033[36;1m存在以下错误：\n&quot;; echo -e &quot;\033[36;1m读取错误无法纠正次数：\033[31;1m$read_uncorrected\033[36;1m&quot;; echo -e &quot;\033[36;1m磁盘自检无法纠错次数：\033[31;1m$verify_uncorrected\033[36;1m&quot;; echo -e &quot;\033[36;1m非介质错误次数：\033[31;1m$non_medium\033[36;1m&quot;; echo -e &quot;\n&quot;; fi; fi; fi; done; fi; done</span><br></pre></td></tr></table></figure></div><hr><p><strong>以上部分的忽略掉即可，老版本的</strong></p><h4 id="原始错误日志解读"><a href="#原始错误日志解读" class="headerlink" title="原始错误日志解读"></a>原始错误日志解读</h4><h5 id="HDD范例"><a href="#HDD范例" class="headerlink" title="HDD范例"></a>HDD范例</h5><p>范例：</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250917112407.png"                      alt="20250917112407"                ></p><table><thead><tr><th>报错内容</th><th>翻译</th><th>说明</th></tr></thead><tbody><tr><td>Error Corrected by ECC</td><td>ECC纠错</td><td>当某个扇区存在错误时，硬盘通过内置的错误校正码（ECC）机制自动完成的纠错次数。</td></tr><tr><td>Total errors corrected</td><td>已纠错总次数</td><td>记录累计成功纠正的错误总数（包含所有纠错方式）。</td></tr><tr><td>Correction algorithm invocations</td><td>纠错算法调用次数</td><td>硬盘调用纠错算法的次数，部分可能无需实际改写即可修复；一般无需重点关注。</td></tr><tr><td>Gigabytes processed</td><td>已处理数据量（GB）</td><td>表示在统计期间，通过 ECC 机制处理过的数据总量（以 GB 计）。</td></tr><tr><td>Total uncorrected errors</td><td>未能纠错总数</td><td>ECC 无法修复的错误次数，表示确实发生了数据损坏；若大于 0，需立即关注。</td></tr><tr><td>Non-medium error count</td><td>非介质错误计数</td><td>非存储介质本身的故障，例如接口、背板、线缆、电源等导致的通信或传输错误。</td></tr><tr><td>fast rereads</td><td>快速重读</td><td>通过快速重读实现的自动纠错，对性能影响较小。</td></tr><tr><td>delayed rereads</td><td>延迟重读</td><td>通过延迟重读实现的纠错，通常会增加 I&#x2F;O 响应时间。</td></tr><tr><td>rewrites</td><td>重写</td><td>当重读成功后，将正确的数据重新写回故障扇区，以防止未来再次出错。</td></tr></tbody></table><p>范例中ECC纠错2555次，且存在4次无法纠错，且非介质故障高达13次，该硬盘急需维护。</p><h5 id="SSD范例"><a href="#SSD范例" class="headerlink" title="SSD范例"></a>SSD范例</h5><table><thead><tr><th>报错内容</th><th>翻译</th><th>说明</th></tr></thead><tbody><tr><td>Reallocated Sector Count</td><td>重分配扇区计数</td><td>表示硬盘将坏掉或不可靠的扇区重映射到备用扇区的次数。数值大于 0 意味着盘体已经出现物理坏块。若持续增加，说明硬盘劣化严重，应尽快备份并考虑更换。</td></tr><tr><td>Reported Uncorrectable Errors</td><td>报告无法纠正错误</td><td>硬盘在正常读写中发生的、ECC 无法修复的错误次数。这类错误会导致数据直接损坏，是严重的健康警告指标。</td></tr><tr><td>Current Pending Sector Count</td><td>当前待处理扇区</td><td>等待进一步确认或重新分配的扇区数量。通常表示这些扇区在读写中出现问题，待后续重写确认是否稳定。若数值不降反升，说明盘体状态持续恶化。</td></tr><tr><td>Offline Uncorrectable</td><td>离线不可校正错误</td><td>硬盘在离线检测或自检时发现的无法修复错误。表示硬盘在后台扫描时检测到了坏块，可靠性降低。</td></tr><tr><td>CRC Error Count</td><td>接口 CRC 错误次数</td><td>表示主机与硬盘之间数据传输时出现的循环冗余校验错误，通常由线缆、接口、背板、电磁干扰或电源问题引起，而非硬盘介质损坏。</td></tr></tbody></table>]]>
    </content>
    <id>https://hackerbs.com/posts/344636c9.html</id>
    <link href="https://hackerbs.com/posts/344636c9.html"/>
    <published>2025-09-17T03:04:28.000Z</published>
    <summary>
      <![CDATA[<h2 id="系统报IO告警，在带外无异常的情况下，在操作系统中进行排障"><a href="#系统报IO告警，在带外无异常的情况下，在操作系统中进行排障" class="headerlink" title="系统报IO告警，在带外无异常的情况下，在操作系统中进行排障"></a>系统报IO告警，在带外无异常的情况下，在操作系统中进行排障</h2><h3 id="故障现象"><a href="#故障现象" class="headerlink" title="故障现象"></a>故障现象</h3>]]>
    </summary>
    <title>DELL服务器硬盘IO告警排障思路</title>
    <updated>2026-09-23T13:04:04.081Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="运维" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%BF%90%E7%BB%B4/"/>
    <category term="硬盘" scheme="https://hackerbs.com/tags/%E7%A1%AC%E7%9B%98/"/>
    <category term="内存" scheme="https://hackerbs.com/tags/%E5%86%85%E5%AD%98/"/>
    <category term="服务器" scheme="https://hackerbs.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <category term="基准测试" scheme="https://hackerbs.com/tags/%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/"/>
    <category term="服务器压测" scheme="https://hackerbs.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8E%8B%E6%B5%8B/"/>
    <category term="Stress-NG" scheme="https://hackerbs.com/tags/Stress-NG/"/>
    <category term="Sysbench" scheme="https://hackerbs.com/tags/Sysbench/"/>
    <category term="CPU" scheme="https://hackerbs.com/tags/CPU/"/>
    <content>
      <![CDATA[<blockquote><p>重要更新: 2025-11-4  硬盘测试开发了全自动测试工具，见下方硬盘测试部分</p></blockquote><h2 id="测试项"><a href="#测试项" class="headerlink" title="测试项"></a>测试项</h2><h3 id="测试前准备"><a href="#测试前准备" class="headerlink" title="测试前准备"></a>测试前准备</h3><h4 id="CPU调优"><a href="#CPU调优" class="headerlink" title="CPU调优"></a>CPU调优</h4><h5 id="BIOS关闭超线程"><a href="#BIOS关闭超线程" class="headerlink" title="BIOS关闭超线程"></a>BIOS关闭超线程</h5><p>方法：<br>BIOS里找CPU或者Socket Configuration，进入其中，找Processor Configuration，<br>进入其中关闭超线程即可<br>超线程在BIOS的写法通常有：</p><ul><li>SMT</li><li>Logical Processor(LP)</li><li>Hyper-Threading</li></ul><p>理由：<br>超线程的作用是让 CPU 能在一个线程等待（例如等待内存I&#x2F;O）时，利用空闲执行单元去执行另一个线程。<br>所以对于CPU性能测试的浮点运算、以及CPU满载的业务场景，超线程导致的线程切换，反而会：</p><ul><li><p>增加上下文切换与调度开销(Scheduler Overhead)</p><ul><li>操作系统调度器看到两个逻辑核心，调度两个重量级任务上去，但实际上底层的物理核根本没法承担</li></ul></li><li><p>导致缓存污染(Cache Pollution)</p><ul><li>不同线程使用的数据不同，缓存反而会互相驱逐对方数据</li><li>这个问题与下文中根据L3缓存设计NB大小尤其相关</li></ul></li></ul><h5 id="BIOS关闭C-State"><a href="#BIOS关闭C-State" class="headerlink" title="BIOS关闭C-State"></a>BIOS关闭C-State</h5><p>方法：<br>BIOS里找CPU或者Socket Configuration，进入其中，找Advanced Power Management Configuration，<br>进入其中CPU C State Control，参数如下：</p><table><thead><tr><th>参数</th><th>解释</th><th>建议设置</th></tr></thead><tbody><tr><td>Enable Monitor MWAIT</td><td>是否允许使用 MWAIT 指令进入 C-state</td><td>Disabled</td></tr><tr><td>CPU C6 report</td><td>是否让操作系统知道 C6 可用</td><td>Disabled</td></tr><tr><td>Enhanced Halt State (C1E)</td><td>启用增强型省电停机(降压降频)</td><td>Disabled</td></tr><tr><td>OS ACPI Cx</td><td>操作系统可用的最深 C 状态（如 ACPI C2）</td><td>设置为能选的最小值</td></tr></tbody></table><p>补充：<br>上面是比较通用的写法，但我看到Lenovo写的是SST-PP……自行判断或者问下厂商吧<br>原理就是C-State设置0最好，就像Lenovo的SST-PP，BIOS里也写了，Level 0 TDP 185W，最高性能</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20251113154536.png"                      alt="20251113154536"                ></p><p>理由：<br>C-State是省电休眠状态控制，除非你要省电，否则把它关了。<br>让性能最高，减少CPU状态切换导致的延迟，关不了就保持在C0使CPU始终活跃。</p><h4 id="存储调优"><a href="#存储调优" class="headerlink" title="存储调优"></a>存储调优</h4><h5 id="RAID调优"><a href="#RAID调优" class="headerlink" title="RAID调优"></a>RAID调优</h5><p>Stripe Size(带宽): 1m<br>写入策略: Write Back(回写)<br>驱动器缓存: Drive Cache disabled(关闭磁盘缓存)<br>初始化方式: Fast Initialize(快速初始化)</p><h5 id="文件系统调优"><a href="#文件系统调优" class="headerlink" title="文件系统调优"></a>文件系统调优</h5><p>采用parted分区，gpt<br>分区从2048s扇区起，保持4k对齐<br>文件系统采用xfs即可</p><h3 id="CPU基准测试"><a href="#CPU基准测试" class="headerlink" title="CPU基准测试"></a>CPU基准测试</h3><table><thead><tr><th>测试项</th><th>测试工具</th><th>参考业务场景</th><th>测试方式</th></tr></thead><tbody><tr><td>双精度浮点运算 float64</td><td>HPL</td><td>该项测试为HPC行业标准，TOP500超级计算机排行榜均采用该方式评估</td><td>测试3次取均值</td></tr></tbody></table><h3 id="内存基准测试"><a href="#内存基准测试" class="headerlink" title="内存基准测试"></a>内存基准测试</h3><table><thead><tr><th>测试项</th><th>测试工具</th><th>选择理由</th><th>测试方式</th></tr></thead><tbody><tr><td>内存带宽</td><td>STREAM Benchmark</td><td>HPC内存带宽的行业标准测试，TOP500超级计算机排行榜均采用该方式评估</td><td>Copy&#x2F;Scale&#x2F;Add&#x2F;Triad测试3次取均值</td></tr></tbody></table><h3 id="硬盘测试"><a href="#硬盘测试" class="headerlink" title="硬盘测试"></a>硬盘测试</h3><blockquote><p><em>重要更新: 2025-11-5 发布了v1.1版本，修复了读测试无IO导致测试结果失真的BUG</em><br>新增了实时显示FIO进度的功能</p></blockquote><hr><blockquote><p><em>重要更新: 2025-11-4 发布了fio硬盘测试的全自动工具</em><br>工具涵盖了自动运行fio，通过预置的benchmark.fio文件自动运行60项基础测试<br>运行前检查其中的<code>directory=/mnt/test/  ; 测试目录路径，请根据实际情况修改</code><br>补充：注意<code>directory=</code>后面一定是带<code>/</code>的，因为是目录<br>可以选择将需要测试的硬盘挂载到这个目录，或者修改为你想要的目录<br><code>runtime=30s          ; 每个测试运行 30 秒</code>，则是每项测试运行多久<br><code>ramp_time=5s         ; 5秒预热，使设备进入稳定状态</code>，这一条无需修改，作用是按照所设定的参数运行5秒确保硬盘跑起来，避免冷启动的性能过低或者波动<br><code>size=10G</code>，这是测试文件的大小，注意根据你的容量并计算<code>numjobs</code>的数量，例如8个<code>numjobs</code>则是<code>10G*8=80G</code>硬盘空间<br>给<code>full_auto</code>设置执行权限，并确保<code>benchmark.fio</code>和该程序在一个目录即可<br>运行完成后会在当前目录生成原始数据的<code>json</code>文件和导出可读的<code>xlsx</code>Excel表格</p></blockquote><p><a class="link"   href="https://github.com/1949hacker/fio_benchmark" >仓库地址:https://github.com/1949hacker/fio_benchmark<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p><a class="link"   href="https://github.com/1949hacker/fio_benchmark/releases/" >可执行程序下载<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20251104164309.png"                      alt="运行效果图1"                ></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20251105094144.png"                      alt="运行效果图2"                ></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20251105143202.png"                      alt="v1.1效果图"                ></p><hr><table><thead><tr><th>测试项</th><th>测试工具</th><th>参考业务场景</th><th>测试方式</th></tr></thead><tbody><tr><td>4k单队列</td><td>fio bs&#x3D;4k iodepth&#x3D;1</td><td>MySQL场景</td><td>测试3次取均值</td></tr><tr><td>4k 32队列</td><td>fio bs&#x3D;4k iodepth&#x3D;32</td><td>MongoDB场景</td><td>测试3次取均值</td></tr><tr><td>32k 32队列</td><td>fio bs&#x3D;32k iodepth&#x3D;32</td><td>高并发Web服务，Kafka日志刷盘，多线程缓存写入</td><td>测试3次取均值</td></tr><tr><td>1m 单队列</td><td>fio bs&#x3D;1m iodepth&#x3D;1</td><td>顺序读写，备份、视频流、镜像分发</td><td>测试3次取均值</td></tr><tr><td>1m 32队列</td><td>fio bs&#x3D;1m iodepth&#x3D;32</td><td>并发大文件读写，大规模备份，分布式存储，对象存储</td><td>测试3次取均值</td></tr><tr><td>硬盘压测</td><td>fio -numjobs&#x3D;32 -bs&#x3D;4k -iodepth&#x3D;64 -directory</td><td>具体代码见下方及下文中有关于fio参数的解释</td><td></td></tr></tbody></table><hr><blockquote><p>补充说明：除系统盘不能直接测试裸盘外，其他盘均应使用裸盘测试，如<code>fio -filename=/dev/sdb</code>和<code>fio -filename=/dev/nvme0n1</code>，直接指向硬盘块设备，而不是分区或路径</p></blockquote><hr><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fio -name=disk_benchmark -size=5G -runtime=5d -time_base -direct=1 -ioengine=libaio -randrepeat=0 -numjobs=32 -group_reporting -bs=4k -rw=randrw -rwmixwrite=30 -directory=/home/test/ -iodepth=64</span><br></pre></td></tr></table></figure></div><p>其中针对业务场景，根据单台服务器部署的业务数量适当设置<code>numjobs</code>以模拟操作系统&#x2F;应用层并发。</p><p>例如单台服务器4个数据库，则<code>fio bs=4k iodepth=32 numjobs=4</code>。</p><p><code>iodepth</code>对应单个线程的队列深度，用于存储设备并发能力测试</p><p><code>numjobs</code>对应多个线程并发，用于测试操作系统&#x2F;应用层并发能力</p><h3 id="综合基准测试"><a href="#综合基准测试" class="headerlink" title="综合基准测试"></a>综合基准测试</h3><table><thead><tr><th>测试项</th><th>测试工具</th><th>参考业务场景</th><th>测试方式</th></tr></thead><tbody><tr><td>综合性能指数</td><td>GeekBench</td><td>横向比较整机性能，仅供参考</td><td>普通测试</td></tr></tbody></table><blockquote><p>CentOS 7.9.2009跑不了GeekBench 6</p></blockquote><p><a class="link"   href="https://www.geekbench.com/legacy/" >GeekBench历史版本<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><h2 id="测试过程"><a href="#测试过程" class="headerlink" title="测试过程"></a>测试过程</h2><h3 id="AMD-9F14平台测试"><a href="#AMD-9F14平台测试" class="headerlink" title="AMD 9F14平台测试"></a>AMD 9F14平台测试</h3><p>补充：</p><p>可以先准备好fio程序的目录&#x2F;root&#x2F;fio<br>编译好hpl文件并确保目录是&#x2F;root&#x2F;hpl<br>编译好内存测试的stream并放在&#x2F;root&#x2F;memtest<br>当然，目录自由发挥也可以，改下方代码即可</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">一行代码搞定内存基准、CPU基准、存储基准的全自动测试</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">注意其中的目录和-np 24的参数根据下文内容，改为你自己的</span></span><br><span class="line">cd /root/memtest/ &amp;&amp; for i in &#123;0..2&#125;;do ./stream 2&gt;&amp;1 | tee -a mem_$i.log;done &amp;&amp; cd /root/hpl/bin/Linux_Intel64/ &amp;&amp; for i in &#123;0..2&#125;;do mpirun --allow-run-as-root -np 24 --map-by core --bind-to core ./xhpl 2&gt;&amp;1 | tee -a HPL_$i.out;done &amp;&amp; cd /root/fio &amp;&amp; ./full_auto.v2.2.0</span><br></pre></td></tr></table></figure></div><h4 id="安装CentOS-7-9-2009"><a href="#安装CentOS-7-9-2009" class="headerlink" title="安装CentOS 7.9.2009"></a>安装CentOS 7.9.2009</h4><p>替换源为清华大学CentOS-Vault源</p><p>在<a class="link"   href="https://mirrors.tuna.tsinghua.edu.cn/help/centos-vault/" >清华CentOS-Vault仓库<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>输入小版本，获取命令</p><p>例如CentOS 7.9.2009如下</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">sed -e &quot;s|^mirrorlist=|#mirrorlist=|g&quot; \</span><br><span class="line">    -e &quot;s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009|g&quot; \</span><br><span class="line">    -e &quot;s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009|g&quot; \</span><br><span class="line">    -i.bak \</span><br><span class="line">    /etc/yum.repos.d/CentOS-*.repo</span><br></pre></td></tr></table></figure></div><p>该命令执行后会将原本的所有源配置文件备份为带<code>.bak</code>后缀名的备份</p><p>可以通过下方的命令快速还原</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">启用bash扩展通配符</span></span><br><span class="line">shopt -s extglob</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用通配符快速删除不带.bak的文件</span></span><br><span class="line">rm !(*.bak) -f</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用<span class="keyword">for</span>循环快速去掉.bak后缀</span></span><br><span class="line">for f in *.bak;do mv -- &quot;$f&quot; &quot;$&#123;f%.bak&#125;&quot;;done</span><br></pre></td></tr></table></figure></div><p><code>yum makecache</code>更新源</p><p><code>yum install vim</code>安装vim编辑器</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">更新源</span></span><br><span class="line">yum makecache</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装vim</span></span><br><span class="line">yum install vim</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编辑ssh配置文件</span></span><br><span class="line">vim /etc/ssh/sshd_config</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">设置心跳</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">取消注释，设置为每60秒发送一次心跳重复9999999次</span></span><br><span class="line">ClientAliveInterval 60</span><br><span class="line">ClientAliveCountMax 99999</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">设置允许root用户登录</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">取消注释并配置为<span class="built_in">yes</span></span></span><br><span class="line">PermitRootLogin yes</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">重启ssh服务</span></span><br><span class="line">systemctl restart sshd</span><br></pre></td></tr></table></figure></div><h4 id="准备CPU的Linpack测试"><a href="#准备CPU的Linpack测试" class="headerlink" title="准备CPU的Linpack测试"></a>准备CPU的Linpack测试</h4><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">基础环境</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装OpenBLAS</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装OpenMPI</span></span><br><span class="line">yum install -y epel-release &amp;&amp; yum install gcc gcc-c++ gcc-gfortran cmake python3 zlib* -y &amp;&amp; yum install -y openblas openblas-devel &amp;&amp; yum install -y openmpi openmpi-devel</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">找到MPI的位置</span></span><br><span class="line">find /usr -name &quot;mpicc&quot; 2&gt;/dev/null</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">我的输出如下</span></span><br><span class="line">/usr/lib64/openmpi/bin/mpicc</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">添加MPI到环境变量</span></span><br><span class="line">echo &#x27;export PATH=/usr/lib64/openmpi/bin:$PATH&#x27; &gt;&gt; ~/.bashrc</span><br><span class="line">echo &#x27;export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH&#x27; &gt;&gt; ~/.bashrc</span><br><span class="line">source ~/.bashrc</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">临时生效</span></span><br><span class="line">export PATH=/usr/lib64/openmpi/bin:$PATH</span><br><span class="line">export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">复查一下系统中有没有openblas</span></span><br><span class="line">ldconfig -p | grep openblas</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">输出通常如下所示</span></span><br><span class="line">libopenblas64_.so.0 (libc6,x86-64) =&gt; /lib64/libopenblas64_.so.0</span><br><span class="line">libopenblas64.so.0 (libc6,x86-64) =&gt; /lib64/libopenblas64.so.0</span><br><span class="line">libopenblasp64_.so.0 (libc6,x86-64) =&gt; /lib64/libopenblasp64_.so.0</span><br><span class="line">libopenblasp64.so.0 (libc6,x86-64) =&gt; /lib64/libopenblasp64.so.0</span><br><span class="line">libopenblasp.so.0 (libc6,x86-64) =&gt; /lib64/libopenblasp.so.0</span><br><span class="line">libopenblaso64_.so.0 (libc6,x86-64) =&gt; /lib64/libopenblaso64_.so.0</span><br><span class="line">libopenblaso64.so.0 (libc6,x86-64) =&gt; /lib64/libopenblaso64.so.0</span><br><span class="line">libopenblaso.so.0 (libc6,x86-64) =&gt; /lib64/libopenblaso.so.0</span><br><span class="line">libopenblas.so.0 (libc6,x86-64) =&gt; /lib64/libopenblas.so.0</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">下载High Performance Linpack</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">去官网检查最新版https://www.netlib.org/benchmark/hpl/</span></span><br><span class="line">wget https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz</span><br><span class="line">tar xvf hpl-2.3.tar.gz</span><br><span class="line">mv hpl-2.3 hpl</span><br><span class="line">mv hpl ~/</span><br><span class="line">cd ~/hpl</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">从模板创建副本并改动编译器参数</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">INTEL使用Make.Linux_Intel64</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">AMD使用Make.Linux_ATHLON_FBLAS</span></span><br><span class="line">cp setup/Make.Linux_ATHLON_FBLAS ./Make.Linux_ATHLON_FBLAS</span><br><span class="line">vim Make.Linux_ATHLON_FBLAS</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">64行的ARCH的名称可以自定义，但没必要，需要和文件名后缀一致，如Make.Linux_ATHLON_FBLAS</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">后续make编译时会用到，如make <span class="built_in">arch</span>=AMD_OpenBLAS</span></span><br><span class="line">ARCH = Linux_ATHLON_FBLAS</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">配置openblas通用开源方案，保持测试结果的中立</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">避免MKL和AOCL BLIS/LibFLAME对于INTEL AMD的专项优化</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">修改配置使HPL走CBLAS接口，而不是老的Fortran BLAS</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在配置文件中找到</span></span><br><span class="line">HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在末尾加上 -DHPL_CALL_CBLAS</span></span><br><span class="line">HPL_DEFS     = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES) -DHPL_CALL_CBLAS</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">找到CCFLAGS，添加-march=native</span></span><br><span class="line">CCFLAGS      = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall -march=native</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">默认的配置如下</span></span><br><span class="line">LAdir        = $(HOME)/netlib/ARCHIVES/Linux_ATHLON</span><br><span class="line">LAinc        =</span><br><span class="line">LAlib        = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">修改为</span></span><br><span class="line">LAdir   = /usr/lib64/openblas  # 你的 OpenBLAS库路径，find / -name libopenblas*</span><br><span class="line">LAinc   =</span><br><span class="line">LAlib   = -lopenblas</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">改为直接使用mpicc编译</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">修改CC</span></span><br><span class="line">CC      = mpicc</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">注释掉84-86行左右的三行MP配置</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在前面加#注释了就行</span></span><br><span class="line">MPdir        = /usr/local/mpi</span><br><span class="line">MPinc        = -I$(MPdir)/include</span><br><span class="line">MPlib        = $(MPdir)/lib/libmpich.a</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">这部分是针对Intel的编译参数设置，AMD忽略</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">--------- start ---------</span></span><br><span class="line">OMP_DEFS  = -openmp</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">改为</span></span><br><span class="line">OMP_DEFS  = -fopenmp</span><br><span class="line"></span><br><span class="line">CCFLAGS = CCFLAGS  = $(HPL_DEFS) -O3 -w -ansi-alias -i-static -z noexecstack -z relro -z now -nocompchk -Wall</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">修改为</span></span><br><span class="line">CCFLAGS  = $(HPL_DEFS) -O3 -w -Wall -fopenmp -fno-strict-aliasing -march=native -z noexecstack -z relro -z now</span><br><span class="line"></span><br><span class="line">LINKFLAGS = $(CCFLAGS) $(OMP_DEFS) -mt_mpi</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">修改为</span></span><br><span class="line">LINKFLAGS = $(CCFLAGS) $(OMP_DEFS)</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">--------- end ---------</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编译HPL</span></span><br><span class="line">make -f Make.top build_src arch=Linux_ATHLON_FBLAS</span><br><span class="line">make -f Make.top build_tst arch=Linux_ATHLON_FBLAS</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编辑HPL.dat</span></span><br><span class="line">cd bin/Linux_ATHLON_FBLAS</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">Intel是Linux_Intel64</span></span><br><span class="line">cd bin/Linux_Intel64</span><br><span class="line"></span><br><span class="line">mv HPL.dat HPL.dat.bak</span><br><span class="line">vim HPL.dat</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">HPL.dat范例，参数及其解析详见下方表格</span></span><br><span class="line">HPLinpack benchmark input file</span><br><span class="line">Innovative Computing Laboratory, University of Tennessee</span><br><span class="line">HPL.out      output file name (if any)</span><br><span class="line">6            device out (6=stdout,7=stderr,file)</span><br><span class="line">1            # of problems sizes (N)</span><br><span class="line">165120         Ns</span><br><span class="line">1            # of NBs</span><br><span class="line">384           NBs</span><br><span class="line">0            PMAP process mapping (0=Row-,1=Column-major)</span><br><span class="line">1            # of process grids (P x Q)</span><br><span class="line">8            Ps</span><br><span class="line">12            Qs</span><br><span class="line">16.0         threshold</span><br><span class="line">1            # of panel fact</span><br><span class="line">2            PFACTs (0=left, 1=Crout, 2=Right)</span><br><span class="line">1            # of recursive stopping criterium</span><br><span class="line">4            NBMINs (&gt;= 1)</span><br><span class="line">1            # of panels in recursion</span><br><span class="line">2            NDIVs</span><br><span class="line">1            # of recursive panel fact.</span><br><span class="line">1            RFACTs (0=left, 1=Crout, 2=Right)</span><br><span class="line">1            # of broadcast</span><br><span class="line">1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)</span><br><span class="line">1            # of lookahead depth</span><br><span class="line">1            DEPTHs (&gt;=0)</span><br><span class="line">2            SWAP (0=bin-exch,1=long,2=mix)</span><br><span class="line">64           swapping threshold</span><br><span class="line">0            L1 in (0=transposed,1=no-transposed) form</span><br><span class="line">0            U  in (0=transposed,1=no-transposed) form</span><br><span class="line">1            Equilibration (0=no,1=yes)</span><br><span class="line">8            memory alignment in double (&gt; 0)</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash"><span class="comment">#### This line (no. 32) is ignored (it serves as a separator). ######</span></span></span><br><span class="line">0                               Number of additional problem sizes for PTRANS</span><br><span class="line">1200 10000 30000                values of N</span><br><span class="line">0                               number of additional blocking sizes for PTRANS</span><br><span class="line">40 9 8 13 13 20 16 32 64        values of NB</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">禁用防火墙</span></span><br><span class="line">systemctl stop firewalld</span><br><span class="line">setenforce 0</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">开始运行</span></span><br><span class="line">mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用htop查看硬件负载</span></span><br><span class="line">yum install -y htop</span><br><span class="line">htop</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">测试结果范例，其中183行和190行分别是测试结果和误差，附带了注释</span></span><br><span class="line">================================================================================</span><br><span class="line">HPLinpack 2.3  --  High-Performance Linpack benchmark  --   December 2, 2018</span><br><span class="line">Written by A. Petitet and R. Clint Whaley,  Innovative Computing Laboratory, UTK</span><br><span class="line">Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK</span><br><span class="line">Modified by Julien Langou, University of Colorado Denver</span><br><span class="line">================================================================================</span><br><span class="line"></span><br><span class="line">An explanation of the input/output parameters follows:</span><br><span class="line">T/V    : Wall time / encoded variant.</span><br><span class="line">N      : The order of the coefficient matrix A.</span><br><span class="line">NB     : The partitioning blocking factor.</span><br><span class="line">P      : The number of process rows.</span><br><span class="line">Q      : The number of process columns.</span><br><span class="line">Time   : Time in seconds to solve the linear system.</span><br><span class="line">Gflops : Rate of execution for solving the linear system.</span><br><span class="line"></span><br><span class="line">The following parameter values will be used:</span><br><span class="line"></span><br><span class="line">N      :  165120</span><br><span class="line">NB     :     384</span><br><span class="line">PMAP   : Row-major process mapping</span><br><span class="line">P      :       8</span><br><span class="line">Q      :      12</span><br><span class="line">PFACT  :   Right</span><br><span class="line">NBMIN  :       4</span><br><span class="line">NDIV   :       2</span><br><span class="line">RFACT  :   Crout</span><br><span class="line">BCAST  :  1ringM</span><br><span class="line">DEPTH  :       1</span><br><span class="line">SWAP   : Mix (threshold = 64)</span><br><span class="line">L1     : transposed form</span><br><span class="line">U      : transposed form</span><br><span class="line">EQUIL  : yes</span><br><span class="line">ALIGN  : 8 double precision words</span><br><span class="line"></span><br><span class="line">--------------------------------------------------------------------------------</span><br><span class="line"></span><br><span class="line">- The matrix A is randomly generated for each test.</span><br><span class="line">- The following scaled residual check will be computed:</span><br><span class="line">      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )</span><br><span class="line">- The relative machine precision (eps) is taken to be               1.110223e-16</span><br><span class="line">- Computational tests pass if scaled residuals are less than                16.0</span><br><span class="line"></span><br><span class="line">================================================================================</span><br><span class="line">T/V                N    NB     P     Q               Time                 Gflops</span><br><span class="line">--------------------------------------------------------------------------------</span><br><span class="line">WR11C2R4      165120   384     8    12            1755.82             1.7094e+03</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">这里的1.7094e+03也就是1.7094*10^3 Gflops=1709.4GFlops=1.7094TFlops</span></span><br><span class="line">HPL_pdgesv() start time Mon Sep 15 12:53:01 2025</span><br><span class="line"></span><br><span class="line">HPL_pdgesv() end time   Mon Sep 15 13:22:17 2025</span><br><span class="line"></span><br><span class="line">--------------------------------------------------------------------------------</span><br><span class="line">||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=   4.65407372e-04 ...... PASSED</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">这里的PASSED说明误差合格，测试有效</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">误差为4.65407372*10^-4=0.00046540737</span></span><br><span class="line">================================================================================</span><br><span class="line"></span><br><span class="line">Finished      1 tests with the following results:</span><br><span class="line">              1 tests completed and passed residual checks,</span><br><span class="line">              0 tests completed and failed residual checks,</span><br><span class="line">              0 tests skipped because of illegal input values.</span><br><span class="line">--------------------------------------------------------------------------------</span><br><span class="line"></span><br><span class="line">End of Tests.</span><br><span class="line">================================================================================</span><br></pre></td></tr></table></figure></div><h5 id="HPL-dat的参数及其说明"><a href="#HPL-dat的参数及其说明" class="headerlink" title="HPL.dat的参数及其说明"></a>HPL.dat的参数及其说明</h5><p>在线生成HPL.dat文件的网站 <a class="link"   href="https://www.advancedclustering.com/act_kb/tune-hpl-dat-file/" >HPL.dat<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>Nodes</td><td>对应CPU数量</td></tr><tr><td>Cores per Node</td><td>每个CPU多少核</td></tr><tr><td>Memory per Node(MB)</td><td>每个CPU有多少MB内存</td></tr><tr><td>Block Size(NB)</td><td>HPL运算的块大小</td></tr></tbody></table><p>NB 块大小计算方式：</p><p><strong>设置适当的块大小，使数据块能够很好的放入CPU的高速缓存（L2&#x2F;L3 Cache），如果数据块不能放入高速缓存，则不得不从慢得多的主内存RAM中进行读取，从而导致性能瓶颈。</strong></p><p>NB最好是PQ的整数倍，以我的AMD 9A14为例，L3为384MB，96核心</p><p>HPL将矩阵N分块成NB*NB的小块，然后分布在一个二维进程网格P行Q列上</p><p>所以如果任何一方过长，就会造成通信路径变长，从而导致性能开销大</p><p>为了使性能达到最优，需要使这个二维网格接近正方形，也就是PQ值相近，且同时P*Q需要等于核心数，以确保每个核心都有数据块在计算</p><h6 id="PQ计算公式"><a href="#PQ计算公式" class="headerlink" title="PQ计算公式"></a>PQ计算公式</h6><p><strong>使用在线生成则直接跳过此处即可，仅用作学习</strong></p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">根据内核数量取近似的能开方的整数</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">例如96核取100开方</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">然后用核数除平方根递归直到整除</span></span><br><span class="line">96/10=9.6</span><br><span class="line">96/9=10.66</span><br><span class="line">96/8=12</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">PQ则为8*12</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">该网格便由8行12列组成，接近正方形，避免了过长的通信路径</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">每个进程需要将分解结果广播给其他进程，所以过长的通信路径就意味着过长的通信开销</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如图</span></span><br><span class="line">- - - - - - -</span><br><span class="line">- - - · - - -</span><br><span class="line">- - - - - - -</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">对比过长的通信路径</span></span><br><span class="line">- - - - - - - - ·- - - - - - -</span><br></pre></td></tr></table></figure></div><h6 id="NB块大小计算公式"><a href="#NB块大小计算公式" class="headerlink" title="NB块大小计算公式"></a>NB块大小计算公式</h6><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">首先查询CPU的L3缓存</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">然后用L3缓存除以核心数，算出每个核心能使用的缓存均值</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">根据<span class="built_in">float</span>类型占4字节，double类型占8字节计算</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">该性能测试为双精度浮点运算，取8字节</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">先计算每个核心能使用多少字节的缓存</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">AMD 9A14 L3 384MB/96核心</span></span><br><span class="line">384/96=4MB/core</span><br><span class="line">4*1024*1024=4,194,304Byte/core</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">然后除以双精度的8字节，计算出每个核心处理多少个双精度浮点数，也就是NB²</span></span><br><span class="line">4194304/8=524288NB²</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">然后开方得出NB</span></span><br><span class="line">524288开方约为724NB</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">为了避免撑爆L3缓存，只取一半值</span></span><br><span class="line">724/2=362/core</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">现代x86 CPU的Cache Line是固定的64字节</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">为了保证AVX/AVX-512指令能每次搬运时都尽量填满</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">所以寻找64的倍数，且尽量接近L3 Cache的极限</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">这样计算出每个核心计算大概362个NB，每次指令搬运64字节，总共搬运约6次</span></span><br><span class="line">362/64=5.65625 取整 6</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">计算每次64字节总共6次的整数</span></span><br><span class="line">64*6=384</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">最终得出NB最优值为384</span></span><br></pre></td></tr></table></figure></div><p>最终计算出NB为<code>384</code></p><p>注意其中<code>Nodes</code>填的是有多少个CPU<br><code>Cores per Node</code>则是每个CPU有多少物理内核<br><code>Memory per Node(MB)</code>是每个CPU有多少内存可用，所以内存条也需要均匀安装<br><code>Block Size(NB)</code>则是填入上方计算的值</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250915145114.png"                      alt="20250915145114"                ></p><p>在线生成后的HPL.dat如下，HPL只会读取第一列，数字后方的是注释，带#的也是注释</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">HPLinpack benchmark input file</span><br><span class="line">Innovative Computing Laboratory, University of Tennessee</span><br><span class="line">HPL.out      output file name (if any)</span><br><span class="line">6            device out (6=stdout,7=stderr,file)</span><br><span class="line">1            # of problems sizes (N)</span><br><span class="line">165120         Ns</span><br><span class="line">1            # of NBs</span><br><span class="line">384           NBs</span><br><span class="line">0            PMAP process mapping (0=Row-,1=Column-major)</span><br><span class="line">1            # of process grids (P x Q)</span><br><span class="line">8            Ps</span><br><span class="line">12            Qs</span><br><span class="line">16.0         threshold</span><br><span class="line">1            # of panel fact</span><br><span class="line">2            PFACTs (0=left, 1=Crout, 2=Right)</span><br><span class="line">1            # of recursive stopping criterium</span><br><span class="line">4            NBMINs (&gt;= 1)</span><br><span class="line">1            # of panels in recursion</span><br><span class="line">2            NDIVs</span><br><span class="line">1            # of recursive panel fact.</span><br><span class="line">1            RFACTs (0=left, 1=Crout, 2=Right)</span><br><span class="line">1            # of broadcast</span><br><span class="line">1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)</span><br><span class="line">1            # of lookahead depth</span><br><span class="line">1            DEPTHs (&gt;=0)</span><br><span class="line">2            SWAP (0=bin-exch,1=long,2=mix)</span><br><span class="line">64           swapping threshold</span><br><span class="line">0            L1 in (0=transposed,1=no-transposed) form</span><br><span class="line">0            U  in (0=transposed,1=no-transposed) form</span><br><span class="line">1            Equilibration (0=no,1=yes)</span><br><span class="line">8            memory alignment in double (&gt; 0)</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash"><span class="comment">#### This line (no. 32) is ignored (it serves as a separator). ######</span></span></span><br><span class="line">0                               Number of additional problem sizes for PTRANS</span><br><span class="line">1200 10000 30000                values of N</span><br><span class="line">0                               number of additional blocking sizes for PTRANS</span><br><span class="line">40 9 8 13 13 20 16 32 64        values of NB</span><br></pre></td></tr></table></figure></div><p>根据这份文件，运行命令如下：</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">--allow-run-as-root 允许root用户运行</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-np 96 启动96个MPI进程，与物理内核总数相同，不是线程数</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如果你是4路每路20核那你就要填80，是所有CPU物理内核总数</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">--map-by core MPI进程核CPU逻辑核心进行绑定</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">--bind-to core 将每个进程锁定到core上运行，避免cache miss</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">显示的同时输出到文件，方便做为测试记录</span></span><br><span class="line">mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl 2&gt;&amp;1 | tee -a HPL_0.out</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">一条命令实现运行完CPU基准后自动开始执行存储基准测试</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">在xhpl目录运行的</span></span><br><span class="line">for i in &#123;0..2&#125;;do mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl 2&gt;&amp;1 | tee -a HPL_$i.out;done &amp;&amp; cd /root/fio/ &amp;&amp; /root/fio/full_auto.v2.2.0</span><br></pre></td></tr></table></figure></div><p>关于参数的解释在官网有详细说明<a class="link"   href="https://www.netlib.org/benchmark/hpl/tuning.html" >HPL Tuning<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><h4 id="进行内存的基准测试"><a href="#进行内存的基准测试" class="headerlink" title="进行内存的基准测试"></a>进行内存的基准测试</h4><p>使用<a class="link"   href="https://www.cs.virginia.edu/stream/" >STREAM Benchmark<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>进行测试</p><p><a class="link"   href="https://www.cs.virginia.edu/stream/FTP/Code/stream.c" >源代码<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装编译工具</span></span><br><span class="line">yum install gcc -y</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">下载源码，或者复制，都行</span></span><br><span class="line">wget https://www.cs.virginia.edu/stream/FTP/Code/stream.c</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编译stream</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中-DSTREAM_ARRAY_SIZE是设置每个数组的元素数量</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">测试的内存大小 = 物理内存上限 ÷ (数组个数 × 元素字节数)</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">物理内存上限取一半值，避免打到swap，256GB × 1/2 = 128GB = 137438953472 Bytes</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">数组个数 = 4 默认测试 Triad 核心项，需 a/b/c/d 4 个数组</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">元素字节数 = 8 推荐用 double 类型，兼顾精度和硬件带宽适配</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-DSTREAM_ARRAY_SIZE = 137438953472 ÷ (4 × 8) = 137438953472 ÷ 32 = 4294967296</span></span><br><span class="line">gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=4294967296 stream.c -o stream</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">实际编译中这个值太大了，超过程序的限制了，取一半就行了</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-O3编译器优化 -m64强制生成64位可执行文件</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-mcmodel=medium采用64位系统的内存模型，以支持超大全局数组 -fopenmp启用多线程并行框架</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-DTYPE=double定义元素类型为double高精度 -DSTREAM_TYPE=double同步内部的流类型与DTYPE一致</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-DN=2147483648冗余安全参数，用于兼容以N作为数组大小别名的源码</span></span><br><span class="line">gcc -O3 -fopenmp -m64 -mcmodel=medium -DSTREAM_ARRAY_SIZE=2147483648 -DTYPE=double -DSTREAM_TYPE=double -DN=2147483648 stream.c -o stream</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">运行</span></span><br><span class="line">./stream</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">直接输出到文件</span></span><br><span class="line">./stream &gt;&gt; mem_test_0.log</span><br></pre></td></tr></table></figure></div><p>输出结果如下，只需要第30行中Triad的带宽212674.9MB&#x2F;s和延迟的平均值Avg time</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">-------------------------------------------------------------</span><br><span class="line">STREAM version $Revision: 5.10 $</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">This system uses 8 bytes per array element.</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">Array size = 100000000 (elements), Offset = 0 (elements)</span><br><span class="line">Memory per array = 762.9 MiB (= 0.7 GiB).</span><br><span class="line">Total memory required = 2288.8 MiB (= 2.2 GiB).</span><br><span class="line">Each kernel will be executed 10 times.</span><br><span class="line"> The *best* time for each kernel (excluding the first iteration)</span><br><span class="line"> will be used to compute the reported bandwidth.</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">Number of Threads requested = 192</span><br><span class="line">Number of Threads counted = 192</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">Your clock granularity/precision appears to be 1 microseconds.</span><br><span class="line">Each test below will take on the order of 16443 microseconds.</span><br><span class="line">   (= 16443 clock ticks)</span><br><span class="line">Increase the size of the arrays if this shows that</span><br><span class="line">you are not getting at least 20 clock ticks per test.</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">WARNING -- The above is only a rough guideline.</span><br><span class="line">For best results, please be sure you know the</span><br><span class="line">precision of your system timer.</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">Function    Best Rate MB/s  Avg time     Min time     Max time</span><br><span class="line">Copy:          254046.3     0.006921     0.006298     0.011713</span><br><span class="line">Scale:         189664.1     0.008491     0.008436     0.008531</span><br><span class="line">Add:           204691.7     0.011839     0.011725     0.011884</span><br><span class="line">Triad:         212674.9     0.011320     0.011285     0.011350</span><br><span class="line">-------------------------------------------------------------</span><br><span class="line">Solution Validates: avg error less than 1.000000e-13 on all three arrays</span><br><span class="line">-------------------------------------------------------------</span><br></pre></td></tr></table></figure></div><p>只取其中的典型值Triad即可，代表典型科学计算&#x2F;数值模拟中的内存访问性能</p><h4 id="硬盘性能fio测试"><a href="#硬盘性能fio测试" class="headerlink" title="硬盘性能fio测试"></a>硬盘性能fio测试</h4><p>使用fio进行硬盘的性能测试，测试结果包含IOPS、带宽、延迟</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装fio</span></span><br><span class="line">yum install fio</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">准备好测试路径或硬盘</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">这里采用指向目录的方式测试</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如需直接测试硬盘，则指向硬盘即可</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-name=本次测试的名称，自定义即可</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-size=本次测试的文件大小，建议大于内存的2倍，避免某些文件系统使用内存缓存</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">鉴于CentOS 7.9.2009的xfs和参数设置了direct=1，所以size不用大于内存</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-runtime=运行时间，单位支持秒s、分m、时h、天d</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-time_base 即使写入了指定大小的文件，依旧继续重复写入，直到runtime时间结束</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-direct=1设置不使用系统缓存，直写</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-ioengine=libaio直接使用Linux的异步IO引擎</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-randrepeat=0设置每次IO的随机性都不同，模拟真实业务场景</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-numjobs=8设置8个进程，模拟真实业务场景</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-group_reporting多进程的运行结果汇总汇报</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-bs=4k 块大小4k</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-rw=randrw随机读写</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-rwmixwrite=30设置30%写70%读，模拟真实业务场景</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-filename=/root/fio 在/root目录下创建一个名为fio的文件进行测试</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-directory=/dir/上方的filename也可替换为该命令指向目录，会在目录下根据numjobs的数量生成多个文件测试</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">注意下你的目录容量，别装不下size*numjobs的文件</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">-iodepth= IO队列深度</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">运行5分钟，采用路径模式8进程写入，模拟最真实的业务场景</span></span><br><span class="line">fio -name=disk_benchmark -size=10G -runtime=5m -time_base -direct=1 -ioengine=libaio -randrepeat=0 -numjobs=8 -group_reporting -bs=4k -rw=randrw -rwmixwrite=30 -filename=/home/fio -iodepth=1</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">1m顺序混合30%写70%读范例</span></span><br><span class="line">fio -name=disk_benchmark -size=5G -runtime=15s -time_base -direct=1 -ioengine=libaio -numjobs=8 -group_reporting -bs=1m -rw=rw -rwmixwrite=30 -filename=/home/fio/a -iodepth=1</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">运行结果如下</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中第38行则是读取性能的测试结果，55行是写入的性能测试结果，附带了注释说明</span></span><br><span class="line">disk_benchmark: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=32</span><br><span class="line">...</span><br><span class="line">fio-3.7</span><br><span class="line">Starting 8 processes</span><br><span class="line">disk_benchmark: Laying out IO file (1 file / 5120MiB)</span><br><span class="line">Jobs: 8 (f=8): [m(8)][100.0%][r=339MiB/s,w=144MiB/s][r=86.8k,w=36.0k IOPS][eta 00m:00s]</span><br><span class="line">disk_benchmark: (groupid=0, jobs=8): err= 0: pid=64509: Tue Sep 16 15:11:50 2025</span><br><span class="line"><span class="meta prompt_">  # </span><span class="language-bash">读取性能的测试结果在此，记录IOPS，和MB单位的353MB/s即可</span></span><br><span class="line">   read: IOPS=86.2k, BW=337MiB/s (353MB/s)(5053MiB/15002msec)</span><br><span class="line">    slat (nsec): min=1110, max=34081k, avg=51710.15, stdev=245614.51</span><br><span class="line">    clat (usec): min=229, max=36569, avg=2081.87, stdev=914.48</span><br><span class="line">    # 读取延迟取lat(total latency)总延迟的值即可，统一用微秒单位</span><br><span class="line">    # Windows按住Alt然后直接按小数字键盘0181即可输出µ</span><br><span class="line">    # Linux则是Ctrl+Shift+U输入00b5</span><br><span class="line">    # MACOS则是Option+m输出µ</span><br><span class="line">     lat (usec): min=237, max=37825, avg=2133.63, stdev=947.08</span><br><span class="line">    clat percentiles (usec):</span><br><span class="line">     |  1.00th=[  545],  5.00th=[  816], 10.00th=[ 1106], 20.00th=[ 1401],</span><br><span class="line">     | 30.00th=[ 1614], 40.00th=[ 1795], 50.00th=[ 1958], 60.00th=[ 2147],</span><br><span class="line">     | 70.00th=[ 2376], 80.00th=[ 2737], 90.00th=[ 3261], 95.00th=[ 3621],</span><br><span class="line">     | 99.00th=[ 4490], 99.50th=[ 4817], 99.90th=[ 5538], 99.95th=[ 5866],</span><br><span class="line">     | 99.99th=[21103]</span><br><span class="line">   bw (  KiB/s): min=39944, max=45384, per=12.50%, avg=43106.80, stdev=948.51, samples=240</span><br><span class="line">   iops        : min= 9986, max=11346, avg=10776.67, stdev=237.13, samples=240</span><br><span class="line"><span class="meta prompt_">   # </span><span class="language-bash">写入性能的测试结果在此，记录IOPS，和MB单位的353MB/s即可</span></span><br><span class="line">  write: IOPS=37.0k, BW=145MiB/s (152MB/s)(2171MiB/15002msec)</span><br><span class="line">    slat (nsec): min=1470, max=17704k, avg=54444.01, stdev=241994.82</span><br><span class="line">    clat (usec): min=150, max=37077, avg=1887.95, stdev=964.94</span><br><span class="line">    # 写入延迟取lat(total latency)总延迟的值即可，统一用微秒单位</span><br><span class="line">    # Windows按住Alt然后直接按小数字键盘0181即可输出µ</span><br><span class="line">    # Linux则是Ctrl+Shift+U输入00b5</span><br><span class="line">    # MACOS则是Option+m输出µ</span><br><span class="line">     lat (usec): min=153, max=37080, avg=1942.46, stdev=994.98</span><br><span class="line">    clat percentiles (usec):</span><br><span class="line">     |  1.00th=[  400],  5.00th=[  537], 10.00th=[  676], 20.00th=[ 1156],</span><br><span class="line">     | 30.00th=[ 1418], 40.00th=[ 1614], 50.00th=[ 1795], 60.00th=[ 1991],</span><br><span class="line">     | 70.00th=[ 2212], 80.00th=[ 2540], 90.00th=[ 3130], 95.00th=[ 3556],</span><br><span class="line">     | 99.00th=[ 4490], 99.50th=[ 4817], 99.90th=[ 5604], 99.95th=[ 5997],</span><br><span class="line">     | 99.99th=[18744]</span><br><span class="line">   bw (  KiB/s): min=16736, max=19920, per=12.50%, avg=18519.40, stdev=504.91, samples=240</span><br><span class="line">   iops        : min= 4184, max= 4980, avg=4629.82, stdev=126.23, samples=240</span><br><span class="line">  lat (usec)   : 250=0.01%, 500=1.54%, 750=4.81%, 1000=4.07%</span><br><span class="line">  lat (msec)   : 2=44.46%, 4=42.71%, 10=2.39%, 20=0.01%, 50=0.01%</span><br><span class="line">  cpu          : usr=1.15%, sys=8.65%, ctx=508859, majf=0, minf=268</span><br><span class="line">  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, &gt;=64=0.0%</span><br><span class="line">     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &gt;=64=0.0%</span><br><span class="line">     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, &gt;=64=0.0%</span><br><span class="line">     issued rwts: total=1293511,555725,0,0 short=0,0,0,0 dropped=0,0,0,0</span><br><span class="line">     latency   : target=0, window=0, percentile=100.00%, depth=32</span><br><span class="line"></span><br><span class="line">Run status group 0 (all jobs):</span><br><span class="line">   READ: bw=337MiB/s (353MB/s), 337MiB/s-337MiB/s (353MB/s-353MB/s), io=5053MiB (5298MB), run=15002-15002msec</span><br><span class="line">  WRITE: bw=145MiB/s (152MB/s), 145MiB/s-145MiB/s (152MB/s-152MB/s), io=2171MiB (2276MB), run=15002-15002msec</span><br><span class="line"></span><br><span class="line">Disk stats (read/write):</span><br><span class="line">    dm-2: ios=1288781/553752, merge=0/0, ticks=1713741/644122, in_queue=2391609, util=100.00%, aggrios=1293378/555710, aggrmerge=132/23, aggrticks=1658421/619009, aggrin_queue=2289296, aggrutil=99.74%</span><br><span class="line">  sda: ios=1293378/555710, merge=132/23, ticks=1658421/619009, in_queue=2289296, util=99.74% # 这里的util是硬盘负载，100%负载才说明榨干了硬盘性能</span><br></pre></td></tr></table></figure></div><h4 id="综合性能测试"><a href="#综合性能测试" class="headerlink" title="综合性能测试"></a>综合性能测试</h4><p>使用CentOS 7.9.2009和GeekBench进行综合性能评估</p><p>下载地址 <a class="link"   href="https://www.geekbench.com/download/" >geekbench<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">解压下载的压缩包</span></span><br><span class="line">tar -zxvf Geekbench-6.5.0-Linux.tar.gz</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">直接运行即可</span></span><br><span class="line">./geekbench6</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如果提示</span></span><br><span class="line">/root/Geekbench-6.5.0-Linux/geekbench_avx2: /lib64/libm.so.6: version `GLIBC_2.27&#x27; not found (required by /root/Geekbench-6.5.0-Linux/geekbench_avx2)</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">系统glibc版本过低，使用旧版本GeekBench</span></span><br><span class="line">https://cdn.geekbench.com/Geekbench-5.5.1-Linux.tar.gz</span><br></pre></td></tr></table></figure></div><h3 id="稳定性测试"><a href="#稳定性测试" class="headerlink" title="稳定性测试"></a>稳定性测试</h3><p>鉴于HPL测试本身就会使服务器CPU内存满载，所以直接在上文CPU测试的基础上直接变成重复执行即可做到稳定性测试，配合带外观察CPU温度内存等是否故障即可</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">循环运行100次</span></span><br><span class="line">for i in &#123;1..100&#125;;do &quot;hpl代码&quot;;done</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">以我的AMD 9A14为例</span></span><br><span class="line">for i in &#123;1..100&#125;;do mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl &amp;&amp; echo -e &quot;\033[36;1m第 $i 次运行完成！&quot;;done</span><br></pre></td></tr></table></figure></div><p>使用该脚本运行并将运行结果也进行统计，方便同时观察性能是否有波动</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">for i in &#123;1..1000&#125;; do</span><br><span class="line">    echo -e &quot;\033[34;1m=== 第 $i 次运行开始 ===\033[0m&quot;</span><br><span class="line"></span><br><span class="line">    # 运行测试并保存输出到临时文件</span><br><span class="line">    # 记得将其替换为你自己的对应命令</span><br><span class="line">    mpirun --allow-run-as-root -np 96 --map-by core --bind-to core ./xhpl &gt; hpl_run_$i.log 2&gt;&amp;1</span><br><span class="line"></span><br><span class="line">    # 提取关键指标</span><br><span class="line">    gflops=$(grep -A1 &quot;T/V.*N.*NB.*P.*Q&quot; hpl_run_$i.log | grep -v &quot;T/V\|--&quot; | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line">    error=$(grep &quot;||Ax-b||_oo&quot; hpl_run_$i.log | awk -F&#x27;= &#x27; &#x27;&#123;print $2&#125;&#x27; | awk &#x27;&#123;print $1&#125;&#x27;)</span><br><span class="line">    status=$(grep &quot;PASSED\|FAILED&quot; hpl_run_$i.log | awk &#x27;&#123;print $NF&#125;&#x27;)</span><br><span class="line"></span><br><span class="line">    # 输出结果</span><br><span class="line">    echo -e &quot;Gflops: \033[32;1m$gflops\033[0m&quot;</span><br><span class="line">    echo -e &quot;Error:  \033[33;1m$error\033[0m&quot;</span><br><span class="line">    echo -e &quot;Status: \033[36;1m$status\033[0m&quot;</span><br><span class="line">    echo -e &quot;\033[36;1m第 $i 次运行完成！\033[0m&quot;</span><br><span class="line">    echo &quot;&quot;</span><br><span class="line"></span><br><span class="line">    # 可选：保存汇总结果到文件</span><br><span class="line">    echo &quot;运行$i, $gflops, $error, $status&quot; &gt;&gt; hpl_summary.csv</span><br><span class="line"></span><br><span class="line">    # 可选：删除临时日志文件以节省空间</span><br><span class="line">    # rm hpl_run_$i.log</span><br><span class="line">done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">最终汇总统计</span></span><br><span class="line">echo -e &quot;\033[35;1m=== 所有运行完成 ===\033[0m&quot;</span><br><span class="line">echo &quot;总运行次数: 1000&quot;</span><br><span class="line">echo &quot;PASSED 次数: $(grep -c &quot;PASSED&quot; hpl_summary.csv)&quot;</span><br><span class="line">echo &quot;FAILED 次数: $(grep -c &quot;FAILED&quot; hpl_summary.csv)&quot;</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/7ee1356d.html</id>
    <link href="https://hackerbs.com/posts/7ee1356d.html"/>
    <published>2025-09-11T07:40:24.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>重要更新: 2025-11-4  硬盘测试开发了全自动测试工具，见下方硬盘测试部分</p>
</blockquote>
<h2 id="测试项"><a href="#测试项" class="headerlink" title="测试项"></a>测试项</h2>]]>
    </summary>
    <title>服务器稳定性及基准测试方法</title>
    <updated>2026-09-23T13:04:04.113Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="运维" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%BF%90%E7%BB%B4/"/>
    <category term="排障" scheme="https://hackerbs.com/tags/%E6%8E%92%E9%9A%9C/"/>
    <category term="Linux" scheme="https://hackerbs.com/tags/Linux/"/>
    <category term="带外" scheme="https://hackerbs.com/tags/%E5%B8%A6%E5%A4%96/"/>
    <category term="宕机" scheme="https://hackerbs.com/tags/%E5%AE%95%E6%9C%BA/"/>
    <category term="BMC" scheme="https://hackerbs.com/tags/BMC/"/>
    <content>
      <![CDATA[<h2 id="巡检发现异常宕机，带外日志仅有一条热复位的记录"><a href="#巡检发现异常宕机，带外日志仅有一条热复位的记录" class="headerlink" title="巡检发现异常宕机，带外日志仅有一条热复位的记录"></a>巡检发现异常宕机，带外日志仅有一条热复位的记录</h2><p>BMC日志如下：</p><p><code>SYS_Restart    系统启动/重新启动   开始热复位 - 触发</code></p><p>仅有一条热复位记录，无物理按键记录，无操作系统发起重启记录</p><table><thead><tr><th>排障思路</th><th>命令</th></tr></thead><tbody><tr><td>排查启动日志</td><td>&#96;journalctl -b</td></tr><tr><td>排查内核缓冲区</td><td><code>dmesg --level=err,warn</code></td></tr><tr><td>排查是否有内核崩溃转储文件</td><td><code>ls -la /var/crash/</code></td></tr><tr><td>排查是否有硬件错误</td><td>&#96;journalctl -k</td></tr><tr><td>排查watchdog是否触发</td><td>&#96;journalctl -k</td></tr><tr><td>排查过热日志</td><td>&#96;journalctl -k</td></tr><tr><td>检查内存不足事件</td><td>&#96;journalctl -k</td></tr><tr><td>检查 CPU 或 I&#x2F;O 阻塞</td><td><code>sar -q -f /var/log/sa/sa10</code></td></tr><tr><td>检查内存错误计数</td><td>&#96;dmidecode -t memory</td></tr><tr><td>检查电源日志</td><td>&#96;journalctl -k</td></tr></tbody></table>]]>
    </content>
    <id>https://hackerbs.com/posts/bc56f366.html</id>
    <link href="https://hackerbs.com/posts/bc56f366.html"/>
    <published>2025-09-10T10:35:21.000Z</published>
    <summary>
      <![CDATA[<h2 id="巡检发现异常宕机，带外日志仅有一条热复位的记录"><a href="#巡检发现异常宕机，带外日志仅有一条热复位的记录" class="headerlink" title="巡检发现异常宕机，带外日志仅有一条热复位的记录"></a>巡检发现异常宕机，带外日志仅有一条热复位的记录</h2><p>BMC日志如下：</p>]]>
    </summary>
    <title>异常宕机BMC日志无参考价值时的排障思路</title>
    <updated>2026-09-23T13:04:04.156Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="存储" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AD%98%E5%82%A8/"/>
    <category term="IT知识" scheme="https://hackerbs.com/tags/IT%E7%9F%A5%E8%AF%86/"/>
    <category term="百科" scheme="https://hackerbs.com/tags/%E7%99%BE%E7%A7%91/"/>
    <category term="硬盘" scheme="https://hackerbs.com/tags/%E7%A1%AC%E7%9B%98/"/>
    <category term="带外" scheme="https://hackerbs.com/tags/%E5%B8%A6%E5%A4%96/"/>
    <category term="浪潮" scheme="https://hackerbs.com/tags/%E6%B5%AA%E6%BD%AE/"/>
    <category term="BMC" scheme="https://hackerbs.com/tags/BMC/"/>
    <category term="Inspur" scheme="https://hackerbs.com/tags/Inspur/"/>
    <content>
      <![CDATA[<p>日常巡检时发现带外出现INTEL SSD故障告警，随后又自行恢复，间隔约30分钟，无人工介入。</p><p><code>smartctl -a /dev/sda</code></p><table><thead><tr><th>故障原因推测</th><th>排障思路</th></tr></thead><tbody><tr><td>硬盘背板接触问题</td><td>检查smartctl中<code>ID 199 UltraDMA CRC Error Count</code>的值，是否存在CRC校验错误</td></tr><tr><td>NAND闪存寿命是否不足</td><td>检查smartctl中<code>ID 233 Media Wearout Indicator</code>的值</td></tr><tr><td>是否存在坏扇区</td><td>检查smartctl中<code>ID 5 Reallocated sector ct</code>的值</td></tr><tr><td>硬盘备用空间是否不足</td><td>检查smartctl中<code>ID 232 Available Reservd space</code>的值</td></tr></tbody></table><p>实例：</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Media Wearout Indicator: 当前值0 临界值100 - 健康</span><br><span class="line">Reallocated Sector Count: 当前值0 临界值75 - 健康</span><br><span class="line">Available Reservd Spare: 当前值0 临界值100 - 健康</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/cbb0c1a2.html</id>
    <link href="https://hackerbs.com/posts/cbb0c1a2.html"/>
    <published>2025-09-09T09:36:21.000Z</published>
    <summary>
      <![CDATA[<p>日常巡检时发现带外出现INTEL SSD故障告警，随后又自行恢复，间隔约30分钟，无人工介入。</p>
<p><code>smartctl -a /dev/sda</code></p>]]>
    </summary>
    <title>记录一次分析[服务器SSD报故障随后自行恢复正常现象]</title>
    <updated>2026-09-23T13:04:04.171Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="硬件" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E7%A1%AC%E4%BB%B6/"/>
    <category term="DELL" scheme="https://hackerbs.com/tags/DELL/"/>
    <category term="IT知识" scheme="https://hackerbs.com/tags/IT%E7%9F%A5%E8%AF%86/"/>
    <category term="百科" scheme="https://hackerbs.com/tags/%E7%99%BE%E7%A7%91/"/>
    <category term="ECC" scheme="https://hackerbs.com/tags/ECC/"/>
    <category term="内存" scheme="https://hackerbs.com/tags/%E5%86%85%E5%AD%98/"/>
    <category term="iDRAC" scheme="https://hackerbs.com/tags/iDRAC/"/>
    <content>
      <![CDATA[<h2 id="关于DELL-PowerEdge-R740XD-iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答"><a href="#关于DELL-PowerEdge-R740XD-iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答" class="headerlink" title="关于DELL PowerEdge R740XD iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答"></a>关于DELL PowerEdge R740XD iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答</h2><blockquote><p>巡检发现：iDRAC报错Correctable memory error logging disabled for a memory</p></blockquote><p>致电800-858-0613核实BIOS固件版本低于2.10，固件过旧，属于遗留问题</p><p>关于该报错的解释为：BIOS关闭了对于ECC纠错记录的保存，仅仅是没有记录进行了ECC纠错，实际上并不影响使用，可能存在的风险为：无法知晓ECC进行了多少次纠错。</p><p><strong>2025-9-4已致电DELL800-858-0613核实，该信息可信</strong></p>]]>
    </content>
    <id>https://hackerbs.com/posts/842d4f12.html</id>
    <link href="https://hackerbs.com/posts/842d4f12.html"/>
    <published>2025-09-04T08:16:54.000Z</published>
    <summary>
      <![CDATA[<h2 id="关于DELL-PowerEdge-R740XD-iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答"><a href="#关于DELL-PowerEdge-R740XD-iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答" class="headerlink" title="关于DELL PowerEdge R740XD iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答"></a>关于DELL PowerEdge R740XD iDRAC报内存设备的可纠正内存错误日志记录已禁用问题的说明及解答</h2><blockquote>
<p>巡检发现：iDRAC报错Correctable memory error logging disabled for a memory</p>
</blockquote>]]>
    </summary>
    <title>关于DELL PowerEdge报错Correctable memory error logging disabled for a memory device的说明</title>
    <updated>2026-09-23T13:04:04.107Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="硬件" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E7%A1%AC%E4%BB%B6/"/>
    <category term="DELL" scheme="https://hackerbs.com/tags/DELL/"/>
    <category term="PERC" scheme="https://hackerbs.com/tags/PERC/"/>
    <category term="IT知识" scheme="https://hackerbs.com/tags/IT%E7%9F%A5%E8%AF%86/"/>
    <category term="百科" scheme="https://hackerbs.com/tags/%E7%99%BE%E7%A7%91/"/>
    <category term="BBU" scheme="https://hackerbs.com/tags/BBU/"/>
    <category term="阵列卡" scheme="https://hackerbs.com/tags/%E9%98%B5%E5%88%97%E5%8D%A1/"/>
    <content>
      <![CDATA[<h2 id="关于DELL-iDRAC日志中PERC报错问题的记录及解答"><a href="#关于DELL-iDRAC日志中PERC报错问题的记录及解答" class="headerlink" title="关于DELL iDRAC日志中PERC报错问题的记录及解答"></a>关于DELL iDRAC日志中PERC报错问题的记录及解答</h2><p>报错信息如下</p><blockquote><p>Sun Jul 06 2025 07:24:49The PERC1 battery is operating normally.<br>Sun Jul 06 2025 06:50:13The PERC1 battery is low.<br>Mon Apr 07 2025 04:22:23The PERC1 battery is operating normally.<br>Mon Apr 07 2025 04:20:18The PERC1 battery is low.</p></blockquote><p>报错内容为PERC电量低，随后又恢复正常，错误复现周期为3个月</p><p>查询发现DELL官方文档有记录<a class="link"   href="https://www.dell.com/support/kbdoc/zh-cn/000351229/poweredge-%E4%BA%86%E8%A7%A3-perc-%E7%94%B5%E6%B1%A0%E9%94%99%E8%AF%AF#bat15" >《了解 PERC 电池错误》<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>，其中《充电问题示例》中的报错疑似与该报错一致，但报错循环周期不同。</p><p>查询后了解到PERC是DELL阵列卡的电池，也就是俗称的RAID卡的BBU（Battery Backup Unit），而其中每三个月复现一次的该报错为DELL PERC的正常循环充放电操作，属于正常现象</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>PERC每3个月重复报错<code>The PERC1 battery is low.</code>随后恢复<code>The PERC1 battery is operating normally.</code></p><p>该报错为RAID卡BBU，电池的充放电报错，每3个月为周期的循环报错是DELL的自检行为，属于正常现象。</p><p><strong>2025-9-4已致电DELL800-858-0613核实，该信息可信</strong></p>]]>
    </content>
    <id>https://hackerbs.com/posts/2921f881.html</id>
    <link href="https://hackerbs.com/posts/2921f881.html"/>
    <published>2025-09-04T06:56:26.000Z</published>
    <summary>
      <![CDATA[<h2 id="关于DELL-iDRAC日志中PERC报错问题的记录及解答"><a href="#关于DELL-iDRAC日志中PERC报错问题的记录及解答" class="headerlink" title="关于DELL iDRAC日志中PERC报错问题的记录及解答"></a>关于DELL iDRAC日志中PERC报错问题的记录及解答</h2><p>报错信息如下</p>]]>
    </summary>
    <title>DELL报错The PERC1 battery is low</title>
    <updated>2026-09-23T13:04:04.087Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="自动化" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%87%AA%E5%8A%A8%E5%8C%96/"/>
    <category term="Python" scheme="https://hackerbs.com/tags/Python/"/>
    <category term="Clash" scheme="https://hackerbs.com/tags/Clash/"/>
    <category term="代理" scheme="https://hackerbs.com/tags/%E4%BB%A3%E7%90%86/"/>
    <category term="GFWList" scheme="https://hackerbs.com/tags/GFWList/"/>
    <category term="GEO" scheme="https://hackerbs.com/tags/GEO/"/>
    <category term="分流" scheme="https://hackerbs.com/tags/%E5%88%86%E6%B5%81/"/>
    <content>
      <![CDATA[<h2 id="环境介绍"><a href="#环境介绍" class="headerlink" title="环境介绍"></a>环境介绍</h2><h3 id="代理客户端为Clash-Verge-Rev"><a href="#代理客户端为Clash-Verge-Rev" class="headerlink" title="代理客户端为Clash Verge Rev"></a>代理客户端为Clash Verge Rev</h3><p><a class="link"   href="https://github.com/clash-verge-rev/clash-verge-rev" >直达官方github仓库<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><h3 id="机场为狗狗加速"><a href="#机场为狗狗加速" class="headerlink" title="机场为狗狗加速"></a>机场为狗狗加速</h3><p><a class="link"   href="https://down.dginv.click/#/register?code=pGwFvdKk" >直达官网<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p>使用邀请码享注册优惠<code>pGwFvdKk</code></p><ul><li><p>高性能海外机场，免费试用，优惠套餐，解锁流媒体，全球首家支持 Hysteria 协议。</p></li><li><p>海外团队，无跑路风险，高达 50% 返佣</p></li><li><p>集群负载均衡设计，高速专线(兼容老客户端)，极低延迟，无视晚高峰，4K 秒开</p></li><li><p>全球首家 Hysteria 协议机场，现已上线更快的 Hysteria2 协议(Clash Verge 客户端最佳搭配)</p></li><li><p>解锁流媒体及 ChatGPT</p></li></ul><table><thead><tr><th>套餐</th><th>流量</th><th>详情</th></tr></thead><tbody><tr><td>标准套餐</td><td>160G</td><td>限速150M，无审计，年付9折</td></tr><tr><td>高级套餐</td><td>200G</td><td>不限速，无审计，年付8折,最新Hysteria协议</td></tr><tr><td>豪华套餐</td><td>500G</td><td>不限速,无审计,2年付6折,最新Hysteria2协议,东南亚节点,微信客服技术支持</td></tr></tbody></table><h3 id="开发环境"><a href="#开发环境" class="headerlink" title="开发环境"></a>开发环境</h3><p>Python 3.13.2</p><h2 id="Clash配置文件的介绍"><a href="#Clash配置文件的介绍" class="headerlink" title="Clash配置文件的介绍"></a>Clash配置文件的介绍</h2><h3 id="其余部分不做介绍-采用机场的配置即可"><a href="#其余部分不做介绍-采用机场的配置即可" class="headerlink" title="其余部分不做介绍,采用机场的配置即可"></a>其余部分不做介绍,采用机场的配置即可</h3><p>本文只涉及<code>rules:</code>部分,其余部分直接复制下方从狗狗加速官方提取的配置即可</p><p><code>proxies</code>和<code>proxy-groups</code>部分不需要填写,让机场的配置文件覆盖即可,当然下面部分的配置也可以留空,让机场覆盖,只填写<code>rules:</code>部分就可以实现分流</p><p>在编辑配置文件之前,先订阅,然后查看当前配置就可以看到机场的<code>rules:</code>,可以先将其备份,添加到GFWList的规则之前,也就是程序中的最高优先级规则部分</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250305152944.png"                      alt="20250305152944"                ></p><div class="code-container" data-rel="Yaml"><figure class="iseeu highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">mode:</span> <span class="string">rule</span></span><br><span class="line"><span class="attr">mixed-port:</span> <span class="number">7897</span></span><br><span class="line"><span class="attr">allow-lan:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">log-level:</span> <span class="string">info</span></span><br><span class="line"><span class="attr">external-controller:</span> <span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span><span class="string">:9097</span></span><br><span class="line"><span class="attr">secret:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line"><span class="attr">unified-delay:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">mtu:</span> <span class="number">1500</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">device:</span> <span class="string">Mihomo</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">any:53</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">mixed</span></span><br><span class="line">  <span class="attr">strict-route:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">use-system-hosts:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">listen:</span> <span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span><span class="string">:5335</span></span><br><span class="line">  <span class="attr">default-nameserver:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">180.76</span><span class="number">.76</span><span class="number">.76</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">182.254</span><span class="number">.118</span><span class="number">.118</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">180.184</span><span class="number">.2</span><span class="number">.2</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.lan&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">stun.*.*.*</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">stun.*.*</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time.windows.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time.nist.gov</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time.asia.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.ntp.org.cn&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.openwrt.pool.ntp.org&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time1.cloud.tencent.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time.ustc.edu.cn</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">pool.ntp.org</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp.ubuntu.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp1.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp2.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp3.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp4.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp5.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp6.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">ntp7.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time1.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time2.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time3.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time4.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time5.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time6.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time7.aliyun.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.time.edu.cn&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time1.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time2.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time3.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time4.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time5.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time6.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time7.apple.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time1.google.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time2.google.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time3.google.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">time4.google.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">music.163.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.music.163.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.126.net&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">musicapi.taihe.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">music.taihe.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">songsearch.kugou.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">trackercdn.kugou.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.kuwo.cn&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">api-jooxtt.sanook.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">api.joox.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">joox.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">y.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.y.qq.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">streamoc.music.tc.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">mobileoc.music.tc.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">isure.stream.qqmusic.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">dl.stream.qqmusic.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">aqqmusic.tc.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">amobile.music.tc.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.xiami.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.music.migu.cn&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">music.migu.cn</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.msftconnecttest.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.msftncsi.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">localhost.ptlogin2.qq.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.*.*.srv.nintendo.net&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.*.stun.playstation.net&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">xbox.*.*.microsoft.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.ipv6.microsoft.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.*.xboxlive.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">speedtest.cros.wr.pvp.net</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">180.76</span><span class="number">.76</span><span class="number">.76</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">119.29</span><span class="number">.29</span><span class="number">.29</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">180.184</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">223.5</span><span class="number">.5</span><span class="number">.5</span></span><br><span class="line">  <span class="bullet">-</span> <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://223.6.6.6/dns-query#h3=true</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://223.5.5.5/dns-query</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://cloudflare-dns.com/dns-query</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">  <span class="attr">fallback:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://000000.dns.nextdns.io/dns-query#h3=true</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://101.101.101.101/dns-query</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://208.67.220.220/dns-query</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">tls://8.8.4.4</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">tls://1.0.0.1:853</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://cloudflare-dns.com/dns-query</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">https://dns.google/dns-query</span></span><br><span class="line">  <span class="attr">fallback-filter:</span></span><br><span class="line">    <span class="attr">geoip:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">ipcidr:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">240.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">/4</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">/32</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span><span class="string">/32</span></span><br><span class="line">    <span class="attr">domain:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.google.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.facebook.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.twitter.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.youtube.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.xn--ngstr-lra8j.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.google.cn</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.googleapis.cn</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.googleapis.com</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">+.gvt1.com</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">external-controller-cors:</span></span><br><span class="line">  <span class="attr">allow-private-network:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">allow-origins:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">profile:</span></span><br><span class="line">  <span class="attr">store-selected:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></div><h3 id="rules部分"><a href="#rules部分" class="headerlink" title="rules部分"></a>rules部分</h3><p>规则参数:</p><p>DOMAIN - 匹配完整域名,不包含子域名.例如:- DOMAIN,example.com,DIRECT</p><p>DOMAIN-SUFFIX - 匹配域名后缀,可以匹配子域名.例如:- DOMAIN-SUFFIX,example.com,PROXY</p><p>DOMAIN-KEYWORD - 匹配域名中包含的关键字,不限定位置.例如:- DOMAIN-KEYWORD,google,PROXY</p><p>PROCESS-NAME(仅 Clash for Windows &#x2F; Clash Meta 支持) - 匹配进程名,仅适用于 TUN 模式.例如:- PROCESS-NAME,chrome.exe,PROXY</p><p>IP-CIDR - 匹配IPv4 地址段,可以带 no-resolve 以防止 Clash 进行 DNS 解析.例如:- IP-CIDR,192.168.1.0&#x2F;24,DIRECT<br>如果不想 Clash 解析 IP 地址对应的域名,可以加 no-resolve:- IP-CIDR,192.168.1.0&#x2F;24,DIRECT,no-resolve</p><p>IP-CIDR6 - 匹配IPv6 地址段,用法与 IP-CIDR 类似.例如:- IP-CIDR6,2400:3200::&#x2F;32,DIRECT</p><p>GEOIP - 匹配IP 地址归属地(基于 GeoIP 数据库).例如: - GEOIP,CN,DIRECT<br>如果要让 Clash 不解析域名,可以加 no-resolve:- GEOIP,CN,DIRECT,no-resolve</p><p>MATCH - 匹配所有流量,通常作为最后的兜底规则.例如:- MATCH,PROXY</p><p>其中的<code>DIRECT</code>为直连,<code>PROXY</code>为你的<code>proxy-groups</code>的<code>name</code>部分,例如狗狗加速的<code>name: 狗狗加速.com</code>和<code>name: 🔥ChatGPT</code></p><div class="code-container" data-rel="Yaml"><figure class="iseeu highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 以狗狗加速机场的代理组&quot;🔥ChatGPT&quot;为例</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-KEYWORD,openai,🔥ChatGPT</span></span><br></pre></td></tr></table></figure></div><p>Clash 按规则的先后顺序进行匹配，第一个匹配成功的规则生效，后面的规则不会再被执行。因此，一般规则顺序建议：</p><ul><li>PROCESS-NAME 规则</li><li>DOMAIN 规则</li><li>DOMAIN-SUFFIX 规则</li><li>DOMAIN-KEYWORD 规则</li><li>IP-CIDR &#x2F; IP-CIDR6 规则</li><li>GEOIP 规则</li><li>MATCH 规则（兜底）</li></ul><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><div class="code-container" data-rel="Python"><figure class="iseeu highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br><span class="line">772</span><br><span class="line">773</span><br><span class="line">774</span><br><span class="line">775</span><br><span class="line">776</span><br><span class="line">777</span><br><span class="line">778</span><br><span class="line">779</span><br><span class="line">780</span><br><span class="line">781</span><br><span class="line">782</span><br><span class="line">783</span><br><span class="line">784</span><br><span class="line">785</span><br><span class="line">786</span><br><span class="line">787</span><br><span class="line">788</span><br><span class="line">789</span><br><span class="line">790</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line"><span class="keyword">import</span> base64</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> ipaddress</span><br><span class="line"></span><br><span class="line"><span class="comment"># GFWList 地址</span></span><br><span class="line">GFWLIST_URL = <span class="string">&quot;https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 预置规则 - 来源于上文提到的机场的规则和你自己手动添加的规则</span></span><br><span class="line"><span class="comment"># 此处预置了狗狗加速机场的规则</span></span><br><span class="line">highest_priority_rules = <span class="string">&quot;&quot;&quot;rules:</span></span><br><span class="line"><span class="string">- DOMAIN,subapi.doggysub.uk,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,v2ray,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,xray,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,naive,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,trojan,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,trojan-go,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,ss-local,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,privoxy,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,leaf,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,v2ray.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,xray.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,naive.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,trojan.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,trojan-go.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,ss-local.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,privoxy.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,leaf.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge 2,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge 3,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge 4,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge%202,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge%203,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Surge%204,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Thunder,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,DownloadService,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,qBittorrent,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Transmission,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,fdm,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,aria2c,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Folx,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,NetTransport,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,uTorrent,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,WebTorrent,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,aria2c.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,BitComet.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,fdm.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,NetTransport.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,qbittorrent.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,Thunder.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,ThunderVIP.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,transmission-daemon.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,transmission-qt.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,uTorrent.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,WebTorrent.exe,DIRECT</span></span><br><span class="line"><span class="string">- PROCESS-NAME,aDrive.exe,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,services.googleapis.cn,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,safebrowsing.urlsec.qq.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,safebrowsing.googleapis.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,developer.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,digicert.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,ocsp.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,ocsp.comodoca.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,ocsp.usertrust.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,ocsp.sectigo.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,ocsp.verisign.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apple-dns.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,testflight.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,sandbox.itunes.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,itunes.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apps.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blobstore.apple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN,cvws.icloud-content.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mzstatic.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,itunes.apple.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,icloud.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,icloud-content.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,me.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,aaplimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cdn20.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cdn-apple.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,akadns.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,akamaiedge.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edgekey.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mwcname.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apple.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apple-mapkit.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,browser-intake-datadoghq.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,chat.openai.com.cdn.cloudflare.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,gemini.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,openai-api.arkoselabs.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,openaicomproductionae4b.blob.core.windows.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,production-openaicom-storage.azureedge.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,static.cloudflareinsights.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ai.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,algolia.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,api.statsig.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,auth0.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,chatgpt.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,chatgpt.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,client-api.arkoselabs.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,events.statsigapi.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,featuregates.org,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,host.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,identrust.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,intercom.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,intercomcdn.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,launchdarkly.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,oaistatic.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,oaiusercontent.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,observeit.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openai.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openaiapi-site.azureedge.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openaicom.imgix.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,segment.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sentry.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,stripe.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,turn.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sora.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,openai,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,api.msn.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,api.statsig.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,assets.msn.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,browser-intake-datadoghq.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,chat.openai.com.cdn.cloudflare.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,copilot.microsoft.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,gateway.bingviz.microsoft.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,gateway.bingviz.microsoftapp.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,in.appcenter.ms,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,location.microsoft.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,odc.officeapps.live.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,openai-api.arkoselabs.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,openaicomproductionae4b.blob.core.windows.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,production-openaicom-storage.azureedge.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,r.bing.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,self.events.data.microsoft.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,services.bingapis.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,static.cloudflareinsights.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,sydney.bing.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,www.bing.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,algolia.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,api.microsoftapp.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,auth0.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bing-shopping.microsoft-falcon.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,challenges.cloudflare.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,chatgpt.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,chatgpt.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,client-api.arkoselabs.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edgeservices.bing.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,events.statsigapi.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,featuregates.org,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,host.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,identrust.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,intercom.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,intercomcdn.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,launchdarkly.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,oaistatic.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,oaiusercontent.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,observeit.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openai.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openaiapi-site.azureedge.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openaicom.imgix.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,segment.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sentry.io,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,stripe.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,turn.livekit.cloud,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,openaicom-api,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,ai.google.dev,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,alkalimakersuite-pa.clients6.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,makersuite.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bard.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,deepmind.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,deepmind.google,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gemini.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,generativeai.google,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,proactivebackend-pa.googleapis.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apis.google.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,colab,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,developerprofiles,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,generativelanguage,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN,cdn.usefathom.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,anthropic.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,claude.ai,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,razie.ai,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,razie.aws.intellij.net,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,etbrains.ai,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,meta.com,🔥ChatGPT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cn,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,-cn,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,126.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,126.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,127.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,163.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,360buyimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,36kr.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,acfun.tv,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,air-matters.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,aixifan.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,alicdn,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,alipay,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,taobao,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,amap.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,autonavi.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,baidu,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bdimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bdstatic.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bilibili.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bilivideo.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,caiyunapp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,clouddn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cnbeta.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cnbetacdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cootekservice.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,csdn.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ctrip.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dgtle.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dianping.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,douban.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,doubanio.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,duokan.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,easou.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ele.me,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,feng.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fir.im,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,frdic.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,g-cores.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,godic.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gtimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,cdn.hockeyapp.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,hongxiu.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,hxcdn.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,iciba.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ifeng.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ifengimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ipip.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,iqiyi.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,jd.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,jianshu.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,knewone.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,le.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,lecloud.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,lemicp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,luoo.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,meituan.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,meituan.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mi.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,miaopai.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,microsoft.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,microsoftonline.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,miui.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,miwifi.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mob.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,netease.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,office.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,office365.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,officecdn,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,oschina.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ppsimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pstatp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qcloud.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qdaily.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qdmm.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qhimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qhres.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qidian.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qihucdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qiniu.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qiniucdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qiyipic.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qq.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,qqurl.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,rarbg.to,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ruguoapp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,segmentfault.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sinaapp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,smzdm.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,snapdrop.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sogou.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sogoucdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sohu.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,soku.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,speedtest.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sspai.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,suning.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,taobao.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tencent.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tenpay.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tianyancha.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tmall.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tudou.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,umetrip.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,upaiyun.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,upyun.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,veryzhun.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,weather.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,weibo.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xiami.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xiami.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xiaomicp.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ximalaya.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xmcdn.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xunlei.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yhd.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yihaodianimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yinxiang.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ykimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,youdao.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,youku.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,zealer.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,zhihu.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,zhimg.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,zimuzu.tv,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,zoho.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,fastly-download.epicgames.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,epicgames-download1.akamaized.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,steamcdn-a.akamaihd.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,steamserver.net,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cm.steampowered.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,synology.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dyndns.org,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,egdownload.fastly-edge.com,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,amazon,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,google,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,gmail,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,youtube,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,facebook,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fb.me,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fbcdn.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,twitter,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,instagram,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,dropbox,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,twimg.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,blogspot,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,youtu.be,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,whatsapp,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ipleak.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,browserscan.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,surfsharkdns.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edns.ip-api.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dnsleaktest.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dnsleak.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,expressvpn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nordvpn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,surfshark.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,perfect-privacy.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,browserleaks.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,browserleaks.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,browserleaks.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vpnunlimited.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,whoer.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,whrq.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,admarvel,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,admaster,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,adsage,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,adsmogo,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,adsrvmedia,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,adwords,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,adservice,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,appsflyer.com,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,domob,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,doubleclick.net,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,duomeng,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,dwtrack,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,guanggao,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,lianmeng,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mmstat.com,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,mopub,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,omgmta,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,openx,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,partnerad,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,pingfore,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,supersonicads,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,uedas,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,umeng,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,usage,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vungle.com,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,wlmonitor,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,zjtoolbar,REJECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,linkedin.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,licdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,9to5mac.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,abpchina.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,adblockplus.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,adobe.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,akamaized.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,alfredapp.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,amplitude.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ampproject.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,android.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,angularjs.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,aolcdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,apkpure.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,appledaily.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,appshopper.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,appspot.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,arcgis.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,archive.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,armorgames.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,aspnetcdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,att.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,awsstatic.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,azurewebsites.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bing.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bintray.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bit.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bit.ly,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bitbucket.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bjango.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bkrtx.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blog.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blogcdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blogger.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blogsmithmedia.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blogspot.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,blogspot.hk,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,bloomberg.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,box.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,box.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cachefly.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,chromium.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cl.ly,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cloudflare.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cloudfront.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cloudmagic.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cmail19.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cnet.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cocoapods.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,comodoca.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,crashlytics.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,culturedcode.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,d.pr,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,danilo.to,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dayone.me,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,db.tt,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,deskconnect.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,disq.us,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,disqus.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,disquscdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dnsimple.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,docker.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dribbble.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,droplr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,duckduckgo.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dueapp.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,dytt8.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edgecastcdn.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edgekey.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,edgesuite.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,engadget.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,entrust.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,eurekavpt.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,evernote.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fabric.io,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fast.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fastly.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fc2.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,feedburner.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,feedly.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,feedsportal.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,fiftythree.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,firebaseio.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,flexibits.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,flickr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,flipboard.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,g.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gabia.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,geni.us,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gfx.ms,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ggpht.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ghostnoteapp.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,git.io,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-KEYWORD,github,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,globalsign.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gmodules.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,godaddy.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,golang.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gongm.in,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,goo.gl,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,goodreaders.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,goodreads.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gravatar.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gstatic.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,gvt0.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,hockeyapp.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,hotmail.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,icons8.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ifixit.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ift.tt,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ifttt.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,iherb.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,imageshack.us,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,img.ly,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,imgur.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,imore.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,instapaper.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ipn.li,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,is.gd,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,issuu.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,itgonglun.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,itun.es,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ixquick.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,j.mp,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,js.revsci.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,jshint.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,jtvnw.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,justgetflux.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,kat.cr,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,klip.me,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,libsyn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,line-apps.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,linode.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,lithium.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,littlehj.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,live.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,live.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,livefilestore.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,llnwd.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,macid.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,macromedia.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,macrumors.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mashable.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mathjax.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,medium.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mega.co.nz,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mega.nz,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,megaupload.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,microsofttranslator.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mindnode.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,mobile01.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,modmyi.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,msedge.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,myfontastic.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,name.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nextmedia.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nsstatic.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nssurge.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nyt.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,nytimes.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,omnigroup.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,onedrive.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,onenote.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ooyala.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openvpn.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,openwrt.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,orkut.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,osxdaily.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,outlook.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ow.ly,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,paddleapi.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,parallels.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,parse.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pdfexpert.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,periscope.tv,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pinboard.in,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pinterest.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pixelmator.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pixiv.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,playpcesor.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,playstation.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,playstation.com.hk,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,playstation.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,playstationnetwork.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,pushwoosh.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,rime.im,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,servebom.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sfx.ms,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,shadowsocks.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sharethis.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,shazam.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,skype.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,smartdns狗狗加速.com.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,smartmailcloud.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sndcdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sony.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,soundcloud.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sourceforge.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,spotify.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,squarespace.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,sstatic.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,st.luluku.pw,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,stackoverflow.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,startpage.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,staticflickr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,steamcommunity.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,symauth.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,symcb.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,symcd.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tapbots.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tapbots.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tdesktop.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,techcrunch.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,techsmith.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,thepiratebay.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,theverge.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,time.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,timeinc.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tiny.cc,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tinypic.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tmblr.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,todoist.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,trello.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,trustasiassl.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tumblr.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tumblr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tweetdeck.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tweetmarker.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,twitch.tv,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,txmblr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,typekit.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ubertags.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ublock.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ubnt.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ulyssesapp.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,urchin.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,usertrust.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,v.gd,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,v2ex.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vimeo.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vimeocdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vine.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vivaldi.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vox-cdn.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vsco.co,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,vultr.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,w.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,w3schools.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,webtype.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wikiwand.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wikileaks.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wikimedia.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wikipedia.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wikipedia.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,windows.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,windows.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wire.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wordpress.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,workflowy.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wp.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wsj.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,wsj.net,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xda-developers.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xeeno.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,xiti.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yahoo.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yimg.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ying.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,yoyo.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,ytimg.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,signal.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,whispersystems.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,cangku.moe,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,tradingview.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,x.com,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,asmr.one,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,telegra.ph,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,telegram.org,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,t.me,狗狗加速.com</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,telegram.me,狗狗加速.com</span></span><br><span class="line"><span class="string">- IP-CIDR,91.108.4.0/22,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,91.108.8.0/21,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,91.108.16.0/22,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,91.108.56.0/22,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,149.154.160.0/20,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR6,2001:67c:4e8::/48,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR6,2001:b28:f23d::/48,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR6,2001:b28:f23f::/48,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.232.181.162/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.241.147.226/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.253.253.226/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.253.255.162/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.253.255.34/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,120.253.255.98/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,180.163.150.162/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,180.163.150.34/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,180.163.151.162/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,180.163.151.34/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,203.208.39.0/24,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,203.208.40.0/24,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,203.208.41.0/24,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,203.208.43.0/24,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,203.208.50.0/24,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,220.181.174.162/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,220.181.174.226/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,220.181.174.34/32,狗狗加速.com,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,24.199.123.28/32,🔥ChatGPT,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,64.23.132.171/32,🔥ChatGPT,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,24.199.123.28/32,🔥ChatGPT,no-resolve</span></span><br><span class="line"><span class="string">- IP-CIDR,64.23.132.171/32,🔥ChatGPT,no-resolve</span></span><br><span class="line"><span class="string">- DOMAIN,injections.adguard.org,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN,local.adguard.org,DIRECT</span></span><br><span class="line"><span class="string">- DOMAIN-SUFFIX,local,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,127.0.0.0/8,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,172.16.0.0/12,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,192.168.0.0/16,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,10.0.0.0/8,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,17.0.0.0/8,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,100.64.0.0/10,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR,224.0.0.0/4,DIRECT</span></span><br><span class="line"><span class="string">- IP-CIDR6,fe80::/10,DIRECT</span></span><br><span class="line"><span class="string">- GEOIP,CN,DIRECT</span></span><br><span class="line"><span class="string">- MATCH,狗狗加速.com</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载 GFWList 并 Base64 解码</span></span><br><span class="line">response = requests.get(GFWLIST_URL)</span><br><span class="line">decoded_data = base64.b64decode(response.text).decode(<span class="string">&quot;utf-8&quot;</span>, errors=<span class="string">&quot;ignore&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 解析 GFWList 规则并转换为 Clash 规则格式</span></span><br><span class="line">rules = []</span><br><span class="line"><span class="keyword">for</span> line <span class="keyword">in</span> decoded_data.split(<span class="string">&quot;\n&quot;</span>):</span><br><span class="line">    line = line.strip()</span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> line <span class="keyword">or</span> line.startswith(<span class="string">&quot;!&quot;</span>) <span class="keyword">or</span> line.startswith(<span class="string">&quot;[&quot;</span>) <span class="keyword">or</span> line.startswith(<span class="string">&quot;@@&quot;</span>):  <span class="comment"># 忽略注释、无效行和白名单规则</span></span><br><span class="line">        <span class="keyword">continue</span></span><br><span class="line">    <span class="keyword">if</span> line.startswith(<span class="string">&quot;||&quot;</span>):  <span class="comment"># 处理 DOMAIN-SUFFIX 规则</span></span><br><span class="line">        domain = line[<span class="number">2</span>:]</span><br><span class="line">        rules.append(<span class="string">f&quot;DOMAIN-SUFFIX,<span class="subst">&#123;domain&#125;</span>,狗狗加速.com&quot;</span>)</span><br><span class="line">    <span class="keyword">elif</span> line.startswith(<span class="string">&quot;|http&quot;</span>) <span class="keyword">or</span> line.startswith(<span class="string">&quot;|https&quot;</span>):  <span class="comment"># 处理 URL 规则</span></span><br><span class="line">        <span class="keyword">match</span> = re.search(<span class="string">r&quot;\|\w+://([^/]+)&quot;</span>, line)</span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">match</span>:</span><br><span class="line">            domain = <span class="keyword">match</span>.group(<span class="number">1</span>)</span><br><span class="line">            rules.append(<span class="string">f&quot;DOMAIN,<span class="subst">&#123;domain&#125;</span>,狗狗加速.com&quot;</span>)</span><br><span class="line">    <span class="keyword">elif</span> line.startswith(<span class="string">&quot;.&quot;</span>):  <span class="comment"># 处理以点号开头的域名</span></span><br><span class="line">        domain = line[<span class="number">1</span>:]</span><br><span class="line">        rules.append(<span class="string">f&quot;DOMAIN-SUFFIX,<span class="subst">&#123;domain&#125;</span>,狗狗加速.com&quot;</span>)</span><br><span class="line">    <span class="keyword">elif</span> re.<span class="keyword">match</span>(<span class="string">r&quot;^\d+\.\d+\.\d+\.\d+(\/\d+)?$&quot;</span>, line):  <span class="comment"># 处理 IP 或 IP-CIDR 规则</span></span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            <span class="comment"># 如果缺少子网掩码，则添加默认的 /32</span></span><br><span class="line">            <span class="keyword">if</span> <span class="string">&#x27;/&#x27;</span> <span class="keyword">not</span> <span class="keyword">in</span> line:</span><br><span class="line">                line += <span class="string">&#x27;/32&#x27;</span></span><br><span class="line">            ipaddress.ip_network(line, strict=<span class="literal">False</span>)</span><br><span class="line">            rules.append(<span class="string">f&quot;IP-CIDR,<span class="subst">&#123;line&#125;</span>,狗狗加速.com&quot;</span>)</span><br><span class="line">        <span class="keyword">except</span> ValueError:</span><br><span class="line">            <span class="keyword">continue</span>  <span class="comment"># 跳过无效的 IP 或 IP-CIDR</span></span><br><span class="line">    <span class="keyword">else</span>:  <span class="comment"># 处理普通域名</span></span><br><span class="line">        rules.append(<span class="string">f&quot;DOMAIN,<span class="subst">&#123;line&#125;</span>,狗狗加速.com&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 记录规则去重</span></span><br><span class="line">rule_dict = &#123;&#125;</span><br><span class="line">removed_rules = []</span><br><span class="line">invalid_rules = []</span><br><span class="line"></span><br><span class="line"><span class="comment"># 处理 GFWList 规则</span></span><br><span class="line"><span class="keyword">for</span> rule <span class="keyword">in</span> rules:</span><br><span class="line">    parts = rule.split(<span class="string">&quot;,&quot;</span>)</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">len</span>(parts) &gt;= <span class="number">3</span>:</span><br><span class="line">        rule_type, target, policy = parts[<span class="number">0</span>].strip(), parts[<span class="number">1</span>].strip(), parts[<span class="number">2</span>].strip()</span><br><span class="line">        key = <span class="string">f&quot;<span class="subst">&#123;rule_type&#125;</span>,<span class="subst">&#123;target&#125;</span>&quot;</span></span><br><span class="line"></span><br><span class="line">        <span class="comment"># 处理 IP-CIDR 规则，确保 IP 和子网掩码合法</span></span><br><span class="line">        <span class="keyword">if</span> rule_type <span class="keyword">in</span> [<span class="string">&quot;IP-CIDR&quot;</span>, <span class="string">&quot;IP-CIDR6&quot;</span>]:</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                ipaddress.ip_network(target, strict=<span class="literal">False</span>)  <span class="comment"># 检测 CIDR 合法性</span></span><br><span class="line">            <span class="keyword">except</span> ValueError:</span><br><span class="line">                invalid_rules.append(rule)  <span class="comment"># 记录无效的规则</span></span><br><span class="line">                <span class="keyword">continue</span>  <span class="comment"># 跳过此规则</span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> key <span class="keyword">not</span> <span class="keyword">in</span> rule_dict:</span><br><span class="line">            rule_dict[key] = rule  <span class="comment"># 第一次出现的规则直接保留</span></span><br><span class="line">        <span class="keyword">elif</span> policy != <span class="string">&quot;狗狗加速.com&quot;</span>:</span><br><span class="line">            removed_rules.append(rule)  <span class="comment"># 记录被删除的规则</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 重新整理规则</span></span><br><span class="line">filtered_rules = <span class="built_in">list</span>(rule_dict.values())</span><br><span class="line"></span><br><span class="line"><span class="comment"># 将原始规则与过滤后的规则合并</span></span><br><span class="line">all_rules = highest_priority_rules.strip() + <span class="string">&quot;\n&quot;</span> + <span class="string">&quot;\n&quot;</span>.join([<span class="string">f&quot;- <span class="subst">&#123;rule&#125;</span>&quot;</span> <span class="keyword">for</span> rule <span class="keyword">in</span> filtered_rules])</span><br><span class="line"></span><br><span class="line"><span class="comment"># 写入优化后的 YAML 文件</span></span><br><span class="line">output_file = <span class="string">&quot;rules.yaml&quot;</span></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(output_file, <span class="string">&quot;w&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">    f.write(all_rules)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 打印被删除的冲突规则</span></span><br><span class="line"><span class="keyword">if</span> removed_rules:</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;\n=== 以下规则因冲突被删除（仅保留&#x27;狗狗加速.com&#x27;的规则） ===&quot;</span>)</span><br><span class="line">    <span class="keyword">for</span> rule <span class="keyword">in</span> removed_rules:</span><br><span class="line">        <span class="built_in">print</span>(rule)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 打印无效 IP-CIDR 规则</span></span><br><span class="line"><span class="keyword">if</span> invalid_rules:</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;\n=== 以下无效的 IP-CIDR 规则已被移除 ===&quot;</span>)</span><br><span class="line">    <span class="keyword">for</span> rule <span class="keyword">in</span> invalid_rules:</span><br><span class="line">        <span class="built_in">print</span>(rule)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">f&quot;\n去重完成，优化后的 YAML 文件已保存为: <span class="subst">&#123;output_file&#125;</span>&quot;</span>)</span><br></pre></td></tr></table></figure></div><p>程序会将处理好的规则输出到当前目录,名为<code>rules.yaml</code></p><p>执行前确保你能打得开<a class="link"   href="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt" >GFWList<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>,如果打不开,可以自行替换为打得开的链接</p><p>GFWList内容如下,打开如果不是这样的那就说明你找错链接了</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250305153304.png"                      alt="20250305153304"                ></p><h2 id="规则的使用方法"><a href="#规则的使用方法" class="headerlink" title="规则的使用方法"></a>规则的使用方法</h2><p>程序输出的内容直接全选,然后打开Clash Verge Rev的订阅 -&gt; 全局扩展覆写配置 -&gt; 右键选择打开文件(如果点编辑会导致自动检查失败)</p><p>然后将程序的内容直接粘贴到文末即可</p><p>退出Clash Verge Rev,重新打开,使用TUN模式，刷新订阅，点开你的规则组，例如我的狗狗加速.com,按延迟排序,节点测速</p><p>因为规则有7361条,所以节点测速时重复点击,大概5分钟后才会测出正常速度,例如15-新加坡Hy2节点，87ms延迟</p><p>如果你和我一样用的狗狗加速,需要访问ChatGPT的话就选<code>🔥ChatGPT</code>这组</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250305153734.png"                      alt="20250305153734"                ></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250305153746.png"                      alt="20250305153746"                ></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20250305153755.png"                      alt="20250305153755"                ></p>]]>
    </content>
    <id>https://hackerbs.com/posts/934f0d99.html</id>
    <link href="https://hackerbs.com/posts/934f0d99.html"/>
    <published>2025-03-05T06:50:15.000Z</published>
    <summary>
      <![CDATA[<h2 id="环境介绍"><a href="#环境介绍" class="headerlink" title="环境介绍"></a>环境介绍</h2><h3 id="代理客户端为Clash-Verge-Rev"><a href="#代理客户端为Clash-Verge-Rev" class="headerlink" title="代理客户端为Clash Verge Rev"></a>代理客户端为Clash Verge Rev</h3>]]>
    </summary>
    <title>Python实现自动将GFWList规则转换为Clash规则</title>
    <updated>2026-09-23T13:04:04.102Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="网络" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E7%BD%91%E7%BB%9C/"/>
    <category term="wireguard" scheme="https://hackerbs.com/tags/wireguard/"/>
    <category term="局域网" scheme="https://hackerbs.com/tags/%E5%B1%80%E5%9F%9F%E7%BD%91/"/>
    <category term="云计算" scheme="https://hackerbs.com/tags/%E4%BA%91%E8%AE%A1%E7%AE%97/"/>
    <category term="计算资源本地化" scheme="https://hackerbs.com/tags/%E8%AE%A1%E7%AE%97%E8%B5%84%E6%BA%90%E6%9C%AC%E5%9C%B0%E5%8C%96/"/>
    <category term="异地组网" scheme="https://hackerbs.com/tags/%E5%BC%82%E5%9C%B0%E7%BB%84%E7%BD%91/"/>
    <category term="Nginx" scheme="https://hackerbs.com/tags/Nginx/"/>
    <category term="反向代理" scheme="https://hackerbs.com/tags/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/"/>
    <content>
      <![CDATA[<blockquote><p>本次部署的目的是利用本地高性能的计算资源和云服务器畅通无阻的公网，实现无公网环境也可正常部署业务。</p></blockquote><h2 id="本文所用到的技术如下"><a href="#本文所用到的技术如下" class="headerlink" title="本文所用到的技术如下"></a>本文所用到的技术如下</h2><table><thead><tr><th>名称</th><th>作用</th><th>软件</th></tr></thead><tbody><tr><td>单向异地组网</td><td>将云服务器和本地服务器组成局域网，因本地服务器没有公网，所以由云服务器建立UDP连接实现组网</td><td>WireGuard</td></tr><tr><td>反代</td><td>将对云服务器发起的访问根据配置的业务转发到本地服务器进行处理</td><td>Nginx</td></tr><tr><td>网络转发</td><td>配合wireguard实现对网络流量的路由和转发，确保组网的通畅</td><td>iptables</td></tr></tbody></table><h2 id="单向异地组网"><a href="#单向异地组网" class="headerlink" title="单向异地组网"></a>单向异地组网</h2><blockquote><p>2025.2.18补充：组网成功后大概十几分钟，被运营商墙了，太狗了，因为wireguard走的是UDP协议，被运营商检测到了。目前有两个思路，找运营商加个公网IP或者想其他办法组网<br>2025.2.18 10:55记录思路：使用udp2raw将UDP流量封装到TCP流量中，并伪装成HTTPS<br>2025.2.18 10:57补充，尝试udp2raw能打通后先用着，如果再次被封则换为xtls-rprx-vision透明代理UDP流量，实现最强HTTPS伪装</p></blockquote><table><thead><tr><th>特性</th><th><code>udp2raw</code></th><th><code>xtls-rprx-vision</code></th></tr></thead><tbody><tr><td><strong>工作原理</strong></td><td>把 UDP 伪装成 TCP 或 ICMP，进行 NAT 穿透</td><td>通过 Xray Vision 协议将流量伪装成 HTTPS&#x2F;TLS</td></tr><tr><td><strong>支持协议</strong></td><td>任何 UDP 流量（WireGuard、IPSec、OpenVPN等）</td><td>任何 TCP&#x2F;UDP 流量（支持 UDP over TCP）</td></tr><tr><td><strong>流量伪装</strong></td><td>可伪装为 TCP（HTTPS、SSH）或 ICMP</td><td>伪装成合法 HTTPS 流量</td></tr><tr><td><strong>加密方式</strong></td><td>XOR、AES（轻量级加密，防止 DPI 识别）</td><td>XTLS（高级 TLS 伪装，难以被识别）</td></tr><tr><td><strong>端口</strong></td><td>可伪装成 443（HTTPS）等，但仍是伪 TCP</td><td>直接监听 443 端口，真实 HTTPS 伪装</td></tr><tr><td><strong>数据包特征</strong></td><td>模拟 TCP，但仍然是 UDP 数据包封装</td><td>真实 HTTPS 流量，运营商难以检测</td></tr><tr><td><strong>防 DPI</strong></td><td>基本防御，部分 DPI 仍能检测出伪 TCP</td><td>最高级别防御，难以被识别</td></tr><tr><td><strong>延迟</strong></td><td>低，基本无影响</td><td>略高，取决于 TLS 处理开销</td></tr><tr><td><strong>适用场景</strong></td><td>适用于 UDP 被封但 TCP 可用的环境</td><td>适用于 DPI 严格的环境，如中国大陆或企业网络</td></tr><tr><td><strong>是否需要证书</strong></td><td>不需要</td><td>需要 TLS 证书（Let’s Encrypt 等）</td></tr><tr><td><strong>稳定性</strong></td><td>高，几乎无性能损耗</td><td>高，但 TLS 可能增加 CPU 负担</td></tr><tr><td><strong>适合长期使用</strong></td><td>可以，但可能被进一步分析</td><td>更适合长期使用，难以封锁</td></tr></tbody></table><h3 id="服务器部分"><a href="#服务器部分" class="headerlink" title="服务器部分"></a>服务器部分</h3><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装wireguard</span></span><br><span class="line">apt install wireguard -y</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">生成私钥公钥到/etc/wireguard/目录下</span></span><br><span class="line">wg genkey | tee /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看私钥公钥，稍后需要写入到配置文件中</span></span><br><span class="line">cat /etc/wireguard/server_private.key</span><br><span class="line">cat /etc/wireguard/server_public.key</span><br></pre></td></tr></table></figure></div><p>在<code>/etc/wireguard/</code>下创建一个配置文件，例如<code>wg0.conf</code>，按如下所述写入配置：</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">[Interface]</span><br><span class="line">Address = 10.0.0.1/24 # 服务器的局域网IP，/24是前缀，对应255.255.255.0</span><br><span class="line">ListenPort = 26666 # 端口协议是UDP，端口可以自定义</span><br><span class="line">PrivateKey = 云服务器私钥 # 刚刚生成的服务器私钥</span><br><span class="line">DNS=8.8.8.8</span><br><span class="line">MTU=1420</span><br><span class="line"></span><br><span class="line"># 这部分是配置的iptables的转发，其中eth0替换为云服务器公网的网卡名称</span><br><span class="line"># 原理：</span><br><span class="line"># 允许wg0的流量通过iptables转发到eth0</span><br><span class="line"># iptables -A FORWARD -i wg0 -j ACCEPT</span><br><span class="line"># 将eth0上的流量进行源地址伪装，让对方以为来自局域网的流量是从公网IP发出的</span><br><span class="line"># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</span><br><span class="line"></span><br><span class="line"># 端口启动时执行，其中-A是添加</span><br><span class="line">PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</span><br><span class="line"># 端口关闭时执行，其中-D是删除</span><br><span class="line">PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE</span><br><span class="line"></span><br><span class="line">[Peer]</span><br><span class="line">PublicKey = 内网服务器公钥 # 稍后在内网服务器生成的公钥</span><br><span class="line"># 允许内网服务器连接，IP是10.0.0.2，前缀32对应255.255.255.255</span><br><span class="line"># 作用是仅允许这一个IP连接。可以根据需要自行组合IP段和前缀</span><br><span class="line">AllowedIPs = 10.0.0.2/32</span><br></pre></td></tr></table></figure></div><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编辑完配置文件后启动服务</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中wg-quick是wireguard的启动工具，@连接wg0，是配置文件的名称</span></span><br><span class="line">sudo systemctl enable wg-quick@wg0</span><br><span class="line">sudo systemctl start wg-quick@wg0</span><br></pre></td></tr></table></figure></div><h3 id="内网服务器部分"><a href="#内网服务器部分" class="headerlink" title="内网服务器部分"></a>内网服务器部分</h3><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">与服务器一致，生成公钥私钥，只是名称是client开头</span></span><br><span class="line">wg genkey | tee /etc/wireguard/client_private.key | wg pubkey | tee /etc/wireguard/client_public.key</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看公钥私钥，准备写入配置文件</span></span><br><span class="line">cat /etc/wireguard/client_private.key</span><br><span class="line">cat /etc/wireguard/client_public.key</span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>在<code>/etc/wireguard/</code>下创建一个配置文件，例如<code>wg0.conf</code>，按如下所述写入配置：</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[Interface]</span><br><span class="line">Address = 10.0.0.2/24 # 10.0.0.2则是内网服务器在组网内的IP地址</span><br><span class="line">PrivateKey = 内网服务器私钥</span><br><span class="line"></span><br><span class="line">[Peer]</span><br><span class="line">PublicKey = 云服务器公钥</span><br><span class="line">AllowedIPs = 10.0.0.1/32 # 前缀32限制只允许云服务器IP连入</span><br><span class="line">Endpoint = 云服务器IP:26666 # 指向云服务器IP和端口</span><br><span class="line">PersistentKeepalive = 25</span><br></pre></td></tr></table></figure></div><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">编辑完配置文件后启动服务</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中wg-quick是wireguard的启动工具，@连接wg0，是配置文件的名称</span></span><br><span class="line">sudo systemctl enable wg-quick@wg0</span><br><span class="line">sudo systemctl start wg-quick@wg0</span><br></pre></td></tr></table></figure></div><h3 id="共同配置部分"><a href="#共同配置部分" class="headerlink" title="共同配置部分"></a>共同配置部分</h3><p>在内网和云服务器均开启转发</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">echo &quot;net.ipv4.ip_forward=1&quot; | sudo tee -a /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure></div><h2 id="反向代理"><a href="#反向代理" class="headerlink" title="反向代理"></a>反向代理</h2>]]>
    </content>
    <id>https://hackerbs.com/posts/bf14bbf7.html</id>
    <link href="https://hackerbs.com/posts/bf14bbf7.html"/>
    <published>2025-02-17T08:59:52.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>本次部署的目的是利用本地高性能的计算资源和云服务器畅通无阻的公网，实现无公网环境也可正常部署业务。</p>
</blockquote>
<h2 id="本文所用到的技术如下"><a href="#本文所用到的技术如下" class="headerlink" title="本文所用到的技术如下"></a>本文所用到的技术如下</h2>]]>
    </summary>
    <title>异地组网+Nginx反代 | 计算资源本地化</title>
    <updated>2026-09-23T13:04:04.164Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="存储" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AD%98%E5%82%A8/"/>
    <category term="Linux" scheme="https://hackerbs.com/tags/Linux/"/>
    <category term="lvm" scheme="https://hackerbs.com/tags/lvm/"/>
    <category term="磁盘" scheme="https://hackerbs.com/tags/%E7%A3%81%E7%9B%98/"/>
    <category term="解决办法" scheme="https://hackerbs.com/tags/%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/"/>
    <category term="dmsetup" scheme="https://hackerbs.com/tags/dmsetup/"/>
    <content>
      <![CDATA[<p>很多时候从其他机器拿过来的盘通常是没有经过格式化的，这样就会出现一些残留的lvm信息，导致无法正常使用。</p><p>出现该残留lvm的原因是因为设备映射器device mapper正在管理该磁盘，所以wipefs -a -f和dd if&#x3D;&#x2F;dev&#x2F;zero of&#x3D;&#x2F;dev&#x2F;disk命令无法清除该lvm</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">lsblk显示如下</span></span><br><span class="line">nvme0n1disk</span><br><span class="line">└storage-datalvm</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash"><span class="built_in">ls</span> -l /dev/mapper查询device mapper管理的磁盘信息</span></span><br><span class="line">lrwxrwxrwx 1 root root 7 Nov 28 18:04 storage-data -&gt;../dm-0</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">dmsetup remove删除</span></span><br><span class="line">dmsetup remove /dev/mapper/storage-data</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/aeee2639.html</id>
    <link href="https://hackerbs.com/posts/aeee2639.html"/>
    <published>2024-11-28T02:28:48.000Z</published>
    <summary>
      <![CDATA[<p>很多时候从其他机器拿过来的盘通常是没有经过格式化的，这样就会出现一些残留的lvm信息，导致无法正常使用。</p>
<p>出现该残留lvm的原因是因为设备映射器device mapper正在管理该磁盘，所以wipefs -a -f和dd if&#x3D;&#x2F;dev&#x2F;zero of&#x3D;&#x2F;dev&#x2F;disk命令无法清除该lvm</p>]]>
    </summary>
    <title>关于磁盘残留lvm的解决办法</title>
    <updated>2026-09-23T13:04:04.111Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="工具" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%B7%A5%E5%85%B7/"/>
    <category term="C++ - C - fio - 脚本" scheme="https://hackerbs.com/tags/C-C-fio-%E8%84%9A%E6%9C%AC/"/>
    <content>
      <![CDATA[<h2 id="我有病，拿C-写测试工具"><a href="#我有病，拿C-写测试工具" class="headerlink" title="我有病，拿C++写测试工具"></a>我有病，拿C++写测试工具</h2><p><a class="link"   href="https://github.com/1949hacker/studycplusplus" >仓库地址：https://github.com/1949hacker/studycplusplus<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p><p>fio.hpp</p><p>main.cpp</p><p>fio.cpp</p><p>长文预警</p><p>fio.hpp代码</p><div class="code-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// fio.hpp</span></span><br><span class="line"><span class="meta">#<span class="keyword">ifndef</span> FIO_HPP</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> FIO_HPP</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 设置测试参数</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">setConfig</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 创建预读文件</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init_read</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 顺序写</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_seq_write</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 顺序读</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_seq_read</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 随机写</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_rand_write</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 随机读</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_rand_read</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 随机读写测试</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_randrw</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 输出结果</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">runReport</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">endif</span> <span class="comment">// FIO_HPP</span></span></span><br></pre></td></tr></table></figure></div><p>main.cpp代码</p><div class="code-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;fio.hpp&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;ctime&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;fstream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;memory&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;streambuf&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;termios.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment">// Linux/macOS 下的 getch() 实现</span></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">getch</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="keyword">struct</span> <span class="title class_">termios</span> oldt, newt;</span><br><span class="line">  <span class="type">int</span> ch;</span><br><span class="line">  <span class="built_in">tcgetattr</span>(STDIN_FILENO, &amp;oldt);</span><br><span class="line">  newt = oldt;</span><br><span class="line">  newt.c_lflag &amp;= ~(ICANON | ECHO);</span><br><span class="line">  <span class="built_in">tcsetattr</span>(STDIN_FILENO, TCSANOW, &amp;newt);</span><br><span class="line">  ch = <span class="built_in">getchar</span>();</span><br><span class="line">  <span class="built_in">tcsetattr</span>(STDIN_FILENO, TCSANOW, &amp;oldt);</span><br><span class="line">  <span class="keyword">return</span> ch;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 自定义流缓冲区类，将输出内容同时写入控制台和日志文件</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">TeeBuf</span> : <span class="keyword">public</span> streambuf &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">  <span class="built_in">TeeBuf</span>(streambuf *consoleBuf, streambuf *fileBuf)</span><br><span class="line">      : <span class="built_in">consoleBuf</span>(consoleBuf), <span class="built_in">fileBuf</span>(fileBuf) &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">protected</span>:</span><br><span class="line">  <span class="function"><span class="keyword">virtual</span> <span class="type">int</span> <span class="title">overflow</span><span class="params">(<span class="type">int</span> c)</span> <span class="keyword">override</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (c == EOF) &#123;</span><br><span class="line">      <span class="keyword">return</span> !EOF;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">      <span class="keyword">if</span> (consoleBuf-&gt;<span class="built_in">sputc</span>(c) == EOF)</span><br><span class="line">        <span class="keyword">return</span> EOF;</span><br><span class="line">      <span class="keyword">if</span> (fileBuf-&gt;<span class="built_in">sputc</span>(c) == EOF)</span><br><span class="line">        <span class="keyword">return</span> EOF;</span><br><span class="line">      <span class="keyword">return</span> c;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="function"><span class="keyword">virtual</span> <span class="type">int</span> <span class="title">sync</span><span class="params">()</span> <span class="keyword">override</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (consoleBuf-&gt;<span class="built_in">pubsync</span>() == <span class="number">-1</span>)</span><br><span class="line">      <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">if</span> (fileBuf-&gt;<span class="built_in">pubsync</span>() == <span class="number">-1</span>)</span><br><span class="line">      <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">  streambuf *consoleBuf;</span><br><span class="line">  streambuf *fileBuf;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 日志目录初始化</span></span><br><span class="line">  <span class="type">int</span> result = <span class="built_in">system</span>(<span class="string">&quot;mkdir -p /var/log/fio_tool&quot;</span>);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (result == <span class="number">0</span>) &#123;</span><br><span class="line">    std::cout &lt;&lt; <span class="string">&quot;\033[32m日志存储目录 /var/log/fio_tool 已成功创建。\033[0m&quot;</span></span><br><span class="line">              &lt;&lt; std::endl;</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    std::cerr &lt;&lt; <span class="string">&quot;\033[31m创建目录 /var/log/fio_tool &quot;</span></span><br><span class="line">                 <span class="string">&quot;时出现错误。请检查当前用户的运行权限！\033[0m&quot;</span></span><br><span class="line">              &lt;&lt; std::endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 获取时间并格式化文件名</span></span><br><span class="line">  <span class="type">time_t</span> log_time = <span class="built_in">time</span>(<span class="literal">nullptr</span>);</span><br><span class="line">  tm *localTime = <span class="built_in">localtime</span>(&amp;log_time);</span><br><span class="line">  <span class="type">char</span> timeStr[<span class="number">20</span>];</span><br><span class="line">  <span class="built_in">strftime</span>(timeStr, <span class="keyword">sizeof</span>(timeStr), <span class="string">&quot;%Y-%m-%d-%H-%M-%S&quot;</span>, localTime);</span><br><span class="line">  string fileName = <span class="string">&quot;/var/log/fio_tool/&quot;</span> + <span class="built_in">string</span>(timeStr) + <span class="string">&quot;.log&quot;</span>;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 创建日志文件流</span></span><br><span class="line">  <span class="function">ofstream <span class="title">logFile</span><span class="params">(fileName, ios::app)</span></span>;</span><br><span class="line">  <span class="keyword">if</span> (!logFile) &#123;</span><br><span class="line">    cerr &lt;&lt; <span class="string">&quot;\033[31m无法创建日志文件！\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\033[32m成功创建日志文件：\033[0m&quot;</span> &lt;&lt; fileName &lt;&lt; endl;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 重定向 cout 输出到日志文件和控制台</span></span><br><span class="line">  <span class="function">TeeBuf <span class="title">teeBuf</span><span class="params">(cout.rdbuf(), logFile.rdbuf())</span></span>;</span><br><span class="line">  streambuf *originalCoutBuf = cout.<span class="built_in">rdbuf</span>(&amp;teeBuf);</span><br><span class="line"></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[36m欢迎使用fio测试工具\n日志和输出的fio.&quot;</span></span><br><span class="line">          <span class="string">&quot;csv默认保存到/var/log/fio_tool/&quot;</span></span><br><span class="line">          <span class="string">&quot;\n日志不会自行清除，运行前请自行清理日志文件和检查是否残留有测试文件&quot;</span></span><br><span class="line">          <span class="string">&quot;\n输出的数据统一为KiB/s单位，iops无单位\n请&lt;按键&gt;&quot;</span></span><br><span class="line">          <span class="string">&quot;选择你的测试内容：\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;1. 顺序写测试\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;2. 随机写测试\n\n\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;\033[31m-------分割线-------\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;进行读测试之前需要先创建预读文件，固定为测试路径下的init_read.[0-15]&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;.0共16个文件\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;请自行根据测试情况判断是否需要重新生成，如需重新生成，请删除后按&lt;r&gt;&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;进行预读文件创建\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;如无需创建预读文件则直接按键开始测试即可！\n\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;测试完成后记得清理干净测试残留的文件和日志文件\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;-------分割线-------\033[36m\n\n\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;3. 顺序读测试\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;4. 随机读测试\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;5. 4k随机50%混合读写测试\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;r. 创建预读文件\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;f. Fullauto全自动测试&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;q. 退出程序\n&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;s. 你想骚一下？\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">  <span class="type">char</span> choice;</span><br><span class="line">  <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">    choice = <span class="built_in">getch</span>(); <span class="comment">// Linux/macOS 下使用自定义 getch()</span></span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; choice &lt;&lt; endl; <span class="comment">// 打印选项</span></span><br><span class="line">    <span class="keyword">switch</span> (choice) &#123;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;1&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_seq_write</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;2&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_rand_write</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;3&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_seq_read</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;4&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_rand_read</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;5&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_randrw</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;r&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">init_read</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;f&#x27;</span>:</span><br><span class="line">      <span class="built_in">setConfig</span>();</span><br><span class="line">      <span class="built_in">fio_seq_write</span>();</span><br><span class="line">      <span class="built_in">fio_rand_write</span>();</span><br><span class="line">      <span class="built_in">init_read</span>();</span><br><span class="line">      <span class="built_in">fio_seq_read</span>();</span><br><span class="line">      <span class="built_in">fio_rand_read</span>();</span><br><span class="line">      <span class="built_in">fio_randrw</span>();</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;q&#x27;</span>:</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;程序已退出。&quot;</span> &lt;&lt; endl;</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;s&#x27;</span>:</span><br><span class="line">      <span class="keyword">while</span> (<span class="literal">true</span>) &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;骚个鸡儿啊，正事儿不干？我不懒得写炸机代码？&quot;</span> &lt;&lt; endl;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">default</span>:</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;\033[31m无效选项，请重新输入。\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 恢复 cout 的原始缓冲区</span></span><br><span class="line">  cout.<span class="built_in">rdbuf</span>(originalCoutBuf);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>fio.cpp代码</p><div class="code-container" data-rel="Cpp"><figure class="iseeu highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;array&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdlib&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;fstream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iomanip&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;regex&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sstream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdexcept&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;vector&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 全局参数</span></span><br><span class="line"><span class="type">int</span> bwMin, bwMax, bwAvg, iopsMin, iopsMax, iopsAvg, bw[] = &#123;<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>&#125;,</span><br><span class="line">                                                    iops[] = &#123;<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>&#125;;</span><br><span class="line">string dir, fsize, ioengine, name, fio_cmd, runtime, direct, line;</span><br><span class="line">stringstream fio_output;</span><br><span class="line">vector&lt;vector&lt;string&gt;&gt; run_report;</span><br><span class="line">vector&lt;string&gt; row;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; values, bw_int, iops_int;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 参数设置</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">setConfig</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[36m测试路径（完整输入，带/结尾，如/mnt/iotest/）：&quot;</span>;</span><br><span class="line">  cin &gt;&gt; dir;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;测试文件大小，需要略大于内存大小，仅输入数字单位为G，size=&quot;</span>;</span><br><span class="line">  cin &gt;&gt; fsize;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;运行时长，至少30秒，仅输入数字单位为秒，runtime=&quot;</span>;</span><br><span class="line">  cin &gt;&gt; runtime;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;io测试引擎，Linux（NAS）输入libaio，ioengine=&quot;</span>;</span><br><span class="line">  cin &gt;&gt; ioengine;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;设置是否经过系统缓存，1不缓存，0操作系统缓存，direct=\033[0m&quot;</span>;</span><br><span class="line">  cin &gt;&gt; direct;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 删除测试文件</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">rm_file</span><span class="params">(string name)</span> </span>&#123;</span><br><span class="line">  string rm_command = <span class="string">&quot;rm -rf &quot;</span> + dir + name;</span><br><span class="line">  <span class="built_in">system</span>(rm_command.<span class="built_in">c_str</span>()); <span class="comment">// 删除 /iopsTest 目录下的所有文件</span></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[32m临时文件已删除\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">run_cmd</span><span class="params">(<span class="type">const</span> string &amp;cmd)</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置变量</span></span><br><span class="line">  fio_output.<span class="built_in">str</span>(<span class="string">&quot;&quot;</span>);</span><br><span class="line">  fio_output.<span class="built_in">clear</span>();</span><br><span class="line"></span><br><span class="line">  FILE *fp = <span class="built_in">popen</span>(cmd.<span class="built_in">c_str</span>(), <span class="string">&quot;r&quot;</span>);</span><br><span class="line">  <span class="keyword">if</span> (fp == <span class="literal">nullptr</span>) &#123;</span><br><span class="line">    cerr &lt;&lt; <span class="string">&quot;\033[31mError opening pipe!\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 从fio输出中获取数据</span></span><br><span class="line">  <span class="type">char</span> buffer[<span class="number">128</span>];</span><br><span class="line">  <span class="keyword">while</span> (<span class="built_in">fgets</span>(buffer, <span class="keyword">sizeof</span>(buffer), fp) != <span class="literal">nullptr</span>) &#123;</span><br><span class="line">    fio_output &lt;&lt; buffer;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">fclose</span>(fp);</span><br><span class="line"></span><br><span class="line">  <span class="comment">// DE<span class="doctag">BUG:</span>显示fio的输出内容</span></span><br><span class="line">  <span class="comment">// cout &lt;&lt; fio_output.str();</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 分析fio输出</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">format</span><span class="params">(<span class="type">const</span> <span class="type">int</span> &amp;i)</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">  vector&lt;string&gt; bw_num, iops_num;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">while</span> (<span class="built_in">getline</span>(fio_output, line)) &#123;</span><br><span class="line">    <span class="keyword">if</span> (line.<span class="built_in">find</span>(<span class="string">&quot;samples&quot;</span>) != string::npos) &#123;</span><br><span class="line">      cout &lt;&lt; <span class="string">&quot;\033[32;1m筛选成功，原始数据：\033[0m&quot;</span> &lt;&lt; line &lt;&lt; endl;</span><br><span class="line">      <span class="keyword">if</span> (line.<span class="built_in">find</span>(<span class="string">&quot;bw &quot;</span>) != string::npos) &#123;</span><br><span class="line">        <span class="keyword">if</span> (line.<span class="built_in">find</span>(<span class="string">&quot;MiB/s&quot;</span>) != string::npos) &#123;</span><br><span class="line">          cout &lt;&lt; <span class="string">&quot;\033[32;1m检测到单位MiB/s，将转换为KiB/s\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">          <span class="comment">// 提取带宽数字</span></span><br><span class="line">          <span class="function">regex <span class="title">bw_regex</span><span class="params">(<span class="string">R&quot;(\d+\.\d+|\d+)&quot;</span>)</span></span>;</span><br><span class="line">          smatch match;</span><br><span class="line">          <span class="keyword">while</span> (<span class="built_in">regex_search</span>(line, match, bw_regex)) &#123;</span><br><span class="line">            <span class="comment">// 检测到单位是MiB，则转换为KiB</span></span><br><span class="line">            <span class="type">float</span> bw_value_kib = <span class="built_in">stof</span>(match.<span class="built_in">str</span>());</span><br><span class="line">            bw_value_kib *= <span class="number">1024</span>;</span><br><span class="line">            <span class="type">int</span> bw_value_bytes = <span class="keyword">static_cast</span>&lt;<span class="type">int</span>&gt;(bw_value_kib); <span class="comment">// 转为整数</span></span><br><span class="line">            bw_num.<span class="built_in">push_back</span>(<span class="built_in">to_string</span>(bw_value_bytes));</span><br><span class="line">            line = match.<span class="built_in">suffix</span>();</span><br><span class="line">          &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span> (line.<span class="built_in">find</span>(<span class="string">&quot;KiB/s&quot;</span>) != string::npos) &#123;</span><br><span class="line">          cout &lt;&lt; <span class="string">&quot;\033[32;1m检测到单位KiB/s，直接提取\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">          <span class="comment">// 提取带宽数字</span></span><br><span class="line">          <span class="function">regex <span class="title">bw_regex</span><span class="params">(<span class="string">R&quot;(\d+\.\d+|\d+)&quot;</span>)</span></span>;</span><br><span class="line">          smatch match;</span><br><span class="line">          <span class="keyword">while</span> (<span class="built_in">regex_search</span>(line, match, bw_regex)) &#123;</span><br><span class="line">            bw_num.<span class="built_in">push_back</span>(match.<span class="built_in">str</span>());</span><br><span class="line">            line = match.<span class="built_in">suffix</span>();</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">if</span> (line.<span class="built_in">find</span>(<span class="string">&quot;iops&quot;</span>) != string::npos) &#123;</span><br><span class="line">        <span class="comment">// 提取IOPS数字</span></span><br><span class="line">        <span class="function">regex <span class="title">iops_regex</span><span class="params">(<span class="string">R&quot;(\d+\.\d+|\d+)&quot;</span>)</span></span>;</span><br><span class="line">        smatch match;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">regex_search</span>(line, match, iops_regex)) &#123;</span><br><span class="line">          iops_num.<span class="built_in">push_back</span>(match.<span class="built_in">str</span>());</span><br><span class="line">          line = match.<span class="built_in">suffix</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">// 转换为整数</span></span><br><span class="line">  <span class="keyword">for</span> (<span class="type">const</span> string &amp;s : bw_num) &#123;</span><br><span class="line">    bw_int.<span class="built_in">push_back</span>(<span class="keyword">static_cast</span>&lt;<span class="type">int</span>&gt;(<span class="built_in">stof</span>(s)));</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">for</span> (<span class="type">const</span> string &amp;s : iops_num) &#123;</span><br><span class="line">    iops_int.<span class="built_in">push_back</span>(<span class="keyword">static_cast</span>&lt;<span class="type">int</span>&gt;(<span class="built_in">stof</span>(s)));</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// DE<span class="doctag">BUG:</span> 检查原始数据是否正常</span></span><br><span class="line">  <span class="comment">// for (int a : bw_int) &#123;</span></span><br><span class="line">  <span class="comment">//   cout &lt;&lt; &quot;bw:&quot; &lt;&lt; a &lt;&lt; endl;</span></span><br><span class="line">  <span class="comment">// &#125;</span></span><br><span class="line">  <span class="comment">// for (int a : iops_int) &#123;</span></span><br><span class="line">  <span class="comment">//   cout &lt;&lt; &quot;iops:&quot; &lt;&lt; a &lt;&lt; endl;</span></span><br><span class="line">  <span class="comment">// &#125;</span></span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (bw_int.<span class="built_in">size</span>() &gt; <span class="number">7</span>) &#123;</span><br><span class="line">    <span class="comment">// 混合读写</span></span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\033[32;1m&quot;</span> &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次带宽运行&lt;读&gt;结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; bw_int[<span class="number">0</span>] &lt;&lt; <span class="string">&quot;KiB/s max:&quot;</span> &lt;&lt; bw_int[<span class="number">1</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot;KiB/s avg:&quot;</span> &lt;&lt; bw_int[<span class="number">3</span>] &lt;&lt; <span class="string">&quot;KiB/s\n&quot;</span></span><br><span class="line">         &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次次IOPS运行&lt;读&gt;结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; iops_int[<span class="number">0</span>] &lt;&lt; <span class="string">&quot; max:&quot;</span> &lt;&lt; iops_int[<span class="number">1</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot; avg:&quot;</span> &lt;&lt; iops_int[<span class="number">2</span>] &lt;&lt; endl;</span><br><span class="line">    cout &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次带宽运行&lt;写&gt;结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; bw_int[<span class="number">6</span>] &lt;&lt; <span class="string">&quot;KiB/s max:&quot;</span> &lt;&lt; bw_int[<span class="number">7</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot;KiB/s avg:&quot;</span> &lt;&lt; bw_int[<span class="number">9</span>] &lt;&lt; <span class="string">&quot;KiB/s\n&quot;</span></span><br><span class="line">         &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次次IOPS运行&lt;写&gt;结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; iops_int[<span class="number">5</span>] &lt;&lt; <span class="string">&quot; max:&quot;</span> &lt;&lt; iops_int[<span class="number">6</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot; avg:&quot;</span> &lt;&lt; iops_int[<span class="number">7</span>] &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">    <span class="comment">// 整理带宽和IOPS数据</span></span><br><span class="line">    bw[<span class="number">0</span>] += bw_int[<span class="number">0</span>];</span><br><span class="line">    bw[<span class="number">1</span>] += bw_int[<span class="number">1</span>];</span><br><span class="line">    bw[<span class="number">2</span>] += bw_int[<span class="number">3</span>];</span><br><span class="line">    bw[<span class="number">3</span>] = bw_int[<span class="number">6</span>];</span><br><span class="line">    bw[<span class="number">4</span>] += bw_int[<span class="number">7</span>];</span><br><span class="line">    bw[<span class="number">5</span>] += bw_int[<span class="number">9</span>];</span><br><span class="line">    iops[<span class="number">0</span>] += iops_int[<span class="number">0</span>];</span><br><span class="line">    iops[<span class="number">1</span>] += iops_int[<span class="number">1</span>];</span><br><span class="line">    iops[<span class="number">2</span>] += iops_int[<span class="number">2</span>];</span><br><span class="line">    iops[<span class="number">3</span>] += iops_int[<span class="number">5</span>];</span><br><span class="line">    iops[<span class="number">4</span>] += iops_int[<span class="number">6</span>];</span><br><span class="line">    iops[<span class="number">5</span>] += iops_int[<span class="number">7</span>];</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\033[32;1m&quot;</span> &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次带宽运行结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; bw_int[<span class="number">0</span>] &lt;&lt; <span class="string">&quot;KiB/s max:&quot;</span> &lt;&lt; bw_int[<span class="number">1</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot;KiB/s avg:&quot;</span> &lt;&lt; bw_int[<span class="number">3</span>] &lt;&lt; <span class="string">&quot;KiB/s\n&quot;</span></span><br><span class="line">         &lt;&lt; name &lt;&lt; <span class="string">&quot; | 第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次次IOPS运行结果:&quot;</span></span><br><span class="line">         &lt;&lt; <span class="string">&quot;min:&quot;</span> &lt;&lt; iops_int[<span class="number">0</span>] &lt;&lt; <span class="string">&quot; max:&quot;</span> &lt;&lt; iops_int[<span class="number">1</span>]</span><br><span class="line">         &lt;&lt; <span class="string">&quot; avg:&quot;</span> &lt;&lt; iops_int[<span class="number">2</span>] &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">    <span class="comment">// 整理带宽和IOPS数据</span></span><br><span class="line">    bw[<span class="number">0</span>] += bw_int[<span class="number">0</span>];</span><br><span class="line">    bw[<span class="number">1</span>] += bw_int[<span class="number">1</span>];</span><br><span class="line">    bw[<span class="number">2</span>] += bw_int[<span class="number">3</span>];</span><br><span class="line">    iops[<span class="number">0</span>] += iops_int[<span class="number">0</span>];</span><br><span class="line">    iops[<span class="number">1</span>] += iops_int[<span class="number">1</span>];</span><br><span class="line">    iops[<span class="number">2</span>] += iops_int[<span class="number">2</span>];</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_sum</span><span class="params">(<span class="type">const</span> string &amp;name)</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (bw[<span class="number">3</span>] != <span class="number">0</span>) &#123;</span><br><span class="line">    <span class="comment">// 针对混合读写处理</span></span><br><span class="line">    <span class="comment">//  计算最小、最大和平均值</span></span><br><span class="line">    <span class="type">int</span> RbwMin = bw[<span class="number">0</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> RbwMax = bw[<span class="number">1</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> RbwAvg = bw[<span class="number">2</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> RiopsMin = iops[<span class="number">0</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> RiopsMax = iops[<span class="number">1</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> RiopsAvg = iops[<span class="number">2</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WbwMin = bw[<span class="number">3</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WbwMax = bw[<span class="number">4</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WbwAvg = bw[<span class="number">5</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WiopsMin = iops[<span class="number">3</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WiopsMax = iops[<span class="number">4</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> WiopsAvg = iops[<span class="number">5</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="comment">// 将结果存储到数据表中，第一列是 名称，后面是6个值</span></span><br><span class="line">    values = &#123;RbwMin, RbwMax, RbwAvg, RiopsMin, RiopsMax, RiopsAvg,</span><br><span class="line">              WbwMin, WbwMax, WbwAvg, WiopsMin, WiopsMax, WiopsAvg&#125;;</span><br><span class="line">    row = &#123;name&#125;;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> val : values) &#123;</span><br><span class="line">      row.<span class="built_in">push_back</span>(<span class="built_in">to_string</span>(val)); <span class="comment">// 将每个值转换为字符串并添加到行中</span></span><br><span class="line">    &#125;</span><br><span class="line">    run_report.<span class="built_in">push_back</span>(row); <span class="comment">// 将这行添加到数据中</span></span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="comment">// 计算最小、最大和平均值</span></span><br><span class="line">    <span class="type">int</span> bwMin = bw[<span class="number">0</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> bwMax = bw[<span class="number">1</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> bwAvg = bw[<span class="number">2</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> iopsMin = iops[<span class="number">0</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> iopsMax = iops[<span class="number">1</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> iopsAvg = iops[<span class="number">2</span>] / <span class="number">3</span>;</span><br><span class="line">    <span class="comment">// 将结果存储到数据表中，第一列是 名称，后面是6个值</span></span><br><span class="line">    values = &#123;bwMin, bwMax, bwAvg, iopsMin, iopsMax, iopsAvg&#125;;</span><br><span class="line">    row = &#123;name&#125;;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> val : values) &#123;</span><br><span class="line">      row.<span class="built_in">push_back</span>(<span class="built_in">to_string</span>(val)); <span class="comment">// 将每个值转换为字符串并添加到行中</span></span><br><span class="line">    &#125;</span><br><span class="line">    run_report.<span class="built_in">push_back</span>(row); <span class="comment">// 将这行添加到数据中</span></span><br><span class="line">    <span class="comment">// 重置</span></span><br><span class="line">    values.<span class="built_in">clear</span>();</span><br><span class="line">    row.<span class="built_in">clear</span>();</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  <span class="built_in">fill</span>(<span class="built_in">begin</span>(bw), <span class="built_in">end</span>(bw), <span class="number">0</span>);</span><br><span class="line">  <span class="built_in">fill</span>(<span class="built_in">begin</span>(iops), <span class="built_in">end</span>(iops), <span class="number">0</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">runReport</span><span class="params">()</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 打开文件用于追加写入</span></span><br><span class="line">  <span class="function">ofstream <span class="title">outputFile</span><span class="params">(<span class="string">&quot;/var/log/fio_tool/fio.csv&quot;</span>, ios::app)</span></span>;</span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (outputFile.<span class="built_in">is_open</span>()) &#123;</span><br><span class="line">    <span class="comment">// 如果文件为空，先写入表头（假设表头只在文件为空时写入一次）</span></span><br><span class="line">    <span class="keyword">if</span> (outputFile.<span class="built_in">tellp</span>() == <span class="number">0</span>) &#123;</span><br><span class="line">      outputFile</span><br><span class="line">          &lt;&lt; <span class="string">&quot;测试类型,带宽最小值,带宽最大值,带宽均值,IOPS最小值,&quot;</span></span><br><span class="line">             <span class="string">&quot;IOPS最大值,IOPS均值,写带宽最小值,写带宽最大值,写带宽均值,&quot;</span></span><br><span class="line">             <span class="string">&quot;写IOPS最小值,&quot;</span></span><br><span class="line">             <span class="string">&quot;写IOPS最大值,写IOPS均值,(前6列数据在混合读写中作为读的数据)&quot;</span></span><br><span class="line">          &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span> &amp;row : run_report) &#123;</span><br><span class="line">      <span class="keyword">for</span> (<span class="type">const</span> <span class="keyword">auto</span> &amp;cell : row) &#123;</span><br><span class="line">        outputFile &lt;&lt; cell &lt;&lt; <span class="string">&quot;,&quot;</span>;</span><br><span class="line">      &#125;</span><br><span class="line">      outputFile &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 关闭文件</span></span><br><span class="line">    outputFile.<span class="built_in">close</span>();</span><br><span class="line"></span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\033[32;1m数据已成功追加到fio.csv文件。\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    cerr &lt;&lt; <span class="string">&quot;\033[31;1m无法打开fio.csv文件进行追加写入。\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  &#125;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[32;1m已重置run_report\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  <span class="comment">// 重置run_report</span></span><br><span class="line">  run_report.<span class="built_in">clear</span>();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// ---创建预读文件 start---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">init_read</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[32;1m预读文件的大小与测试文件一致，自动从之前的测试中获取\033[&quot;</span></span><br><span class="line">          <span class="string">&quot;0m\n&quot;</span>;</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m正在为读取测试创建预读文件，请稍后...&quot;</span></span><br><span class="line">          <span class="string">&quot;\n创建完毕后会出现提示，创建的文件数量为最大numjobs数量：16个，每个&quot;</span></span><br><span class="line">          <span class="string">&quot;大小为&quot;</span> +</span><br><span class="line">              fsize + <span class="string">&quot;G&quot;</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  fio_cmd = <span class="string">&quot;fio -name=init_read -size=&quot;</span> + fsize +</span><br><span class="line">            <span class="string">&quot;G -bs=1m -direct=1 -rw=write -ioengine=&quot;</span> + ioengine +</span><br><span class="line">            <span class="string">&quot; -numjobs=16 -group_reporting -iodepth=1 -directory=&quot;</span> + dir;</span><br><span class="line">  <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[32;&quot;</span></span><br><span class="line">          <span class="string">&quot;1m预读文件创建完毕！！！\n预读文件创建完毕！！！\n预读文件创建完毕！&quot;</span></span><br><span class="line">          <span class="string">&quot;！&quot;</span></span><br><span class="line">          <span class="string">&quot;！\n\033[0m&quot;</span></span><br><span class="line">       &lt;&lt; endl;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// ---创建预读文件 end---</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// --- 顺序写start ---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_seq_write</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  bw_int.<span class="built_in">clear</span>();</span><br><span class="line">  iops_int.<span class="built_in">clear</span>();</span><br><span class="line">  <span class="comment">// 文件</span></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m顺序写测试，共计50项，每项3次，每次 &quot;</span> &lt;&lt; runtime</span><br><span class="line">       &lt;&lt; <span class="string">&quot; 秒，共计 &quot;</span> &lt;&lt; <span class="built_in">to_string</span>((<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">50</span> * <span class="number">3</span>) &lt;&lt; <span class="string">&quot; 秒，约 &quot;</span></span><br><span class="line">       &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">2</span>) &lt;&lt; fixed</span><br><span class="line">       &lt;&lt; (<span class="type">double</span>)(<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">50</span> * <span class="number">3</span> / <span class="number">60</span> / <span class="number">60</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot; 小时\n进行中...\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 文件/文件夹</span></span><br><span class="line">  string DorF[] = &#123;<span class="string">&quot;filename&quot;</span>, <span class="string">&quot;directory&quot;</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (string dorf : DorF) &#123;</span><br><span class="line">    <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;file&quot;</span>) != string::npos) &#123; <span class="comment">// 如果是单文件</span></span><br><span class="line"></span><br><span class="line">      <span class="comment">// numjobs=1</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;1&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=512/1024</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;512&quot;</span>, <span class="string">&quot;1024&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;write&quot;</span>;</span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;fio -name=&quot;</span> + name + <span class="string">&quot; -size=&quot;</span> + fsize +</span><br><span class="line">                        <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                        <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                        <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="built_in">to_string</span>(i);</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">              <span class="built_in">rm_file</span>(<span class="built_in">to_string</span>(i)); <span class="comment">//&quot;rm -rf &quot; + dir + ? rm -rf /mnt/?</span></span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;directory&quot;</span>) != string::npos) &#123;</span><br><span class="line">      <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;128&quot;</span>, <span class="string">&quot;256&quot;</span>, <span class="string">&quot;512&quot;</span>, <span class="string">&quot;1024&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            string rw = <span class="string">&quot;write&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;mkdir -p &quot;</span> + dir + <span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i) + <span class="string">&quot;/&quot;</span> +</span><br><span class="line">                        <span class="string">&quot; &amp;&amp; fio -name=&quot;</span> + name + <span class="string">&quot; -size=&quot;</span> + fsize +</span><br><span class="line">                        <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                        <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                        <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i) + <span class="string">&quot;/&quot;</span>;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">              <span class="built_in">rm_file</span>(<span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i));</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// --- 顺序写end ---</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// --- 顺序读start ---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_seq_read</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  bw_int.<span class="built_in">clear</span>();</span><br><span class="line">  iops_int.<span class="built_in">clear</span>();</span><br><span class="line">  <span class="comment">// 文件</span></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m顺序读测试，共计50项，每项3次，每次预热5秒，每次测试&quot;</span> +</span><br><span class="line">              runtime + <span class="string">&quot;秒，共计&quot;</span> + <span class="built_in">to_string</span>((<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">50</span> * <span class="number">3</span>) +</span><br><span class="line">              <span class="string">&quot;秒，约 &quot;</span></span><br><span class="line">       &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">2</span>) &lt;&lt; fixed</span><br><span class="line">       &lt;&lt; (<span class="type">double</span>)(<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">50</span> * <span class="number">3</span> / <span class="number">60</span> / <span class="number">60</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;小时\n进行中...\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 文件/文件夹</span></span><br><span class="line">  string DorF[] = &#123;<span class="string">&quot;filename&quot;</span>, <span class="string">&quot;directory&quot;</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (string dorf : DorF) &#123;</span><br><span class="line">    <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;file&quot;</span>) != string::npos) &#123; <span class="comment">// 如果是单文件</span></span><br><span class="line"></span><br><span class="line">      <span class="comment">// numjobs=1</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;1&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=512/1024</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;512&quot;</span>, <span class="string">&quot;1024&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            string rw = <span class="string">&quot;read&quot;</span>;</span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                        <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                        fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime +</span><br><span class="line">                        <span class="string">&quot;s -time_base -bs=&quot;</span> + bs + <span class="string">&quot;k -direct=&quot;</span> + direct +</span><br><span class="line">                        <span class="string">&quot; -rw=&quot;</span> + rw + <span class="string">&quot; -ioengine=&quot;</span> + ioengine +</span><br><span class="line">                        <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="string">&quot;init_read.0.0&quot;</span>;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;directory&quot;</span>) != string::npos) &#123;</span><br><span class="line">      <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;128&quot;</span>, <span class="string">&quot;256&quot;</span>, <span class="string">&quot;512&quot;</span>, <span class="string">&quot;1024&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;read&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                        <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                        fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime +</span><br><span class="line">                        <span class="string">&quot;s -time_base -bs=&quot;</span> + bs + <span class="string">&quot;k -direct=&quot;</span> + direct +</span><br><span class="line">                        <span class="string">&quot; -rw=&quot;</span> + rw + <span class="string">&quot; -ioengine=&quot;</span> + ioengine +</span><br><span class="line">                        <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// --- 顺序读end ---</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// --- 随机读start ---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_rand_read</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  bw_int.<span class="built_in">clear</span>();</span><br><span class="line">  iops_int.<span class="built_in">clear</span>();</span><br><span class="line">  <span class="comment">// 文件</span></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m随机读测试，共计15项，每项3次，每次预热5秒，每次测试&quot;</span> +</span><br><span class="line">              runtime + <span class="string">&quot;秒，共计&quot;</span> + <span class="built_in">to_string</span>((<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span>) +</span><br><span class="line">              <span class="string">&quot;秒，约 &quot;</span></span><br><span class="line">       &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">2</span>) &lt;&lt; fixed</span><br><span class="line">       &lt;&lt; (<span class="type">double</span>)(<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span> / <span class="number">60</span> / <span class="number">60</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;小时\n进行中...\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  <span class="comment">// 文件/文件夹</span></span><br><span class="line">  string DorF[] = &#123;<span class="string">&quot;filename&quot;</span>, <span class="string">&quot;directory&quot;</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (string dorf : DorF) &#123;</span><br><span class="line">    <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;file&quot;</span>) != string::npos) &#123; <span class="comment">// 如果是单文件</span></span><br><span class="line"></span><br><span class="line">      <span class="comment">// numjobs=1</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;1&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=512/1024</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            string rw = <span class="string">&quot;randread&quot;</span>;</span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd =</span><br><span class="line">                  <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                  <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                  fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                  <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                  <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                  <span class="string">&quot; -group_reporting -ramp_time=5 -readrepeat=0 -iodepth=&quot;</span> +</span><br><span class="line">                  iodepth + <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="string">&quot;init_read.0.0&quot;</span>;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;directory&quot;</span>) != string::npos) &#123;</span><br><span class="line">      <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;randread&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd =</span><br><span class="line">                  <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                  <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                  fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                  <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                  <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                  <span class="string">&quot; -group_reporting -ramp_time=5 -readrepeat=0 -iodepth=&quot;</span> +</span><br><span class="line">                  iodepth + <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// --- 随机读end ---</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// --- 随机写开始 ---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_rand_write</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  bw_int.<span class="built_in">clear</span>();</span><br><span class="line">  iops_int.<span class="built_in">clear</span>();</span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m随机写测试，共计15项，每项3次，每次预热5秒，每次测试&quot;</span> +</span><br><span class="line">              runtime + <span class="string">&quot;秒，共计&quot;</span> + <span class="built_in">to_string</span>((<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span>) +</span><br><span class="line">              <span class="string">&quot;秒，约 &quot;</span></span><br><span class="line">       &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">2</span>) &lt;&lt; fixed</span><br><span class="line">       &lt;&lt; (<span class="type">double</span>)(<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span> / <span class="number">60</span> / <span class="number">60</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;小时\n进行中...\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  <span class="comment">// 文件/文件夹</span></span><br><span class="line">  string DorF[] = &#123;<span class="string">&quot;filename&quot;</span>, <span class="string">&quot;directory&quot;</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (string dorf : DorF) &#123;</span><br><span class="line">    <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;file&quot;</span>) != string::npos) &#123; <span class="comment">// 如果是单文件</span></span><br><span class="line">                                             <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;1&quot;</span>&#125;;              <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;randwrite&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;fio -name=&quot;</span> + name + <span class="string">&quot; -size=&quot;</span> + fsize +</span><br><span class="line">                        <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                        <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                        <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="built_in">to_string</span>(i);</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">              <span class="built_in">rm_file</span>(<span class="built_in">to_string</span>(i));</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;directory&quot;</span>) != string::npos) &#123;</span><br><span class="line">      <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;randwrite&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;mkdir -p &quot;</span> + dir + <span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i) + <span class="string">&quot;/&quot;</span> +</span><br><span class="line">                        <span class="string">&quot; &amp;&amp; fio -name=&quot;</span> + name + <span class="string">&quot; -size=&quot;</span> + fsize +</span><br><span class="line">                        <span class="string">&quot;G -runtime=&quot;</span> + runtime + <span class="string">&quot;s -time_base -bs=&quot;</span> + bs +</span><br><span class="line">                        <span class="string">&quot;k -direct=&quot;</span> + direct + <span class="string">&quot; -rw=&quot;</span> + rw +</span><br><span class="line">                        <span class="string">&quot; -ioengine=&quot;</span> + ioengine + <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i) + <span class="string">&quot;/&quot;</span>;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">              <span class="built_in">rm_file</span>(<span class="string">&quot;dir_&quot;</span> + <span class="built_in">to_string</span>(i));</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// --- 随机写结束 ---</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// --- 4k随机读写开始 ---</span></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">fio_randrw</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 重置数据</span></span><br><span class="line">  bw_int.<span class="built_in">clear</span>();</span><br><span class="line">  iops_int.<span class="built_in">clear</span>();</span><br><span class="line">  <span class="comment">// 文件</span></span><br><span class="line">  cout &lt;&lt; <span class="string">&quot;\033[31;1m50%随机读写测试，共计15项，每项3次，每次&quot;</span> + runtime +</span><br><span class="line">              <span class="string">&quot;秒，共计&quot;</span> + <span class="built_in">to_string</span>((<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span>) + <span class="string">&quot;秒，约&quot;</span></span><br><span class="line">       &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">2</span>) &lt;&lt; fixed</span><br><span class="line">       &lt;&lt; (<span class="type">double</span>)(<span class="built_in">stoi</span>(runtime) + <span class="number">5</span>) * <span class="number">15</span> * <span class="number">3</span> / <span class="number">60</span> / <span class="number">60</span></span><br><span class="line">       &lt;&lt; <span class="string">&quot;小时\n进行中...\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">  <span class="comment">// 文件/文件夹</span></span><br><span class="line">  string DorF[] = &#123;<span class="string">&quot;filename&quot;</span>, <span class="string">&quot;directory&quot;</span>&#125;;</span><br><span class="line">  <span class="keyword">for</span> (string dorf : DorF) &#123;</span><br><span class="line">    <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;file&quot;</span>) != string::npos) &#123; <span class="comment">// 如果是单文件</span></span><br><span class="line">                                             <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;;        <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;randrw&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                        <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                        fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime +</span><br><span class="line">                        <span class="string">&quot;s -time_base -bs=&quot;</span> + bs + <span class="string">&quot;k -direct=&quot;</span> + direct +</span><br><span class="line">                        <span class="string">&quot; -rw=&quot;</span> + rw + <span class="string">&quot; -ioengine=&quot;</span> + ioengine +</span><br><span class="line">                        <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir + <span class="string">&quot;init_read.0.0&quot;</span>;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (dorf.<span class="built_in">find</span>(<span class="string">&quot;directory&quot;</span>) != string::npos) &#123;</span><br><span class="line">      <span class="comment">// numjobs=8/16</span></span><br><span class="line">      string numjobs[] = &#123;<span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>&#125;; <span class="comment">// 用数组配置numjobs</span></span><br><span class="line">      <span class="keyword">for</span> (string numjob : numjobs) &#123;</span><br><span class="line">        <span class="comment">// bs=4k</span></span><br><span class="line">        string bs_group[] = &#123;<span class="string">&quot;4&quot;</span>&#125;; <span class="comment">// 用数组配置bs块大小</span></span><br><span class="line">        <span class="keyword">for</span> (string bs : bs_group) &#123;</span><br><span class="line">          string iodepth_group[] = &#123;<span class="string">&quot;1&quot;</span>, <span class="string">&quot;2&quot;</span>, <span class="string">&quot;8&quot;</span>, <span class="string">&quot;16&quot;</span>,</span><br><span class="line">                                    <span class="string">&quot;32&quot;</span>&#125;; <span class="comment">// 用数组配置iodepth循环</span></span><br><span class="line">          <span class="comment">// iodepth=1/2/8/16/32</span></span><br><span class="line">          <span class="keyword">for</span> (string iodepth : iodepth_group) &#123;</span><br><span class="line">            <span class="comment">// 先写后读</span></span><br><span class="line">            string rw = <span class="string">&quot;randrw&quot;</span>;</span><br><span class="line">            <span class="comment">// 重复运行3次</span></span><br><span class="line">            name = rw + <span class="string">&quot;_&quot;</span> + dorf + <span class="string">&quot;_numjobs=&quot;</span> + numjob +</span><br><span class="line">                   <span class="string">&quot;_iodepth=&quot;</span> + iodepth + <span class="string">&quot;_bs=&quot;</span> + bs + <span class="string">&quot;k&quot;</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">3</span>; i++) &#123;</span><br><span class="line">              <span class="comment">// 构建文件夹fio命令</span></span><br><span class="line">              fio_cmd = <span class="string">&quot;echo 3 &gt; /proc/sys/vm/drop_caches &amp;&amp; fio &quot;</span></span><br><span class="line">                        <span class="string">&quot;-name=init_read -size=&quot;</span> +</span><br><span class="line">                        fsize + <span class="string">&quot;G -runtime=&quot;</span> + runtime +</span><br><span class="line">                        <span class="string">&quot;s -time_base -bs=&quot;</span> + bs + <span class="string">&quot;k -direct=&quot;</span> + direct +</span><br><span class="line">                        <span class="string">&quot; -rw=&quot;</span> + rw + <span class="string">&quot; -ioengine=&quot;</span> + ioengine +</span><br><span class="line">                        <span class="string">&quot; -numjobs=&quot;</span> + numjob +</span><br><span class="line">                        <span class="string">&quot; -group_reporting -ramp_time=5 -iodepth=&quot;</span> + iodepth +</span><br><span class="line">                        <span class="string">&quot; -&quot;</span> + dorf + <span class="string">&quot;=&quot;</span> + dir;</span><br><span class="line">              <span class="comment">// 输出本次运行的命令以便排障</span></span><br><span class="line">              cout &lt;&lt; <span class="string">&quot;\033[36;1m第&quot;</span> &lt;&lt; i &lt;&lt; <span class="string">&quot;次运行的命令是：&quot;</span> &lt;&lt; fio_cmd</span><br><span class="line">                   &lt;&lt; <span class="string">&quot;\033[0m&quot;</span> &lt;&lt; endl;</span><br><span class="line">              <span class="built_in">run_cmd</span>(fio_cmd);</span><br><span class="line">              format(i);</span><br><span class="line">              <span class="comment">// 重置数据</span></span><br><span class="line">              bw_int.<span class="built_in">clear</span>();</span><br><span class="line">              iops_int.<span class="built_in">clear</span>();</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="built_in">fio_sum</span>(name);</span><br><span class="line">          &#125;</span><br><span class="line">          <span class="built_in">runReport</span>();</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// --- 4k随机读写结束 ---</span></span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/95634cca.html</id>
    <link href="https://hackerbs.com/posts/95634cca.html"/>
    <published>2024-11-15T06:05:38.000Z</published>
    <summary>
      <![CDATA[<h2 id="我有病，拿C-写测试工具"><a href="#我有病，拿C-写测试工具" class="headerlink" title="我有病，拿C++写测试工具"></a>我有病，拿C++写测试工具</h2><p><a class="link" href="https://github.com/1949hacker/studycplusplus">仓库地址：https://github.com/1949hacker/studycplusplus<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a></p>]]>
    </summary>
    <title>C++编写fio测试工具 | C++写脚本，我在发疯</title>
    <updated>2026-09-23T13:04:04.083Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="虚拟化" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%99%9A%E6%8B%9F%E5%8C%96/"/>
    <category term="RAID" scheme="https://hackerbs.com/tags/RAID/"/>
    <category term="NAS" scheme="https://hackerbs.com/tags/NAS/"/>
    <category term="存储" scheme="https://hackerbs.com/tags/%E5%AD%98%E5%82%A8/"/>
    <category term="DDNS" scheme="https://hackerbs.com/tags/DDNS/"/>
    <category term="zfs" scheme="https://hackerbs.com/tags/zfs/"/>
    <category term="磁盘阵列" scheme="https://hackerbs.com/tags/%E7%A3%81%E7%9B%98%E9%98%B5%E5%88%97/"/>
    <content>
      <![CDATA[<div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">依次关机</span></span><br><span class="line">i=$(qm list)&amp;&amp;vmid=$(echo &quot;$i&quot; | awk &#x27;&#123;if (NR&gt;1) &#123;print $1&#125;&#125;&#x27;)&amp;&amp;for i in $vmid;do qm shutdown $i;done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">依次开机，间隔一分钟</span></span><br><span class="line">i=$(qm list)&amp;&amp;vmid=$(echo &quot;$i&quot; | awk &#x27;&#123;if (NR&gt;1) &#123;print $1&#125;&#125;&#x27;)&amp;&amp;for i in $vmid;do qm start $i&amp;&amp;sleep 60s;done</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/f5e07552.html</id>
    <link href="https://hackerbs.com/posts/f5e07552.html"/>
    <published>2024-09-12T09:14:48.000Z</published>
    <summary>
      <![CDATA[<div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">依次关机</span></span><br><span class="line">i=$(qm list)&amp;&amp;vmid=$(echo &quot;$i&quot; | awk &#x27;&#123;if (NR&gt;1) &#123;print $1&#125;&#125;&#x27;)&amp;&amp;for i in $vmid;do qm shutdown $i;done</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">依次开机，间隔一分钟</span></span><br><span class="line">i=$(qm list)&amp;&amp;vmid=$(echo &quot;$i&quot; | awk &#x27;&#123;if (NR&gt;1) &#123;print $1&#125;&#125;&#x27;)&amp;&amp;for i in $vmid;do qm start $i&amp;&amp;sleep 60s;done</span><br></pre></td></tr></table></figure></div>]]>
    </summary>
    <title>直接编写crontab使用一行命令完成Proxmox-VE所有虚拟机的安全关机和依次开机</title>
    <updated>2026-09-23T13:04:04.163Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="虚拟化" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%99%9A%E6%8B%9F%E5%8C%96/"/>
    <category term="Proxmox-VE" scheme="https://hackerbs.com/tags/Proxmox-VE/"/>
    <category term="虚拟机" scheme="https://hackerbs.com/tags/%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
    <category term="虚拟网卡" scheme="https://hackerbs.com/tags/%E8%99%9A%E6%8B%9F%E7%BD%91%E5%8D%A1/"/>
    <category term="qemu" scheme="https://hackerbs.com/tags/qemu/"/>
    <content>
      <![CDATA[<p>qemu的虚拟机网卡推荐设置如下</p><p>关闭防火墙,使用VirtIO班虚拟化,Multiqueue根据vCPU数量填写,4核则是4,超过8核最大值只能是8</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20240626193051.png"                      alt="20240626193051"                ></p><h2 id="此处记录一个大坑"><a href="#此处记录一个大坑" class="headerlink" title="此处记录一个大坑"></a>此处记录一个大坑</h2><p>qemu虚拟机网卡的限速功能,会导致传输大量小包是延迟巨大,比如steam下载游戏,会导致延迟巨高,甚至飙升到300ms</p><p>本次大坑的发现过程相当曲折,<a class="link"   href="https://lizigo.cn/" >粒子GO<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>的用户在购买服务器后,steamcmd下载游戏时会延迟巨高,很卡,随后针对机房防火墙,交换机性能,线路问题,进行了全面排查后,了解到steam下载会使用小包传输以保障完整性,而虚拟机服务器正好需要进行限速,导致流量在宿主机转发了一遍再传到虚拟机,一旦遇到steam下载这种大量小包传输,便会导致延迟巨高</p><h2 id="填坑办法"><a href="#填坑办法" class="headerlink" title="填坑办法"></a>填坑办法</h2><p>取消在宿主机设置虚拟机网卡限速,直接在虚拟机系统里做限速,以下是在Debian使用<code>iproute2</code>的<code>tc</code>进行限速的办法</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">初始化enp6s18,设置默认的根qdisc,然后删除</span></span><br><span class="line">tc qdisc add dev enp6s18 root handle 1: fq_codel</span><br><span class="line">tc qdisc del dev enp6s18 root</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">设置根队列规则</span></span><br><span class="line">tc qdisc add dev enp6s18 root handle 1: htb default 10</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建一个类来限制上行带宽为30Mbps</span></span><br><span class="line">tc class add dev enp6s18 parent 1: classid 1:1 htb rate 30mbit</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建过滤器将所有上行流量命中该类</span></span><br><span class="line">tc filter add dev enp6s18 protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 flowid 1:1</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查询enp6s18网卡规则</span></span><br><span class="line">tc qdisc show dev enp6s18</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查询enp6s18网卡类规则</span></span><br><span class="line">tc class show dev enp6s18</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查询enp6s18网卡过滤器</span></span><br><span class="line">tc filter show dev enp6s18</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">一条龙梭哈</span></span><br><span class="line">tc qdisc add dev enp6s18 root handle 1: fq_codel &amp;&amp; tc qdisc del dev enp6s18 root &amp;&amp; tc qdisc add dev enp6s18 root handle 1: htb default 10 &amp;&amp; tc class add dev enp6s18 parent 1: classid 1:1 htb rate 30mbit &amp;&amp; tc filter add dev enp6s18 protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 flowid 1:1</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/466338e1.html</id>
    <link href="https://hackerbs.com/posts/466338e1.html"/>
    <published>2024-06-26T11:18:05.000Z</published>
    <summary>
      <![CDATA[<p>qemu的虚拟机网卡推荐设置如下</p>
<p>关闭防火墙,使用VirtIO班虚拟化,Multiqueue根据vCPU数量填写,4核则是4,超过8核最大值只能是8</p>]]>
    </summary>
    <title>记录qemu虚拟机网卡的一次坑</title>
    <updated>2026-09-23T13:04:04.160Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="发布" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%8F%91%E5%B8%83/"/>
    <category term="apt源" scheme="https://hackerbs.com/tags/apt%E6%BA%90/"/>
    <category term="apt" scheme="https://hackerbs.com/tags/apt/"/>
    <category term="GPG key" scheme="https://hackerbs.com/tags/GPG-key/"/>
    <category term="可信任apt源" scheme="https://hackerbs.com/tags/%E5%8F%AF%E4%BF%A1%E4%BB%BBapt%E6%BA%90/"/>
    <content>
      <![CDATA[<h1 id="本文将介绍如何搭建一个像docker-ce一样具有GPG-key验证的源"><a href="#本文将介绍如何搭建一个像docker-ce一样具有GPG-key验证的源" class="headerlink" title="本文将介绍如何搭建一个像docker-ce一样具有GPG key验证的源"></a>本文将介绍如何搭建一个像docker-ce一样具有GPG key验证的源</h1><p>普通的用<code>deb [trusted=yes] http://url/ bookworm main</code>添加的源在内网环境用还行，但若是在公网，就会存在没有验证，被篡改的风险，且具有GPG key验证的源也更专业</p><p>搭建自己的apt源后便可将自己的deb包上传到服务器，然后添加自己的apt源并导入GPG密钥</p><h2 id="使用aptly管理apt仓库"><a href="#使用aptly管理apt仓库" class="headerlink" title="使用aptly管理apt仓库"></a>使用aptly管理apt仓库</h2><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">创建一个aptly的工作地址</span></span><br><span class="line">mkdir -p /mypath/apt</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用aptly创建仓库</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">bookworm是debian 12的代号</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">comment则是填仓库的描述</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">hackerbs是我的仓库名，修改为你的即可</span></span><br><span class="line">aptly repo create -distribution=&quot;bookworm&quot; -comment=&quot;hackerbs.com&#x27;s repository&quot; hackerbs</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">运行该命令后会在用户目录下生成一个.aptly.conf配置文件，和.aptly的目录</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">建议编辑.aptly.conf配置文件，修改原</span></span><br><span class="line">&quot;rootDir&quot;: &quot;/root/.aptly&quot;,</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">改为指定的，如我的/mypath/apt目录</span></span><br><span class="line">&quot;rootDir&quot;: &quot;/mypath/apt&quot;,</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">重新运行</span></span><br><span class="line">aptly repo create -distribution=&quot;bookworm&quot; -comment=&quot;hackerbs.com&#x27;s repository&quot; hackerbs</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">现在指定的/mypath/apt下便会出现一个db文件夹</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">继续往仓库添加deb包</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">add后面的hackerbs是上一步创建的仓库名，仓库名后面则是包的路径，跟部署无关，这里只是添加到仓库</span></span><br><span class="line">aptly repo add hackerbs /deb/package/aptdownloader/aptdownloader_1.0.0-1_amd64.deb</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">添加完成后创建一个快照</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">create后面的aptdownloader只是我的快照名称，repo后面接你的仓库名</span></span><br><span class="line">aptly snapshot create aptdownloader from repo hackerbs</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">使用快照发布apt存储库</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">snapshot后面跟快照名</span></span><br><span class="line">aptly publish snapshot aptdownloader</span><br></pre></td></tr></table></figure></div><p>至此，aptly发布存储库完成，&#x2F;mypath&#x2F;apt&#x2F;public文件夹就是网站的文件夹，所以下文中nginx指向的便是该路径</p><p>以下是aptly命令的补充</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">aptly publish drop buster # 取消已发布的存储库，这里指定的名字不是存储库的名字而是distribution</span><br><span class="line">aptly snapshot drop imlala_snapshot # 删除快照（如果当前快照正在对外服务，需要先取消快照对应的存储库发布后才能删除）</span><br><span class="line">aptly snapshot show -with-packages imlala_snapshot # 显示某个快照内有多少个包</span><br><span class="line">aptly snapshot list # 列出所有快照</span><br><span class="line">aptly repo show -with-packages imlala # 显示某个存储库内有多少包</span><br><span class="line">aptly repo list # 列出所有存储库</span><br><span class="line">aptly repo remove imlala qbittorrent-nox_4.1.7.1_amd64 # 从存储库删除包</span><br><span class="line">aptly serve # 启动自带的http服务器</span><br></pre></td></tr></table></figure></div><h2 id="使用docker创建一个nginx，以下是我的docker-compose-yaml文件"><a href="#使用docker创建一个nginx，以下是我的docker-compose-yaml文件" class="headerlink" title="使用docker创建一个nginx，以下是我的docker-compose.yaml文件"></a>使用docker创建一个nginx，以下是我的docker-compose.yaml文件</h2><div class="code-container" data-rel="Yaml"><figure class="iseeu highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">apt:</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">nginx:latest</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">apt</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="number">443</span><span class="string">:443</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/mypath/html:/usr/share/nginx/html</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/mypath/conf:/etc/nginx/conf.d</span></span><br></pre></td></tr></table></figure></div><p>然后使用<code>docker compose up -d</code>启动这个nginx容器</p><p>进入到我的目录的conf中，新建一个apt.conf配置文件</p><div class="code-container" data-rel="Plaintext"><figure class="iseeu highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen 443;</span><br><span class="line">    listen [::]:443;</span><br><span class="line">    server_name mydomain;</span><br><span class="line"></span><br><span class="line">    root /mypath/public;</span><br><span class="line">    autoindex on;</span><br><span class="line">    index index.html</span><br><span class="line">    allow all;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></div><p>然后使用<code>docker exec apt nginx -t</code>测试配置文件</p><p>继续使用<code>docker exec apt nginx -s reload</code>重载配置文件</p><p>此时nginx已经上线</p><h2 id="配置GPG-key"><a href="#配置GPG-key" class="headerlink" title="配置GPG key"></a>配置GPG key</h2><p>首先使用<code>gpg --full-generate-key</code>命令并按图所示创建gpg密钥</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20240621183309.png"                      alt="20240621183309"                ></p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20240621183514.png"                      alt="20240621183514"                ></p><p>然后建议导出密钥用于备份</p><p><strong>私钥绝对不要泄露</strong></p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">导出私钥，邮箱替换成你的，private.gpg也可以按你的习惯命名</span></span><br><span class="line">gpg --export-secret-keys --armor 0@hackerbs.com &gt; private.gpg</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">导出公钥，邮箱替换成你的，public.gpg也可以按你的习惯命名</span></span><br><span class="line">gpg --export --armor 0@hackerbs.com &gt; public.gpg</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">查看所有gpg key信息</span></span><br><span class="line"> gpg --list-keys</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">我的输出如下</span></span><br><span class="line">/root/.gnupg/pubring.kbx</span><br><span class="line">------------------------</span><br><span class="line">pub   rsa4096 2024-06-21 [SC]</span><br><span class="line">      0380F37B181615738D90FF46C1763CF4CC699C74</span><br><span class="line">uid           [ultimate] hackerbs (hackerbs.com) &lt;0@hackerbs.com&gt;</span><br><span class="line">sub   rsa4096 2024-06-21 [E]</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中0380F37B181615738D90FF46C1763CF4CC699C74便是我的公钥，使用下面的命令进行导出</span></span><br><span class="line">gpg --export --armor 0380F37B181615738D90FF46C1763CF4CC699C74 &gt; hackerbs.asc</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">导出的公钥放到网站根目录以供下载</span></span><br><span class="line">mv hackerbs.asc /mypath/public</span><br></pre></td></tr></table></figure></div><p><em>因为apt-key被淘汰了，所以没有推荐用apt-key的方式，不过还是补充下</em></p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">将公钥上传到keyserver.ubuntu.com</span></span><br><span class="line">gpg --keyserver keyserver.ubuntu.com --send-key 630D583FFE07EDA9B9531E029CA58840D67352EE</span><br></pre></td></tr></table></figure></div><p>在<a class="link"   href="https://keyserver.ubuntu.com/" >https://keyserver.ubuntu.com/<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>输入邮箱地址即可查询到公钥</p><p><img                       lazyload                     src="/images/loading.svg"                     data-src="https://img.hackerbs.com/20240621190029.png"                      alt="20240621190029"                ></p><h2 id="客户端添加gpg密钥和源"><a href="#客户端添加gpg密钥和源" class="headerlink" title="客户端添加gpg密钥和源"></a>客户端添加gpg密钥和源</h2><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">以下是本站源的演示</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其中hackerbs.asc名称可以更改，如myname.asc，后缀要保留</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">后面的连接就是上方为什么需要将asc放到网站根目录</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">&amp;&amp;是表示执行成功后继续执行<span class="built_in">mv</span>将asc密钥放到/etc/apt/trusted.gpg.d/目录下</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">后面的添加到sources.list就不用再讲解了</span></span><br><span class="line">curl -o hackerbs.asc https://apt.ygeit.cn/hackerbs.asc &amp;&amp; mv hackerbs.asc /etc/apt/trusted.gpg.d/</span><br><span class="line">echo &quot;deb https://apt.ygeit.cn bookworm main&quot; &gt;&gt; /etc/apt/sources.list</span><br><span class="line">apt update</span><br></pre></td></tr></table></figure></div><h2 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h2><p>如果访问有问题，记得修改public的权限为755</p><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod -R 755 /mypath/apt/public</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/f589e55e.html</id>
    <link href="https://hackerbs.com/posts/f589e55e.html"/>
    <published>2024-06-21T09:13:04.000Z</published>
    <summary>
      <![CDATA[<h1 id="本文将介绍如何搭建一个像docker-ce一样具有GPG-key验证的源"><a href="#本文将介绍如何搭建一个像docker-ce一样具有GPG-key验证的源" class="headerlink" title="本文将介绍如何搭建一个像docker-ce一样具有GPG key验证的源"></a>本文将介绍如何搭建一个像docker-ce一样具有GPG key验证的源</h1><p>普通的用<code>deb [trusted=yes] http://url/ bookworm main</code>添加的源在内网环境用还行，但若是在公网，就会存在没有验证，被篡改的风险，且具有GPG key验证的源也更专业</p>]]>
    </summary>
    <title>如何搭建具有GPGkey验证的可信任apt源</title>
    <updated>2026-09-23T13:04:04.110Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="容器" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AE%B9%E5%99%A8/"/>
    <category term="docker" scheme="https://hackerbs.com/tags/docker/"/>
    <category term="nextcloud" scheme="https://hackerbs.com/tags/nextcloud/"/>
    <category term="docker compose" scheme="https://hackerbs.com/tags/docker-compose/"/>
    <category term="mariadb" scheme="https://hackerbs.com/tags/mariadb/"/>
    <category term="redis" scheme="https://hackerbs.com/tags/redis/"/>
    <content>
      <![CDATA[<h1 id="使用docker-compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法"><a href="#使用docker-compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法" class="headerlink" title="使用docker compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法"></a>使用docker compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法</h1><p><strong>安装docker的教程在apt等各种源列表（持续更新），docker hub被禁，处理的办法在国内docker hub无法使用的解决办法</strong></p><p>新的docker已经自带<code>docker compose</code>命令了，所以不需要再安装<code>docker-compose</code>，且需注意是<code>docker空格compose</code>而不是以前的<code>-</code></p><h2 id="docker-compose基础命令如下："><a href="#docker-compose基础命令如下：" class="headerlink" title="docker compose基础命令如下："></a>docker compose基础命令如下：</h2><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">指定配置文件并后台启动</span></span><br><span class="line">docker compose -f 指定配置文件.yaml up -d</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">停止容器并删除容器</span></span><br><span class="line">docker compose -f 指定配置文件.yaml down</span><br></pre></td></tr></table></figure></div><h2 id="nextcloud-yaml配置文件如下"><a href="#nextcloud-yaml配置文件如下" class="headerlink" title="nextcloud.yaml配置文件如下"></a>nextcloud.yaml配置文件如下</h2><div class="code-container" data-rel="Yaml"><figure class="iseeu highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mariadb:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">nextcloud-db</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">MYSQL_ROOT_PASSWORD:</span> <span class="string">设置你的数据库root密码</span></span><br><span class="line">      <span class="attr">MYSQL_DATABASE:</span> <span class="string">设置你的数据库名</span></span><br><span class="line">      <span class="attr">MYSQL_USER:</span> <span class="string">设置你的数据库用户名</span></span><br><span class="line">      <span class="attr">MYSQL_PASSWORD:</span> <span class="string">设置你的数据库用户密码</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/mnt/nextcloud/db:/var/lib/mysql</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">你的物理机路径:/var/lib/mysql</span> <span class="comment"># 这条是示例，该配置的作用是让数据库的所有文件持久存储到本地的该目录</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">redis:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">redis:alpine</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">nextcloud-redis</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">app:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">nextcloud:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">nextcloud-app</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">80</span><span class="string">:80</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">MYSQL_HOST:</span> <span class="string">db</span></span><br><span class="line">      <span class="attr">MYSQL_DATABASE:</span> <span class="string">你的数据库名</span></span><br><span class="line">      <span class="attr">MYSQL_USER:</span> <span class="string">你的数据库用户名</span></span><br><span class="line">      <span class="attr">MYSQL_PASSWORD:</span> <span class="string">你的数据库用户密码</span></span><br><span class="line">      <span class="attr">REDIS_HOST:</span> <span class="string">redis</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/mnt/nextcloud/data:/var/www/html</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">你的服务器路径:/var/www/html</span> <span class="comment"># 这条是示例，该配置的作用是让nextcloud的所有文件持久存储到本地的该目录</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">db</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">redis</span></span><br></pre></td></tr></table></figure></div><h2 id="crontab自动执行"><a href="#crontab自动执行" class="headerlink" title="crontab自动执行"></a>crontab自动执行</h2><div class="code-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">每5分钟执行一次cron</span></span><br><span class="line">*/5  *  *  *  * docker exec -u www-data nextcloud-app php -f /var/www/html/cron.php</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">每天0点down掉容器然后拉取nextcloud的更新，再启动，然后执行命令行更新</span></span><br><span class="line">0 0 * * * docker compose -f /mnt/docker-compose.yaml down &amp;&amp; docker pull nextcloud &amp;&amp; docker compose -f /mnt/docker-compose.yaml up -d &amp;&amp; docker exec -it -u 33 nextcloud-app php occ upgrade</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/c57982aa.html</id>
    <link href="https://hackerbs.com/posts/c57982aa.html"/>
    <published>2024-06-13T08:45:32.000Z</published>
    <summary>
      <![CDATA[<h1 id="使用docker-compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法"><a href="#使用docker-compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法" class="headerlink" title="使用docker compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法"></a>使用docker compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法</h1><p><strong>安装docker的教程在apt等各种源列表（持续更新），docker hub被禁，处理的办法在国内docker hub无法使用的解决办法</strong></p>]]>
    </summary>
    <title>记录用docker部署nextcloud及配套mariadb、redis和持久化存储</title>
    <updated>2026-09-23T13:04:04.169Z</updated>
  </entry>
  <entry>
    <author>
      <name>Labib</name>
    </author>
    <category term="知识库" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/"/>
    <category term="安全" scheme="https://hackerbs.com/categories/%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%AE%89%E5%85%A8/"/>
    <category term="debian" scheme="https://hackerbs.com/tags/debian/"/>
    <category term="v2ray" scheme="https://hackerbs.com/tags/v2ray/"/>
    <category term="v2ray客户端" scheme="https://hackerbs.com/tags/v2ray%E5%AE%A2%E6%88%B7%E7%AB%AF/"/>
    <category term="config.json" scheme="https://hackerbs.com/tags/config-json/"/>
    <content>
      <![CDATA[<h1 id="配置内容如下"><a href="#配置内容如下" class="headerlink" title="配置内容如下"></a>配置内容如下</h1><p><code>vim /etc/v2ray/config.json</code></p><div class="code-container" data-rel="Json"><figure class="iseeu highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;log&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;access&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;error&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;loglevel&quot;</span><span class="punctuation">:</span> <span class="string">&quot;warning&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;socks&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">10808</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;127.0.0.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;socks&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniffing&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;destOverride&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;http&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;tls&quot;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;routeOnly&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;auth&quot;</span><span class="punctuation">:</span> <span class="string">&quot;noauth&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;udp&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;allowTransparent&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;shadowsocks&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;servers&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;你的服务器地址&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;method&quot;</span><span class="punctuation">:</span> <span class="string">&quot;加密方式&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;ota&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;password&quot;</span><span class="punctuation">:</span> <span class="string">&quot;你的密码&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> 服务器端口<span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;level&quot;</span><span class="punctuation">:</span> <span class="number">1</span></span><br><span class="line">          <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;mux&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;concurrency&quot;</span><span class="punctuation">:</span> <span class="number">-1</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;freedom&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span><span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;blackhole&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;response&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;http&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://hackerbs.com/posts/c95984cf.html</id>
    <link href="https://hackerbs.com/posts/c95984cf.html"/>
    <published>2024-06-13T08:41:09.000Z</published>
    <summary>
      <![CDATA[<h1 id="配置内容如下"><a href="#配置内容如下" class="headerlink" title="配置内容如下"></a>配置内容如下</h1><p><code>vim /etc/v2ray/config.json</code></p>]]>
    </summary>
    <title>记录一下我的Debian配置v2ray config.json</title>
    <updated>2026-09-23T13:04:04.168Z</updated>
  </entry>
</feed>
