在这个由三部分组成的系列文章中,我将解释如何设置一个简单实用的 NAS(网络附加存储)系统。我使用这种设置将我的文件存储在中央系统上,每天晚上自动创建增量备份。为了在同一网络中的设备上挂载磁盘,安装了 NFS。为了离线访问文件并与朋友分享,我使用了 Nextcloud。
本文将介绍软件和硬件的基本设置,以便在远程设备上挂载数据磁盘。在第二篇文章中,我将讨论备份策略并设置一个 cron 作业来创建每日备份。在第三篇也是最后一篇文章中,我们将安装 Nextcloud,这是一个可以轻松访问设备的工具,这些设备可以使用 Web 界面离线和在线同步。它支持多个用户和公共文件共享,因此您可以例如通过发送受密码保护的链接与朋友分享照片。
我们系统的目标架构如下所示

硬件
让我们从您需要的硬件开始。 您可能会提出不同的购物清单,因此请将此清单视为一个示例。
计算能力由 树莓派 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 所需的端口:111
和 2049
,他们就可以挂载您的数据。 我使用上面的配置,并且仅允许通过路由器的防火墙访问我的家庭网络上的端口 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
创建增量备份。
1 条评论