源码先锋

源码先锋

旧手机别卖掉换脸盆了,自制服务器了解一下

admin 132 198

作者|HannahLee

译者|弯月责编|欧阳姝黎

出品|CSDN(ID:CSDNnews)

本文将向你展示如何使用UrBackup和LinuxDeploy在一台Android旧手机上搭建一台备份服务器。旧手机的污染问题众所周知,我有一台旧手机,虽然外壳有裂纹和磨损,但性能还很好,因此我打算废物再利用一下。


你的旧手机很可能:

并没有那么旧(你会像换手机那样一两年就换一台电脑吗?)

有4-8个处理器和大约4GB的内存,以及内置UPS。只需要再加一个外部硬盘驱动,就可以备份整个家庭的网络了!

警告:这只是一个尝试可能性的项目。由于我们使用的是Android,因此必须克服一些困难,而且很多方面都会受到限制。这可能并不是最简单的备份家庭网络的方法,也不是使用UrBackup的最佳用途。但在设置完成,服务器可以正常运行后,你就可以轻松地管理多台机器的备份并添加存储。

下面是一些限制:

文件系统只能使用EXT4。这是唯一兼容UrBackup和Android的文件系统。因此没有文件系统级别的压缩等功能。

从chroot环境下无法直接调用systemd。我们会安装一个简单的启动脚本,启动UrBackup服务,并使用pkill停止服务。此外,我们还会添加一个cronjob,在系统启动时启动服务。

UrBackup主要以Windows为主。虽然它提供Linux的完整备份功能,但其Linux版本的完整镜像依然是beta版状态。此处我们会安装稳定版,所以我们的服务器无法支持利用Linux客户端进行完整镜像备份。但是,你可以在客户端上创建备份镜像,然后备份含有这些镜像的目录。最后,UrBackup团队也在开发Mac客户端支持,但同样是beta版。对于我来说,我没有Windows服务器,我也不想备份我的Windows笔记本电脑,所以我只在Linux服务器上使用UrBackup。

LinuxDeploy提供的发行版和版本支持很有限。我试验了Centos7、和Debian10,其中只有Debian10能够毫无错误地运行。UrBackup对Debian的支持也为最好(其他发行版都没有ARM64的.deb包)。

如果你打算与我一起尝试一下,则请看下面的行动计划:

root手机。具体做法请参考相关文档,不在此赘述。

安装LinuxDeploy并部署DebianBuster。

安装UrBackup服务器。

连接客户端。

请记住,本教程采用了非常特殊的配置,,其中大部分是为了适应在chroot环境中,在Android上使用Debian。



准备工作


rootAndroid手机

我的手机是Pixel4a(8核CPU,6GB内存)。手机的特定型号应该没有太大关系,但不同的型号可能会遇到不同的问题。如果你的手机是在过去五年内发布的,那么规格上应该没问题。我建议至少4核CPU和2GB的内存,这对于大多数家庭网络来说应该就够了,但是你必须想清楚备份要求。此外不要忘记,Android操作系统本身将占用一些资源。

如果你打算通过Magisk来root手机,则请注意:

确保你使用的文件与手机当前的引导程序版本相符。

如果你使用的是Android11,而且Magisk程序无法正常工作,请降级到Android10再试。我在Pixel4a上摆弄了一整天的Android11。

如果你不想使用Magisk,请非常谨慎地使用其他工具。有很多其他应用程序可能含有恶意软件。CF-Auto-Root也是一款很好的root工具,但请确认下载源的安全。

LinuxDeploy应用

该应用可以在Debian服务器上运行chroot环境。

你可以从GitHub下载最新版本。应用商店中的版本已经没人维护了。

BusyBox应用

该应用可以为LinuxDeploy提供Unix工具程序。可用的“BusyBox”应用有好几个,但只有这个版本与LinuxDeploy兼容。

你可以从GitHub下载最新版本。应用商店中的版本已经没人维护了。

充电线

手机的充电线。

