树莓派、个人电脑与一台家庭存储服务器的搭建(功能实现)

这是第二个章节, 本章节主要讲述树莓派或者个人电脑实现基础的家庭存储服务器功能, 本文会先讲述针对树莓派基础系统的安装, 之后会去讲述在系统上做家庭存储服务器的搭建工作, 可以把这个文章当做恰饭读物, 也可以当做一个教程, 本章节不docker, 也不依赖太多第三方, 意旨通过最传统的linux功能包来实现家庭存储服务器这个功能, 连技术的同时, 让家里吃灰的设备发挥预热;
如果没有看过上一篇, 请点击下面链接查看上一篇文章:

树莓派、个人电脑与一台家庭存储服务器的搭建(起源)

# 准备工作 #

此处代表硬件的前期准备工作, 目前我手里的是rpi 4b, 所以我以他作为主讲述下面的所有操作, 准备使用台式机的用户, 请先忽略这个段落.

再说一遍: 没有这个设备的只需要看看这段就可以了, 不要购买, 买完为了搭建这个NAS不值得.

来自作者婆婆妈妈的嘱咐

树莓派 4b x 1 (内存越大越好)
- 16GB tf存储卡和读卡器 x 1 (读写速度越快越好,存储卡别有有用的文件,一会儿得清空)
- usb-c 5v 3A充电器 x 1 (质量越好越好, 因为未来这个小盒子要常年开机不断电)
- USB的鼠标,键盘 x 1 (2.5g无线的更好)
- HDMI线与显示器或者电视
- 一台好用, 能上网, 能下载东西, 能插读卡器的电脑 x 1(windows,mac,linux)都可以

下来, 我们以windows举例, 我们需要在电脑上安装镜像烧录工具: raspberry pi imager .此步骤电脑用户和树莓派用户都需要做.
官网下载页面: Raspberry Pi OS – Raspberry Pi
进入官网页面, 点击"[ Download For Windows ]"开始下载, 其他两个系统点击对应的下载链接, 下载完成后, 执行安装
如果电脑是Fedora等非Ubuntu,Debian Linux, 忽略此步骤, 或者Linux就可以直接忽略下载这个步骤, 因为在 Linux中, 有更简单的命令可以实现镜像烧录的动作.

写给使用Linux作为电脑操作系统的用户

至此,前期的所有硬件准备工作已经完成, 确保准备烧录的tf卡内没有任何重要数据之后, 我们开始下载镜像.

# 下载镜像 #

虽然树莓官方目前并没有将fedora加入到官方下载的镜像列表中, 但是本着对fedora熟悉的原则, 这次依旧选择fedora作为我们文件服务器的基础操作系统, 以本人对fedora的理解, 目前版本的fedora在x86,x86_64和arm平台都有了特别大的改善.

fedora官网: Fedora Workstation | The Fedora Project

如上图所示, 上图为fedora默认桌面环境的官方下载页面, 其中包含两种内容: Fedora Media Writer系统ISO.
Fedora Media Writer:
镜像烧录工具, 并非真正系统, 和Raspberry Pi Image差不多, 是用来把Fedora操作系统的ISO镜像写入U盘的工具.
系统ISO: 
真正的操作系统镜像, 作为树莓派用户, 需要选择右侧第二行的"适用于 ARM aarch 64系统"; 而需要将存储服务器搭建在普通电脑上的用户可以选择第一行"适用于 Intel 和 AMD x86_64系统"; 然后点击下载小图标开始下载.

关于桌面环境, 是Linux的一大特点之一, 区别于windows, Linux可以选择不同的桌面环境以便用户能够在图形化下更方便的操作Linux操作系统, 我曾经在公众号另一篇文章有说过, 而对于fedora来说, 你可以在下载Fedora的时候就选择不同的桌面环境.

官方桌面环境列表: https://fedoraproject.org/zh-Hans/spins/

Fedora的桌面环境

