分享

真香!用99元的开发板,搭配旧机械硬盘,diy属于自己的NAS

 HDTV 2025-04-02
最近给自己换了台电脑,顺便花6000预算整了一台NAS。上手之后,发现我自己用的就是最简单的文件共享和文件同步的功能。作为一个嵌入式开发者,为了这点功能花了6000我觉得有点亏啊。
我去研究了一下NAS的基本原理。发现基本原理比我想得简单啊。只要实现了磁盘管理和文件共享或者同步,就算实现了最基本的NAS。
于是我最近琢磨着把手里的Linux开发板和拆机的旧硬盘利用起来,自己动手,DIY一台低成本的NAS。
图片

Linxu开发板就选择这个99块钱入手了的T113-i开发板,之前针对这个板子写了一个开箱体验(链接:逆天!一个双核ARM+RISC-V开发板是怎么做到只卖99元的?),而且最近也一直在玩它,所以直接在这个上面做算是轻车熟路了。

图片

选择这个板子还有一个最主要的原因,那就是这个板子上有个千兆以太网口,做NAS可太合适了。这块板子我是在创龙科技天猫店购买的,链接如下,感兴趣的朋友可以复制链接到淘宝客户端查看详细介绍或下单:

https://detail.tmall.com/item.htm?abbucket=10&id=726108272124

在这个开发板上实现NAS其实也很简单。首先是在开发板上跑Linux系统,这个不用我们操心,买到的板子已经能跑Linux系统了,我们只需修改一下配置重新编译烧录就行。然后在Linux上面跑一个软件用来管理磁盘,实现各种RAID阵列。要实现这个功能,有mdadm、LVM、Cockpit、GNOME Disks等等。这里推荐使用mdadm,只需要两个简单的指令,就可以把挂在开发板上的机械硬盘做成你想要的阵列。

然后再使用NFS或者Samba把这个阵列里的文件夹共享出去就行,这样你就可以使用局域网内的其他设备来访问这个共享文件夹了。这里推荐使用Samba来实现这个功能,配置也很简单,只需要修改一下配置文件,再启动服务就可以了。

整套操作非常简单,我也把整个过程详细记录下来了,甚至没有Linux开发经验的人,跟着操作也能实现这套NAS最基本的功能。

接下来是详细操作步骤:

一、Linux开发环境搭建与SDK编译、固件烧录

图片

这是拿到的开发板资料包。首先要跟着这套资料,打通最基本的开发环境准备、固件烧录等基本流程。

图片

其中4-软件资料/Linux/LinuxSDK下面的LinuxSDK-v2.1.tar.gz这个压缩包里的内容就是SDKdl.tar.gz这个压缩包里的内容是一些开源软件包。

图片

先根据 3-用户手册 目录下的《1-2-Linux开发环境搭建.pdf》来安装虚拟机VMWare,并在VMWare中安装Ubuntu操作系统。

虚拟机安装好之后,按这个文档继续完成共享目录的配置。后续我们的开发都是在虚拟机中的Ubuntu上完成的,主机和Ubuntu之间有许多文件和数据需要交互,所以需要配置好共享目录。我这边是通过samba实现的文件共享的。

解压SDK,配置编译环境,完整编译

图片

根据《3-1-Linux系统使用手册.pdf》这份文档,安装依赖软件、解压LinuxSDK、解压Buildroot dl、执行./build.sh config进行配置。

图片

这里有一点和文档中不一样的是:我买的板子是emmc版本,所以在这一步输入6即可。

接下来使用./build.sh命令进行一次全部编译。

图片

根据文档可知,编译大概需要20来分钟,这个时间可以冲一杯咖啡喝一下,如果喝完咖啡还没编译好,建议向老婆申请换个新电脑。

图片

编译完之后,出现了这个界面,太爽了,跟着文档走,效率就是高。

图片

接下来使用./build.sh pack命令把编译好的固件进行打包。至于为啥要打包,打包过程是如何进行的,这个在《3-1-Linux系统使用手册.pdf》这份文档里都有非常详细的说明。打包好的固件叫“t113_i_linux_tlt113-minievm-emmc_uart0.img”,路径在/t113/tina5.0_v1.0/out/下面。

图片

接下来要做的是把固件烧录到开发板上,我们参考的文档是《3-3-eMMC配置核心板使用说明.pdf》。在文档的这一步,我们需要把上面编译的那个固件从共享文件夹拷贝到本地电脑进行烧录。

图片

