PRF:20180724 Building a network attached storage device with a Raspberry Pi.md

@jrglinux
This commit is contained in:
Xingyu.Wang 2018-10-12 01:48:33 +08:00
parent 0b2c8a6a46
commit 177cf50f00

View File

@ -1,11 +1,12 @@
树莓派自建 NAS 云盘之-树莓派搭建网络存储盘 树莓派自建 NAS 云盘之——树莓派搭建网络存储盘
====== ======
> 跟随这些逐步指导构建你自己的基于树莓派的 NAS 系统。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bus-storage.png?itok=95-zvHYl) ![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bus-storage.png?itok=95-zvHYl)
我将在接下来的三篇文章中讲述如何搭建一个简便、实用的 NAS 云盘系统。我在这个中心化的存储系统中存储数据,并且让它每晚都会自动的备份增量数据。本系列文章将利用 NFS 文件系统将磁盘挂载到同一网络下的不同设备上,使用 [Nextcloud][1] 来离线访问数据、分享数据。 我将在接下来的三篇文章中讲述如何搭建一个简便、实用的 NAS 云盘系统。我在这个中心化的存储系统中存储数据,并且让它每晚都会自动的备份增量数据。本系列文章将利用 NFS 文件系统将磁盘挂载到同一网络下的不同设备上,使用 [Nextcloud][1] 来离线访问数据、分享数据。
本文主要讲述将数据盘挂载到远程设备上的软硬件步骤。本系列第二篇文章将讨论数据备份策略、如何添加定时备份数据任务。最后一篇文章中我们将会安装 Nextcloud 软件,用户通过Nextcloud 提供的 web 接口可以方便的离线或在线访问数据。本系列教程最终搭建的 NAS 云盘支持多用户操作、文件共享等功能,所以你可以通过它方便的分享数据,比如说你可以发送一个加密链接,跟朋友分享你的照片等等。 本文主要讲述将数据盘挂载到远程设备上的软硬件步骤。本系列第二篇文章将讨论数据备份策略、如何添加定时备份数据任务。最后一篇文章中我们将会安装 Nextcloud 软件,用户通过 Nextcloud 提供的 web 界面可以方便的离线或在线访问数据。本系列教程最终搭建的 NAS 云盘支持多用户操作、文件共享等功能,所以你可以通过它方便的分享数据,比如说你可以发送一个加密链接,跟朋友分享你的照片等等。
最终的系统架构如下图所示: 最终的系统架构如下图所示:
@ -16,11 +17,11 @@
首先需要准备硬件。本文所列方案只是其中一种示例,你也可以按不同的硬件方案进行采购。 首先需要准备硬件。本文所列方案只是其中一种示例,你也可以按不同的硬件方案进行采购。
最主要的就是[树莓派3][2],它带有四核 CPU1G RAM以及有些)快速的网络接口。数据将存储在两个 USB 磁盘驱动器上(这里使用 1TB 磁盘);其中一个磁盘用于每天数据存储,另一个用于数据备份。请务必使用有源 USB 磁盘驱动器或者带附加电源的 USB 集线器,因为树莓派无法为两个 USB 磁盘驱动器供电。 最主要的就是[树莓派 3][2],它带有四核 CPU、1G RAM以及比较)快速的网络接口。数据将存储在两个 USB 磁盘驱动器上(这里使用 1TB 磁盘);其中一个磁盘用于每天数据存储,另一个用于数据备份。请务必使用有源 USB 磁盘驱动器或者带附加电源的 USB 集线器,因为树莓派无法为两个 USB 磁盘驱动器供电。
### 软件 ### 软件
社区中最活跃的操作系统当属 [Raspbian][3],便于定制个性化项目。已经有很多 [操作指南][4] 讲述如何在树莓派中安装 Raspbian 系统,所以这里不再赘述。在撰写本文时,最新的官方支持版本是 [Raspbian Stretch][5],它对我来说很好使用。 在该社区中最活跃的操作系统当属 [Raspbian][3],便于定制个性化项目。已经有很多 [操作指南][4] 讲述如何在树莓派中安装 Raspbian 系统,所以这里不再赘述。在撰写本文时,最新的官方支持版本是 [Raspbian Stretch][5],它对我来说很好使用。
到此,我将假设你已经配置好了基本的 Raspbian 系统并且可以通过 `ssh` 访问到你的树莓派。 到此,我将假设你已经配置好了基本的 Raspbian 系统并且可以通过 `ssh` 访问到你的树莓派。
@ -31,51 +32,28 @@
``` ```
pi@raspberrypi:~ $ sudo fdisk -l pi@raspberrypi:~ $ sudo fdisk -l
<...> <...>
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos Disklabel type: dos
Disk identifier: 0xe8900690 Disk identifier: 0xe8900690
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
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 Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos Disklabel type: dos
Disk identifier: 0x6aa4f598 Disk identifier: 0x6aa4f598
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 1953521663 1953519616 931.5G 83 Linux
Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1  *     2048 1953521663 1953519616 931.5G  83 Linux
``` ```
@ -86,163 +64,101 @@ Device     Boot Start        End    Sectors   Size Id Type
``` ```
pi@raspberrypi:~ $ sudo fdisk /dev/sda pi@raspberrypi:~ $ sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.29.2). Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them. Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Be careful before using the write command.
Command (m for help): o Command (m for help): o
Created a new DOS disklabel with disk identifier 0x9c310964. Created a new DOS disklabel with disk identifier 0x9c310964.
Command (m for help): n Command (m for help): n
Partition type Partition type
p primary (0 primary, 0 extended, 4 free)
   p   primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions)
   e   extended (container for logical partitions)
