百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

2. 玩转树莓派——NAS搭建

itomcoil 2025-02-13 12:30 17 浏览

Raspberry Pi搭建NAS

  1. 文件格式选择


优点

缺点

EXT4

读写速度快

支持的最大卷为1EB,单个文件最大为16TB

BTRFS

支持快照、RAID、针对SSD优化

读写速度比EXT4慢,稳定性有待验证

毫无疑问,若要稳定使用,选EXT4,想自己折腾自己,考虑BTRFS吧。

我买了个2T的3.5寸SATA3硬盘,树莓派的USB2.0接口是提供不了需要的电源,而且接口不对,所以额外买了USB2.0和SATA接口互转的线和电源线(转接线上要有专门留出电源接口的)。

格式化硬盘:

#需先确认哪块硬盘需要格式化
sudo mkfs.ext4 /dev/sda
sudo fdisk -l
sudo mount /dev/sda /home/pi/nas
#mount到用户目录下,避免权限问题
#如果mount到/mnt/nas则需执行命令,以便读写
#sudo chmod -R 777 /mnt/nas 
#设置开机启动自动挂载(注意配置错误可能导致无法启动或SSH连接上)
#sudo vi /etc/fstab
#/dev/sda    /home/pi/nas    ext4    auto,noatime,rw,sync    0    2
#sudo reboot
  1. 协议选择


优点

NFS

速度快

SMB

基于NetBIOS,Windows兼容

DLNA

速度快,适用于多媒体播放

100Mb局域网下,实测SMB速度在13-26Mb/s,平均17Mb/s,而NFS稳定在10-12Mb/s。(本人表示很奇怪,理论上最大速度当为100Mb/8=12.5MB/s,SMB传输速度为何能高出)

  1. NFS
    • 安装NFS
sudo apt-get update 
# nfs-common已安装 
# 默认使用rpcbind而不是portmap 
sudo apt-get install -y nfs-kernel-server
    • 配置NFS
# 共享目录必须存在 
# /etc/exports第一列表示共享目录,第二列表示授权访问主机,可以是域名、IP,括号内的是选项 
# 选项解释: 
#     rw代表读写权限,ro代表只读权限。sync代表文件同步写入内存和磁盘,async代表文件先写入内存,必要时再写入磁盘。 
#     no_root_squash代表客户端用root访问时,共享文件也拥有root权限。root_squash代表客户端用root访问时,对分享目录有匿名用户权限。all_squash代表客户端总是只有匿名用户权限。 
#     anonuid代表匿名用户的uid,默认为nobody。anongid代表匿名用户的gid。 
sudo vi /etc/exports 
/home/pi/nas 192.168.1.0/24(rw,sync) 
# sudo /etc/init.d/nfs-kernel-server restart 
sudo systemctl restart nfs-server 
# 如果启动失败,根据提示查看原因(一般都是配置写错了) 
sudo systemctl status nfs-server.service
    • Windows客户端配置启用NFS支持

控制面板 --> 程序和功能 --> 启用或关闭Windows功能 --> NFS服务

    • 挂载网络驱动
mount 192.168.1.99:/home/pi/nas X: 
#如果想开机自动挂载,可在计算机选择“映射网络驱动器”,在弹出窗口选择驱动器盘符和远程目录。 
    • 区域设置

控制面板 --> 区域 --> 管理 --> 更改系统区域设置 --> Beta版:使用Unicode UTF-8提供全球语言支持

勾选后重启。

    • 权限说明

NFS共享出来的目录所有者是root,所以在Windows客户端默认没有权限写入。
解决办法有两种:
第一种,在NFS服务器上给所有用户读写权限。

sudo chmod 777 /srv/nfs4/share 

第二种,让Windows默认以root用户挂载,同时将NFS服务器共享选项设置为不映射root用户(no_root_squash)。在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default项下新增两个DWORD,名称为AnonymousUid和AnonymousGid,值都是0。

    • Zone.Identifier

Windows系统在共享文件时默认会加入"原文件名:Zone.Identifier"文件,禁用方法如下图:


设置完成后,可以看到如下效果图(IP及目录信息被擦除):

  1. SMB
    • 安装samba
sudo apt-get install -y samba # 安装过程中可能会提示samba-ad-dc服务配置失败,可以忽略 
    • 配置samba
#请参考https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html 
sudo vi /etc/samba/smb.conf #public的配置用于只读,share的配置用于读写,且只授权给用户pi 
[public] 
comment = Raspberry Pi SAMBA 
path = /home/pi/nas 
browseable = yes 
read only = yes 
[share] 
comment = SMB 
path = /home/pi/nas 
browseable = yes 
writable = yes 
create mask = 0744 
directory mask = 0755 
write list = pi
#检查配置是否正确 
testparm 
#将用户加入到samba用户(系统用户必须已创建) 
sudo smbpasswd -a pi 
#重启smb服务 
#sudo /etc/init.d/samba restart 
sudo systemctl restart smbd 

到Windows系统,地址栏输入SMB服务器IP,显示效果如下(public可直接访问,share需要输入用户名、密码):

  1. DLNA
    • 安装minidlna
sudo apt-get install -y minidlna 
    • 配置minidlna
sudo vi /etc/minidlna.conf 
#修改媒体文件目录 
media_dir=/home/pi/nas/media 
#修改名称,用于其它设备网络发现识别 
friendly_name=Raspberry Pi MiniDLNA 
#根据需要修改最大连接数 
max_connections=5  
#重启minidlna服务 
#sudo service minidlna restart 
sudo systemctl restart minidlna 
#查看状态(Active行状态为"active (runing)"代表运行正常) 
#service minidlna status 
sudo systemctl status minidlna 
#开机自启动 
#sudo update-rc.d minidlna defaults 
sudo systemctl enable minidlna 
#取消开机自启动 
#sudo update-rc.d -f minidlna remove 
sudo systemctl disable minidlna 
#停止DLNA服务 
#sudo service minidlna stop 
#sudo systemctl stop minidlna 
#卸载DLNA 
#sudo apt-get remove --purge minidlna 
    • 配置minidlna
      • HTTP
        浏览器输入ip以及端口,比如 http://68.76.78.65:8200 ,查看是否显示媒体库信息或已连接信息。
      • WMP
        需要先启动相关服务。sc start WMPNetworkSvc sc start SSDPSRV 如果在同一个网络下,正常情况下,打开WMP,在右下角能看到我们的设备,如图:


  1. Kodi

Kodi是一个全平台家庭媒体解决方案开源项目。以Android手机为例:

  • 界面语言设置

Kodi本身支持多语言,但是新手在设置时容易掉坑。

Interface --> Regional --> Language --> Chinese(Simple)

此时会全屏乱码,不要惊慌,选择原来Skin下面的Fonts位置,选择Arial,一切变得亲切起来。 回顾一下:


此时,可以把区域的字符集也改成Chinese Simplified(GBK)。

  • 为资料库添加源

注意共享的目录和文件不能存在乱码,否则Kodi不显示。Kodi支持SMB、UPnP(即DLNA)、NFS等多种来源。比如SMB:

添加视频 --> 浏览 --> Windows网络(SMB)

确定后再选择 "smb://" ,弹出输入框,填入SMB服务器IP即可。

UPnP添加共享时,只需选“UPnP设备”,无需指定具体IP。

  1. NAS系统介绍


OpenMediaVault

群晖DMS

威联通QTS

铁马威TOS

基础系统

Debian

Debian?

Linux

busybox?

文件格式

EXT4

BTRFS

BTRFS

BTRFS

文件协议

NFS, SMB, AFP

SMB, AFP, NFS

DLNA, NFS, SMB

SMB, AFS, NFS, DLNA

内置应用

nginx, php, python

nginx, php, htppd, pg, python

qthttpd, MariaDB, php, python

nginx, php, mysql, python

在安装OMV时,出现命令找不到的情况,重新安装OMV相关package解决:

apt-get install --reinstall openmediavault && omv-initsystem
omv-firstaid
#此时如果提示web管理控制台信息,则说明安装成功

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...