如何将Raspberry Pi设置为Linux和Windows桌面的备份服务器

Raspberry Pi是一系列小型单板计算机。它们相当便宜,非常适合运行备份服务器或voip服务器。 ...

Raspberry Pi是一系列小型单板计算机。 它们相当便宜,非常适合运行备份服务器或VoIP服务器。 2015年2月,Raspberry Pi 2发行。 它有更多的ram,更新的cpu和4个板载USB端口。

Raspberry Pi 2的当前价格为35美元。 但另外你还需要一些其他的东西:

  • microSD卡:Raspberry Pi 2需要一个microSD卡才能启动。 任何应该做的4GB或更多。 对于备份服务器4GB应该很多。 你可能想要得到一个读取快。
  • 微型USB充电器:您还需要一个电源。 它由一个micro usb端口驱动,所以很可能你会有一个充电器在家里从一个旧的手机,你不再需要了。
  • 外部USB存储器:由于此操作涉及设置备份服务器,因此还需要获取外部USB存储设备。 也许一个外部的512GB硬盘就够了,也许你需要一个4TB的驱动器。 这完全取决于您的存储需求。
  • 套管:最后一件事是套管。 你不要严格需要套管,但如果你不使用一个,那么你将只有整个主板放在某个地方,更可怕的是损坏。

因此,Raspberry Pi的总成本将如35美元,microSD卡约为10.美元,约为10.美元。对于这种情况,微型USB充电器没有任何可用的充电器,然后任何外部usb驱动器成本。

另外,为了检索备份,我设置samba,共享是只读模式,没有任何必需的凭据。 如果根据本指南正确配置,则只能在lan中可用,并拒绝从lan外部的任何连接尝试。 设置samba用户和不同的凭据将超出本手册的范围。 有很多其他的解释它,它可以容易地并入,如果有需要它。

设置Raspberry Pi作为备份服务器

设置Raspberry Pi作为备份服务器是“最”困难的部分,因为您必须先刷新一个图像,然后使一切准备就绪。 然而,分步指南应该让您了解。

1.下载Raspian Image

首先从这里下载目前的Raspian Image https://www.raspberrypi.org/downloads/

2.将图像闪烁到microSD卡上

下载图像后,您需要将其闪存到microSD卡。 既然已经有了很好的指导,那么这里就不用重复了。 最好遵循这个指南

3.首次启动/配置

在用Raspian图像闪光的Raspberry Pi后,将HDMI屏幕连接起来并将其启动。 首次启动时,您将看到一个配置屏幕。 该配置屏幕很简单,您应该设置一些内容。

免责声明:图片是用手机拍摄的,所以他们不是那么好。

4.展开文件系统

首先,我们希望在sdcard上提供完整的空间。 对于备份,它们并不重要,因为它们将被存储在外部驱动器上。 不过我希望有空间。 因此,选择1展开文件系统 ,然后将提示您通知,在下次重新启动时,将扩展文件系统。

5.更改用户密码

然后我们要更改用户“pi”的默认密码。 所以选择2更改用户密码 ,然后键入所需的密码两次,每次后跟Enter。 同样,系统会提示您通知密码已更改。

6.控制台登录

之后我们想确保我们不开始和gui。 所以选择3启用启动到桌面/划痕 。 在以下屏幕上,选择控制台文本控制台,要求登录(默认)

7.本地化

然后我们想设置系统语言和其他可用的语言,键盘布局等。为此,我们进入了4个国际化选项 。 当您输入时,您将被看到更改语言,时区和键盘语言。 对话很简单,所以我不再详细介绍了。

注意:如果您选择了这些选项,您将再次在主配置屏幕上。

8.高级选项

现在进入8.高级选项 。 在那里我们有另外一堆我们可以设置的东西。 三个重要的是A2主机名A3内存分割A4 SSH

9.设置主机名

主机名将允许您通过其主机名访问Raspberry Pi。 当心:您只能使用字母和数字。 在这个例子中,我使用主机名rpi2bu - Raspberry Pi 2 Backup的缩写,但这一切都取决于你。

10.内存拆分

由于我们想要运行这个Raspberry Pi作为备份服务器,所以我们不想在gpu上浪费宝贵的RAM。 记住:这是一个无头服务器。 所以将ram拆分为16MB。

11.启用OpenSSH服务器