从另一台机器上通过SSH连接到服务器

尽管理论上可以在手机上安装Termux或SSH应用进行操作,但通过键盘进行操作肯定更容易。


可选设备(强烈推荐)


尽管从技术的角度来看,你可以将备份存储在SD卡上,但不建议这样做。SD卡的速度较慢,可靠性较低,并且无法长时间处理持续写入。如果你计划备份到SD卡,那么估计一年内就会损坏(如果数据量大,甚至一个月内就会出问题)。

带USB线的外置HDD/SSD

大小和写入速度取决于你个人,但我更关心可靠性,而不是存储和速度。如果你有大量存储空间(几百甚至几千GB),则速度很重要。在这种情况下,写入速度很关键,因为你可以及时完成备份。为了可靠性,我们必须考虑品牌。使用廉价的驱动器,就要做好心理准备备份过程中会出现I/O错误。

USB扩展坞

根据你的手机,可能需要支持microUSB或USB-C。这个扩展坞应该至少有一个USB端口,可以连接到外部驱动器,而且还有一个充电的端口,但我建议选择一个带有以太网适配器的扩展坞。你可以通过WiFi运行该服务器,但以太网更快、更可靠。

以太网线

如果你在以太网上运行服务器,则需要准备一个以太网线。


第一步:安装LinuxDeploy并部署DebianBuster

1-1.在root完手机后,打开GitHub,下载LinuxDeploy和BusyBox的.apk软件包,安装这两个应用。

1-2.安装完毕后,打开BusyBox。安装的过程中,记录下BusyBox的安装位置。在下图中,BusyBox安装到了"/system/xbin"。稍后我们会用到这个位置。

完成如下设置:

架构

所有安卓手机都是AARCH64/ARM64。确保显示的是“arm64”(或者是其他发行版的“aarch64”)。

安装路径

默认值是"${EXTERNAL_STORAGE}/"。这是你的SD卡,你可以留着它(可以在树莓派上工作)。但是,如果没有插入SD卡或未正确格式化,则安装将失败。我建议安装到你的内部存储中。我假设你不会使用手机干别的事情,因为它需要一直插着电。

镜像大小(MB)

我建议至少保留15GB,但请确保为Android留出足够的存储空间。这部分空间会占用内部存储,因此最后剩下的空间可能没有50GB这么多。

初始化系统

如果没有设置为“sysv”,则cronjobs将不会在启动时运行。

挂载

如果你不担心将来的存储扩展,则挂载外部块设备时只需将其路径直接添加到挂载点。如果以后有扩展存储的打算,则可以考虑逻辑分区。我们在此加载的设备,都可以在启动时直接访问,但不能用于分区和格式化。但是,请记住,重新启动手机时,块设备的名称(/dev/block/sdX)可能会变化,因此可能需要在重新启动时检查/更新此配置。如果你挂载的是逻辑卷,则名称不会变化,也不需要检查。

如何找到外部块设备的路径

在Android上,你可以通过“/dev/block/sdX”(而不是“/dev/sdX”)找到块设备。为了确定哪个sdX设备是外部块设备,你需要在插入该设备的服务器上运行“lsblk”。然后搜索各种设备,并查看哪一个与你的设备一致(就存储容量/现有分区而言)。如果你在启动后插入设备,则可能是最后一个设备。

注意:挂载块设备后,你必须先解除挂载或关闭服务器,然后才能从物理上断开块设备的连接。如果在未解除挂载的情况下断开块设备的连接,则很可能会丢失所有数据。

第二步:安装UrBackup服务器


2-1.SSH到新部署的服务器。

IP地址与手机相同,端口为22,你可以使用步骤1-3中设置的凭据登录。本教程后续内容均假设你以root身份登录。打开LinuxDeploy就可以看到你的IP:

2-2.更新系统。

aptupdateaptupgrade-yaptinstallwget

2-3.下载UrBackup的.deb包。

wget

这是目前最新的稳定版本。

2-4.创建备份目录。