关于Fedora图形化的问题, 原本我在实现这个需求的时候, 并没有报太大希望能指望在rpi 4b上跑服务的同时再跑一个图形化的界面, 但是后来进行默认安装(也就是带图形化)后, 发现内存使用量仅有2G不到(我的是rpi 4b 8GB版本), 所以倘若你的rpi 内存大于等于4GB的话, 完全不用去管图形化的资源占用, 毕竟有了图形化之后, 一些基操相对于命令行操作来说会简单一些, 当然低内存版本也可以下载, 一会儿可以把图形化调没了.

你们知道windows也有arm版本的么? 度娘搜一下如何在raspberry PI上安装windows, 然后连上移动硬盘, 连上网线, 右键选择共享, 就完成了这篇文章的所有需求啦. 不过就失去了折腾的意义了.

对于弱者的忠告
# 系统烧录 #

下载完成后, 你会得到一个"Fedora-XXX-40-1.14.aarch64.raw.xz"这样以"raw.xz"结尾的文件, 这个就是系统的镜像啦, 接下来打开raspberry pi imager, 在界面中间点击"[ 选择操作系统 ]"按钮, 下拉到最底下选择"Use Custom", 然后找到你刚才下载的那个文件并且确认选择, 如上图所示.
然后, 将你的tf卡插入读卡器或卡套, 插入到电脑内, 点击[ NEXT ]按钮,跳过配置对话框后, 便开始了漫长的烧录过程, 这个漫长取决于你tf卡的读写速度, 你USB接口的速度.
下面这段是写给Fedora用户和其他Linux发行版用户关于如何搞这个镜像的:
# fedora 用户# 看我过之前文章的老铁应该知道这就是安装一个软件dnf install -y arm-image-installer# 然后使用arm-image-installer这个程序把镜像搞到你的tf卡里面# 简单解释一下: # --image 就是你刚才下载那个raw.xz镜像文件放的位置# --target 就是你目标的树莓派平台版本 这里用的4b 那么就是rpi4# --media 就是你刚才查到你电脑上那个插了tf卡的读卡器, 通过fdisk -l 看看是哪个磁盘设备# 然后填到这里, 不知道怎么看的公众号回复或者看我之前发的文章有很详细的讲# --resizefs 烧录成功后, 将末端剩余空间分配给系统用.arm-image-installer --image=</path/to/fedora_image> --target=rpi4 --media=/dev/__<sd_card_device> --resizefs
# 非fedora的其他Linux发行版用户# 先xzcat 临时解压, 然后通过dd块操作写入到你的tf卡里面# 大体操作就好比你下个rar压缩包, 然后你先得解压出来, 再把解压的东西放到tf卡# 但下面这个和手动不一样, 所以按照下面敲# </path/to/fedora_image> 这个位置就是你下载那个raw.xz的镜像文件放的位置# of=/dev/XXX 就是你磁盘的设备路径, 通过fdisk -l去看xzcat </path/to/fedora_image> | dd status=progress bs=4M of=/dev/XXX# 使用此种方式, 需要在写入完成后调整分区的大小, 否则, 纵使你有128个G# 系统里面显示你也可能只有10个G左右, 懂我意思吧?# 当然你可以在安装好系统后, 在安装好的系统内执行.
因为制作镜像的时候, 系统以一个最小的标准大小压缩了一个镜像(raw), 同时被压缩为一个系统镜像的压缩包(xz). 这样做不但提高了镜像文件在网络上传输的效率, 同时也保证了这个镜像可以在绝大多数的硬件环境上得到释放, 烧录程序操作块将数据从磁盘首部的指定区域将镜像写入磁盘(tf卡), 当写入到镜像文件末端后, 如果磁盘仍有空闲区域, --resizefs将会自动将空闲区域变为系统可用区域, 以保证当前磁盘的最大可用性.

关于--resizefs

# 系统基础配置 #

到此, 系统应该也就进到了你的tf卡里面, 可以找个秤称一下, tf卡是不是重了一些?
然后...
将tf卡插入rpi 4b
各种线安排上
插电!
开机!