因为我们将通过ssh进行rsync的备份,因为ssh访问对于Raspberry Pi的remonte管理是有好处的,所以在高级选项菜单中也可以使用OpenSSH服务器。

11.完成并重启

所以,这些都是从配置屏幕设置的所有东西,现在可以选择 从主配置。 一旦你做,Raspberry Pi重新启动,一段时间后,系统将提示您输入您的登录凭据。 目前用户是pi ,密码设置为您在第5步中设置的内容。此外,它将显示Raspberry Pi的当前ip地址。

12.更新并安装所需的软件包

要将Raspberry Pi作为备份服务器,我们需要安装两个附加软件包:rsync和samba。 Rsync是从Windows / Linux计算机同步文件的工具,samba将使网络上的备份(在只读模式下)可用。

由于总是有很多变化和更新,我们首先运行:

sudo apt-get update && sudo apt-get upgrade

然后我们通过以下方式安装所需的软件包:

sudo apt-get install rsync samba

注意:默认用户pi可以使用sudo命令以root身份运行系统命令。 当您使用sudo命令时,将再次提示您输入登录密码。 这个密码也将被缓存一段时间,所以运行两个sudo命令之后,只有在输入密码后才能触发。

13.继续远程SSH连接或Raspberry Pi

接下来的步骤可以在Raspberry Pi本身或通过ssh连接完成。 我喜欢ssh连接,在linux上我只是在我的KDE中使用Konsole。 在Windows上,您可以使用PuttyKitty

14.找到并格式化外部USB驱动器

在配置samba服务器之前,我们需要安装外部usb驱动器并创建一个备份用户。 在我们可以安装外部USB驱动器之前,我们需要格式化它并且知道它是UUID。 因此,在连接外部USB驱动器之前,请运行:

ls -al /dev/disk/by-uuid

它会返回这样的东西:

total 0
drwxr-xr-x 2 root root 100 Mai 19 18:22 .
drwxr-xr-x 6 root root 120 Jan  1  1970 ..
lrwxrwxrwx 1 root root  15 Mai 19 18:22 13d368bf-6dbf-4751-8ba1-88bed06bef77 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root  15 Mai 19 18:22 15CD-3B79 -> ../../mmcblk0p1

现在安装外部USB驱动器并再次运行该命令。 你会看到,结果是不同的,那里有一个新的设备。

total 0
drwxr-xr-x 2 root root 100 Mai 19 18:22 .
drwxr-xr-x 6 root root 120 Jan  1  1970 ..
lrwxrwxrwx 1 root root  15 Mai 19 18:22 13d368bf-6dbf-4751-8ba1-88bed06bef77 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root  15 Mai 19 18:22 15CD-3B79 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root  10 Mai 19 18:22 eac53de3-9f06-4e46-999c-684da279298b -> ../../sda1

这告诉我们两件事情。 新设备是/ dev / sda1 ,它的uuid是eac53de3-9f06-4e46-999c-684da279298b 。 当你附加多个dirves然后sda1可以改变。 因此,为了安装目的,稍后,我们将使用它的UUID,只要分区未被更改或分区正在格式化,它将不会更改 - 但是,我们即将将分区格式化为合适的文件系统。

在我们可以使用它之前,我们必须格式化此驱动器。 我更喜欢ext4,但有些人可能更喜欢btrfs,因为它是快照和完整性检查。 为了格式化为ext4只是运行这个命令:

sudo mkfs.ext4 /dev/sda1

警告:请确保使用正确的设备标签,否则可能会破坏其他设备上的数据。

如上所述,格式化导致更改UUID,因此您需要再次发出上述命令并记下新的UUID。

15.安装外部USB驱动器

接下来的事情是我们必须安装它。 在这里,您必须决定要安装它的位置。 我选择将驱动器安装在备份用户的主目录中。 如果我想要的话,我可以把它当作/ home 。 但是,如果我有多个备份,我喜欢将它们放在单个驱动器上。 所以一个用户= 1个驱动器,驱动器安装在用户的主目录中。 在Rasperry Pi上,您可以直接连接4个USB设备,如果需要,可以轻松扩展到另一个用户。 在我挂载之前,我根据备份用户添加 - 在这个我如何调用该用户bu 。 要创建该用户,请运行以下命令:

sudo adduser bu

您将再次提示两次提供该用户的密码。

添加用户后,可以使用以下命令轻松安装外部驱动器:

sudo mount /dev/sda1 /home/bu

然而,在我们可以使用它之前,需要采取最后一步。 您还需要更改挂载文件夹的所有权,也可以将其更改为bu用户:

sudo chown bu:bu /home/bu

因此,我们现在已经安装了外部USB驱动器,并根据权限进行设置。 如果现在运行以下命令,您将看到/ dev / sda1被挂载到/ home / bu

df -h

Filesystem      Size  Used Avail Use% Mounted on
rootfs           15G  2.4G   12G  18% /
/dev/root        15G  2.4G   12G  18% /
devtmpfs        484M     0  484M   0% /dev
tmpfs            98M  236K   98M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           195M     0  195M   0% /run/shm
/dev/mmcblk0p1   56M   19M   37M  34% /boot
/dev/sda1       2.7T  260M  2.6T   1% /home/bu

由于我已经在外部USB驱动器上有一些测试数据,表明我已经使用了260MB。 在一个新鲜的驱动器,它应该是零。

16.启动时安装外部USB驱动器

所有似乎都找到,但重新启动后,外部USB驱动器不再安装。 通常你只需要在/ etc / fstab中添加一个条目,但是快速启动时出现问题,USB检测速度太慢 。 解决方案很简单。

编辑: /boot/cmdline.txt

你会看到有一行包含:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

只需添加rootdelay = 10,使其现在看起来:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait rootdelay=10

接下来编辑/ etc / fstab

并将其添加到该文件的末尾

UUID=eac53de3-9f06-4e46-999c-684da279298b       /home/bu        ext4    defaults        0       2

当然使用你自己的UUID而不是上面的例子给出的。

所以现在我们已经确保外部USB驱动器安装在/ home / bu,即使重新启动。 如果你附加了多个usb设备,我从来没有测试过,并且注意到我没有正确添加所有这些设备,那么可能将rootdealy扩展到10以上。

17.配置Samba

接下来,我们将配置samba,以使其能够在网络上提供所有备份。 Samba是一个守护进程,提供网络共享,也可以通过Windows使用smb protocoll进行访问。

只需编辑/etc/samba/smb.conf并用config替换配置文件的上下文:

[global]

   workgroup = WORKGROUP
   server string = %h server
;   wins support = no
;   wins server = w.x.y.z
   dns proxy = no
;   name resolve order = lmhosts host wins bcast
   name resolve order = bcast lmhosts host wins

    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE

;   interfaces = 127.0.0.0/8 eth0
;   bind interfaces only = yes

   hosts allow = 127.0.0.1, 10.0.0.0/24
   hosts deny = 0.0.0.0/0

   log file = /var/log/samba/log.%m
   max log size = 1000
#   syslog only = no
   syslog = 0
   panic action = /usr/share/samba/panic-action %d

   security = user
   encrypt passwords = true
   map to guest = bad user
   guest account = bu

#   valid users = root

#======================= Share Definitions =======================

[Backup]
        comment = Backup Share
        path = /home/bu
        read only = yes
        guest only = yes
        guest ok = yes
        hosts allow = 127.0.0.1, 10.0.0.0/24
        force user = bu
        force group = bu
        hosts deny = 0.0.0.0/0

为了确保在局域网内没有任何泄漏,我将在全局部分设置为拒绝每个IP地址,只允许localhost以及lan。 我用的是10.0.0.x。 可能你使用192.168.0.0 ,所以要相应地改变。

另外在全局部分中,您可以看到访客帐户是用户,而在实际的分享中,您可以看到客人有访问权限,只有访问权限。

保存并退出文件并重新启动samba:

sudo /etc/init.d/samba restart

因此,我们没有配置服务。

18.树莓上的备份控制文件

创建并编辑/home/bu/backups.sh并填写以下内容:

#!/usr/bin/env bash

basePath="/home/bu"

action="${1}"

function checkMonth ()
{
        now=$(date +"%Y-%m")
        last=$(<checkMonth.txt)
        if [[ ${now} != ${last} ]]
        then
                # New Month
                mkdir -p "${basePath}/current/"
                rm -Rf "${basePath}/current/"*
                echo "${now}" > "checkMonth.txt"
        fi
}



function makeHardlink ()
{
        # Make hardlink copy
        now=$(date +"%Y-%m-%d_%H-%M")
        mkdir -p "${basePath}/old/${now}"
        cp -al "${basePath}/current"* "${basePath}/old/${now}"
}



