使用树莓派构建网络附加存储设备

按照这些分步说明构建您自己的基于树莓派的网络附加存储系统。
355 位读者喜欢这个。
Storage units side by side

Scott Meyers。由 Opensource.com 修改。CC BY-SA 2.0。

在这个由三部分组成的系列文章中,我将解释如何设置一个简单实用的 NAS(网络附加存储)系统。我使用这种设置将我的文件存储在中央系统上,每天晚上自动创建增量备份。为了在同一网络中的设备上挂载磁盘,安装了 NFS。为了离线访问文件并与朋友分享,我使用了 Nextcloud

本文将介绍软件和硬件的基本设置,以便在远程设备上挂载数据磁盘。在第二篇文章中,我将讨论备份策略并设置一个 cron 作业来创建每日备份。在第三篇也是最后一篇文章中,我们将安装 Nextcloud,这是一个可以轻松访问设备的工具,这些设备可以使用 Web 界面离线和在线同步。它支持多个用户和公共文件共享,因此您可以例如通过发送受密码保护的链接与朋友分享照片。

我们系统的目标架构如下所示

raspberry pi nas_part1.png

硬件

让我们从您需要的硬件开始。 您可能会提出不同的购物清单,因此请将此清单视为一个示例。

计算能力由 树莓派 3 提供,它配备了四核 CPU、1 GB 的 RAM 和(某种程度上)快速以太网。 数据将存储在两个 USB 硬盘驱动器上(我使用 1 TB 的磁盘);一个用于日常流量,另一个用于存储备份。 请务必使用有源 USB 硬盘驱动器或带有额外电源的 USB 集线器,因为树莓派将无法为两个 USB 驱动器供电。

软件

社区中知名度最高的操作系统是 Raspbian,它非常适合自定义项目。 有很多指南解释了如何在树莓派上安装 Raspbian,因此我不会在这里详细介绍。 在撰写本文时,最新的官方支持版本是 Raspbian Stretch,它对我来说效果很好。

此时,我将假设您已配置了基本的 Raspbian 并且可以通过 ssh 连接到树莓派。

准备 USB 驱动器

为了实现从 USB 硬盘驱动器读取和写入的良好性能,我建议使用 ext4 格式化它们。 为此,您必须首先找出哪些磁盘连接到树莓派。 您可以在 /dev/sd/<x> 中找到磁盘设备。 使用命令 fdisk -l,您可以找出刚刚连接的两个 USB 驱动器。 *请注意,一旦您按照这些步骤操作,USB 驱动器上的所有数据都将丢失。*

pi@raspberrypi:~ $ sudo fdisk -l

<...>

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe8900690

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux


Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6aa4f598

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1  *     2048 1953521663 1953519616 931.5G  83 Linux

由于这些设备是连接到树莓派的唯一 1TB 磁盘,我们可以很容易地看到 /dev/sda/dev/sdb 是两个 USB 驱动器。 每个磁盘末尾的分区表显示了在以下步骤之后它应该如何显示,这些步骤创建了分区表并格式化了磁盘。 为此,通过第二次将 sda 替换为 sdb 来重复这两个设备中的每一个的以下步骤(假设您的设备也在 fdisk 中列为 /dev/sda/dev/sdb)。

首先,删除磁盘的分区表并创建一个仅包含一个分区的新表。 在 fdisk 中,您可以使用交互式单字母命令来告诉程序该怎么做。 只需在提示符 Command (m for help): 之后插入它们,如下所示(您也可以随时使用 m 命令来获取更多信息)

pi@raspberrypi:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): o
Created a new DOS disklabel with disk identifier 0x9c310964.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-1953525167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167):

Created a new partition 1 of type 'Linux' and of size 931.5 GiB.

Command (m for help): p

Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9c310964

Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux

Command (m for help): w
The partition table has been altered.
Syncing disks.

现在我们将使用 ext4 文件系统格式化新创建的分区 /dev/sda1

pi@raspberrypi:~ $ sudo mkfs.ext4 /dev/sda1
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done

<...>

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

重复上述步骤后,让我们根据它们在系统中的用途来标记新分区

pi@raspberrypi:~ $ sudo e2label /dev/sda1 data
pi@raspberrypi:~ $ sudo e2label /dev/sdb1 backup 