在这个例子中,我将备份目录设置为“/mnt/backup”。如果你挂载了存储,则目录已经创建好了;如果没有,请创建目录:

mkdir-p/mnt/backup

更新权限:

chownurbackup/mnt/backupchgrpurbackup/mnt/backup

允许UrBackup写入此目录。

2-5.安装启动脚本。

我们无法在chroot环境中调用systemd,因此需要手动启动该服务:

/usr/bin/urbackupsrvrun--config/etc/default/urbackupsrv--no-consoletime

为了避免每次都输入该命令,我们可以创建一个脚本:

nano/usr/bin/urbackupsrv-star

将其复制到下面的文件中:

#!/bin/sh
/usr/bin/urbackupsrvrun--config/etc/default/urbackupsrv--no-consoletime

保存并退出。

添加执行权限:

chmod755/usr/bin/urbackupsrv-start

2-6.启动服务。

urbackupsrv-start

该命令将启动服务器的日志。你可以按下CTRL-C停止服务,因此需要另开一个SSH会话。

如果想停止此服务,只需要干掉它就可以了:

pkillurbackup

2-7.添加定时作业。

由于我们无法以传统的方式“启用”UrBackup服务,因此需要设置一个定时作业来启动该服务。此外,如果你断开外部块存储或重新启动手机,备份目录的权限可能会恢复。为确保在重新启动时这些设置能保留下来,我们需要添加定时作业。

打开crontab:

crontab-e

添加作业:

@rebootchownurbackup[full/path/to/backup_directory]chgrpurbackup[full/path/to/backup_directory]urbackupsrv-start

保存并退出。

2-8.打开Web界面。

通过Web浏览器导航到服务器的端口55414:

http://YOUR_SERVER_IP:55414

第三步:连接客户端


这是新客户端的主机名。

3-3.安装客户端。

对于Windows客户端:

按照“DownloadpreconfiguredclientinstallerforWindows”的说明安装客户端。

对于Linux客户端:

登录到客户端,并运行此安装脚本:

(不要运行服务器提供的脚本)

TF=$(mktemp)wget""-O$TFsudosh$TF;rm-f$TF

(检查最新的客户端下载。)

在安装过程中,脚本会要求你选择快照机制。对于“LVM-LogicalVolumeManagersnapshots”,请输入“2”:

安装完成后,请确认客户端的正常运行:

serviceurbackupclientbackstatus

如果客户端没有运行,请运行下述命令:

serviceurbackupclientbackstart

最后,通过下述命令将客户端连接到服务器:

urbackupclientctlset-settings\-kinternet_mode_enabled-vtrue\-kinternet_server-v"YOUR_SERVER_IP"\-kinternet_server_port-v"55415"\-kcomputername-v"YOUR_CLIENT_NAME"\-kinternet_authkey-v"YOUR_DEFAULT_AUTHENTICATION_KEY"

请确保"YOUR_CLIENT_NAME"与3-2中设置的主机名相同,"YOUR_DEFAULT_AUTHENTICATION_KEY"是服务器前面生成的键。

3-4.配置服务器。

(如果所有客户端都是本地的,则可以取消“Doimagebackupsovertheinternet”以及“Dofullfilebackupsovertheinternet”。)

滚动到底部并单击保存。

3-5.设置备份目录。

你还可以在此设置备份间隔。

对于Linux客户端,你也可以从客户端的命令行设置:

urbackupclientctladd-backupdir-dFILE_PATH

重启服务器:

pkillurbackupurbackupsrv-start

3-6.重新登录到Web界面。

到此为止,客户端已经连接好了。可能“Filebackupstatus”(文件备份状态)会显示“Nopathstobackupconfigured”(没有设置备份路径),但没关系,在第一次完成备份之前,都会这显示。

另外请注意,如果你连接的是Linux客户端,则不支持镜像备份。但是,你可以通过Linux客户端运行镜像备份,并设置备份镜像的目录。

接下来,你就可以尝试一下备份了!