function checkFree ()
{
        # Check if old files need to be deleted
        freeSpace=$( df -P | grep "${basePath}" | awk '{print $4}' )
        curUse=$( cd "${basePath}/current" | du -s | awk '{print $1}' )
        estUse=$(( curUse * 2 ))

        echo "${freeSpace} - ${curUse} - ${estUse}"

        while [[ ${freeSpace} -le ${estUse} ]]
        do
                echo "Not enough space... removing old backups..."
                IFS= read -r -d $'\0' line < <(find "${basePath}/old" -type d -maxdepth 1 -printf '%T@ %p\0' 2>/dev/null | sort -z -n)
                oldDir="${line#* }"
                rm -Rf "${oldDir}"
                freeSpace=$( df -P | grep "${basePath}" | awk '{print $4}' )
                echo "${freeSpace} - ${curUse} - ${estUse}"
        done
}



case ${action} in

        newMonth)
                        checkMonth
                        ;;
        hardLink)
                        makeHardlink
                        checkFree
                        ;;
esac

此脚本有两个目的。 应该在每个备份之前和之后运行。

checkMonth函数将看到自上次备份以来是否有新的月份。 如你所知,硬盘可能会变得腐败,或者它的某些部分可能会失败。 如果发生这种情况,您将无法再访问损坏的扇区中的数据文件。 但是,创建完整的备份需要大量的磁盘空间。 为了节省磁盘空间,我硬链接备份,这意味着我只写文件系统“索引”文件一个新的指向相同的数据。 因此,如果数据扇区被破坏,则所有硬链接文件的文件不能被检索,因为它们都指向相同的数据。 为了尽量减少风险,我确保每个月都会写入一个完整的新备份集。 这将在您的存储空间中吃。 例如,如果您有400 GB数据,这意味着在第1个月将使用400 GB +更改的文件。 在第2个月将使用另外400 GB +更改的文件等

这也意味着新月份的第一次同步和第一次同步需要很长时间。 所有其他人都很快。

makeHardlink功能实际上将创建最后一个备份的hardlink副本。 硬链接副本几乎不需要空间,而在备份中,只有新文件被重新写入。 还结合hardlink的copy我运行checkFree函数。

checkFree函数检查/ home / bu的可用空间。 它还会检查最后一次备份所使用的大小。 如果可用空间小于上一次备份的两倍,那么它将开始删除旧的备份,直到它再次有两倍的可用空间。 我倾向于考虑如果您已经拥有要备份的400 GB数据,那么在第二天/下一个备份时间,您将不会有超过800 GB的数据。

这意味着你可以使用这个备份机制“永远”。 如果可用空间太小,它将自动删除旧的备份。

保存该脚本使其可执行并将所有权更改为bu用户后:

sudo 0755 /home/bu/backups.sh
sudo chown bu:bu /home/bu/backups.sh

那就是在Raspberry Pi边。

从Linux备份到Rasperry Pi

要备份到Raspberry Pi,您只需要将当前用户(或根(如果需要))添加到Raspberry Pi备份用户帐户。

我假设你已经安装了一个ssh客户端,并且你有一个可以使用的公钥。 最终你需要先安装rsync。

19.创建公共ssh密钥

如果您目前没有公钥,请创建一个:

ssh-keygen -t rsa -b 4096 -C "user@domain.tld"

当然,用你的电子邮件替换它,或者如果你想要的话,只要填写一下。

20.将公共ssh密钥复制到Rasperry Pi备份用户

然后,您需要将您的公钥复制到Raspberry Pi备份用户帐户:

ssh-copy-id ~/.ssh/id_rsa.pub bu@rpi2bu

将bu和rpi2bu替换为实际的备份用户和主机名。 如果由于某种原因,Raspberry Pi不能被其主机名检测到,请使用其IP地址。

21.在桌面上创建备份脚本

现在我们可以登录到Raspberry Pi而不需要提供密码,我们需要一个小的bash脚本来进行备份。 在桌面上创建一个backup.sh

编辑〜/ Desktop / backup.sh “并添加

#!/usr/bin/env bash

# Check for new month
ssh bu@rpi2bu '/home/bu/backups.sh newMonth'
# Run rsync backup
rsync -avzpH  --partial --delete ~/ bu@rpi2bu:/home/bu/current/
# Make backup and check regarding free space
ssh bu@rpi2bu '/home/bu/backups.sh hardLink'