根据文档提示,插入SD卡之后,打开PhoenixCard V4.2.7软件之后,就可以看到我插入的16G SD卡被识别,这时候选择固件为我们前面编译好的,然后选择量产卡,再点击烧卡按键即可。

图片

成功把固件写入到SD卡,我理解的这一步和我们安装PC操作系统的时候制作启动U盘是一个意思。

图片

接下来把SD卡插入开发板之后,重新给开发板上电。

图片

Windows端使用串口工具连接开发板的串口,打印出以上log,根据文档可知:'card no is 0'表示Micro SD 模式启动,'card no is 2'表示eMMC 模式启动。那么现在是通过SD卡启动成功了。接下来给开发板断电、拔掉SD卡,重新上电,就会从eMMC启动。

在这一个章节里,我们跟随资料中文档的指引,完成了开发环境搭建、SDK首次编译、SD启动卡制作、固件烧录到eMMC等操作。这也是开发T113的一般流程,掌握了这一套流程,我们就可以进行后续的开发了。

二、配置磁盘管理工具mdadm

NAS最基本的功能就是磁盘管理,一个NAS往往可以安装多个硬盘,通过软件把硬盘设置为不同的RAID阵列,从而实现数据冗余备份、加快写入读取等。在Linux上我们可以通过mdadm这个工具来实现磁盘的RAID阵列。

mdadmMultiple Device Administrator) 是 Linux 系统下的一个软件 RAID(独立磁盘冗余阵列)管理工具,用于创建、管理、监控和修复软件 RAID 阵列。它支持多种 RAID 级别(如 RAID 0RAID 1RAID 5RAID 6RAID 10 等),并允许用户将多个物理磁盘组合成一个逻辑存储设备。

要把T113开发板配置为NAS使用,就需要先让它支持mdadm

使用./build.sh buildroot_menuconfig命令打开buildroot配置界面。

图片

Target packages -> Hardware handling中找到mdadm,使能它。

然后使用./build.sh menuconfig命令,打开内核配置界面。

图片

Device Drivers中找到“Multilpe devices driver supportRAID and LVM)”,使能它。

然后在这个选项上选择Selcet并回车就可以进入详细的配置界面:

图片

使能RAID-0RAID-1RAID-10RAID-4\5\6等模式,考虑到T113的资源够用,不用太扣扣嗖嗖,我索性直接下面这些也勾选上了。

完成以上配置,保存并退出配置界面。

接下来重新编译SDK、打包固件、把固件烧录到开发板,这些操作我们第一章有详细介绍,这里不再赘述。

图片

接下来,把T113开发板使用网线连接到路由器上,确保它和电脑处于同一个局域网。然后使用USBSATA接口的转接线把一个闲置的3.5500GB机械硬盘连接到T113开发板。最后,使用USB线一端连接电脑,一端连接到T113CON1连接器(串口调试及供电TypeC口)。

图片

打开MobaXterm软件,点击Session来新建一个对话,然后在弹出的界面里选择Seriel,端口选择USB-SERIAL-CH340这个,在后面的波特率栏中填入115200,然后点击下面的OK

图片

在这个界面里回车一下,就会弹出root@T113-Tronlong:~#的字样,这说明我们以root权限登录到了T113开发板。

使用lsblk命令查看:

图片

这里已经可以看到这个机械硬盘了,显示实际容量是465.8G

图片

接下来使用mdadm --create /dev/md0 --level=0 --raid-devices=1 /dev/sda命令来创建RAID0阵列,但是提示了一个错误,这是因为mdadm认为单个磁盘实现RAID0是不常见的配置(因为 RAID 0 通常需要至少 2 块盘才能发挥条带化性能优势),但是我手头现在只有一个限制的机械硬盘,所以根据建议,添加—focus参数强制执行。

mdadm --create /dev/md0 --level=0 --raid-devices=1 --force /dev/sda

中间会询问是否要继续创建阵列,输入yes并回车即可。通过这样的操作,就成功地创建了RAID0阵列。

图片

通过以下两个命令都可以查看RAID设备的状态。

cat /proc/mdstat

mdadm --detail /dev/md0

可以看到RAID设备处于ACTIVE状态。

图片

使用命令mkfs.ext4 /dev/md0RAID设备格式化为ext4格式。这一步操作大概1分钟左右完成,中间不需要输入任何字符。

图片

