<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>NAS on STARRY-S&#39; Blog</title>
    <link>https://blog.starry-s.moe/tags/nas/</link>
    <description>Recent content in NAS on STARRY-S&#39; Blog</description>
    <image>
      <title>STARRY-S&#39; Blog</title>
      <url>https://blog.starry-s.moe/web-app-manifest-512x512.png</url>
      <link>https://blog.starry-s.moe/web-app-manifest-512x512.png</link>
    </image>
    <generator>Hugo</generator>
    <language>zh</language>
    <copyright>2016 - 2026 STARRY-S | CC BY-NC-SA 4.0 | Hosted on GitHub Pages
</copyright>
    <lastBuildDate>Sun, 20 Nov 2022 15:04:46 +0800</lastBuildDate>
    <atom:link href="https://blog.starry-s.moe/tags/nas/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NAS 装机记录</title>
      <link>https://blog.starry-s.moe/posts/2022/build-nas/</link>
      <pubDate>Sat, 12 Nov 2022 13:25:03 +0800</pubDate>
      <guid>https://blog.starry-s.moe/posts/2022/build-nas/</guid>
      <description>&lt;p&gt;差不多去年的这个时候尝试过用树莓派插移动硬盘的方式试探性的组装了一个 NAS，但实际上用了不到两天这个方案就被废弃掉了……&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>差不多去年的这个时候尝试过用树莓派插移动硬盘的方式试探性的组装了一个 NAS，但实际上用了不到两天这个方案就被废弃掉了……</p>
<meting-js server="netease" type="song" id="22682819" theme="#233333"></meting-js>
<h2 id="起因">起因</h2>
<p>不用树莓派的原因是，它是 ARM 架构的微型“电脑”，Arch Linux 官方只支持 x86_64 架构的系统，Arch Linux ARM 准确来说实际上是个第三方的系统。
然后树莓派的性能很差，只有一个板载网卡和 2.4G 无线网卡（我手里的是树莓派 3B），所以这玩意实际上更适合做嵌入式什么的，或者给初学者折腾入门 Linux 来用（但是看了眼现在树莓派的售价，我想应该不会有初学者买树莓派入门 Linux 了）。</p>
<p>后来买了 NanoPi R4S 软路由，它内置了一个 RK3399 CPU，虽然也是 ARM 架构但是性能对于软路由来说很够用了，当时也是给它折腾了 Arch Linux ARM 系统还依次尝试了 <code>systemd-networkd</code> 和 <code>netctl</code> 给它的两个网口配置路由，但折腾归折腾，这种方式并不稳定，在日常使用过程中经常遇到重启路由器后上不去网的情况，还要手动 SSH 到路由器中再重启一次网络服务和防火墙才恢复。虽然手动改网络组件的配置文件的方式配置个路由器更底层些，这个过程也能更好的体会到路由器的一些原理，但是这种方案并不适合长期日常使用，我可不希望动不动家里路由器莫名其妙就断网了还要手动 SSH 到系统里查一堆日志后才能重连网络。</p>
<p>之后我把手里的 R4S 卖掉了，因为 NanoPi 新发布了性价比更高且功耗更低的，拥有俩 2.5G LAN 网口，还有一个 M2 插槽和内置了 8G 闪存的 R5S。我给它安装了更适合路由器使用的基于 OpenWRT 构建的 FriendlyWRT 系统，这个系统内置了 Docker 和一些常用的应用（网络共享、Aria2、硬盘自动休眠之类的），在把光猫改桥接后，用它来做我的主路由器。然后把手里一块空闲的 2T 移动硬盘连接到路由器上，设置了 OpenWRT 的网络共享 (Samba) 服务后，实验性的当作我的 NAS 来使用。</p>
<p>之所以是“实验性”的“NAS”，是因为我不确定 USB 连接移动硬盘的方式是否稳定，因为移动硬盘对供电有一定要求，我并不确定路由器的 USB 接口能否稳定的为硬盘供电，就算连接一块硬盘供电够用的话，我不确定连接两块以上的硬盘组磁盘阵列还能不能带得动，尽管这个问题能通过一根 USB 供电线来解决，但是我那半个巴掌大小的路由器上面既要插三根巨粗无比的 7 类网线，又要插硬盘和 USB 供电线，还要再占用一个插座插一个手机充电器给移动硬盘供电，这也太混乱了点，毕竟机械硬盘在读写过程中很怕震动，我在插拔网线或者插座上其他的电器时都避免不了的会对那块移动硬盘产生震动。</p>
<p>然后路由器毕竟是路由器，你即要它负责整个家庭几十个网络设备的路由功能，又要跑 Samba 服务器，还要往里面装一些“上网插件”的话，对 CPU 的性能还是有一定要求的。因为我的路由器和电脑都有 2.5G 网口，所以我实际测试过当通过 Samba 拷贝文件的速度接近于 200MB/S 时，路由器的 CPU 4个核心就会全跑到 100%，然后拷贝就卡住了，时间久了文件就拷贝失败了（然后我不得不又设置了 QoS 把 2.5G 的网口限速成千兆网口）。</p>
<p>所以最好的办法还是把 NAS 和路由器分开，路由器就用来做路由器该做的事情，NAS 就做 NAS 该做的事情。</p>
<blockquote>
<p>以上就是我组装 NAS 的整个心路历程，如果觉得上面这一大堆太磨叽的话，直接看下面就好了。</p>
</blockquote>
<hr>
<h2 id="配置清单">配置清单</h2>
<ul>
<li>机箱：乔思伯 N1</li>
<li>主板：映泰 B550T-SILVER ITX</li>
<li>CPU：AMD R7 5700G</li>
<li>内存：英睿达 8G 2666</li>
<li>固态：闪迪 500G NVME</li>
<li>硬盘：东芝 MG08ACA16TE * 1</li>
<li>电源：Tt SFX钢影 450W</li>
<li>其他：乐扩 4 口 2.5G PCIE 网卡</li>
</ul>
<p>系统盘是之前折腾软路由时剩下的一块 500G 的 NVME 固态，除此之外双十一的时候还买了一块东芝的 16T 企业盘。</p>
<hr>
<p>本来想把除硬盘外的整体预算控制在 2K 以内的，但实际上光主板 + CPU 就两千多了……</p>
<p>在深水宝上有更便宜的 5600G + B450 ITX 套装，但是这种来路不明的主板和散片 CPU 尽管便宜了几百块钱但是我也不知道它的 CPU 有没有“锻炼”过，主板有没有换过啥零件，反正我是不敢买。所以挑了好久，决定提高了预算，在狗东买的全新的板 U 套装，选的这个带板载 2.5G 网卡的主板，毕竟我可不想贪小便宜吃大亏。</p>
<p>散热器目前用的是 AMD 盒装 CPU 带的散热，听说这个散热器在拆的时候极有可能会把 CPU 连根拔起，但是我有一个闲置的利民的 itx 散热器放在老家了没拿过来，所以现在只好先用原装的过度一下。</p>
<p>本来是没打算买机械硬盘的，想着先用移动硬盘连在 NAS 上先用一阵子的，不过双十一硬盘便宜了好多，信用卡分三期还能再减 50，所以就先买了一块，估计够我用很长时间的了。</p>
<h2 id="装机">装机</h2>
<p><img loading="lazy" src="images/001.jpg" alt="" />

