~cytrogen/blog-public

blog-public/posts/66e.html -rw-r--r-- 25.8 KiB
88eebf3dCytrogen Deploy 2026-02-19 08:34:27 4 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
<!DOCTYPE html><html lang="zh" data-theme="dark"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>BUFFALO LinkStation Pro Duo【1】初步设置 · Cytrogen 的个人博客</title><meta name="description" content="本文是一篇针对 BUFFALO LinkStation Pro Duo 网络存储器(NAS)的入门设置教程,旨在解决初次使用时映射网络驱动器失败的常见问题。教程通过详细的图文步骤,引导用户如何配置RAID阵(以RAID 1为例),创建共享文件夹,并最终通过 NAS Navigator2 软件成功将NAS映射为本地网络驱动器,解决了“Could not map the share”的报错。如果你刚入手一台老款 BUFFALO NAS 不知如何下手,本教程将为你提供清晰的实操指引。"><link rel="icon" href="../favicon.png"><link rel="canonical" href="https://cytrogen.icu/posts/66e.html"><link rel="webmention" href="https://webmention.io/cytrogen.icu/webmention"><link rel="me" href="https://m.otter.homes/@Cytrogen"><link rel="me" href="https://github.com/cytrogen"><meta name="fediverse:creator" content="@Cytrogen@m.otter.homes"><link rel="preload" href="../fonts/opensans-regular-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous"><style>@font-face {
  font-family: 'Open Sans';
  src: url('../fonts/opensans-regular-latin.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  size-adjust: 107%;
  ascent-override: 97%;
  descent-override: 25%;
  line-gap-override: 0%;
}
</style><script>(function() {
  try {
    // 优先级:用户选择 > 系统偏好 > 默认浅色
    const saved = localStorage.getItem('theme');
    const theme = saved || 
      (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
    
    document.documentElement.setAttribute('data-theme', theme);
    document.documentElement.style.colorScheme = theme;
  } catch (error) {
    // 失败时使用默认主题,不阻塞渲染
    document.documentElement.setAttribute('data-theme', 'light');
  }
})();
</script><link rel="stylesheet" href="../css/ares.css"><script data-netlify-skip-bundle="true">(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const theme = document.documentElement.getAttribute('data-theme');
    const pageWrapper = document.getElementById('page-wrapper');
    if (pageWrapper && theme) {
      pageWrapper.setAttribute('data-theme', theme);
    }
  });
})();