Select (default p): p Select (default p): p
Partition number (1-4, default 1): Partition number (1-4, default 1):
First sector (2048-1953525167, default 2048): First sector (2048-1953525167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): 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. Created a new partition 1 of type 'Linux' and of size 931.5 GiB.
Command (m for help): p Command (m for help): p
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos Disklabel type: dos
Disk identifier: 0x9c310964 Disk identifier: 0x9c310964
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux
Command (m for help): w Command (m for help): w
The partition table has been altered. The partition table has been altered.
Syncing disks. Syncing disks.
``` ```
现在,我们将用 ext4 文件系统格式化新创建的分区 `/dev/sda1` 现在,我们将用 ext4 文件系统格式化新创建的分区 `/dev/sda1`
``` ```
pi@raspberrypi:~ $ sudo mkfs.ext4 /dev/sda1 pi@raspberrypi:~ $ sudo mkfs.ext4 /dev/sda1
mke2fs 1.43.4 (31-Jan-2017) mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done Discarding device blocks: done
<...> <...>
Allocating group tables: done Allocating group tables: done
Writing inode tables: done Writing inode tables: done
Creating journal (1024 blocks): done Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done Writing superblocks and filesystem accounting information: done
``` ```
重复以上步骤后,让我们根据用途来对它们建立标签: 重复以上步骤后,让我们根据用途来对它们建立标签:
``` ```
pi@raspberrypi:~ $ sudo e2label /dev/sda1 data pi@raspberrypi:~ $ sudo e2label /dev/sda1 data
pi@raspberrypi:~ $ sudo e2label /dev/sdb1 backup pi@raspberrypi:~ $ sudo e2label /dev/sdb1 backup
``` ```
现在让我们安装这些磁盘并存储一些数据。以我运营该系统超过一年的经验来看当树莓派启动时例如在断电后USB 磁盘驱动器并不是总被安装,因此我建议使用 autofs 在需要的时候进行安装 现在让我们安装这些磁盘并存储一些数据。以我运营该系统超过一年的经验来看当树莓派启动时例如在断电后USB 磁盘驱动器并不是总被挂载,因此我建议使用 autofs 在需要的时候进行挂载
首先,安装 autofs 并创建挂载点: 首先,安装 autofs 并创建挂载点:
``` ```
pi@raspberrypi:~ $ sudo apt install autofs pi@raspberrypi:~ $ sudo apt install autofs
pi@raspberrypi:~ $ sudo mkdir /nas pi@raspberrypi:~ $ sudo mkdir /nas
``` ```
然后添加下面这行来挂载设备 然后添加下面这行来挂载设备 `/etc/auto.master`
`/etc/auto.master`:
``` ```
/nas    /etc/auto.usb /nas    /etc/auto.usb
``` ```
如果不存在以下内容,则创建 `/etc/auto.usb`,然后重新启动 autofs 服务: 如果不存在以下内容,则创建 `/etc/auto.usb`,然后重新启动 autofs 服务:
``` ```
data -fstype=ext4,rw :/dev/disk/by-label/data data -fstype=ext4,rw :/dev/disk/by-label/data
backup -fstype=ext4,rw :/dev/disk/by-label/backup backup -fstype=ext4,rw :/dev/disk/by-label/backup
pi@raspberrypi3:~ $ sudo service autofs restart pi@raspberrypi3:~ $ sudo service autofs restart
``` ```
现在你应该可以分别访问 `/nas/data` 以及 `/nas/backup` 磁盘了。显然,到此还不会令人太兴奋,因为你只是擦除了磁盘中的数据。不过,你可以执行以下命令来确认设备是否已经挂载成功: 现在你应该可以分别访问 `/nas/data` 以及 `/nas/backup` 磁盘了。显然,到此还不会令人太兴奋,因为你只是擦除了磁盘中的数据。不过,你可以执行以下命令来确认设备是否已经挂载成功:
``` ```
pi@raspberrypi3:~ $ cd /nas/data pi@raspberrypi3:~ $ cd /nas/data
pi@raspberrypi3:/nas/data $ cd /nas/backup pi@raspberrypi3:/nas/data $ cd /nas/backup
pi@raspberrypi3:/nas/backup $ mount 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) /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/sda1 on /nas/data type ext4 (rw,relatime,data=ordered)
/dev/sdb1 on /nas/backup type ext4 (rw,relatime,data=ordered) /dev/sdb1 on /nas/backup type ext4 (rw,relatime,data=ordered)
``` ```
首先进入对应目录以确保 autofs 能够挂载设备。Autofs 会跟踪文件系统的访问记录,并随时挂载所需要的设备。然后 `mount` 命令会显示这两个 USB 磁盘驱动器已经挂载到我们想要的位置了。 首先进入对应目录以确保 autofs 能够挂载设备。autofs 会跟踪文件系统的访问记录,并随时挂载所需要的设备。然后 `mount` 命令会显示这两个 USB 磁盘驱动器已经挂载到我们想要的位置了。
设置 autofs 的过程容易出错,如果第一次尝试失败,请不要沮丧。你可以上网搜索有关教程。 设置 autofs 的过程容易出错,如果第一次尝试失败,请不要沮丧。你可以上网搜索有关教程。
@ -252,25 +168,21 @@ pi@raspberrypi3:/nas/backup $ mount
``` ```
pi@raspberrypi:~ $ sudo apt install nfs-kernel-server pi@raspberrypi:~ $ sudo apt install nfs-kernel-server
``` ```
然后,需要告诉 NFS 服务器公开 `/nas/data` 目录,这是从树莓派外部可以访问的唯一设备(另一个用于备份)。编辑 `/etc/exports` 添加如下内容以允许所有可以访问 NAS 云盘的设备挂载存储: 然后,需要告诉 NFS 服务器公开 `/nas/data` 目录,这是从树莓派外部可以访问的唯一设备(另一个用于备份)。编辑 `/etc/exports` 添加如下内容以允许所有可以访问 NAS 云盘的设备挂载存储:
``` ```
/nas/data *(rw,sync,no_subtree_check) /nas/data *(rw,sync,no_subtree_check)
``` ```
更多有关限制挂载到单个设备的详细信息,请参阅 `man exports`。经过上面的配置,任何人都可以访问数据,只要他们可以访问 NFS 所需的端口:`111`和`2049`。我通过上面的配置,只允许通过路由器防火墙访问到我的家庭网络的 22 和 443 端口。这样,只有在家庭网络中的设备才能访问 NFS 服务器。 更多有关限制挂载到单个设备的详细信息,请参阅 `man exports`。经过上面的配置,任何人都可以访问数据,只要他们可以访问 NFS 所需的端口:`111` `2049`。我通过上面的配置,只允许通过路由器防火墙访问到我的家庭网络的 22 和 443 端口。这样,只有在家庭网络中的设备才能访问 NFS 服务器。
如果要在 Linux 计算机挂载存储,运行以下命令: 如果要在 Linux 计算机挂载存储,运行以下命令:
``` ```
you@desktop:~ $ sudo mkdir /nas/data you@desktop:~ $ sudo mkdir /nas/data
you@desktop:~ $ sudo mount -t nfs <raspberry-pi-hostname-or-ip>:/nas/data /nas/data you@desktop:~ $ sudo mount -t nfs <raspberry-pi-hostname-or-ip>:/nas/data /nas/data
``` ```
同样,我建议使用 autofs 来挂载该网络设备。如果需要其他帮助,请参看 [如何使用 Autofs 来挂载 NFS 共享][6]。 同样,我建议使用 autofs 来挂载该网络设备。如果需要其他帮助,请参看 [如何使用 Autofs 来挂载 NFS 共享][6]。
@ -284,7 +196,7 @@ via: https://opensource.com/article/18/7/network-attached-storage-Raspberry-Pi
作者:[Manuel Dewald][a] 作者:[Manuel Dewald][a]
选题:[lujun9972](https://github.com/lujun9972) 选题:[lujun9972](https://github.com/lujun9972)
译者:[jrg](https://github.com/jrglinux) 译者:[jrg](https://github.com/jrglinux)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -296,3 +208,4 @@ via: https://opensource.com/article/18/7/network-attached-storage-Raspberry-Pi
[5]: https://www.raspberrypi.org/blog/raspbian-stretch/ [5]: https://www.raspberrypi.org/blog/raspbian-stretch/
[6]: https://opensource.com/article/18/6/using-autofs-mount-nfs-shares [6]: https://opensource.com/article/18/6/using-autofs-mount-nfs-shares