</p>
<p>映泰的这块板子是不带无线网卡的，但送了一个 WIFI5 的无线网卡，需要手动安装上去，当时废了九牛二虎之力才接上了这两根 SMA 线……。</p>
<p><img loading="lazy" src="images/002.jpg" alt="" />

</p>
<p><img loading="lazy" src="images/003.jpg" alt="" />

</p>
<p><img loading="lazy" src="images/004.jpg" alt="" />

</p>
<p>然后走线的过程其实还挺顺利的，插上主板 24PIN、CPU 8PIN 和 SATA 供电以及风扇、机箱前面板跳线和 USB、音频线之外就完事了，找一些空隙把这些线绑起来就好了，说实话走线的过程可比之前给先马趣造装机容易多了，毕竟少了两根显卡供电线和一堆风扇的电源线还有 RGB 灯的线……</p>
<h2 id="装系统">装系统</h2>
<p>NAS 的系统我采用的是 Arch Linux。首先，选一个 NAS 的系统肯定要优先考虑更适合做服务器的 Linux，其次 FreeNAS 这个系统是基于 FreeBSD/Unix 的，我就是单纯的不想用 BSD 所以就把它排除在方案外了（但是 NAS 里装一个虚拟机跑 FreeNAS 也不是不可以），至于网上总能听到的黑群晖我对这种盗版 + 闭源的系统很反感，所以想都不要想了。提到 Linux 的服务器发行版肯定有人更偏向于 Debian 以及 Debian 衍生的服务器系统以及红帽系列的被经常用在服务器的那些企业常用 Linux 系统，但是我只想用我熟悉的 Arch Linux。Arch Linux 的 Wiki 中有介绍过，Arch Linux 的思维是这个系统并不针对某类应用场景，而是让 Arch 的用户自己配置自己的系统来应用在哪些场景，所以理论上是可以把 Arch Linux 配置成一个适合应用在服务器上的系统，实际上也有 <code>vps2arch</code> 这个“黑魔法”脚本可以一键把 VPS 上已安装的其他 Linux 系统转成 Arch Linux。如果在这里你非要和我较真哪个 Linux 发行版好，哪个 Linux 发行版不好的话，我觉得这并不属于一个技术范围该讨论的问题而是一个哲学问题。</p>
<p>安装教程在 Wiki 上就能找到，这里不再赘述，安装系统时需要装一些网络相关的软件，我配置网络使用的是 <code>netctl</code>，因为觉得 <code>systemd-networkd</code> 不怎么好用，我对 NetworkManager 不怎么熟悉所以就没装这个。然后配置无线连接时还需要用到 <code>wpa_supplicant</code>。</p>
<h3 id="配置网络">配置网络</h3>
<p>我的 NAS 上面一共有 5 个网口，其中一个网口为板载的 2.5G 网口，另外四个网口为 2.5G 的 PCIE 网口，我当初买这个 PCIE 网卡的时候想的是给它配置个桥接当交换机来用，这样只买一块网卡肯定比买个 4 口交换机便宜，因此装系统后配置网络这部分是重头戏，Arch Linux Wiki 上对配置桥接这部分只是简单介绍了几句就完事了，所以这部分我足足花了两个晚上才全部搞定。</p>
<p>首先创建 <code>netctl</code> 的配置文件 <code>/etc/netctl/bridge-br0</code> (文件名可以随意修改)，新创建一个虚拟的桥接接口 <code>br0</code>，这个虚拟的桥接网口绑定了上述的5个网口。我打算将板载的网口 (<code>enp9s0</code>) 连接路由器，然后那 4 个 PCIE 网卡的接口 (<code>enp3s0</code> - <code>enp6s0</code>) 用来连接其他网络设备，所以要将 <code>br0</code> 的 MAC 地址设定为 <code>enp9s0</code> 的 MAC 地址。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> cat /etc/netctl/bridge-br0
</span></span><span class="line"><span class="cl"><span class="go">Description=&#34;Example Bridge connection&#34;
</span></span></span><span class="line"><span class="cl"><span class="go">Interface=br0       # 接口的名称
</span></span></span><span class="line"><span class="cl"><span class="go">Connection=bridge   # 桥接模式
</span></span></span><span class="line"><span class="cl"><span class="go">BindsToInterfaces=(enp9s0 enp6s0 enp5s0 enp4s0 enp3s0)  # 将 br0 绑到 5 个物理网口上
</span></span></span><span class="line"><span class="cl"><span class="go">MACAddress=enp9s0   # 设定 br0 的 MAC 地址与 enp9s0 接口的 MAC 地址一致
</span></span></span><span class="line"><span class="cl"><span class="go">IP=dhcp             # 以 DHCP 的方式为 br0 获取 IP 地址
</span></span></span></code></pre></div><p>除此之外还要配置 <code>enp9s0</code> 接口的配置文件 <code>/etc/netctl/noip-enp9s0</code>，<strong>不要让这个接口自动获取 IP 地址</strong>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> cat /etc/netctl/noip-enp9s0
</span></span><span class="line"><span class="cl"><span class="go">Description=&#39;Example configuration&#39;
</span></span></span><span class="line"><span class="cl"><span class="go">Interface=enp9s0
</span></span></span><span class="line"><span class="cl"><span class="go">Connection=ethernet
</span></span></span><span class="line"><span class="cl"><span class="go">IP=no
</span></span></span></code></pre></div><p>之后执行以下命令使以上两个配置文件生效。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">#</span> netctl <span class="nb">enable</span> bridge-br0
</span></span><span class="line"><span class="cl"><span class="gp">#</span> netctl start bridge-br0
</span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="gp">#</span> netctl <span class="nb">enable</span> noip-enp9s0
</span></span><span class="line"><span class="cl"><span class="gp">#</span> netctl start noip-enp9s0
</span></span></code></pre></div><p>顺利的话，执行 <code>ip addr</code> 可以看到新增加了一个 <code>br0</code> 网口 （不顺利的话就重启一下，再检查一下除了 <code>netctl</code> 之外是不是有别的配置网络的应用产生了干扰），然后原有的 5 个网口都绑定到了 <code>br0</code> 接口上了（接口的那一行出现了 <code>br0</code>）。</p>
<p>然后 <code>enp9s0</code> 接口正常来讲是不应该从路由器上获取到 IP 地址的了，取而代之的是 <code>br0</code> 接口从路由器的 DHCP 服务器中获取了一个 IP 地址，然后 <code>br0</code> 接口的 MAC 地址和 <code>enp9s0</code> 接口的 MAC 地址都一致才对。</p>
<p>以下是一个简单的栗子，在不考虑 IPv6 的情况 <code>ip a</code> 的输出是类似酱紫的：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> ip addr
</span></span><span class="line"><span class="cl"><span class="go">1: enp3s0: &lt;NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP&gt; mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
</span></span></span><span class="line"><span class="cl"><span class="go">    link/ether ab:cd:ef:xx:xx:xx brd ff:ff:ff:ff:ff:ff
</span></span></span><span class="line"><span class="cl"><span class="go">2: enp4s0: &lt;NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP&gt; mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
</span></span></span><span class="line"><span class="cl"><span class="go">    link/ether ab:cd:ef:xx:xx:xx brd ff:ff:ff:ff:ff:ff
</span></span></span><span class="line"><span class="cl"><span class="go">    这里 enp3s0 - enp6s0 这四个接口的情况基本一致所以在此省略
</span></span></span><span class="line"><span class="cl"><span class="go">    ......
</span></span></span><span class="line"><span class="cl"><span class="go">5: enp9s0: &lt;BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
</span></span></span><span class="line"><span class="cl"><span class="go">    link/ether f4:bb:22:xx:xx:xx brd ff:ff:ff:ff:ff:ff
</span></span></span><span class="line"><span class="cl"><span class="go">    ......
</span></span></span><span class="line"><span class="cl"><span class="go">6: br0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
</span></span></span><span class="line"><span class="cl"><span class="go">    link/ether f4:bb:22:xx:xx:xx brd ff:ff:ff:ff:ff:ff
</span></span></span><span class="line"><span class="cl"><span class="go">    inet 10.10.10.233/24 brd 10.10.10.255 scope global dynamic noprefixroute br0
</span></span></span><span class="line"><span class="cl"><span class="go">       valid_lft 1606601sec preferred_lft 1375801sec
</span></span></span><span class="line"><span class="cl"><span class="go">    ......
</span></span></span></code></pre></div><p>至此，NAS 是可以与路由器下的同一局域网内的其他设备互相访问的，然后检查下 <code>/etc/resolv.conf</code> 如果 DNS 配置正确了的话，也是可以访问到公网的，执行 <code>curl baidu.com</code> 是应该有返回的内容的。</p>
<p>但是我们目前只配置了 NAS 自身的板载网口 (<code>enp9s0</code>) 与 <code>br0</code> 虚拟网口的桥接这部分，现在其他设备通过网线插到 PCIE 网卡的那4个接口是上不去网的。</p>
<p>在计网课程中，老师曾反复强调路由器和交换机的区别，路由器是 OSI 七层模型中的网络层的设备，而交换机是第二层的数据链路层的设备，但光是这么讲的话，死记硬背是能记住这两个设备之间的区别，但这种知识实在过于抽象，很难真正的理解，况且这个“网络模型”是按照已有的网络设备给它拆分成不同的层的，而并不是先制定出了分层的标准然后让设备严格按照这个模型去制作的，所以现在市面上卖的网络设备并没有体现出所谓的分层，不同的网络层之间的界限实际上是很模糊的。在网上搜这方面资料的时候看到有人把路由器称作“3 层交换机”，而常说的那种交换机则称为“2 层交换机”。说实话我也没彻底的搞明白数据链路层和网络层以及路由器和交换机之间的具体区别，不过往简单了说，可以把路由器看成是一个根据 IP 地址在不同的网段之间分发数据的设备，而交换机是通过 MAC 地址，只在一个网段内分发数据的设备，市面上常见的售卖的“路由器”商品实际上是一个真正意义上的路由器 + 交换机 + DHCP服务器和其他组件的组合体，知道这些基本就够用了，再往详细了讲的话我也讲不明白了。</p>
<p>然后修改 PCIE 网卡的 4 个接口 <code>enp3s0</code> - <code>enp6s0</code> 的 MAC 地址和板载网口 <code>enp9s0</code> 的 MAC 地址一致，这样5个网口和虚拟的 <code>br0</code> 网口都使用同一个 MAC 地址，就能实现交换机的功能了，至于为啥要把 5 个网口的 MAC 地址都设置一致这个别问我，我也不到为啥，如果这里有哪些知识点有误，可以评论告诉我。</p>
<p>因为 <code>netctl</code> 好像不支持修改接口 MAC 地址的操作，所以这里还是要用到 <code>systemd-networkd</code> 在开机时自动修改网口的 MAC 地址，在 <code>/etc/systemd/network/</code> 中创建 <code>00-enp3s0.link</code> - <code>00-enp6s0.link</code> 这 4 个配置文件。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># cat /etc/systemd/network/00-enp3s0.link
</span></span><span class="line"><span class="cl">[Match]
</span></span><span class="line"><span class="cl"># 这个是网口原有的 MAC 地址
</span></span><span class="line"><span class="cl">MACAddress=aa:bb:cc:dd:xx:xx
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Link]
</span></span><span class="line"><span class="cl"># 这个是修改后的 MAC 地址
</span></span><span class="line"><span class="cl">MACAddress=f4:bb:22:xx:xx:xx
</span></span><span class="line"><span class="cl">NamePolicy=kernel database onboard slot path
</span></span></code></pre></div><p>确保 <code>/etc/systemd/network/</code> 中没有其他的配置文件后，<code>systemctl enable --now systemd-networkd</code> 启动 <code>systemd-networkd</code>，在重启电脑后 5 个接口的 MAC 地址就都一致了。</p>
<p>至此交换机这部分就配置完了。</p>
<h3 id="配置-samba">配置 Samba</h3>
<p>目前我还没有机械硬盘，只有一个移动硬盘通过 USB 连接到了 NAS 上，目前我使用的是 <code>hd-idle</code> 配置了硬盘的自动启停。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> sudo hd-idle -a /dev/sda -i <span class="m">300</span>
</span></span></code></pre></div><p>然后安装 <code>samba</code>，在 <code>/etc/samba/</code> 目录下创建 <code>smb.conf</code>，具体的过程请参照 <a href="https://wiki.archlinux.org/title/Samba">Wiki</a>。</p>
<p>我把我的 16T 硬盘格式化成 <code>btrfs</code> 后挂载到了 <code>/samba/hdd_16t_1</code> 目录下面，然后对应的 Samba 配置文件为：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[HDD16T1]
</span></span><span class="line"><span class="cl">  force user = root
</span></span><span class="line"><span class="cl">  comment = HDD 16T 1
</span></span><span class="line"><span class="cl">  path = /samba/hdd_16T_1
</span></span><span class="line"><span class="cl">  valid users = samba
</span></span><span class="line"><span class="cl">  public = no
</span></span><span class="line"><span class="cl">  writable = yes
</span></span><span class="line"><span class="cl">  browsable = yes
</span></span><span class="line"><span class="cl">  printable = no
</span></span><span class="line"><span class="cl">  create mask = 0644
</span></span><span class="line"><span class="cl">  directory mask = 0755
</span></span><span class="line"><span class="cl">  read only = no
</span></span></code></pre></div><p>我打算只在内网访问我的 NAS，我还不打算把它暴露到公网上，所以目前不用太考虑安全的问题。</p>
<p>然后我目前不考虑组 RAID，首先是因为没钱再买硬盘了，其次是 RAID 并不适合作为冗余备份使用，它没办法保证数据的绝对安全，所以如果我要存重要的数据的话，还是要往别的移动硬盘里也拷贝一份的，所以目前来看 RAID 我暂时用不上。</p>
<p>东芝这块盘收货之后，我用 Samba 往里面烤了俩小时文件没遇到失败的情况，速度一直维持在 100MB/s 以上很稳定，至于噪音的话，白天是感觉不出来 NAS 的声音的，晚上因为配置了硬盘自动停转所以只要睡觉时不用它下载东西的话也是听不到声音的。</p>
<h2 id="其他">其他</h2>
<p>之所以买了 8 核 16 线程的 CPU 是因为我除了让它做 Samba 服务器之外还打算在上面跑一些别的服务啥的，目前除了 Samba 之外我在上面跑了 qemu KVM 虚拟机，然后在局域网搞了 Kubernetes 集群，因为公有云价格太贵了我自己租不起长时间的高性能 VPS，所以在本地起几个虚拟机装轻量级的集群用来学习 k8s 还是可以轻松实现的，不过我目前还没想好可以在集群里跑些什么东西。</p>
<p>后续我打算把我的 MineCraft 单机生存的存档也放到 NAS 上面当服务器跑，这样就可以实现一些只有在服务器才能实现的操作了（比如挂个假人 24 小时挂机刷怪之类的）。</p>
<p>以后有时间的话再写个 TeleBot 机器人啥的，用来远程监控 NAS 的状态。</p>
<hr>
<p><strong>STARRY-S</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>使用树莓派搭建一个NAS</title>
      <link>https://blog.starry-s.moe/posts/2021/raspberry_pi_nas/</link>
      <pubDate>Sat, 25 Sep 2021 22:20:03 +0800</pubDate>
      <guid>https://blog.starry-s.moe/posts/2021/raspberry_pi_nas/</guid>
      <description>&lt;p&gt;把吃灰了好久的树莓派带了过来，打算搞个NAS玩一下，简短的记录一下整个过程。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>把吃灰了好久的树莓派带了过来，打算搞个NAS玩一下，简短的记录一下整个过程。</p>