等到系统启动后, 系统会展示安装后的配置向导, 他会让你在这里设置一个新的用户, 设置一下root的密码以及其他的一些内容, 设置好之后你便可以进入到系统的桌面.
需要注意的是:
1. 安装后配置第一屏有时候屏幕显示不正常, 但是明显能感觉到鼠标是有反应的, 这种情况是因为驱动不兼容的情况, 这种情况下, 需要在启动菜单那里框点c, 这样就能进入到启动菜单的内核启动参数那里, 只需要在vmlinuz那一行quiet 后面加一个: xdriver=vesa, 记得quiet和xdriver中间有空格, 然后使用F10执行就可以正常显示了.
2. 后面我们会用到这里创建的新用户.

我安装的kde桌面,可以看到系统已经启动成功了
# 小插曲: VLC 花屏 #
既然进了桌面,想着要不直接安装一个vlc尝试一下直接播放电影的效果, 结果花屏

当然这作为一台存储服务器来说, 图形化界面并不是很重要, 所以先忽略这个问题, 有时间再搞这个.

# 基础系统配置 #

上图是我已经安装了相关各种功能服务的内存使用情况, 大体来说用了2个G, 还剩下5.7个G左右, 还好还好

 - 开启ssh远程服务以及root用户ssh远程登录(注释内容)

# 让ssh自动启动systemctl enable sshd# 启动ssh服务端systemctl start sshd# 防火墙配置firewall-cmd --permanent --add-port=22/tcpfirewall-cmd --reload# 这样如果使用root登录, 即便是输入了正确的密码都没法登录,需要修改# /etc/ssh/sshd_config中的PermitRootLogin为 Yes才可以# 然后记得保存重启服务器

 - 修改主机名

vi /etc/hostnameHome-NAS# 在第一行输入主机名就成了# 重启生效, 或者通过hostname -f /etc/hostname立即生效.

 - 修改网卡IP

# 这里有三种方法# 1. 使用nmcli connection 进行修改 nmcli connection modify XXXX ipv4.addresses xxx.xxx.xxx.xxx ...# 2. 使用图形化直接编辑 简单粗暴# 3. 使用ifconfig XXX找到指定网卡的ether MAC地址, 到路由器给它一个固定的IP地址.

 - 一切就绪, 来做系统安装后的第一次更新

dnf update

 - 确认磁盘与空间
毕竟要搞一个磁盘共享的服务器, 所以确保你应该有足够的空间能够让你通过共享的方式把你需要存储的文件放到你足够的空间的分区下.

# 使用你的root账户查看你当前的所有磁盘和分区fdisk -lDisk /dev/mmcblk1: 29.72 GiB, 31914983424 bytes, 62333952 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x282f94a7
Device         Boot   Start      End  Sectors  Size Id Type/dev/mmcblk1p1 *       2048  1230847  1228800  600M  6 FAT16/dev/mmcblk1p2      1230848  3327999  2097152    1G 83 Linux/dev/mmcblk1p3      3328000 62333951 59005952 28.1G 83 Linux

Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectorsDisk model: GenericUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0xd46f93d4
Device     Boot Start        End    Sectors   Size Id Type/dev/sda1          63 1953525167 1953525105 931.5G 83 Linux

上面这段,我们看到除了mmcblk1这个磁盘是我们安装系统的磁盘之外, 我有一个外接的硬盘sda,大小900多个G,这个就是未来我可以共享存储小片儿之类的磁盘, 我们需要把这个磁盘挂载到先前创建的那个用户的家目录下, 如果我们创建的用户名为nasuser,我们使用下面的命令:

# 首先使用switchuser(su)命令切换至nasuser这个用户下su - nasuser# su 后面跟-和用户名就是切换到这个用户, 如果su和用户名中间有-,就代表加载用户环境变量# 如果su后面没有用户名参数, 就是切换到root用户# 然后使用make directory(mkdir)命令在家目录下创建一个叫做share的目录mkdir ~/share# 随后切换到rootsu -# 将sda1分区挂载到刚才创建的share上mount /dev/sda1 /home/nasuser/share# 此时默认挂载的share下的所有文件nasuser可能没法写入, 这时候需要创建nasuser能够读写的目录, 或者通过chmod进行权限更改.此命令略