创建/mnt/raid目录,并使用mount /dev/md0 /mnt/raid命令挂载RAID设备。然后使用df -h | grep md0查看是否挂载成功。上面的结果说明RAID 0 设备 /dev/md0 已成功挂载到 /mnt/raid

图片

使用dd命令来验证写入和读取性能。

图片

到这里,已经完成了RAID0阵列的创建,但是实际上只有一个硬盘,单个硬盘做raid阵列实际上没啥意义。后续增加其他硬盘之后,可以通过以上命令进行扩容。

多盘RAID0阵列可以提高写入速度,但是会增加数据丢失风险,因为任何一个硬盘故障都会导致数据全部丢失,所以可以换成RAID1(镜像数据)或者RAID5/6(校验冗余u)来提高数据的安全性。

三、NFS文件共享

对于一个NAS系统来说,磁盘阵列管理是基本操作,而文件共享、同步等功能才是一个NAS最关键的功能。我们先在T113的开发板上实现文件共享功能。

要实现文件共享功能,有很多工具,比如SambaNFS等等,但是我在编译系统的时候,无意间看到《3-1-Linux系统使用手册.pdf》这个文档中第十一章居然就是”NFS使用说明。也就是说创龙已经在这个T113开发板上部署好了NFS功能,我们直接用就行。但是当我仔细看这一章的内容时,发现他们是在PC端的Ubuntu系统上部署了NFS服务器,而在T113开发上以客户端的角色进行访问。但是我们要的效果是,使用T113开发板部署NFS服务器,然后用其他设备进行访问。所以接下来开始配置:

图片

使用./build.sh menuconfig命令打开内核配置界面,在File systems -> Network File Systems中找到NFS server support并使能它。保存并推出配置界面,然后重新编译SDK,打包固件,烧录到开发板。

注意:烧录固件之后相当于T113被重装了系统,所以要重新配置一遍硬盘阵列管理与挂载那一套流程。

图片

登录T113开发板,重新配置RAID阵列之后,使用ls /etc/init.d/ | grep -E 'nfs|rpcbind'命令查看 NFS 服务端 和 rpcbind是否已经安装好。结果显示已经安装,并且配置了开机脚本。

图片

接下来配置NFS服务器。指令中/mnt/raid指定要共享的本地目录路径,192.168.10.0/24 表示允许 192.168.10.1  192.168.10.254 的所有 IP 访问,如果只允许某个IP地址访问,把192.168.10.0/24修改为对应的IP地址就行,比如192.168.10.100

(rw,sync,no_subtree_check,no_root_squash)是权限控制参数,其中rw允许客户端进行读写;sync同步写入,保证数据的一致性;no_subtree_check禁用子树检查,提高性能;no_root_squash允许客户端root用户保持超级权限,这个很危险,但是如果只有自己在局域网内使用,还可以这么设置。

图片

接下来使用/etc/init.d/S30rpcbind start命令启动rpcbind,发现已经有另一个rpcbind在运行,需要先使用/etc/init.d/S30rpcbind stop命令停止正在运行的rpcbind。然后使用killall -9 rpcbind完全清理相关进程并使用rm -f /var/run/rpcbind.pid命令清除可能残留的PID文件。

重新启动rpcbind之后,可以使用ps aux | grep rpcbind命令来验证是否启动成功。从结果里看到rpcbind进程正在运行。

现在就可以使用/etc/init.d/S60nfs restart命令启动nfs服务了。可以使用rpcinfo -p来查看nfs服务状态。使用exportfs -v命令检查共享是否生效,结果如上图显示,说明已生效。

这样我们就可以在其他设备上访问这个文件夹了,但是在访问前需要使用ifconfig来查看T113开发板在局域网内的IP地址。

图片

查看可知T113开发板的IP192.168.10.105

1、使用Ubuntu作为客户端进行访问

图片

打开Ubuntu的终端。先使用sudo mkdir -p /mnt/nfs_share命令创建一个文件夹。

然后使用sudo mount -t nfs 192.168.10.105:/mnt/raid /mnt/nfs_share命令把T113上的共享文件夹挂载到刚才创建的文件夹上。其中192.168.10.105T113开发板在局域网内的IP地址。

使用df -h | grep nfs可以查看是否挂载成功。看到结果显示458G的内容,就知道已经成功挂载了。

图片

尝试在这个共享文件夹里创建文件结果提示权限不足。看来是T113上这个共享文件需要修改一下权限。

图片

回到T113,使用chmod 777 /mnt/raid为共享目录设置完全访问权限。再使用/etc/init.d/S60nfs restart命令重新启动nfs服务器。