然后使其可执行:

chmod 0755 ~/Desktop/backup.sh

那就是这样 - 当然不要忘记树莓荚的主机名称,如果你使用不同的东西,可以改变用户。

从Windows备份到Rasperry Pi

在Windows上,因为所有那些漂亮的* nix工具都缺少,这有点困难。 特别是ssh和rsync。 然而,这里的简单解决方案是使用根据包安装cygwin。

22.下载Cygwin

首先我们需要下载并安装cygwin。 从这里下载。 很可能你想使用64位版本。

23.使用所需的软件包安装Cygwin

Cygwin安装程序下载完成后,运行它。 然后会提示您输入几个输入。 根据以下列表输入:

选择下载源 - >从Internet安装
选择根安装目录 - > C:\ cygwin
本地包目录 - > C:\ Users \ \下载(保留默认值)
选择您的Internet连接 - >直接连接
选择一个下载网站 - >选择一个靠近你的下载网站

之后,您将看到“选择包”对话框。 这里重要的是选择rsyncopenssh 。 最好您可以使用搜索框过滤列表。 只需输入rsync ,然后您将在Net文件夹中找到它。 点击它,然后Bin? 立即检查栏。 对于openssh重复此操作。

之后,它将开始下载所有的软件包并进行安装。 因为它会下载很多* nix工具,需要一点时间。

24.创建一个公钥ssh密钥

在安装包括rsync和openssh的cygwin之后,您将在开始菜单中添加一个新的“Cygwin”条目。 在该条目中,您将找到Cygwin Terminal的链接。 运行它,终端将打开。 在终端中,我们通过发出这个命令创建公钥ssh:

ssh-keygen -t rsa -b 4096 -C "user@domain.tld"

当然,用你的电子邮件替换它,或者如果你想要的话,只要填写一下。

将公共ssh密钥复制到Rasperry Pi备份用户

然后,您需要将您的公钥复制到Raspberry Pi备份用户帐户:

ssh-copy-id ~/.ssh/id_rsa.pub bu@rpi2bu

将bu和rpi2bu替换为实际的备份用户和主机名。 如果由于某种原因,Raspberry Pi不能被其主机名检测到,请使用其IP地址。

26.在桌面上创建备份脚本

现在打开您的文本编辑器并输入以下内容:

REM Just a little script for making backups

REM Check if it's a new month
c:\cygwin\bin\ssh.exe bu@rpi2bu '/home/bu/backups.sh newMonth'
REM Make backup with rsync
c:\cygwin\bin\rsync -avzpH  --partial --delete -e "c:\cygwin\bin\ssh.exe" /cygdrive/c/Users bu@rpi2bu:/home/bu/current/
REM Make hardlink copy and clean up space if necessary
c:\cygwin\bin\ssh.exe bu@rpi2bu '/home/bu/backups.sh hardLink'

将此文件另存为backup.bat

在桌面上(或任何其他位置)。

文件扩展名是.bat,以便Windows将运行它是非常重要的。

如果您将Cygwin安装到任何其他文件夹,请提供相应的路径(默认情况下,将使用c:\​​ cygwin64进行64位安装)。 如果您使用不同的东西,还要更改Raspberry Pi主机名和备份用户。

当您立即单击桌面上的backup.bat文件时,它将打开一个终端并进行备份。 您也可以从Windows命令(cmd.exe)运行它,以便在完成后不会自动关闭。

检查你的备份

只做备份只是交易的一半。 您需要验证(a)是否进行备份,(b)如果需要,可以使用它们来恢复。

为了使这个简单,我们设置samba earilier。 如果您检查网络环境是否正确配置,那么您应该在您附近有一台名为rpi2bu的计算机/服务器。 在Windows中,只需打开资源管理器,进入网络 ,等待2-3秒才能显示。 在Linux上,例如在Dolphin,您只需点击位置边栏中的网络图标。 然后,您可以在没有任何凭据的情况下输入该计算机/服务器,然后它将显示一个名为Backup的共享。 当您输入该共享时,您将看到两个文件夹当前旧的和两个文件backups.shcheckMonth.txt 。 您可以将文件复制回计算机,但由于samba设置为只读,因此无法删除文件。

因此,将几个文件复制回您的计算机,并确认它们运行正常。 如果这样做,您已成功备份。