现在让我们挂载这些磁盘来存储一些数据。 我基于运行此设置一年多的经验是,USB 驱动器并不总是可用于在树莓派启动时挂载(例如,在断电之后),因此我建议在需要时使用 autofs 挂载它们。

首先安装 autofs 并为存储创建挂载点

pi@raspberrypi:~ $ sudo apt install autofs
pi@raspberrypi:~ $ sudo mkdir /nas

然后通过将以下行添加到 /etc/auto.master 来挂载设备

/nas	/etc/auto.usb

如果文件 /etc/auto.usb 不存在,则使用以下内容创建该文件,然后重新启动 autofs 服务

data -fstype=ext4,rw :/dev/disk/by-label/data
backup -fstype=ext4,rw :/dev/disk/by-label/backup
pi@raspberrypi3:~ $ sudo service autofs restart

现在您应该能够分别在 /nas/data/nas/backup 访问磁盘。 显然,内容不会太令人兴奋,因为您刚刚擦除了磁盘上的所有数据。 尽管如此,您应该能够通过执行以下命令来验证设备是否已挂载

pi@raspberrypi3:~ $ cd /nas/data
pi@raspberrypi3:/nas/data $ cd /nas/backup
pi@raspberrypi3:/nas/backup $ mount
<...>
/etc/auto.usb on /nas type autofs (rw,relatime,fd=6,pgrp=463,timeout=300,minproto=5,maxproto=5,indirect)
<...>
/dev/sda1 on /nas/data type ext4 (rw,relatime,data=ordered)
/dev/sdb1 on /nas/backup type ext4 (rw,relatime,data=ordered)

首先移动到目录中以确保 autofs 挂载设备。 Autofs 跟踪对文件系统的访问并在运行时挂载所需的设备。 然后 mount 命令显示这两个设备实际上已挂载在我们想要的位置。

设置 autofs 有点容易出错,因此如果挂载在第一次尝试时不起作用,请不要感到沮丧。 再给它一次机会,搜索更详细的资源(网上有大量文档),或者发表评论。

挂载网络存储

现在您已经设置了基本的网络存储,我们希望它能够挂载在远程 Linux 机器上。 我们将为此使用网络文件系统 (NFS)。 首先,在树莓派上安装 NFS 服务器

pi@raspberrypi:~ $ sudo apt install nfs-kernel-server

接下来,我们需要告诉 NFS 服务器公开 /nas/data 目录,这将是唯一可以从树莓派外部访问的设备(另一个设备仅用于备份)。 要导出该目录,请编辑文件 /etc/exports 并添加以下行以允许所有有权访问 NAS 的设备挂载您的存储

/nas/data *(rw,sync,no_subtree_check)

有关将挂载限制为单个设备等的更多信息,请参阅 man exports。 在上面的配置中,只要任何人有权访问 NFS 所需的端口:1112049,他们就可以挂载您的数据。 我使用上面的配置,并且仅允许通过路由器的防火墙访问我的家庭网络上的端口 22 和 443。 这样,只有家庭网络中的设备才能访问 NFS 服务器。

要在 Linux 计算机上挂载存储,请运行以下命令

you@desktop:~ $ sudo mkdir /nas/data
you@desktop:~ $ sudo mount -t nfs <raspberry-pi-hostname-or-ip>:/nas/data /nas/data

同样,我建议使用 autofs 来挂载此网络设备。 如需更多帮助,请查看如何使用 autofs 挂载 NFS 共享

现在,您可以使用 NFS 挂载从远程设备访问存储在您自己的树莓派驱动的 NAS 上的文件。 在本系列的下一部分中,我将介绍如何使用 rsync 将您的数据自动备份到第二个硬盘驱动器。 为了节省设备上的空间,同时仍然进行每日备份,您将学习如何使用 rsync 创建增量备份。

标签
User profile image.
Manuel 于 2013 年在德国海德堡完成了应用计算机科学专业的学习,获得了硕士学位,并在此之后不久开始担任软件开发人员。 他对使用和组合各种技术来构建新的炫酷事物感兴趣,努力使生活(包括他自己的生活)更轻松。

1 条评论

如果我不想在几年内更换我的设置,您会推荐 Odroid HC2 吗?

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.