<meting-js server="netease" type="song" id="750905" theme="#233333"></meting-js>
<blockquote>
<p>这歌太魔性了哈哈哈哈哈……</p>
</blockquote>
<h2 id="准备工作">准备工作</h2>
<ul>
<li>树莓派以及所需的电源（废话）</li>
<li>16G以上的高速内存卡用来写系统镜像</li>
<li>硬盘（可以选择买移动硬盘或者直接买硬盘盒和机械硬盘自己组装）</li>
<li>网络设备：路由器、网线</li>
<li>（非必须）键盘、显示器、连接线等</li>
</ul>
<p>树莓派我使用的是高一时买的树莓派3B（满满的回忆），硬盘是上半年为了存照片而买的西数2T移动硬盘，因为暂时闲置所以拿来一起组个云盘玩。</p>
<p>内存卡需要质量好的不容易坏而且读写比较快的卡。</p>
<h2 id="装系统">装系统</h2>
<p>系统咱安装的是<a href="https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3">ArchLinux ARM</a>，安装教程直接看官方文档即可。</p>
<p>一开始咱为了发挥树莓派3B的64位CPU的性能，我下载了64位的系统镜像，但是在配置无线连接的时候（可能是）驱动问题卡死，因为急着睡觉所以重新格式化内存卡后被迫安装32位的系统。</p>
<p>安装教程咱就不重复写到博客里了，直接翻Wiki，尽管是纯英文的但是不难，都能看懂。咱就不打算在这翻译了。</p>
<p>在格式化<code>root</code>分区时一开始想尝试一下树莓派上跑<code>btrfs</code>，但是开机时进了linux的救援(rescue)模式，懒得折腾还是老老实实换回了<code>ext4</code>，<del>不然我一晚上不用睡觉了</del>。</p>
<p>在分区时除了<code>boot</code>和<code>root</code>之外，我额外分了2G的<code>swap</code>分区，树莓派1G内存有些小不过只是搭个人用的NAS的话实际上是不影响使用的。（<del>这话咋读着这么别扭呢</del>）</p>
<p>因为咱要做NAS肯定得往树莓派上外接个硬盘之类的，树莓派3B只有USB 2.0 + 百兆网口，尽管速度很慢但是作为个人网盘来说不到10MB/S的速度还是比某些恶心网盘快很多的，在线看个1080P视频还是蛮轻松的，BD蓝光想想还是算了。</p>
<p>把移动硬盘接到树莓派后<code>lsblk</code>查看一下分区表。因为咱这是块几乎全新的硬盘所以需要重新分区并格式化一下。</p>
<p>如果你不熟悉在命令行上进行分区格式化的话，建议自行翻阅<a href="https://wiki.archlinux.org/title/fdisk">Wiki (fdisk)</a>，因为往博客上写的话太难理解了别人肯定看不懂。</p>
<p>最后咱把2T移动硬盘格式化成这个样子：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># fdisk -l /dev/sda
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Device          Start        End    Sectors  Size Type
</span></span><span class="line"><span class="cl">/dev/sda1        2048 2147485695 2147483648    1T Linux filesystem
</span></span><span class="line"><span class="cl">/dev/sda2  2147485696 3907029133 1759543438  839G Microsoft basic data
</span></span></code></pre></div><p>其中的1T打算格式化为<code>btrfs</code>给Samba用，其余的800G打算格式化为<code>NTFS</code>留着给Windows当个移动硬盘。</p>
<p>创建分区时别忘了更改分区类型，给Linux用的就是<code>Linux filesystem</code>，给Windows用的就是<code>Microsoft basic data</code>，
不然机械硬盘连接到Windows系统中将不显示分区，或者就是一直提醒你：该分区不可用，然后让你格式化，到时候一不小心点错了可是会丢数据的。</p>
<p>安装<code>btrfs-progs</code>和<code>ntfs-3g</code>，之后格式化硬盘（NTFS还是建议到Windows系统中格式化）。</p>
<p>格式化btrfs的时候加个<code>-L</code>参数设置分区的标签，这样方便在fstab中设置开机自动挂载。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ lsblk                                # 一定要看清楚自己格式化的分区名字
</span></span><span class="line"><span class="cl">$ sudo mkfs.btrfs /dev/sdaX -L samba   # -L 参数设置分区的标签
</span></span></code></pre></div><p>最后改一下<code>/etc/fstab</code>让设备在开机时自动挂载交换分区和移动硬盘。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># &lt;file system&gt; &lt;dir&gt; &lt;type&gt; &lt;options&gt; &lt;dump&gt; &lt;pass&gt;
</span></span><span class="line"><span class="cl">/dev/mmcblk0p1  /boot   vfat    defaults        0       0
</span></span><span class="line"><span class="cl">LABEL=swap      none    swap    defaults        0       0
</span></span><span class="line"><span class="cl">LABEL=samba     /samba  btrfs   defaults        0       0
</span></span></code></pre></div><p>重启系统后如果正常的话，分区会被自动挂载。</p>
<h2 id="配置网络">配置网络</h2>
<blockquote>
<p>配置网络部分不适合在SSH中操作，建议使用显示器和键盘连接到树莓派上操作。</p>
<p>除非你能保证你执行的每个命令都肥肠正确。</p>
</blockquote>
<h3 id="无线网络">无线网络</h3>
<p>因为我电脑离路由器肥肠远，所以为了方便我还要给树莓派配置无线网络。首先照着<a href="https://wiki.archlinux.org/title/Netctl">Wiki上的netctl页面</a>安装了<code>wifi-menu</code>所需要用的<code>dialog</code>，然后就用<code>wifi-menu</code>连接wifi了。不过为了方便以后连接，我需要给他设置静态IP：</p>
<p>首先使用你比较喜欢的文本编辑器打开<code>wifi-menu</code>自动生成的配置文件，并修改成以下的样子</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># /etc/netctl.d/wlan0-YourWifiName
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Description=&#39;Automatically generated profile by wifi-menu&#39;
</span></span><span class="line"><span class="cl">Interface=wlan0
</span></span><span class="line"><span class="cl">Connection=wireless
</span></span><span class="line"><span class="cl">Security=wpa
</span></span><span class="line"><span class="cl">ESSID=Your Wifi Name
</span></span><span class="line"><span class="cl">IP=static
</span></span><span class="line"><span class="cl">Address=(&#39;192.168.xxx.xxx/24&#39;)
</span></span><span class="line"><span class="cl">Gateway=&#39;192.168.xxx.1&#39;
</span></span><span class="line"><span class="cl">DNS=&#39;8.8.8.8&#39;
</span></span><span class="line"><span class="cl">Key=YOUR WIFI PASSWORD
</span></span></code></pre></div><p>其中修改<code>Address</code>为你想设置的CIDR地址、<code>Gateway</code>为默认网关、以及<code>DNS</code>。</p>
<p>最后修改<code>Key</code>为Wifi密码（明文），如果需要加密的话可以去wiki上找相应方法。</p>
<p>之后<code>sudo netctl enable wlan0-YourWifiName</code>设置好开机自动连接即可。</p>
<p>这时候聪明的小伙伴会想到：我想使用网线联网并配置静态IP，该怎么办呢？</p>
<h3 id="配置有线网络">配置有线网络</h3>
<p>默认情况下，有线接口<code>eth0</code>使用<code>systemd-network</code>配置了<code>DHCP</code>，所以我们不需要改<code>netctl</code>的配置文件，只编辑<code>/etc/systemd/network/eth0.network</code>这个配置文件改成静态IP地址就好了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[Match]
</span></span><span class="line"><span class="cl">Name=eth0
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Network]
</span></span><span class="line"><span class="cl">Address=192.168.xxx.xxx/24
</span></span><span class="line"><span class="cl">Gateway=192.168.xxx.1
</span></span><span class="line"><span class="cl">DNS=8.8.8.8
</span></span></code></pre></div><p>重启系统后，使用<code>ip addr</code>检查设备的IP地址是否正确。</p>
<h3 id="配置防火墙">配置防火墙</h3>
<p>首先安装<code>ufw</code>。（因为对iptables不是十分熟悉，ufw比ip桌子好用一些，毕竟他叫<strong>Uncomplicated Filewall</strong>，所以咱先用ufw配置防火墙）</p>
<p>食用方法请参见<a href="https://wiki.archlinux.org/title/Uncomplicated_Firewall">Wiki页面</a>。</p>
<p>因为咱打算搭一个Samba服务器，所以别忘了配置防火墙允许Samba的端口，按照Arch Linux Wiki：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># Create or Edit /etc/ufw/applications.d/samba, add following content:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[Samba]
</span></span><span class="line"><span class="cl">title=LanManager-like file and printer server for Unix
</span></span><span class="line"><span class="cl">description=Samba
</span></span><span class="line"><span class="cl">ports=137,138/udp|139,445/tcp
</span></span></code></pre></div><p>之后root账户执行<code>ufw app update Samba</code>加载配置文件，然后<code>ufw allow Samba</code>允许Samba的端口。</p>
<p>如果你的树莓派上还装有其他服务（比如http，https等），别忘了<code>ufw allow PORT</code>开放端口，尤其是别忘了开SSH端口。</p>
<p>最后<code>ufw status</code>查看防火墙状态信息，<code>ufw enable</code>开启防火墙。</p>
<h2 id="samba">Samba</h2>
<p>配合<a href="https://wiki.archlinux.org/title/Samba">Arch Wiki</a>食用。</p>
<p>首先我们需要新建一个分组，然后在挂载的分区中新建一个文件夹作为Samba服务器的共享目录：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">$ sudo groupadd -r sambausers          # 新建用户组
</span></span><span class="line"><span class="cl">$ sudo usermod -aG sambausers username # 添加当前用户至分组中
</span></span><span class="line"><span class="cl">$ sudo smbpasswd -a sambausers         # 设置Samba用户的密码
</span></span><span class="line"><span class="cl">$ sudo mkdir /samba/sharefolder        # 新建文件夹用来存储共享的文件
</span></span><span class="line"><span class="cl">$ sudo chown :username /samba/sharefolder   # 修改文件夹的所属分组
</span></span><span class="line"><span class="cl">$ sudo chmod 0770 /samba/sharefolder   # 修改权限
</span></span></code></pre></div><p>（咱写的很详细了吧</p>
<h3 id="配置服务器">配置服务器</h3>
<p>安装好<code>samba</code>安装包后，需要手动去<code>/etc/samba/</code>创建<code>smb.conf</code>配置文件，可以到<a href="https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD">Samba git repository</a>中获取样例配置文件，咱只需要把它复制粘贴再简单修改一下就好了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl"># /etc/samba/smb.conf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[global]
</span></span><span class="line"><span class="cl"># 修改工作组的名字
</span></span><span class="line"><span class="cl">workgroup = MYGROUP
</span></span><span class="line"><span class="cl"># 服务器描述
</span></span><span class="line"><span class="cl">server string = Raspberry pi Samba Server
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># 在文件末尾添加共享文件夹目录及相关配置
</span></span><span class="line"><span class="cl">[sambashare]
</span></span><span class="line"><span class="cl">comment = Sample share file.
</span></span><span class="line"><span class="cl">path = /path/to/your/samba/folder
</span></span><span class="line"><span class="cl">writable = yes
</span></span><span class="line"><span class="cl">browsable = yes
</span></span><span class="line"><span class="cl">create mask = 0755
</span></span><span class="line"><span class="cl">directory mask = 0755
</span></span><span class="line"><span class="cl">read only = no
</span></span><span class="line"><span class="cl">guest ok = no  # 允许访客随意登录
</span></span></code></pre></div><p>配置好文件后，启动<code>smb.service</code>和<code>nmb.service</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo systemctl <span class="nb">enable</span> --now smb.service
</span></span><span class="line"><span class="cl">$ sudo systemctl <span class="nb">enable</span> --now nmb.service
</span></span></code></pre></div><h3 id="访问服务器">访问服务器</h3>
<p>咱GNOME用户直接打开文件管理器，选择左边的“+ Other Locations”，在底部输入服务器连接<code>smb://192.168.xxx.xxx</code>，
输入用户组、用户名和密码登录就可以访问共享文件夹。</p>
<p>Windows系统中，首先需要到 控制面板-&gt;程序-&gt;启用或关闭Windows功能 里面，选中 SMB1.0/CIFS文件共享直通，保存后等一会安装完，
打开文件资源管理器输入地址<code>\\192.168.xxx.xxx\</code>，登录后就能访问共享文件夹了。</p>
<h2 id="frp内网穿透">Frp内网穿透</h2>
<blockquote>
<p>配合<a href="https://gofrp.org/docs/">frp文档</a>食用更佳</p>
</blockquote>
<p>首先在frp的<a href="https://github.com/fatedier/frp/releases">GitHub Release</a>页面下载安装包。</p>
<p>如果是树莓派用的话就下载<code>arm</code>版本的安装包即可。Arch Linux可以在ArchLinux CN源或AUR中安装<code>frpc</code>和<code>frps</code>作为客户端和服务端。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="c1"># 树莓派上下载编译好的文件</span>
</span></span><span class="line"><span class="cl">$ wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_arm.tar.gz
</span></span><span class="line"><span class="cl"><span class="c1"># 解压</span>
</span></span><span class="line"><span class="cl">$ tar -zxvf ./frp_0.37.1_linux_arm.tar.gz
</span></span><span class="line"><span class="cl">$ <span class="nb">cd</span> frp_0.37.1_linux_arm/
</span></span><span class="line"><span class="cl"><span class="c1"># 编辑配置文件</span>
</span></span><span class="line"><span class="cl">$ vim ./frpc.ini
</span></span><span class="line"><span class="cl">$ ./frpc -c ./frpc.ini
</span></span></code></pre></div><p>客户端配置文件的格式可参考如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[common]
</span></span><span class="line"><span class="cl">server_addr = server ip
</span></span><span class="line"><span class="cl">server_port = 6000
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[samba]
</span></span><span class="line"><span class="cl">type = tcp
</span></span><span class="line"><span class="cl">local_ip = 127.0.0.1
</span></span><span class="line"><span class="cl">local_port = 445
</span></span><span class="line"><span class="cl">remote_port = 6003
</span></span></code></pre></div><p>其中端口号和<code>token</code>按需要自行更改，Samba服务的<code>tcp</code>端口号为<code>445</code>。</p>
<p>服务端配置文件格式如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[common]
</span></span><span class="line"><span class="cl">bind_port = 6000
</span></span></code></pre></div><p>为了安全，别忘了配置<a href="https://gofrp.org/docs/reference/server-configures/#%E6%9D%83%E9%99%90%E9%AA%8C%E8%AF%81">权限验证</a>，同时别忘了修改服务器的防火墙设置。</p>
<h2 id="others">Others</h2>
<p>所以到此为止，咱的Samba服务器就搭建好了。</p>
<p>随便传了个大文件试了一下，内网上传速度在6MB/S左右，有些慢但是还没搞清楚到底是什么原因导致的。</p>]]></content:encoded>
    </item>
  </channel>
</rss>