</script><!-- hexo injector head_end start -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css">

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hexo-math@4.0.0/dist/style.css">
<!-- hexo injector head_end end --><meta name="generator" content="Hexo 8.1.1"><link rel="alternate" href="atom.xml" title="Cytrogen 的个人博客" type="application/atom+xml">
</head><body><div id="page-wrapper"><a class="skip-link" href="#main-content">跳到主要内容</a><div class="wrap"><header><a class="logo-link" href="../index.html"><img src="../favicon.png" alt="logo"></a><div class="h-card visually-hidden"><img class="u-photo" src="https://cytrogen.icu/favicon.png" alt="Cytrogen"><a class="p-name u-url u-uid" href="https://cytrogen.icu">Cytrogen</a><p class="p-note">Cytrogen 的个人博客,Cytrogen's Blog</p><a class="u-url" rel="me noopener" target="_blank" href="https://m.otter.homes/@Cytrogen">Mastodon</a><a class="u-url" rel="me noopener" target="_blank" href="https://github.com/cytrogen">GitHub</a></div><nav class="site-nav"><div class="nav-main"><div class="nav-primary"><ul class="nav-list hidden-mobile"><li class="nav-item"><a class="nav-link" href="../index.html">首页</a></li></ul><div class="nav-tools"><div class="language-menu"><button class="language-toggle" type="button"><svg class="icon icon-globe" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855A7.97 7.97 0 0 0 5.145 4H7.5V1.077zM4.09 4a9.267 9.267 0 0 1 .64-1.539 6.7 6.7 0 0 1 .597-.933A7.025 7.025 0 0 0 2.255 4H4.09zm-.582 3.5c.03-.877.138-1.718.312-2.5H1.674a6.958 6.958 0 0 0-.656 2.5h2.49zM4.847 5a12.5 12.5 0 0 0-.338 2.5H7.5V5H4.847zM8.5 5v2.5h2.99a12.495 12.495 0 0 0-.337-2.5H8.5zM4.51 8.5a12.5 12.5 0 0 0 .337 2.5H7.5V8.5H4.51zm3.99 0V11h2.653c.187-.765.306-1.608.338-2.5H8.5zM5.145 12c.138.386.295.744.468 1.068.552 1.035 1.218 1.65 1.887 1.855V12H5.145zm.182 2.472a6.696 6.696 0 0 1-.597-.933A9.268 9.268 0 0 1 4.09 12H2.255a7.024 7.024 0 0 0 3.072 2.472zM3.82 11a13.652 13.652 0 0 1-.312-2.5h-2.49c.062.89.291 1.733.656 2.5H3.82zm6.853 3.472A7.024 7.024 0 0 0 13.745 12H11.91a9.27 9.27 0 0 1-.64 1.539 6.688 6.688 0 0 1-.597.933zM8.5 12v2.923c.67-.204 1.335-.82 1.887-1.855A7.97 7.97 0 0 0 10.855 12H8.5zm3.68-1h2.146c.365-.767.594-1.61.656-2.5h-2.49a13.65 13.65 0 0 1-.312 2.5zm2.802-3.5a6.959 6.959 0 0 0-.656-2.5H12.18c.174.782.282 1.623.312 2.5h2.49zM11.27 2.461c.247.464.462.98.64 1.539h1.835a7.024 7.024 0 0 0-3.072-2.472c.218.284.418.598.597.933zM10.855 4a7.966 7.966 0 0 0-.468-1.068C9.835 1.897 9.17 1.282 8.5 1.077V4h2.355z"></path></svg><span>中文</span></button><div class="language-dropdown"></div></div></div><div class="nav-controls"><div class="more-menu hidden-mobile"><button class="more-toggle" type="button"><span>更多</span><svg class="icon icon-chevron-down" width="12" height="12" viewBox="0 0 12 12" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 8.825c-.2 0-.4-.1-.5-.2l-3.3-3.3c-.3-.3-.3-.8 0-1.1s.8-.3 1.1 0l2.7 2.7 2.7-2.7c.3-.3.8-.3 1.1 0s.3.8 0 1.1l-3.3 3.3c-.1.1-.3.2-.5.2z"></path></svg></button><div class="more-dropdown"><ul class="dropdown-list"><li class="dropdown-item"><a class="nav-link" href="../archives/index.html">归档</a></li><li class="dropdown-item"><a class="nav-link" href="../categories/index.html">分类</a></li><li class="dropdown-item"><a class="nav-link" href="../tags/index.html">标签</a></li><li class="dropdown-item"><a class="nav-link" href="../about/index.html">关于</a></li><li class="dropdown-item"><a class="nav-link" href="../sitemap/index.html">领地地图</a></li></ul></div></div><div class="theme-switcher"><button class="theme-toggle" type="button" role="switch" aria-pressed="false" aria-label="切换主题"><div class="theme-icon moon-icon"><svg class="icon icon-moon" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"></path></svg></div><div class="theme-icon sun-icon"><svg class="icon icon-sun" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"></path></svg></div></button></div><details class="mobile-menu-details hidden-desktop"><summary class="hamburger-menu" aria-label="nav.menu"><svg class="icon icon-bars" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"></path></svg><span class="menu-text">nav.menu</span></summary><div class="mobile-menu-dropdown"><ul class="mobile-nav-list"><li class="mobile-nav-item"><a class="mobile-nav-link" href="../index.html">首页</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../archives/index.html">归档</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../categories/index.html">分类</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../tags/index.html">标签</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../about/index.html">关于</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../sitemap/index.html">领地地图</a></li></ul></div></details></div></div></div></nav></header><main class="container" id="main-content" tabindex="-1"><div class="post"><article class="post-block h-entry"><div class="post-meta p-author h-card visually-hidden"><img class="author-avatar u-photo" src="../favicon.png" alt="Cytrogen"><span class="p-name">Cytrogen</span><a class="u-url" href="https://cytrogen.icu">https://cytrogen.icu</a></div><a class="post-permalink u-url u-uid visually-hidden" href="https://cytrogen.icu/posts/66e.html">永久链接</a><div class="p-summary visually-hidden"><p>BUFFALO LinkStation Pro Duo 的相关教程第 1 节:映射。</p></div><div class="visually-hidden"><a class="p-category" href="../categories/%E5%B7%A5%E5%85%B7/">工具</a><a class="p-category" href="../tags/NAS/">NAS</a></div><h1 class="post-title p-name">BUFFALO LinkStation Pro Duo【1】初步设置</h1><div class="post-info"><time class="post-date dt-published" datetime="2023-07-27T23:40:26.000Z">7/27/2023</time><time class="dt-updated visually-hidden" datetime="2026-02-09T17:16:54.609Z"></time></div><div class="post-content e-content"><html><head></head><body><p>BUFFALO LinkStation Pro Duo 的相关教程第 1 节:映射。</p>
<span id="more"></span>
<div class="danger"> 首先,什么是 LinkStation Pro Duo?(以下节选自 BUFFALO 的亚太官网)
<ul>
<li>LinkStation Pro Duo 是一款高性能双盘位 RAID 网络存储设备,它包含一些列特色功能,是存储、共享、服务和保护你最重要数据的最佳设备。能够同时备份多台计算机和苹果机,即便不在家也通过因特网连续访问自己网络中存储的数据</li>
</ul>
</div>
<p>想必能搜到这个文章的人都多多少少不需要以上的介绍。</p>
<p><img src="/posts/66e/1.jpeg" alt="BUFFALO LinkStation Pro Duo整图"></p>
<p>几日前我从老师手中白嫖到这么一台 NAS,型号为 LS - WTGL/R1-V3 F/W3.10。</p>
<p>不过 LinkStation Pro Duo 的教程在网上实在是少之又少,不少教程还因为年代久远导致无法参考。很难想象我在拿到这台 NAS 后就因为无法正常映射而查资料查了快一天的时间才解决。</p>
<p>先来看看我们的 LinkStation Pro Duo。包装中自带一个 CD 供用户安装所需的软件(还有 Memeo 数据备份,Win 系统要比 Mac 多一个 Adobe Reader),可惜 CD 的时代已经过去,我的笔记本电脑并没有光驱。</p>
<p><img src="/posts/66e/2.jpeg" alt="BUFFALO LinkStation Pro Duo说明书和软件安装用的CD"></p>
<h2 id="前期准备"><a class="markdownIt-Anchor" href="#前期准备"></a> 前期准备</h2>
<ul>
<li>
<p>一台 LinkStation Pro Duo(型号和我的不同也没关系,顶多是网页 UI 布局的区别)</p>
</li>
<li>
<p>NAS Navigator2</p>
<ul>
<li>
<p>官方下载链接:<a target="_blank" rel="noopener" href="https://www.buffalotech.com/products/linkstation-pro-duo">点我</a></p>
</li>
<li>
<p>点击 <strong>Utilities</strong> → 根据你的系统选择前两个下载连接。我是 Win10 系统所以自然下载第一个</p>
<p><img src="/posts/66e/3.png" alt="官网下载链接Utilities区域"></p>
</li>
</ul>
</li>
</ul>
<h2 id="初步连接"><a class="markdownIt-Anchor" href="#初步连接"></a> 初步连接</h2>
<ol>
<li>
<p>首先先把 NAS 连接上电源和 LAN。</p>
<p><img src="/posts/66e/5.png" alt="连接电源和LAN"></p>
</li>
<li>
<p>将开关调到 ON。</p>
<p><img src="/posts/66e/6.jpeg" alt="开关调到中间的ON"></p>
</li>
<li>
<p>坐等 NAS 前面的这两个灯亮起。</p>
<p><img src="/posts/66e/7.jpeg" alt="NAS前方亮起上下两个绿灯"></p>
</li>
<li>
<p>坐到我们的电脑前(和 NAS 在同一个网络下)打开 NAS Navigator2,能看到我们的 NAS 出现。</p>
<p><img src="/posts/66e/8.png" alt="NAS Navigator2中出现NAS图标 "></p>
</li>
</ol>
<h2 id="映射"><a class="markdownIt-Anchor" href="#映射"></a> 映射</h2>
<ol>
<li>
<p>右键 NAS 的图标,选择 <strong>Map Share</strong>。如果没有任何错误弹出,那可以无视下面的步骤直接开跳。</p>
<p><img src="/posts/66e/9.png" alt="右键NAS图标并在右键菜单中选择Map Share"></p>
</li>
<li>
<p>选择看到这里就代表你见到了 <em>Could not map the share. Create a folder named「share」before mapping the drive</em> 这样的弹窗。我们先进入 NAS 的设置页面:右键 NAS 图标,选择 <strong>Open Settings</strong></p>
<p><img src="/posts/66e/10.png" alt="错误弹窗:Could not map the share. Create a folder named “share” before mapping the drive"></p>
</li>
<li>
<p>用户名默认是 <strong>admin</strong>,密码默认是 <strong>password</strong>(传统艺能)。</p>
<p><img src="/posts/66e/11.png" alt="LinkStation NAS设置页面"></p>
</li>
<li>
<p>首先先设置 RAID,点击 <strong>RAID Setup</strong> 下的 <strong>RAID Array 1。</strong></p>
<p><img src="/posts/66e/12.png" alt="先点击左边的Disk Management,再点击左边的RAID Setup,最后点击中间RAID Setup下的RAID Array 1"></p>
<div class="danger">
在进行 RAID Array 设置之前,你需要先明白 RAID 在这里是什么用的。
<p>在 BUFFALO 亚太官网中提到:</p>
<blockquote>
<p>「LinkStation Pro Duo 包含两个内置硬盘机架,安装两个硬盘后可支持 RAID 0 / 1 系统。当使用 RAID1 系统时,可便捷安装最多两个硬盘,并自动复制(不包含硬盘)。使用 LinkStation Pro Duo 设备时,可随时添加第二个硬盘,在 RAID1 系统中设置而不会损坏任何数据。轻松省时备份和保护你的数据。」</p>
</blockquote>
<p>也就是说:RAID 0 代表 <strong>将所有硬盘合并为单一阵列,能够最大化存储容量,不具有冗余功能</strong>,而 RAID 1 代表着 <strong>备份两个硬盘,为了应对意外故障,能够精准复制数据</strong></p>
<p>我在这里设置的是 RAID 1,你不需要一定跟着我的来做,只是以下的步骤我都会以「设置 RAID Array 为 1」的前提来进行。</p>
</div>
</li>
<li>
<p>确保 <strong>RAID Mode</strong><strong>RAID1</strong><strong>Disk Structure</strong> 下的硬盘都被勾选后,点击 <strong>Setup RAID Array</strong></p>
<p><img src="/posts/66e/13.png" alt="点击设置RAID Array"></p>
</li>
<li>
<p>之后会出现弹窗让你确认,还有个验证码需要跟着输入,快速过完确认流程后耐心等待 RAID Array 被构建。</p>
<p><img src="/posts/66e/14.png" alt="页面上显示Building RAID Array和进度条"></p>
<p><img src="/posts/66e/15.png" alt="RAID Array构建完毕"></p>
</li>
<li>
<p>构建完 RAID Array 之后,我们会立即收到一个来自于 NAS Navigator2 的桌面通知,表示 RAID Array 1 正在被同步。</p>
<p><img src="/posts/66e/16.png" alt="NAS Navigator2的桌面通知,显示Resyncing RAID Array 1"></p>
<p>同时设置页面在我们点击 <strong>Continue</strong> 之后、主页出现了 <strong>Checking RAID Array 1</strong> 的选项。点击后我们能看到 RAID Array 1 的同步状态(对,我们真的是要等 160+ 分钟。这个时间段我们可以先吃个饭~)。</p>
<p><img src="/posts/66e/17.png" alt="LinkStation设置主页出现了Checking RAID Array 1"></p>
<p><img src="/posts/66e/18.png" alt="RAID Array 1的状态信息,需要等待近三个小时"></p>
<p>顺带一提,这个页面并非实时修改内容。要查看现在的同步状态,我们要先去到主页面,再点击 <strong>Checking RAID Array 1</strong> 导回该页面才能看到内容变动。</p>
</li>
<li>
<p>同步完成后,主页面的 <strong>HDD Space Used</strong> 会变为单个 RAID Array 1。</p>
<p><img src="/posts/66e/19.png" alt="主页面的HDD Space Used变为RAID Array 1"></p>
<p>现在点击 <strong>Shared Folders</strong> 来创建一个名为 <em>share</em> 的文件夹。</p>
<p><img src="/posts/66e/20.png" alt="点击左边的Shared Folder,然后点击中间的Add"></p>
<p><img src="/posts/66e/21.png" alt="在Shared Folder Name中填写share,然后检查Volume是否为RAID Array 1,最后点击Apply"></p>
<p>成功添加。</p>
<p><img src="/posts/66e/22.png" alt="Shared Folders页面显示Settings Have Been Saved Successfully,并且Shared Folders Setup栏下多出了Disk or Array为RAID Array 1的share文件夹"></p>
</li>
<li>
<p>现在回到 NAS Navigator2,重新右键 NAS 图标并点击 <strong>Map Share</strong>。可算是映射成功了。</p>
<p><img src="/posts/66e/23.png" alt="弹窗显示“LS-WTGLCDBhare is mapped to drive L”"></p>
</li>
<li>
<p>右键 NAS 图标并点击 <strong>Browse Share</strong>,系统会自动打开文件夹。当然也可以选择在文件管理器里自己打开。</p>
<p><img src="/posts/66e/24.png" alt="右键NAS并点击Browse Share"></p>
<p><img src="/posts/66e/25.png" alt="自动打开的Network中的文件夹"></p>
<p><img src="/posts/66e/26.png" alt="在文件管理器中打开。Share文件夹会自动出现在Network Locations下方"></p>
</li>
</ol>
<h2 id="结束语"><a class="markdownIt-Anchor" href="#结束语"></a> 结束语</h2>
<p>好的,大功告成!你已经完成了初步设置。只是现在这个 NAS 仅能在同互联网的情况下进行存储,而我们往往都是希望在外面访问它。</p>
<p>后续关于外网访问的教程可能很快就能端上来,也有可能成为巨坑。</p>
<p>总之祝大家玩 NAS 玩的开心、玩出新奇。</p>
</body></html></div></article></div></main><footer><div class="paginator"><a class="prev" href="deef.html">上一篇</a><a class="next" href="ba6a.html">下一篇</a></div><!-- Webmention 显示区域--><div class="webmention-section webmention-empty" data-page-url="posts/66e.html" data-full-url="https://cytrogen.icu/posts/66e.html" data-mode="static">
              <h3 class="webmention-title">Webmentions (<span class="webmention-count">0</span>)</h3>
              <div class="webmention-list"></div>
              <span>暂无 Webmentions</span>
            </div><div class="copyright"><p class="footer-links"><a href="../friends/index.html">友链</a><span class="footer-separator"> ·</span><a href="../links/index.html">邻邦</a><span class="footer-separator"> ·</span><a href="../contact/index.html">联络</a><span class="footer-separator"> ·</span><a href="../colophon/index.html">营造记</a><span class="footer-separator"> ·</span><a href="../atom.xml">RSS订阅</a></p><p>© 2025 - 2026 <a href="https://cytrogen.icu">Cytrogen</a>, powered by <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/cytrogen/hexo-theme-ares" target="_blank">hexo-theme-ares</a>.</p><p><a href="https://blogscn.fun" target="_blank" rel="noopener">BLOGS·CN</a></p></div></footer></div></div><a class="back-to-top" href="#top" aria-label="返回顶部"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M3.293 9.707a1 1 0 010-1.414L9.586 2a2 2 0 012.828 0l6.293 6.293a1 1 0 01-1.414 1.414L11 3.414V17a1 1 0 11-2 0V3.414L2.707 9.707a1 1 0 01-1.414 0z"></path></svg></a><script>document.addEventListener('DOMContentLoaded', function() {
  const codeBlocks = document.querySelectorAll('figure.highlight');
  
  codeBlocks.forEach(block => {
    let caption = block.querySelector('figcaption');
    if (!caption) {
      caption = document.createElement('figcaption');
      block.insertBefore(caption, block.firstChild);
    }

    const info = document.createElement('div');
    info.className = 'info';
    
    const filename = caption.querySelector('span');
    if (filename) {
      filename.className = 'filename';
      info.appendChild(filename);
    }
    
    const lang = block.className.split(' ')[1];
    if (lang) {
      const langSpan = document.createElement('span');
      langSpan.className = 'lang-name';
      langSpan.textContent = lang;
      info.appendChild(langSpan);
    }

    const sourceLink = caption.querySelector('a');
    if (sourceLink) {
      sourceLink.className = 'source-link';
      info.appendChild(sourceLink);
    }

    const actions = document.createElement('div');
    actions.className = 'actions';

    const codeHeight = block.scrollHeight;
    const threshold = 300;

    if (codeHeight > threshold) {
      block.classList.add('folded');
      
      const toggleBtn = document.createElement('button');
      toggleBtn.textContent = '展开';
      toggleBtn.addEventListener('click', () => {
        block.classList.toggle('folded');
        toggleBtn.textContent = block.classList.contains('folded') ? '展开' : '折叠';
      });
      actions.appendChild(toggleBtn);
    }

    const copyBtn = document.createElement('button');
    copyBtn.textContent = '复制';
    copyBtn.addEventListener('click', async () => {
      const codeLines = block.querySelectorAll('.code .line');
      const code = Array.from(codeLines)
        .map(line => line.textContent)
        .join('\n')
        .replace(/\n\n/g, '\n');
      
      try {
        await navigator.clipboard.writeText(code);
        copyBtn.textContent = '已复制';
        copyBtn.classList.add('copied');
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
          copyBtn.classList.remove('copied');
        }, 3000);
      } catch (err) {
        console.error('复制失败:', err);
        copyBtn.textContent = '复制失败';
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
        }, 3000);
      }
    });
    actions.appendChild(copyBtn);

    caption.innerHTML = '';
    caption.appendChild(info);
    caption.appendChild(actions);

    const markedLines = block.getAttribute('data-marked-lines');
    if (markedLines) {
      const lines = markedLines.split(',');
      lines.forEach(range => {
        if (range.includes('-')) {
          const [start, end] = range.split('-').map(Number);
          for (let i = start; i <= end; i++) {
            const line = block.querySelector(`.line-${i}`);
            if (line) line.classList.add('marked');
          }
        } else {
          const line = block.querySelector(`.line-${range}`);
          if (line) line.classList.add('marked');
        }
      });
    }
  });
});</script><script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" id="MathJax-script"></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const themeToggle = document.querySelector('.theme-toggle');
    
    if (!themeToggle) return;
    
    const getCurrentTheme = () => {
      return document.documentElement.getAttribute('data-theme') || 'light';
    };
    
    const updateUI = (theme) => {
      const isDark = theme === 'dark';
      themeToggle.setAttribute('aria-pressed', isDark.toString());
    };
    
    const setTheme = (theme) => {
      document.documentElement.setAttribute('data-theme', theme);
      document.documentElement.style.colorScheme = theme;
      
      const pageWrapper = document.getElementById('page-wrapper');
      if (pageWrapper) {
        pageWrapper.setAttribute('data-theme', theme);
      }
      
      // Find and remove the temporary anti-flicker style tag if it exists.
      // This ensures the main stylesheet takes full control after the initial load.
      const antiFlickerStyle = document.getElementById('anti-flicker-style');
      if (antiFlickerStyle) {
        antiFlickerStyle.remove();
      }
      
      localStorage.setItem('theme', theme);
      updateUI(theme);
    };
    
    const toggleTheme = () => {
      const current = getCurrentTheme();
      const newTheme = current === 'light' ? 'dark' : 'light';
      setTheme(newTheme);
    };
    
    updateUI(getCurrentTheme());
    
    themeToggle.addEventListener('click', toggleTheme);
    
    if (window.matchMedia) {
      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
      mediaQuery.addEventListener('change', function(e) {
        if (!localStorage.getItem('theme')) {
          const theme = e.matches ? 'dark' : 'light';
          setTheme(theme);
        }
      });
    }
  });
})();
</script><script src="../js/details-toggle.js" defer></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const backToTopBtn = document.querySelector('.back-to-top');
    
    if (!backToTopBtn) return;
    
    const toggleButtonVisibility = () => {
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
      const shouldShow = scrollTop > 200;
      
      if (shouldShow) {
        backToTopBtn.classList.add('is-visible');
      } else {
        backToTopBtn.classList.remove('is-visible');
      }
    };
    
    let ticking = false;
    const handleScroll = () => {
      if (!ticking) {
        requestAnimationFrame(() => {
          toggleButtonVisibility();
          ticking = false;
        });
        ticking = true;
      }
    };
    
    const scrollToTop = (event) => {
      event.preventDefault();
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      });
    };
    
    window.addEventListener('scroll', handleScroll);
    backToTopBtn.addEventListener('click', scrollToTop);
    
    toggleButtonVisibility();
  });
})();</script></body></html>