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

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

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

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管理控制台信息,则说明安装成功

相关推荐

MySql安装与使用

介绍mysql是目前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件...

使用AI来搭建一个用户系统,步骤应该是怎样的呢?

我给AI的第一个问题是这样的:创建一个java21+springboot3.4+mysql21的一个用户系统,需要使用JWT,支持多语言,使用swagger,这个用户系统都应该包含哪...

Mysql 8.4数据库安装、新建用户和数据库、表单

1、下载MySQL数据库yuminstall-ywgetperlnet-toolslibtirpc#安装wget和perl、net-tools、libtirpcwgethtt...

介绍如何在 MySQL 中创建新用户并授予权限?

MySQL是一个开源的关系型数据库管理系统,常用于存储和管理大量的结构化数据。在使用MySQL进行数据管理时,为了安全和方便管理,通常需要创建新用户并授予相应的权限。本文将介绍如何在MySQL...

Mysql创建用户和权限管理

MySQL是一个多用户的数据库,最高权限管理者是root用户,它拥有着最高的权限操作。包括select、update、delete、update、grant等操作。如果有其他用户想使用MySQL,那么...

Mysql:创建用户详解

1、创建并授权用户--创建可从任何主机连接的用户CREATEUSER'myuser'@'%'IDENTIFIEDBY'mypassword'...

Python 实现【字符匹配】

defis_match(s,pattern):m,n=len(s),len(pattern)dp=[[False]*(n+1)for_inrange...

Python自动化:openpyxl工作簿、工作表相关操作

新建工作簿、工作表importopenpyxl#创建空白工作簿,会自动生成一个工作表:Sheetwb=openpyxl.Workbook()#新建工作表#create_sheet...

python每日一练之三数排序

概述今天主要分享一个三树排序的实例,大家可以自己测试玩一下~需求输入三个整数x,y,z,请把这三个数由小到大输出。方法一:如果是要练练手就随便找个排序算法实现一下#usr/bin/python#...

Python输出语句print()

Python中的输出语句主要通过内置函数print()实现,它可以灵活输出文本、变量、表达式结果等内容到控制台或其他文件。以下是详细介绍及示例:一、print()基本语法print(*object...

Python设置excel表格格式,这3个属性6个模块,要表格好看

前言:通过前面两篇文章,我们用Python处理excel数据得到了结果并保存了文件。打开文件会发现,文件里表格是没有设置格式的,还需手动调整行高列宽等样式,很麻烦。其实,通过Python库模块,能轻松...

python入门-day5-循环语句

以下是为“Day5:循环语句”设计的详细学习任务计划。这个任务旨在帮助初学者掌握Python中的循环语句(for和while),并通过实践理解它们的应用场景。Day5:循环语句学习目标...

Python基础编程必备!涵盖常见语法与操作的代码示例合集

以下是一份Python基础代码示例合集,涵盖了常见的语法和操作,适合初学者快速掌握基本编程概念:1.基础语法python#打印输出print("Hello,World!")#变...

Python循环语句实用教程

一、循环基础1.while循环基本语法:while条件表达式:循环体代码while循环流程图:应用示例:#简单计数器count=0whilecount<5:...

在 Python 中如何向一个已排序的数组(列表) 中插入一个数呢

在Python中如何向一个已排序的数组(列表)中插入一个数呢?方法有很多种,关键在于原来数组是什么样的排序,用到啥排序方法效率高,就用哪种。我们来练习其中的几种插入方法,另外也掌握下遍历数组的...