图片

接下来在Ubuntu里尝试再次创建文件并写入内容,成功,而且可以读取内容。

图片

使用dd命令分别测试1GB的大文件写入和1MBx1000次的小文件写入,速度如下:

1GB的大文件写入速度:22.5MB/s

1MBx1000次的小文件写入速度:13.6MB/s

这里面简单分析一下:千兆以太网接口,理论最大写入速度应该能到100MB/s左右,而测试大文件只有22.5MB/s,大概率是USB2.0接口及USBSATA这部分限制了写入速度。但是,总体来说,这个速度还是可以了。

2、使用Windows作为客户端进行访问

windows下访问这个NFS共享文件系统,需要先打开Windows上的NFS组件。具体操作如下:

打开“控制面板” -> “程序”-> “程序和功能” -> “启用或关闭Windows功能”。查找并确认“Services for NFS”下的“Client for NFS”选项已被选中。

注意:只有Windows专业版和企业版可以使用这个功能,家庭版系统原生不支持,需要使用第三方工具。

图片

接下来,打开CMD(命令提示行),注意,不要使用Windows Terminal或者Power Shell之类的。在命令提示符后面输入以下指令并按下回车:

图片

很不幸,在这一步遇到这个这个-53错误问题。

图片

在资源管理器里输入IP地址是可以看到这个共享文件夹的,但是不能访问。上网查阅相关资料并做了各种尝试。最终还是没能解决这个问题,来有Windows参与时真不适合用NFS做文件共享。

四、Samba文件共享

由于Windows下使用NFS总会出现一些奇奇怪怪连接不上的问题,但是还有另外一款文件共享工具,那就是Samba。其实SambaNFS的使用更广泛。我Windows主机和Ubuntu虚拟机之间就是通过Samba来共享文件的。,所以我们也试试Samba

图片

先使用命令./build.sh buildroot_menuconfig进入buildroot配置界面,进入Target packages -> Networking applications,然后往下翻找到samba4并使能,使能之后,下面会多出三个选项,把这三项也使能,然后保存退出。

接下来还是同样的流程,清除编译、编译。打包、烧录到开发板。但是配置了samba之后进行编译会报一个错误。

图片

错误提示和python有关,原因是工具链对应的python没有指向python2,实际指向python3

sudo ln -sf /home/mzw/t113/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin/python2.7/home/mzw/t113/tina5.0_v1.0/out/t113_i/tlt113-minievm-emmc/buildroot/buildroot/host/bin/python

通过以上命令设置软链接,即可解决编译问题。再次编译打包烧录固件到开发板。

图片

等开发板正常启动后,输入samba –version来查看samba的版本。返回的结果是Version 4.9.5,说明已经成功把samba安装在了开发板上。

使用vi /etc/samba/smb.conf命令创建并打开samba配置文件,输入以下内容。

[global]  workgroup = WORKGROUP  security = user  map to guest = Bad User  # 将无效用户映射为访客  guest account = nobody   # 访客身份为nobody[share]  path = /mnt/samba/share  browsable = yes  read only = no  guest ok = yes           # 允许匿名访问  guest only = yes         # 强制所有用户以访客身份访问  create mask = 0777       # 创建文件权限  directory mask = 0777    # 创建目录权限

然后通过后台启动smbdnmbd即可

图片

启动进程之后,可以使用命令ps -ef  | grep smb来查看进程是否已启动。

接下来就可以在windows端的资源管理器路径框输入\\192.168.10.108\share进行访问:

图片

输入地址并回车之后,就可以进入到T113共享的文件夹。我在做samba共享的时候,没有使用mdadm工具来做磁盘阵列,而是直接共享的T113eMMC。如果想要共享磁盘阵列中文件,按照第二章mdadm部分的内容进行配置并共享即可。

使用Ubuntu主机也可以进行访问。

先在Ubuntu端安装samba客户端:sudo apt install smbclient

然后创建本地挂载点:sudo mkdir -p /mnt/samba_share

挂载共享目录:sudo mount -t cifs //192.168.10.108/share /mnt/samba_share -o guest,uid=$(id -u),gid=$(id -g)

其中:-t cifs:指定文件系统类型为CIFS/SMB;-o guest:匿名访问;uid/gid:将文件权限映射到当前用户

图片

接下来就可以在/mnt/samba_share这里看到共享的文件了,也可以在这里新建文件,新建好的文件也可以在其他客户端看到并操作。

五、总结

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多