引言:为什么选择 Arch Linux ARM 搭建 NAS?
在当今数据爆炸的时代,拥有一个私人云存储(NAS)已成为许多技术爱好者和家庭用户的刚需。相比于昂贵的商业 NAS 设备,利用闲置的单板计算机(如树莓派、Rockchip 或 Allwinner 开发板)搭建 NAS 不仅成本低廉,而且灵活性极高。Arch Linux ARM 正是这一领域的佼佼者。
Arch Linux ARM 是 Arch Linux 的 ARM 架构移植版,它继承了 Arch Linux 的核心哲学:KISS(Keep It Simple, Stupid)、轻量级、滚动更新以及极其丰富的软件库。对于 NAS 搭建而言,它的优势在于:
极低的资源占用
:系统本身极其精简,能将更多资源留给存储服务和应用。
最新的软件版本
:滚动更新机制让你能第一时间享受到 Samba、NFS 等服务的最新特性和性能优化。
高度可定制
:你可以只安装需要的组件,打造一个完全符合你需求的存储系统。
本指南将详细指导你如何在 Arch Linux ARM 设备上,从零开始配置 Samba(用于 Windows/macOS 跨平台共享)和 NFS(用于 Linux/Unix 高性能共享),实现一个高效、稳定的 NAS 系统。
第一部分:系统基础准备与存储挂载
在配置服务之前,确保你的 Arch Linux ARM 系统已经正常运行,并且网络连接稳定。本节重点在于如何正确识别、格式化并挂载你的硬盘。
1.1 存储设备识别与分区
首先,我们需要确定你的存储设备(如 USB 移动硬盘、SATA 硬盘或 SSD)在系统中的设备名。
使用
lsblk
命令查看当前的块设备:
lsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 29.5G 0 part /
在这个例子中,
mmcblk0
是系统 SD 卡,
sda
是外接的 1.8TB 硬盘。
请务必根据实际情况确认你的硬盘设备名,操作错误会导致数据丢失!
假设我们的硬盘是
/dev/sda
,接下来我们使用
cfdisk
进行分区(如果硬盘已有分区可跳过):
sudo cfdisk /dev/sda
在交互界面中:
选择 “Label type” 为
gpt
(现代标准)。
选择 “New” 创建新分区,大小填满剩余空间。
选择 “Type”,设置类型为
Linux filesystem
(代码
8300
)。
选择 “Write” 并输入
yes
确认写入。
选择 “Quit” 退出。
1.2 文件系统创建与挂载
分区完成后,需要格式化分区。推荐使用
ext4
,它稳定且兼容性好;如果需要高级特性(如快照、压缩),可以考虑
btrfs
。这里以
ext4
为例:
# 格式化 /dev/sda1 分区为 ext4 文件系统
sudo mkfs.ext4 -L NAS_DATA /dev/sda1
挂载硬盘:
为了实现开机自动挂载,我们需要修改
/etc/fstab
文件。首先获取分区的 UUID:
sudo blkid /dev/sda1
输出示例:
/dev/sda1: LABEL=”NAS_DATA” UUID=”a1b2c3d4-e5f6-7890-1234-567890abcdef” BLOCK_SIZE=”4096″ TYPE=”ext4″ PARTUUID=”…”
复制 UUID 字符串。然后编辑 fstab:
sudo nano /etc/fstab
在文件末尾添加一行(将
替换为你刚才复制的值):
# NAS 数据盘自动挂载配置
UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef /mnt/nas ext4 defaults,noatime 0 2
/mnt/nas
: 挂载点目录(需先创建:
sudo mkdir /mnt/nas
)。
defaults
: 使用默认挂载选项。
noatime
:
性能优化关键
,禁止记录文件访问时间,能显著减少磁盘写入操作。
最后测试挂载是否生效:
sudo mount -a
df -h /mnt/nas
第二部分:Samba 服务配置(跨平台共享)
Samba 是实现 Windows 和 macOS 无缝访问 Linux 文件共享的标准协议。
2.1 安装与基础配置
安装 Samba 软件包:
sudo pacman -S samba
Samba 的核心配置文件位于
/etc/samba/smb.conf
。我们需要对其进行编辑以适应 NAS 场景。
sudo nano /etc/samba/smb.conf
高效配置方案示例:
删除原有内容,填入以下配置。这个配置针对低功耗 ARM 设备进行了优化,开启了 VFS 模块并调整了网络缓冲区。
[global]
workgroup = WORKGROUP
server string = Arch Linux ARM NAS
server role = standalone server
security = user
map to guest = Bad User
# — 性能优化部分 —
# 启用 TCP_NODELAY,减少网络延迟
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
# 限制同时连接数,防止 ARM 设备过载
max connections = 50
# 启用 sendfile,提升大文件传输效率
use sendfile = yes
# — 日志与锁定 —
log file = /var/log/samba/log.%m
max log size = 50
locking = yes
# 定义一个共享目录,例如“公共存储”
[NAS_Public]
comment = Public Shared Storage
path = /mnt/nas/public
browseable = yes
writable = yes
guest ok = yes
create mask = 0664
directory mask = 0775
# 定义一个私有目录,需要用户名密码访问
[NAS_Private]
comment = Private User Storage
path = /mnt/nas/private
browseable = yes
writable = yes
valid users = archuser
create mask = 0600
directory mask = 0700
2.2 创建共享目录与用户
根据上面的配置,我们需要在硬盘上创建对应的目录:
sudo mkdir -p /mnt/nas/public
sudo mkdir -p /mnt/nas/private
# 赋予适当的权限,确保 Samba 可以读写
sudo chmod -R 775 /mnt/nas/public
sudo chown -R nobody:nogroup /mnt/nas/public
接下来,创建一个系统用户用于 Samba 登录(如果已有用户可跳过):
# 添加系统用户 archuser (不登录系统,仅用于 Samba)
sudo useradd -M -s /sbin/nologin archuser
将该用户添加到 Samba 用户数据库中(
这一步很重要,Samba 不使用系统密码
):
# 执行后会提示输入密码,这个密码用于访问 NAS_Private 共享
sudo smbpasswd -a archuser
2.3 启动服务
启用并启动 Samba 服务:
sudo systemctl enable smb.service nmb.service
sudo systemctl start smb.service nmb.service
测试配置是否正确:
使用
testparm
命令检查语法:
testparm
如果看到 “Loaded services file OK”,说明配置无误。
第三部分:NFS 服务配置(Linux/Unix 高性能共享)
NFS(Network File System)是 Linux 系统之间共享文件的标准协议,相比 Samba,它在处理大量小文件和高并发读写时通常有更低的 CPU 开销和更高的吞吐量,非常适合虚拟机存储后端或 Linux 服务器之间的数据同步。
3.1 安装与配置
安装 NFS 服务端软件包:
sudo pacman -S nfs-utils
NFS 的配置非常简单,主要通过
/etc/exports
文件定义共享权限。
编辑 exports 文件:
sudo nano /etc/exports
高效配置方案示例:
这里我们共享
/mnt/nas/private
目录,仅允许局域网网段
192.168.1.0/24
访问。
# 格式: [共享目录] [客户端IP/网段(选项)]
# async: 异步写入,提升性能,但存在断电丢数据风险(NAS常用选项,权衡性能与安全)
# no_subtree_check: 禁用子树检查,提升稳定性
# rw: 读写权限
# root_squash: 映射 root 用户为匿名用户,提高安全性
/mnt/nas/private 192.168.1.0/24(rw,async,no_subtree_check,root_squash)
选项详解:
rw
: 允许读写。
async
: 数据写入内存即返回成功,由后台慢慢写入磁盘。
这是提升 NFS 性能的关键选项
,特别适合写入频繁的场景。
no_root_squash
: 默认情况下,客户端的 root 用户会被映射为服务端的 nobody 用户。如果你在客户端需要保留 root 权限(例如挂载虚拟机镜像),可以使用此选项,但会带来安全风险,
生产环境慎用
。
3.2 启动服务
NFS 依赖于 RPC 服务,需要启动
rpcbind
和
nfs-server
。
sudo systemctl enable rpcbind.service nfs-server.service
sudo systemctl start rpcbind.service nfs-server.service
导出共享目录:
修改
/etc/exports
后,不需要重启服务,只需运行以下命令即可生效:
sudo exportfs -ra
查看当前导出的目录:
showmount -e localhost
第四部分:防火墙配置与安全加固
如果你的 Arch Linux ARM 开启了防火墙(如
ufw
或
firewalld
),必须放行相关端口,否则无法连接。
4.1 端口说明
Samba
: 端口 137, 138 (UDP) 和 139, 445 (TCP)。
NFS
: 端口 2049 (TCP/UDP) 以及 RPCbind 的 111 端口。
4.2 使用 UFW 配置(推荐)
如果你使用
ufw
(需安装:
sudo pacman -S ufw
):
# 允许 SSH (确保你不会把自己锁在外面)
sudo ufw allow ssh
# 允许 Samba
sudo ufw allow samba
# 允许 NFS (注意:ufw 对 NFS 的支持可能需要手动添加端口)
sudo ufw allow 111/tcp
sudo ufw allow 111/udp
sudo ufw allow 2049/tcp
sudo ufw allow 2049/udp
# NFS 动态端口可能比较麻烦,建议在内网环境直接允许所有来自局域网的流量
sudo ufw allow from 192.168.1.0/24
# 启用防火墙
sudo ufw enable
第五部分:客户端连接测试
5.1 Windows 客户端
打开“文件资源管理器”。
在地址栏输入:
\\192.168.1.X
(你的 NAS IP)。
如果访问
NAS_Public
,直接进入(匿名访问)。
如果访问
NAS_Private
,会弹出登录框,输入之前设置的
archuser
和
smbpasswd
密码。
5.2 Linux 客户端 (挂载 NFS)
在另一台 Linux 机器上执行:
# 1. 安装 NFS 客户端工具
sudo apt install nfs-common # Debian/Ubuntu
sudo pacman -S nfs-utils # Arch
# 2. 创建挂载点
sudo mkdir /mnt/nas_client
# 3. 挂载测试
sudo mount -t nfs 192.168.1.X:/mnt/nas/private /mnt/nas_client
# 4. 测试读写
touch /mnt/nas_client/test_file
开机自动挂载 NFS:
编辑
/etc/fstab
:
192.168.1.X:/mnt/nas/private /mnt/nas_client nfs defaults,noatime,_netdev 0 0
_netdev
: 告诉系统这是一个网络设备,等网络启动后再挂载,防止开机卡死。
第六部分:ARM 设备的性能优化与维护
在 ARM 设备上运行 NAS,性能和寿命是关键。
6.1 存储挂载优化 (noatime)
我们在第一部分已经提到了
noatime
。对于频繁读写的 NAS,这能显著减少 I/O 操作。如果你的硬盘支持,还可以启用
barrier=0
(仅限 UPS 供电环境,否则有数据丢失风险)或
commit=60
(每 60 秒提交一次日志,减少写入频率)。
6.2 网络性能优化
ARM 设备的网卡通常是 USB 或 SoC 集成,性能有限。在
/etc/samba/smb.conf
中的
socket options
设置缓冲区大小非常重要。如果网络传输速度慢且 CPU 占用高,尝试调整缓冲区:
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
6.3 定期维护
更新系统
:Arch Linux 滚动更新,建议每周运行一次
sudo pacman -Syu
。
检查硬盘健康
:安装
smartmontools
(
sudo pacman -S smartmontools
) 并定期检查:
sudo smartctl -a /dev/sda
日志清理
:Samba 日志可能会增长,建议配置 logrotate 或定期清理。
总结
通过以上步骤,你已经成功在 Arch Linux ARM 设备上搭建了一个功能强大的 NAS 系统。我们配置了 Samba 用于日常跨平台文件访问,配置了 NFS 用于高性能内部传输,并针对 ARM 设备的特性进行了性能调优。
这种方案相比商业 NAS,不仅成本极低,而且赋予了你完全的控制权。你可以在此基础上扩展 Docker 容器(如 Plex、Nextcloud),将其打造为家庭数据中心的核心。享受你的自建 NAS 之旅吧!