<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>IO优化 on 吾爱主机</title><link>https://blog.waihost.com/tags/io%E4%BC%98%E5%8C%96/</link><description>Recent content in IO优化 on 吾爱主机</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Wed, 04 Jun 2025 10:22:04 +0800</lastBuildDate><atom:link href="https://blog.waihost.com/tags/io%E4%BC%98%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>测试bcache优化IO是否生效</title><link>https://blog.waihost.com/posts/bcache-io-benchmark-test/</link><pubDate>Wed, 04 Jun 2025 10:22:04 +0800</pubDate><guid>https://blog.waihost.com/posts/bcache-io-benchmark-test/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/bcache-io-benchmark-test.svg" alt="Featured image of post 测试bcache优化IO是否生效" /&gt;&lt;p&gt;在配置了 &lt;code&gt;bcache&lt;/code&gt; 之后，测试 IO 速度是否有效提升是一个很好的步骤。这通常涉及到对比缓存生效和未生效（或直接访问后端存储）时的性能差异。由于 &lt;code&gt;bcache&lt;/code&gt; 是一个透明的缓存层，精确地“关闭”缓存来做对比测试比较复杂，但我们可以通过特定测试方法来观察缓存的效果。&lt;/p&gt;
&lt;p&gt;最推荐的测试工具是 &lt;code&gt;fio&lt;/code&gt; (Flexible I/O Tester)，它非常强大且可配置。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="1-安装-fio-如果尚未安装"&gt;&lt;a href="#1-%e5%ae%89%e8%a3%85-fio-%e5%a6%82%e6%9e%9c%e5%b0%9a%e6%9c%aa%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;1. 安装 &lt;code&gt;fio&lt;/code&gt; (如果尚未安装)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于 Debian/Ubuntu 系统:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install fio
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于 CentOS/RHEL/Fedora 系统:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install fio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 或者
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# sudo dnf install fio
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="2-测试缓存效果的关键概念"&gt;&lt;a href="#2-%e6%b5%8b%e8%af%95%e7%bc%93%e5%ad%98%e6%95%88%e6%9e%9c%e7%9a%84%e5%85%b3%e9%94%ae%e6%a6%82%e5%bf%b5" class="header-anchor"&gt;&lt;/a&gt;2. 测试缓存效果的关键概念
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;预热缓存 (Warm-up)&lt;/strong&gt;: 对于读缓存，第一次读取数据块时，数据会从慢速的后端 HDD (&lt;code&gt;md10&lt;/code&gt;) 加载到快速的 SSD 缓存 (&lt;code&gt;md4&lt;/code&gt;) 中。后续对相同数据块的读取请求应该直接由 SSD 缓存提供服务，速度会快得多。因此，测试前通常需要一个“预热”阶段。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;测试文件大小&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试缓存读取性能时，测试文件应小于 SSD 缓存 (&lt;code&gt;md4&lt;/code&gt; 大小为 825.1G) 但又要足够大以避免完全被系统内存缓存。例如，一个 20GB-100GB 的文件。&lt;/li&gt;
&lt;li&gt;如果要测试超出缓存能力的情况，文件大小应远大于 SSD 缓存。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;fio&lt;/code&gt; 的 &lt;code&gt;direct=1&lt;/code&gt; 选项&lt;/strong&gt;: 这个选项会使 &lt;code&gt;fio&lt;/code&gt; 绕过操作系统的页缓存 (page cache)，直接对存储设备进行 IO 操作。这对于测试 &lt;code&gt;bcache&lt;/code&gt; 自身的性能非常有用，可以减少系统内存缓存带来的干扰。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;监控 &lt;code&gt;bcache&lt;/code&gt; 统计信息&lt;/strong&gt;: 在测试期间，监控 &lt;code&gt;bcache&lt;/code&gt; 的命中率等统计数据可以帮助了解缓存是否在按预期工作。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 打开一个新的终端窗口来监控
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;watch -n 1 &amp;#39;echo &amp;#34;== Cache Stats ==&amp;#34;; cat /sys/block/bcache0/bcache/stats_total/cache_hits /sys/block/bcache0/bcache/stats_total/cache_misses /sys/block/bcache0/bcache/stats_total/cache_bypass_hits /sys/block/bcache0/bcache/stats_total/cache_bypass_misses; echo &amp;#34;&amp;#34;; echo &amp;#34;== Other Stats ==&amp;#34;; echo -n &amp;#34;Dirty Data: &amp;#34;; cat /sys/block/bcache0/bcache/dirty_data; echo -n &amp;#34;State: &amp;#34;; cat /sys/block/bcache0/bcache/state; echo -n &amp;#34;Writeback Rate: &amp;#34;; cat /sys/block/bcache0/bcache/writeback_rate; echo -n &amp;#34;Cache Mode: &amp;#34;; cat /sys/block/bcache0/bcache/cache_mode&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="3-使用-fio-进行性能测试"&gt;&lt;a href="#3-%e4%bd%bf%e7%94%a8-fio-%e8%bf%9b%e8%a1%8c%e6%80%a7%e8%83%bd%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;3. 使用 &lt;code&gt;fio&lt;/code&gt; 进行性能测试
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;请将测试命令中的 &lt;code&gt;/mnt/cached_storage/testfile&lt;/code&gt; 替换为您 &lt;code&gt;bcache&lt;/code&gt; 设备的实际挂载点和您选择的测试文件名。&lt;/li&gt;
&lt;li&gt;测试会产生大文件，测试完成后记得删除 (&lt;code&gt;sudo rm /mnt/cached_storage/testfile*&lt;/code&gt;)。&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;fio&lt;/code&gt; 命令通常不需要 &lt;code&gt;sudo&lt;/code&gt;，除非您写入的目录需要特定权限，或者您要操作原始块设备（不推荐初学者直接操作块设备进行基准测试）。这里我们测试的是挂载的文件系统。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="a-顺序读取性能-测试缓存效果"&gt;&lt;a href="#a-%e9%a1%ba%e5%ba%8f%e8%af%bb%e5%8f%96%e6%80%a7%e8%83%bd-%e6%b5%8b%e8%af%95%e7%bc%93%e5%ad%98%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;A. 顺序读取性能 (测试缓存效果)
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建并预热测试文件&lt;/strong&gt;:&lt;br&gt;
首先，创建一个较大的测试文件。这个过程也会将文件数据写入缓存（取决于您的写入模式和可用缓存空间）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=prepare_seq_read_file --rw=write --bs=1M --filename=/mnt/cached_storage/testfile_seq_read --size=50G --direct=1 --group_reporting
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个命令会创建一个 50GB 的文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;第一次读取 (可能部分来自 HDD，同时填充缓存)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=seq_read_warmup --rw=read --bs=1M --filename=/mnt/cached_storage/testfile_seq_read --size=50G --direct=1 --group_reporting --iodepth=32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(可选) 清理系统页缓存&lt;/strong&gt;: 确保后续读取不是来自内存。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sync #确保所有挂起的写操作完成
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo 3 | sudo tee /proc/sys/vm/drop_caches
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;第二次读取 (应主要来自 SSD 缓存)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=seq_read_cached --rw=read --bs=1M --filename=/mnt/cached_storage/testfile_seq_read --size=50G --direct=1 --group_reporting --iodepth=32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;比较第二次读取的吞吐量 (BW 项，通常单位是 MB/s 或 GB/s)。如果缓存有效，这个速度应该接近您的 &lt;code&gt;md4&lt;/code&gt; (NVMe SSD RAID0) 的读取速度。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="b-随机读取性能-测试缓存效果"&gt;&lt;a href="#b-%e9%9a%8f%e6%9c%ba%e8%af%bb%e5%8f%96%e6%80%a7%e8%83%bd-%e6%b5%8b%e8%af%95%e7%bc%93%e5%ad%98%e6%95%88%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;B. 随机读取性能 (测试缓存效果)
&lt;/h4&gt;&lt;p&gt;随机读取是 SSD 缓存能带来显著提升的典型场景。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建并预热测试文件&lt;/strong&gt; (如果尚未使用上一步的文件，或者需要一个专门的随机读文件):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=prepare_rand_read_file --rw=write --bs=4k --filename=/mnt/cached_storage/testfile_rand_read --size=50G --direct=1 --group_reporting
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;第一次随机读取 (预热)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=rand_read_warmup --rw=randread --bs=4k --filename=/mnt/cached_storage/testfile_rand_read --size=50G --direct=1 --numjobs=4 --group_reporting --iodepth=64 --runtime=120s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里使用 &lt;code&gt;--runtime&lt;/code&gt; 来限制测试时间，因为完整读取50GB的4k随机块会非常慢。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(可选) 清理系统页缓存&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo 3 | sudo tee /proc/sys/vm/drop_caches
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;第二次随机读取 (应主要来自 SSD 缓存)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=rand_read_cached --rw=randread --bs=4k --filename=/mnt/cached_storage/testfile_rand_read --size=50G --direct=1 --numjobs=4 --group_reporting --iodepth=64 --runtime=120s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关注 IOPS (每秒操作次数) 和吞吐量 (BW)。SSD 缓存应该能提供远高于 HDD 的随机读取 IOPS。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="c-写入性能"&gt;&lt;a href="#c-%e5%86%99%e5%85%a5%e6%80%a7%e8%83%bd" class="header-anchor"&gt;&lt;/a&gt;C. 写入性能
&lt;/h4&gt;&lt;p&gt;写入性能很大程度上取决于您 &lt;code&gt;bcache&lt;/code&gt; 的缓存模式 (&lt;code&gt;writethrough&lt;/code&gt;, &lt;code&gt;writeback&lt;/code&gt;, &lt;code&gt;writearound&lt;/code&gt;)。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如果是 &lt;code&gt;writeback&lt;/code&gt; 模式&lt;/strong&gt;: 写入操作首先进入 SSD 缓存，速度应该很快，接近 &lt;code&gt;md4&lt;/code&gt; 的写入速度，直到缓存变满或开始强制回写。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=seq_write_test_wb --rw=write --bs=1M --filename=/mnt/cached_storage/testfile_seq_write --size=50G --direct=1 --group_reporting --iodepth=32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如果是 &lt;code&gt;writethrough&lt;/code&gt; 模式&lt;/strong&gt;: 写入操作需要同时写入 SSD 和 HDD，所以持续写入速度可能更接近较慢的 HDD (&lt;code&gt;md10&lt;/code&gt;)，但对于突发写入和小文件写入，SSD 仍能起到加速作用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fio --name=seq_write_test_wt --rw=write --bs=1M --filename=/mnt/cached_storage/testfile_seq_write --size=50G --direct=1 --group_reporting --iodepth=32
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="4-简单-dd-测试-快速检查但不全面"&gt;&lt;a href="#4-%e7%ae%80%e5%8d%95-dd-%e6%b5%8b%e8%af%95-%e5%bf%ab%e9%80%9f%e6%a3%80%e6%9f%a5%e4%bd%86%e4%b8%8d%e5%85%a8%e9%9d%a2" class="header-anchor"&gt;&lt;/a&gt;4. 简单 &lt;code&gt;dd&lt;/code&gt; 测试 (快速检查，但不全面)
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;dd&lt;/code&gt; 可以用于非常简单的顺序读写测试，但其结果可能受多种因素影响，不如 &lt;code&gt;fio&lt;/code&gt; 精确。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;测试写 (结果受缓存模式影响)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 创建一个10GB的文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dd if=/dev/zero of=/mnt/cached_storage/dd_testfile bs=1M count=10000 status=progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;测试读 (第一次，预热)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dd if=/mnt/cached_storage/dd_testfile of=/dev/null bs=1M status=progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;清理系统页缓存&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo 3 | sudo tee /proc/sys/vm/drop_caches
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;测试读 (第二次，应从缓存)&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dd if=/mnt/cached_storage/dd_testfile of=/dev/null bs=1M status=progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="5-如何解读结果"&gt;&lt;a href="#5-%e5%a6%82%e4%bd%95%e8%a7%a3%e8%af%bb%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;5. 如何解读结果
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;对比基线&lt;/strong&gt;: 您可能对您 HDD (&lt;code&gt;sda&lt;/code&gt;, &lt;code&gt;sdb&lt;/code&gt; 组成的 &lt;code&gt;md10&lt;/code&gt;) 单独的性能有一个大概的了解 (例如，顺序读写可能在 200-300MB/s，随机 IOPS 较低)。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSD 缓存效果&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;读取&lt;/strong&gt;: 经过预热后，对已缓存数据的读取速度应该接近您的 &lt;code&gt;md4&lt;/code&gt; (NVMe SSD RAID0) 的性能。NVMe RAID0 的顺序读取速度可能达到数 GB/s，随机 IOPS 非常高。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写入 (&lt;code&gt;writeback&lt;/code&gt; 模式)&lt;/strong&gt;: 写入速度也应该接近 &lt;code&gt;md4&lt;/code&gt; 的写入性能，直到缓存写满。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;监控 &lt;code&gt;bcache&lt;/code&gt; 统计&lt;/strong&gt;: 如果测试时 &lt;code&gt;cache_hits&lt;/code&gt; 远大于 &lt;code&gt;cache_misses&lt;/code&gt;，说明缓存正在有效地服务请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="6-清理测试文件"&gt;&lt;a href="#6-%e6%b8%85%e7%90%86%e6%b5%8b%e8%af%95%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;6. 清理测试文件
&lt;/h3&gt;&lt;p&gt;测试完成后，记得删除创建的大型测试文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /mnt/cached_storage/testfile*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /mnt/cached_storage/dd_testfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过这些测试，您应该能够量化 &lt;code&gt;bcache&lt;/code&gt; 配置带来的性能提升，特别是在读取热数据和随机 IO 方面。&lt;/p&gt;</description></item><item><title>使用bcache方法使SSD做HDD缓存优化IO速度</title><link>https://blog.waihost.com/posts/bcache-ssd-hdd-cache/</link><pubDate>Wed, 04 Jun 2025 10:12:12 +0800</pubDate><guid>https://blog.waihost.com/posts/bcache-ssd-hdd-cache/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/bcache-ssd-hdd-cache.svg" alt="Featured image of post 使用bcache方法使SSD做HDD缓存优化IO速度" /&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;🎯 教程目标&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;sda&lt;/code&gt; 和 &lt;code&gt;sdb&lt;/code&gt; 硬盘上创建一个名为 &lt;code&gt;md10&lt;/code&gt; 的 RAID0 阵列。&lt;/li&gt;
&lt;li&gt;使用现有的 NVMe SSD RAID0 阵列 &lt;code&gt;md4&lt;/code&gt; 作为 &lt;code&gt;md10&lt;/code&gt; 的高速缓存（使用 &lt;code&gt;bcache&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;确保配置在系统重启后依然有效。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;⚠️ 重要警告与准备事项&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;‼️ 数据备份 ‼️&lt;/strong&gt;: 此教程中的操作将&lt;strong&gt;清除 &lt;code&gt;sda&lt;/code&gt;、&lt;code&gt;sdb&lt;/code&gt; 上的所有数据&lt;/strong&gt;，并且 &lt;code&gt;md4&lt;/code&gt; 设备也将被重新格式化作为缓存，其上的现有数据（如果有的话）也会丢失。&lt;strong&gt;在开始任何操作之前，请务必备份所有重要数据！&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAID0 风险&lt;/strong&gt;: 您将为 &lt;code&gt;md10&lt;/code&gt; 配置 RAID0。RAID0 可以提升性能和容量，但&lt;strong&gt;没有任何数据冗余&lt;/strong&gt;。如果 &lt;code&gt;sda&lt;/code&gt; 或 &lt;code&gt;sdb&lt;/code&gt; 中任何一个硬盘损坏，&lt;code&gt;md10&lt;/code&gt; 上的所有数据都将永久丢失。请确认您已了解并接受此风险。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;所需工具&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mdadm&lt;/code&gt;: 用于管理 RAID 设备 (您的系统既然已经有 &lt;code&gt;md2&lt;/code&gt;, &lt;code&gt;md3&lt;/code&gt;, &lt;code&gt;md4&lt;/code&gt;，那么 &lt;code&gt;mdadm&lt;/code&gt; 应该已经安装)。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bcache-tools&lt;/code&gt;: 用于配置 &lt;code&gt;bcache&lt;/code&gt;。如果未安装，后续步骤会提示安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设备确认&lt;/strong&gt;: 根据您之前的 &lt;code&gt;lsblk&lt;/code&gt; 输出：
&lt;ul&gt;
&lt;li&gt;HDD 硬盘: &lt;code&gt;/dev/sda&lt;/code&gt;, &lt;code&gt;/dev/sdb&lt;/code&gt; (每个 3.6T)&lt;/li&gt;
&lt;li&gt;NVMe SSD RAID0 缓存设备: &lt;code&gt;/dev/md4&lt;/code&gt; (825.1G, 由 &lt;code&gt;nvme0n1p4&lt;/code&gt; 和 &lt;code&gt;nvme1n1p4&lt;/code&gt; 组成)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;🛠️ 操作步骤&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="第-1-步准备-hdd-硬盘-sda-sdb"&gt;&lt;a href="#%e7%ac%ac-1-%e6%ad%a5%e5%87%86%e5%a4%87-hdd-%e7%a1%ac%e7%9b%98-sda-sdb" class="header-anchor"&gt;&lt;/a&gt;第 1 步：准备 HDD 硬盘 (&lt;code&gt;sda&lt;/code&gt;, &lt;code&gt;sdb&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;为确保没有旧的元数据干扰，我们将清除 &lt;code&gt;sda&lt;/code&gt; 和 &lt;code&gt;sdb&lt;/code&gt; 上的文件系统和分区表签名。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wipefs -a /dev/sda
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wipefs -a /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果您之前已对这两个硬盘执行了彻底的 &lt;code&gt;dd&lt;/code&gt; 清零操作，此步骤可以酌情跳过，但执行通常更安全。&lt;/p&gt;
&lt;h3 id="第-2-步创建-hdd-raid0-阵列-md10"&gt;&lt;a href="#%e7%ac%ac-2-%e6%ad%a5%e5%88%9b%e5%bb%ba-hdd-raid0-%e9%98%b5%e5%88%97-md10" class="header-anchor"&gt;&lt;/a&gt;第 2 步：创建 HDD RAID0 阵列 (&lt;code&gt;md10&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;使用 &lt;code&gt;mdadm&lt;/code&gt; 将 &lt;code&gt;/dev/sda&lt;/code&gt; 和 &lt;code&gt;/dev/sdb&lt;/code&gt; 组建成一个名为 &lt;code&gt;/dev/md10&lt;/code&gt; 的 RAID0 阵列。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mdadm --create /dev/md10 --level=0 --raid-devices=2 /dev/sda /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--create /dev/md10&lt;/code&gt;: 创建名为 &lt;code&gt;md10&lt;/code&gt; 的新阵列。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--level=0&lt;/code&gt;: 设置 RAID 级别为 0 (条带化)。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--raid-devices=2&lt;/code&gt;: 指定阵列中有 2 个物理设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;创建完成后，检查其状态：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /proc/mdstat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;等待 &lt;code&gt;md10&lt;/code&gt; 阵列的状态显示为 &lt;code&gt;active&lt;/code&gt;，并且同步完成（对于 RAID0，这通常很快）。&lt;/p&gt;
&lt;h3 id="第-3-步准备缓存设备-md4"&gt;&lt;a href="#%e7%ac%ac-3-%e6%ad%a5%e5%87%86%e5%a4%87%e7%bc%93%e5%ad%98%e8%ae%be%e5%a4%87-md4" class="header-anchor"&gt;&lt;/a&gt;第 3 步：准备缓存设备 (&lt;code&gt;md4&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;md4&lt;/code&gt; 是您用作缓存的 NVMe SSD RAID0 阵列。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;确保 &lt;code&gt;md4&lt;/code&gt; 未被使用&lt;/strong&gt;: 根据您之前的 &lt;code&gt;lsblk&lt;/code&gt; 输出，&lt;code&gt;md4&lt;/code&gt; 没有挂载点，这很适合。如果它被挂载了，您需要先卸载它 (&lt;code&gt;sudo umount /mount/point/of/md4&lt;/code&gt;)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;清除 &lt;code&gt;md4&lt;/code&gt; 上的任何旧文件系统签名&lt;/strong&gt; (以防万一):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wipefs -a /dev/md4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-4-步配置-bcache"&gt;&lt;a href="#%e7%ac%ac-4-%e6%ad%a5%e9%85%8d%e7%bd%ae-bcache" class="header-anchor"&gt;&lt;/a&gt;第 4 步：配置 &lt;code&gt;bcache&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;现在我们将 &lt;code&gt;/dev/md10&lt;/code&gt; 设置为 bcache 的后端存储设备，&lt;code&gt;/dev/md4&lt;/code&gt; 设置为缓存设备。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装 &lt;code&gt;bcache-tools&lt;/code&gt;&lt;/strong&gt; (如果尚未安装):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于 Debian/Ubuntu 系统:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;bcache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于 CentOS/RHEL/Fedora 系统:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;yum&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;bcache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或者&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# sudo dnf install bcache-tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;确保 &lt;code&gt;bcache&lt;/code&gt; 内核模块已加载&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsmod | grep bcache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果没有任何输出，请加载它:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo modprobe bcache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;将后端设备 (&lt;code&gt;/dev/md10&lt;/code&gt;) 格式化为 bcache 后端&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make-bcache -B /dev/md10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果提示设备忙 (&lt;code&gt;device or resource busy&lt;/code&gt;)，请确保没有进程正在使用 &lt;code&gt;/dev/md10&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;将缓存设备 (&lt;code&gt;/dev/md4&lt;/code&gt;) 格式化为 bcache 缓存设备&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make-bcache -C /dev/md4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行此命令后，会输出一个 &lt;strong&gt;&lt;code&gt;Cset UUID&lt;/code&gt;&lt;/strong&gt; (缓存集UUID)。&lt;strong&gt;请务必复制并保存好这个UUID&lt;/strong&gt;，下一步会用到它。&lt;br&gt;
格式通常是这样的: &lt;code&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;将后端设备 (&lt;code&gt;/dev/md10&lt;/code&gt;) 附加到缓存集&lt;/strong&gt;:&lt;br&gt;
使用上一步获得的 &lt;code&gt;Cset UUID&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 将 YOUR_CSET_UUID 替换为您从 make-bcache -C /dev/md4 获得的实际 Cset UUID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo YOUR_CSET_UUID | sudo tee /sys/block/md10/bcache/attach &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: 您之前遇到的 &lt;code&gt;tee: /sys/fs/bcache/register: Invalid argument&lt;/code&gt; 错误，通常是因为在 &lt;code&gt;make-bcache -C&lt;/code&gt; 成功后，设备已为 bcache 所知，不需要再通过 &lt;code&gt;echo /dev/md4 &amp;gt; /sys/fs/bcache/register&lt;/code&gt; 手动注册。如果上述 &lt;code&gt;attach&lt;/code&gt; 命令失败，请检查 &lt;code&gt;dmesg | tail&lt;/code&gt; 的输出获取更多信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;验证 bcache 设备创建&lt;/strong&gt;:&lt;br&gt;
成功附加后，系统应该会创建一个新的块设备，通常命名为 &lt;code&gt;/dev/bcache0&lt;/code&gt; (如果是系统中的第一个 bcache 设备)。您可以用以下命令查看：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /dev/bcache*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsblk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;您应该能在 &lt;code&gt;lsblk&lt;/code&gt; 的输出中看到 &lt;code&gt;/dev/bcache0&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-5-步在-bcache-设备上创建文件系统并挂载"&gt;&lt;a href="#%e7%ac%ac-5-%e6%ad%a5%e5%9c%a8-bcache-%e8%ae%be%e5%a4%87%e4%b8%8a%e5%88%9b%e5%bb%ba%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e5%b9%b6%e6%8c%82%e8%bd%bd" class="header-anchor"&gt;&lt;/a&gt;第 5 步：在 &lt;code&gt;bcache&lt;/code&gt; 设备上创建文件系统并挂载
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在 &lt;code&gt;/dev/bcache0&lt;/code&gt; 上创建文件系统&lt;/strong&gt;:&lt;br&gt;
您可以选择 ext4, xfs 等常见的文件系统。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 以 ext4 为例
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkfs.ext4 /dev/bcache0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 或者，如果您更喜欢 xfs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# sudo mkfs.xfs /dev/bcache0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;创建挂载点并挂载&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir /mnt/cached_storage
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mount /dev/bcache0 /mnt/cached_storage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在，您可以通过 &lt;code&gt;/mnt/cached_storage&lt;/code&gt; 目录访问由 SSD 缓存加速的 HDD RAID0 存储了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-6-步确保配置在重启后持久有效"&gt;&lt;a href="#%e7%ac%ac-6-%e6%ad%a5%e7%a1%ae%e4%bf%9d%e9%85%8d%e7%bd%ae%e5%9c%a8%e9%87%8d%e5%90%af%e5%90%8e%e6%8c%81%e4%b9%85%e6%9c%89%e6%95%88" class="header-anchor"&gt;&lt;/a&gt;第 6 步：确保配置在重启后持久有效
&lt;/h3&gt;&lt;p&gt;为了让系统重启后能自动组装 RAID 阵列并挂载 bcache 设备，需要进行以下配置：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;mdadm&lt;/code&gt; RAID 阵列的持久化 (&lt;code&gt;md10&lt;/code&gt; 及现有阵列)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;将当前所有活动的 &lt;code&gt;md&lt;/code&gt; 阵列配置保存到 &lt;code&gt;mdadm&lt;/code&gt; 配置文件中。这将确保 &lt;code&gt;md2&lt;/code&gt;, &lt;code&gt;md3&lt;/code&gt;, &lt;code&gt;md4&lt;/code&gt; 和新创建的 &lt;code&gt;md10&lt;/code&gt; 都能在启动时被识别。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: &lt;code&gt;tee -a&lt;/code&gt; 是追加模式。执行后，您可以检查 &lt;code&gt;/etc/mdadm/mdadm.conf&lt;/code&gt; 文件，确保所有阵列信息都在里面，并且没有不必要的、完全相同的重复行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新 initramfs&lt;/strong&gt; (非常重要，以便在早期启动阶段就能组装 RAID):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo update-initramfs -u
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(在某些发行版如 CentOS/RHEL/Fedora 上，命令可能是 &lt;code&gt;sudo dracut -f&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;bcache&lt;/code&gt; 设备的持久化&lt;/strong&gt;:&lt;br&gt;
&lt;code&gt;bcache&lt;/code&gt; 本身通过在后端和缓存设备上写入的元数据来确保重启后的自动重组。只要 &lt;code&gt;md10&lt;/code&gt; 和 &lt;code&gt;md4&lt;/code&gt; 能在启动时正确组装，&lt;code&gt;bcache&lt;/code&gt; 模块通常会自动发现并激活 &lt;code&gt;/dev/bcache0&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;配置 &lt;code&gt;/etc/fstab&lt;/code&gt; 实现自动挂载&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;首先，获取 &lt;code&gt;/dev/bcache0&lt;/code&gt; 设备的 UUID：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo blkid /dev/bcache0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;复制输出中的 &lt;code&gt;UUID=&amp;quot;&amp;lt;实际的BCACHE设备UUID&amp;gt;&amp;quot;&lt;/code&gt; 部分。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/fstab&lt;/code&gt; 文件 (例如使用 &lt;code&gt;sudo nano /etc/fstab&lt;/code&gt;)，添加如下一行 (请将 &lt;code&gt;UUID&lt;/code&gt; 替换为您查到的实际 UUID，并根据您创建的文件系统类型修改 &lt;code&gt;ext4&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;UUID=&amp;lt;实际的BCACHE设备UUID&amp;gt; /mnt/cached_storage ext4 defaults,discard,nofail 0 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里的选项说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;defaults&lt;/code&gt;: 使用默认挂载选项。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;discard&lt;/code&gt;: (推荐用于SSD支持的存储) 启用 TRIM/DISCARD 操作。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nofail&lt;/code&gt;: (推荐) 如果此设备在启动时由于某些原因无法挂载，系统仍将继续启动，而不会卡住。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0 2&lt;/code&gt;: dump 和 fsck 选项，对于非根分区通常设置为 &lt;code&gt;0 2&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="第-7-步可选-调整-bcache-缓存模式"&gt;&lt;a href="#%e7%ac%ac-7-%e6%ad%a5%e5%8f%af%e9%80%89-%e8%b0%83%e6%95%b4-bcache-%e7%bc%93%e5%ad%98%e6%a8%a1%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;第 7 步：(可选) 调整 &lt;code&gt;bcache&lt;/code&gt; 缓存模式
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;bcache&lt;/code&gt; 支持多种缓存模式，默认为 &lt;code&gt;writethrough&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;writethrough&lt;/code&gt;: 写操作同时写入缓存和后端设备。数据相对安全，但写性能提升可能不如 &lt;code&gt;writeback&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writeback&lt;/code&gt;: 写操作首先写入缓存，然后异步写入后端设备。写入性能通常更高，但在突然断电时，缓存中尚未同步到后端的数据可能会丢失 (除非您有可靠的UPS电源)。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writearound&lt;/code&gt;: 写操作直接写入后端设备，绕过缓存。只有读操作会填充缓存。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看当前缓存模式&lt;/strong&gt;: (假设您的 bcache 设备是 &lt;code&gt;/dev/bcache0&lt;/code&gt;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /sys/block/bcache0/bcache/cache_mode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;您会看到类似 &lt;code&gt;[writethrough] writeback writearound none&lt;/code&gt; 的输出，方括号中的是当前模式。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改缓存模式&lt;/strong&gt; (例如，改为 &lt;code&gt;writeback&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo writeback | sudo tee /sys/block/bcache0/bcache/cache_mode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;: 选择 &lt;code&gt;writeback&lt;/code&gt; 模式前，请务必了解其潜在的数据丢失风险。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此更改通常在重启后也会保持。&lt;/p&gt;
&lt;h3 id="第-8-步重启并验证"&gt;&lt;a href="#%e7%ac%ac-8-%e6%ad%a5%e9%87%8d%e5%90%af%e5%b9%b6%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;第 8 步：重启并验证
&lt;/h3&gt;&lt;p&gt;在完成以上所有步骤后，建议重启系统以测试配置的持久性。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;系统重启后，进行以下检查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查 &lt;code&gt;mdadm&lt;/code&gt; 阵列状态&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /proc/mdstat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;确保 &lt;code&gt;md2&lt;/code&gt;, &lt;code&gt;md3&lt;/code&gt;, &lt;code&gt;md4&lt;/code&gt;, &lt;code&gt;md10&lt;/code&gt; 都处于 &lt;code&gt;active&lt;/code&gt; 状态。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查块设备结构&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsblk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;您应该能看到 &lt;code&gt;sda&lt;/code&gt; 和 &lt;code&gt;sdb&lt;/code&gt; 组成了 &lt;code&gt;md10&lt;/code&gt;，&lt;code&gt;nvmeXnYpZ&lt;/code&gt; 组成了 &lt;code&gt;md4&lt;/code&gt;，并且 &lt;code&gt;md10&lt;/code&gt; 和 &lt;code&gt;md4&lt;/code&gt; 之上形成了 &lt;code&gt;bcache0&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查 &lt;code&gt;bcache&lt;/code&gt; 设备状态&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /sys/block/bcache0/bcache/state
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /sys/block/bcache0/bcache/cache_mode
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 查看缓存命中率等更多统计信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /sys/block/bcache0/bcache/stats_total/*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查文件系统挂载&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;df -hT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;确保 &lt;code&gt;/mnt/cached_storage&lt;/code&gt; 已成功挂载，并且文件系统类型和大小符合预期。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;🎉 恭喜！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果一切顺利，您现在应该拥有一个由 NVMe SSD RAID0 (&lt;code&gt;md4&lt;/code&gt;) 缓存加速的 HDD RAID0 (&lt;code&gt;md10&lt;/code&gt;) 存储池了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;故障排除提示&lt;/strong&gt;:&lt;br&gt;
如果在任何步骤中遇到问题，特别是重启后设备未出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查内核日志: &lt;code&gt;dmesg&lt;/code&gt; 或 &lt;code&gt;journalctl -xe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;仔细核对每一步的命令和设备名称。&lt;/li&gt;
&lt;li&gt;确认相关的内核模块 (&lt;code&gt;md_mod&lt;/code&gt;, &lt;code&gt;raid0&lt;/code&gt;, &lt;code&gt;bcache&lt;/code&gt;) 是否已加载 (&lt;code&gt;lsmod&lt;/code&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;希望这个教程对您有帮助！&lt;/p&gt;</description></item></channel></rss>