以上知识点,请阅读下面也就是之前发布的文章:
Linux中常见的目录和作用

 - 安装sama服务器
核心操作, 这个最关键, 和windows共享一样, 这个samba的服务端就是实现文件共享的程序, 首先我们需要安装它, 在fedora里面,使用yum或者dnf来进行安装:

# 下面-y 表示不用交互, 找到直接进行下载安装的意思dnf install samba -y

这个过程会很快, 这个软件大小3MB左右, 所以并没有像windows一样的下一步下一步下一步完成那种.


 - 配置SELINUX
想要samba这个软件能正常提供服务器, 需要配置samba的SELINUX配置, 常规来说应该允许samba访问家目录和一些常规的目录以及操作, 所以需要下面的操作

setsebool -P samba_enable_home_dirs onsetsebool -P use_samba_home_dirs on

以上两个步骤会允许samba使用家目录, 因为我们的目标是创建一个带有基本身份认证功能的文件共享服务器, 而基本的身份认证来自于fedora的基本用户认证系统, 我们借助常规fedora系统创建的用户来远程访问到该用户的家目录,所以我们需要配置上述的SELINUX配置.

对于其他目录在SELINUX模式下的访问,我们需要给该目录增加samba_share_t的上下文, 才能保证目录可以通过samba正常访问到, 否则就会出现禁止访问的问题.

经验之谈

 

 - 配置SAMBA
1通常情况下, samba的配置文件在/etc/samba/smb.conf, 对于我们现如今的需求, 我们只需要打开此文件,确认该文件的[homes]标签下和我的一样即可

[homes]        comment = Home Directories        valid users = %S, %D%w%S        browseable = No        read only = No        inherit acls = Yes

 

 - 配置防火墙
fedora中使用firewalld作为基础防火墙, 使用firewall-cmd操作防火墙, firewall-cmd有对samba的定式标签, 所以默认情况下, 我们只需要增加对samba的放行,无需知道samba用了那个端口

firewall-cmd --permanent --add-service=samba# 我简单解释一下, --permanent表示永久生效, 不加这个你执行完他就生效了, # 但是重启就没了, 但是你如果加了, 执行完这条命令他不会生效, 你需要执行下面这个命令:firewall-cmd --reload# 执行完上面这个 samba就被防火墙放行了, 别人就可以访问到了# 同时, 通过--list-services可看到现在放行的服务, 其他那些命令通过--help去看firewall-cmd --list-servicesdhcpv6-client ftp mdns samba samba-client ssh# 上面是我的里面开的

 

 - 配置samba用户
虽然, 我们是使用fedora中的基础用户来做samba的用户认证, 但事实上, 默认情况下samba会有一套自己的用户验证数据体系, 它并不会直接读取我们的系统用户数据信息, 所以如果我们需要使用我们fedora的用户, 还需要做一步所谓的"映射". 操作如下:

smbpasswd -a nasuser# 使用smbpasswd命令对samba服务做基础用户管理操作.# -a 代表向现有samba的验证体系里面添加一个新的用户,后面的nasuser是用户名, 也是fedora我们创建的用户New SMB password:Retype new SMB password:# 随后便是让你输入一个通过共享访问的密码, 这里的密码可以与系统用户不一样.

 

 - 终极大招!启动服务!
如今一切都搞定了!下面就是见证奇迹的时刻了,其实也没啥奇迹不奇迹的,就是个文件共享的功能而已~~

systemctl start smb# systemctl是系统基操, 用来操作一些系统服务之类的命令# 通过systemctl start 后面跟一个服务可以启动一个服务, samba的服务名称叫做smb# 当然也有stop停止,restart重启之类的,还可以用status检查服务有没有启动.

 

 - 验证环节
