如何将 Raspberry Pi 设置为 Linux 和 Windows 桌面的备份服务器
在此页
- 将 Raspberry Pi 设置为备份服务器
- 1。下载 Raspian 图片
- 2。将图像闪存到 microSD 卡上
- 3。首次启动/配置
- 4。扩展文件系统
- 5。更改用户密码
- 6。控制台登录
- 7.本土化
- 8.高级选项 <李>9。设置主机名
- 10。内存拆分
- 11。启用 OpenSSH 服务器
- 11。完成并重启
- 12。更新并安装所需的包
- 13。继续远程 SSH 连接或在 Raspberry Pi 上
- 14。找到并格式化外部 USB 驱动器
- 15。安装外部 USB 驱动器
- 16。在启动时挂载外部 USB 驱动器
- 17。配置桑巴
- 18。树莓派上的备份控制文件
- 19。创建公共 ssh 密钥
- 20。将公共 ssh 密钥复制到 Rasperry Pi 备份用户
- 21。在桌面上创建备份脚本
- 22。下载Cygwin
- 23。使用所需的包安装 Cygwin
- 24。创建公用 ssh 密钥
- 25。将公共 ssh 密钥复制到 Rasperry Pi 备份用户
- 26。在桌面上创建备份脚本
Raspberry Pi 是一系列小型单板计算机。它们相当便宜,非常适合运行备份服务器或 voip 服务器。 2015 年 2 月,Raspberry Pi 2 发布。它有更多的 ram,更新的 cpu 和 4 个板载 USB 端口。
Raspberry Pi 2 的当前价格为 35 美元。然而,除此之外你还需要一些其他的东西:
- microSD 卡:Raspberry Pi 2 需要从 microSD 卡启动。任何应该使用 4GB 或更多。对于备份服务器,4GB 应该足够了。你可能想要一个阅读速度快的。
- 微型 USB 电源充电器:您还需要一个电源。它由微型 USB 端口供电,因此您很可能会在家中使用不再需要的旧手机充电。
- 外部 USB 存储:由于本指南是关于设置备份服务器的,因此您还需要获得外部 USB 存储。也许一个外部 512GB 硬盘就足够了,也许你需要一个 4TB 的驱动器。这完全取决于您的存储需求。
- 外壳:最后一件事是外壳。你并不严格需要外壳,但如果你不使用外壳,那么你将只需要将整个主板放在某个地方并且更容易损坏。
所以总成本大约是 35 美元。- 对于 Raspberry Pi,大约 10 美元。- 对于 microSD 卡,大约 10 美元。- 对于这种情况,微型 USB 充电器没有任何费用,因为您可能有一个,然后无论外部USB 驱动器成本。
此外,为了检索备份,我设置了 samba,共享处于只读模式,没有任何必需的凭据。如果根据本指南正确配置,它将仅在 lan 中可用,并拒绝来自 lan 外部的任何连接尝试。设置 samba 用户和不同的凭据将超出本指南的范围。还有很多其他的 howtos 可以解释它,如果需要它可以很容易地合并。
将 Raspberry Pi 设置为备份服务器
将 Raspberry Pi 设置为备份服务器是其中“最”困难的部分,因为您首先必须刷新映像,然后准备好一切。但是,分步指南应该会带您完成它。
1. 下载 Raspian 图片
首先从这里下载当前的 Raspian Image https://www.raspberrypi.org/downloads/
2. 将图像刷写到 microSD 卡上
下载图像后,您需要将其闪存到 microSD 卡中。由于已经有优秀的指南可以做到这一点,因此没有必要在这里重复这一点。最好按照这里的指南
3.首次启动/配置
在用 Raspian Image 刷新 Raspberry Pi 后,将 HDMI 屏幕连接到它并启动它。首次启动时,您将看到一个配置屏幕。该配置屏幕非常简单,您应该设置一些内容。
4.扩展文件系统
首先,我们希望 SD 卡上有可用的全部空间。对于备份来说,这并不重要,因为它们无论如何都会存储在外部驱动器上。但是我确实喜欢有可用的空间。因此,选择 1 Expand Filesystem 然后系统会提示您在下次重新启动时通知文件系统将被扩展。
5.更改用户密码
然后我们要更改用户 \pi\ 的默认密码。因此,选择 2 Change User Password,然后键入所需的密码两次,每次都按 Enter。系统将再次提示您密码已更改的通知。
6.控制台登录
之后我们要确保我们不启动和 gui。所以选择 3 Enable Boot to Desktop/Scratch。在以下屏幕上,选择 Console Text console,需要登录(默认)。
7.本地化
然后我们要设置系统语言和其他可用语言、键盘布局等。为此我们进入 4 个国际化选项。当您输入时,您将看到更改语言、时区和键盘语言。对话框都很简单,所以我不会详细介绍。
8.高级选项
现在进入 8. 高级选项。我们还有另外一堆可以设置的东西。三个重要的是 A2 主机名、A3 内存拆分和 A4 SSH。
9.设置主机名
主机名将允许您通过 LAN 上的主机名访问 Raspberry Pi。当心:您只能使用字母和数字。在此示例中,我使用主机名 rpi2bu - Raspberry Pi 2 Backup 的缩写,但这完全取决于您。
10.记忆分裂
由于我们想将这个 Raspberry Pi 作为备份服务器运行,我们不想在 gpu 上浪费宝贵的内存。请记住:这是一个无头服务器。所以将 ram split 设置为 16MB。
11. 启用 OpenSSH 服务器
由于我们通过 ssh 使用 rsync 进行备份,并且由于 ssh 访问有利于 Raspberry Pi 的远程管理,因此还可以在高级选项菜单中启用 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
13. 继续远程 SSH 连接或在 Raspberry Pi 上
接下来的步骤可以在 Raspberry Pi 本身或通过 ssh 连接完成。我更喜欢 ssh 连接,而在 linux 上,我只是在我的 KDE 中使用 Konsole。在 Windows 上,你可以使用 Kitty
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 设备,因此如果需要,它很容易扩展到另一个用户。在我安装它之前,我添加了相应的备份用户 - 在这个 howto 中我称该用户为 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
所以现在我们已经确保外部 USB 驱动器即使在重新启动后也安装在 /home/bu 中。如果您连接了多个我从未测试过的 USB 设备,并且您注意到我没有正确添加所有这些设备,那么可以将 rootdealy 扩展到 10 个以上。
17.配置Samba
接下来配置 samba,以便它可以使所有备份在网络上可用。 Samba 是一个守护进程,它提供网络共享,也可以使用 smb 协议通过 Windows 进行访问。
只需编辑 /etc/samba/smb.conf 并将配置文件的上下文替换为:
[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
为了确保没有任何内容泄漏到 lan 之外,我在全局部分设置为拒绝每个 ip 地址,只允许 localhost 和 lan。我的局域网使用 10.0.0.x。您可能使用 192.168.0.0,因此相应地更改它。
此外,在全局部分中,您会看到来宾帐户是 bu 用户,在实际共享中,您会看到来宾具有访问权限并且是只读访问权限。
保存并退出文件并重启 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 '% %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 函数实际上会创建上次备份的硬链接副本。硬链接副本几乎不需要空间,在备份上,只有新文件被重新写入。我还结合硬链接副本运行了 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,您只需将当前用户(或 root,如果需要)添加到 Raspberry Pi 备份用户帐户。
我假设您已经安装了一个 ssh 客户端,并且您有一个可以使用的公钥。最终你需要先安装 rsync。
19. 创建公钥
如果到目前为止您还没有公钥,请创建一个:
ssh-keygen -t rsa -b 4096 -C ""
当然,将其替换为您的电子邮件,或者根据需要填写任何内容。
20.将ssh公钥复制到Rasperry Pi备份用户
然后你需要将你的公钥复制到树莓派备份用户账户:
ssh-copy-id ~/.ssh/id_rsa.pub
将 bu 和 rpi2bu 替换为您的实际备份用户和主机名。如果出于某种原因无法通过主机名检测到 Raspberry Pi,请使用其 IP 地址。
21.在桌面上创建备份脚本
现在我们无需提供密码即可登录 Raspberry Pi,我们需要一个小的 bash 脚本来进行备份。在桌面上创建一个 backup.sh。
编辑 ~/Desktop/backup.sh\ 并添加这个
#!/usr/bin/env bash # Check for new month ssh '/home/bu/backups.sh newMonth' # Run rsync backup rsync -avzpH --partial --delete ~/ :/home/bu/current/ # Make backup and check regarding free space ssh '/home/bu/backups.sh hardLink'
然后使其可执行:
chmod 0755 ~/Desktop/backup.sh
就是这样 - 当然不要忘记根据 Raspberry Pi 的主机名进行设置,如果您使用不同的东西,请更改用户。
从 Windows 备份到 Rasperry Pi
在 Windows 上它有点难,因为所有那些不错的 *nix 工具都丢失了。特别是 ssh 和 rsync。然而,这里的简单解决方案是使用相应的软件包安装 cygwin。
22. 下载 Cygwin
首先我们需要下载并安装cygwin。从这里下载。您很可能想使用 64 位版本。
23. 使用所需的包安装 Cygwin
Cygwin 安装程序下载完成后,运行它。然后系统会提示您进行一些输入。根据下表输入:
选择下载源 -> 从 Internet 安装
选择根安装目录 -> C之后,您将看到“选择包”对话框。这里选择 rsync 和 openssh 很重要。最好您可以使用搜索框过滤列表。只需输入 rsync,然后您就会在 Net 文件夹中找到它。单击它,然后单击 Bin?现在应该检查列。对 openssh 重复此操作。
之后它会开始下载所有的包并安装它们。因为它会下载很多 *nix 工具,所以需要一点时间。
24. 创建公钥
安装包含 rsync 和 openssh 的 cygwin 后,您的开始菜单中将有一个新的“Cygwin”条目。在该条目中,您可以找到 Cygwin 终端的链接。运行它,终端将打开。在终端中,我们通过发出以下命令来创建公共 ssh 密钥:
ssh-keygen -t rsa -b 4096 -C ""
当然,将其替换为您的电子邮件,或者根据需要填写任何内容。
25.将ssh公钥复制到Rasperry Pi备份用户
然后你需要将你的公钥复制到树莓派备份用户账户:
ssh-copy-id ~/.ssh/id_rsa.pub
将 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 '/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 :/home/bu/current/ REM Make hardlink copy and clean up space if necessary c:\cygwin\bin\ssh.exe '/home/bu/backups.sh hardLink'
将此文件另存为 backup.bat
在您的桌面上(或任何其他位置)。
如果您将 Cygwin 安装到任何其他文件夹,请提供相应的路径(默认情况下它将使用 c
当您现在单击桌面上的 backup.bat 文件时,它将打开一个终端并进行备份。您也可以从 Windows 命令 (cmd.exe) 运行它,这样它就不会在完成后自动关闭。
检查您的备份
仅进行备份只是成功的一半。您需要验证 (a) 备份已经完成,并且 (b) 如果需要,您可以使用它们来恢复内容。
为了简单起见,我们更早地设置了 samba。如果检查网络环境配置正确,那么您附近应该有一台名为 rpi2bu 的计算机/服务器。在 Windows 中,只需打开资源管理器,进入网络并等待 2-3 秒让它出现。在 Linux 上,例如在 Dolphin 中,您只需单击位置边栏中的网络图标。然后您可以在没有任何凭据的情况下进入该计算机/服务器,然后它会显示一个名为 Backup 的共享。当您进入该共享时,您会看到两个文件夹 current 和 old 以及两个文件 backups.sh 和 checkMonth.txt。您可以将文件复制回您的计算机,但由于 samba 设置为只读,因此您无法删除这些文件。
因此,将一些文件复制回您的计算机并验证它们是否运行正常。如果他们这样做,则您已成功进行备份。