在你的另外一台能和这台共享服务器能联通的电脑上, 我们来验证我们刚才搭建的服务是否已经成功了.

Windows的电脑:
打开文件浏览器, 在地址栏输入: \\ip\nasuser 这里的ip地址是你的nas的ip地址, 后面就是你刚才创建的那个用户名, 如果没有意外, windows会让你输入验证的用户名和密码, 输入你刚才创建的用户名和密码,如下图所示:

我的ip地址是192.168.31.224, 用户名是sensirx, 所以我在地址栏输入了\\192.168.31.224\sensirx, 便弹出了这个对话框, 这里需要注意的是斜杠方向不能弄反.

输入smbpasswd那时候的用户名和密码, 你便看到了你共享的目录, 至此, 我们的验证便成功了

上图便是你用户家目录里面的东西, 所创建的share里面便是你那块硬盘的分区!
当然为了稳妥起见, 我们需要每次服务器关机重启后, samba服务都能自动运行, 同时我们的分区都能正常挂载到指定的那个share目录中, 我们只需要如下操作

# 让samba服务每次开机自动启动systemctl enable smb# 所以停用就是disable, 以此类推# 然后就是让刚才那个sda1分区能正常挂载到/home/nasuser/share上, 我这里是/home/sensirx/sharevi /etc/fstab/dev/sda1   /home/nasuser/share    ext4   default 0,0# 上面这个就是分区   挂载点      磁盘类型   0,0# 具体可以去看我之前写的文章

关于分区的文章参考:
Linux系统中的硬盘和分区

- iPhone或者iPad
假如你的手机或者ipad在同一个局域网, 对于苹果的系统来说, 你可以使用自带的"文件"应用远程连接到你的共享服务器上进行文件操作, 如下图所示:

操作步骤

1. 打开"文件"应用2. 点击左边栏上面的"..."小圆球3. 点击连接服务器4. 在里面输入smb://你的ip地址5. 然后下一个界面选择注册用户, 同时输入用户名和密码, 点击下一步6. 随后便看到了你的家目录, 点进去就是我上图的样子, 就可以各种操作了.

MacOSX用户其实同理, 不明白的可以留言.

- 安卓用户
而对于安卓用户, 因为安卓已经将共享功能(cifs)从传统的发行版本内核中剔除, 所以绝大多数安卓手机无法通过自身系统进行共享的访问和挂载, 但是大多数诸如"ES文件浏览器"等文件操作管理软件都含有内置的共享文件访问功能, 我们可以借助这些软件进行共享文件的浏览和操作, 如下图所示:

至此, 我们完完全全完成了个文件共享服务的搭建, 这个树莓派也变成了一个微型的NAS服务器, 我们终于可以把学习资料放到我们的这台mini-NAS服务器上, 同时可以躺在床上使用手机查看NAS上面所有的资料了呢, 这样我们是不是可以把手机内存的预算放到这台mini服务器上呢?
我曾经思考过这个问题, 我买一块256G的硬盘可能需要300块, 我买一个500G的硬盘可能400块, 我买一台256G的手机可能3000块, 但是我买一台512G的手机要4500块...懂我意思吧?


# 后记 #
事实上看过学习过此文章的同学仍旧觉得作者其实就是个坑, 原因在于这台共享服务器虽然能用, 但是进进局限于在这个局域网内是可以用, 并不能实现人在天涯海角都可以远程访问这台文件服务器. 其实确实是这样, 相对于一台NAS或者如今市场上的消费型NAS来说, 我们的这台文件服务器差得功能还很多, 所以...

我会在接下来的文章中, 陆续实现外网访问等功能.

公众号: CookieX
如果您喜欢此文章, 欢迎点赞并分享给您的朋友.
文章中相关配图仅做学习交流使用, 无意侵犯任何人的权利, 如若冒犯到, 请私信告知, 我会删除相关内容!
也希望您能够关注此公众号.

 

阅读剩余
THE END