我的手机是 Pixel 4a(8核CPU,6GB内存)。手机的特定型号应该没有太大关系,但不同的型号可能会遇到不同的问题。如果你的手机是在过去五年内发布的,那么规格上应该没问题。我建议至少 4 核 CPU 和 2GB 的内存,这对于大多数家庭网络来说应该就够了,但是你必须想清楚备份要求。此外不要忘记, Android 操作系统本身将占用一些资源。
如果你打算通过 Magisk 来 root 手机,则请注意:
-
确保你使用的 boot.img 文件与手机当前的引导程序版本相符。
-
如果你使用的是 Android 11,而且 Magisk 程序无法正常工作,请降级到 Android 10再试。我在 Pixel 4a 上摆弄了一整天的 Android 11。
-
如果你不想使用 Magisk,请非常谨慎地使用其他工具。有很多其他应用程序可能含有恶意软件。CF-Auto-Root 也是一款很好的 root 工具,但请确认下载源的安全。
Linux Deploy 应用
该应用可以在 Debian 服务器上运行 chroot 环境。
你可以从 GitHub 下载最新版本。应用商店中的版本已经没人维护了。
BusyBox 应用
该应用可以为 Linux Deploy 提供 Unix 工具程序。可用的“Busy Box”应用有好几个,但只有这个版本与 Linux Deploy 兼容。
你可以从 GitHub 下载最新版本。应用商店中的版本已经没人维护了。
充电线
手机的充电线。
从另一台机器上通过 SSH 连接到服务器
尽管理论上可以在手机上安装 Termux 或 SSH 应用进行操作,但通过键盘进行操作肯定更容易。
可选设备(强烈推荐)
==============
尽管从技术的角度来看,你可以将备份存储在 SD 卡上,但不建议这样做。SD 卡的速度较慢,可靠性较低,并且无法长时间处理持续写入。如果你计划备份到SD 卡,那么估计一年内就会损坏(如果数据量大,甚至一个月内就会出问题)。
带 USB 线的外置 HDD/SSD
大小和写入速度取决于你个人,但我更关心可靠性,而不是存储和速度。如果你有大量存储空间(几百甚至几千GB),则速度很重要。在这种情况下,写入速度很关键,因为你可以及时完成备份。为了可靠性,我们必须考虑品牌。使用廉价的驱动器,就要做好心理准备备份过程中会出现 I/O 错误。
USB 扩展坞
根据你的手机,可能需要支持 micro USB 或 USB-C。这个扩展坞应该至少有一个 USB 端口,可以连接到外部驱动器,而且还有一个充电的端口,但我建议选择一个带有以太网适配器的扩展坞。你可以通过 WiFi 运行该服务器,但以太网更快、更可靠。
以太网线
如果你在以太网上运行服务器,则需要准备一个以太网线。
第一步:安装 Linux Deploy 并部署 Debian Buster
============================================
1-1. 在 root 完手机后,打开 GitHub,下载 Linux Deploy 和 BusyBox的 .apk 软件包,安装这两个应用。
1-2. 安装完毕后,打开 BusyBox。安装的过程中,记录下 BusyBox 的安装位置。在下图中,BusyBox 安装到了"/system/xbin"。稍后我们会用到这个位置。
1-3. 打开 Linux Deploy,点击右下方的设置图标。
完成如下设置:
架构
所有安卓手机都是 AARCH64/ARM64。确保显示的是 “arm64”(或者是其他发行版的 “aarch64”)。
安装路径
默认值是 “${EXTERNAL_STORAGE}/linux.img”。这是你的 SD 卡,你可以留着它(可以在树莓派上工作)。但是,如果没有插入 SD 卡或未正确格式化,则安装将失败。我建议安装到你的内部存储中。我假设你不会使用手机干别的事情,因为它需要一直插着电。
镜像大小(MB)
我建议至少保留 15 GB,但请确保为 Android 留出足够的存储空间。这部分空间会占用内部存储,因此最后剩下的空间可能没有 50 GB 这么多。
初始化系统
如果没有设置为 “sysv”,则 cronjobs 将不会在启动时运行。
挂载
如果你不担心将来的存储扩展,则挂载外部块设备时只需将其路径直接添加到挂载点。如果以后有扩展存储的打算,则可以考虑逻辑分区。我们在此加载的设备,都可以在启动时直接访问,但不能用于分区和格式化。但是,请记住,重新启动手机时,块设备的名称 (/dev/block/sdX) 可能会变化,因此可能需要在重新启动时检查/更新此配置。如果你挂载的是逻辑卷,则名称不会变化,也不需要检查。
如何找到外部块设备的路径
在 Android 上,你可以通过 “/dev/block/sdX”(而不是 “/dev/sdX”)找到块设备。为了确定哪个 sdX 设备是外部块设备,你需要在插入该设备的服务器上运行“lsblk”。然后搜索各种设备,并查看哪一个与你的设备一致(就存储容量/现有分区而言)。如果你在启动后插入设备,则可能是最后一个设备。
注意:挂载块设备后,你必须先解除挂载或关闭服务器,然后才能从物理上断开块设备的连接。如果在未解除挂载的情况下断开块设备的连接,则很可能会丢失所有数据。
1-4. 回到首页,并打开左上角的菜单。选择 “Settings”(设置),并一直向下滚动到 “PATH variable”(路径变量)。这就是你安装 BusyBox 的位置。设置好 “PATH variable” 后,选择 “Update ENV”(更新环境变量)。
1-5. 返回首页,打开右上角的菜单。点击 “Install”(安装)。你将看到安装的实时日志。完成后,日志将以 “deploy”结尾。 选择屏幕左下角的 “START”(开始)。Android 手机上就开始运行 Debian 服务器了!
第二步:安装 UrBackup 服务器
=======================
2-1. SSH 到新部署的服务器。
IP 地址与手机相同,端口为 22,你可以使用步骤 1-3 中设置的凭据登录。本教程后续内容均假设你以 root 身份登录。打开 Linux Deploy 就可以看到你的 IP:
2-2. 更新系统。
apt update && apt upgrade -y && apt install wget
2-3. 下载 UrBackup 的 .deb 包。
wget https://hndl.urbackup.org/Server/2.4.13/urbackup-server_2.4.13_arm64.deb
这是目前最新的稳定版本。
2-4. 创建备份目录。
在这个例子中,我将备份目录设置为 “/mnt/backup”。如果你挂载了存储,则目录已经创建好了;如果没有,请创建目录:
mkdir -p /mnt/backup
更新权限:
chown urbackup /mnt/backup
chgrp urbackup /mnt/backup
允许 UrBackup 写入此目录。
2-5. 安装启动脚本。
我们无法在 chroot 环境中调用 systemd,因此需要手动启动该服务:
/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
为了避免每次都输入该命令,我们可以创建一个脚本:
nano /usr/bin/urbackupsrv-star
将其复制到下面的文件中:
#!/bin/sh
/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
保存并退出。
添加执行权限:
chmod 755 /usr/bin/urbackupsrv-start
2-6. 启动服务。
urbackupsrv-start
该命令将启动服务器的日志。你可以按下 CTRL-C 停止服务,因此需要另开一个 SSH 会话。
如果想停止此服务,只需要干掉它就可以了:
pkill urbackup
2-7. 添加定时作业。
由于我们无法以传统的方式“启用” UrBackup 服务,因此需要设置一个定时作业来启动该服务。此外,如果你断开外部块存储或重新启动手机,备份目录的权限可能会恢复。为确保在重新启动时这些设置能保留下来,我们需要添加定时作业。
打开 crontab:
crontab -e
添加作业:
@reboot chown urbackup [full/path/to/backup_directory] && chgrp urbackup [full/path/to/backup_directory] && urbackupsrv-start
保存并退出。
2-8. 打开 Web 界面。
通过 Web 浏览器导航到服务器的端口 55414:
http://YOUR_SERVER_IP:55414
第三步:连接客户端
================
3-1. 点击屏幕右下方的 “Add new client”(添加新客户端):
3-2. 点击 “Add new Internet client/client behind NAT”,并输入新客户端的名称:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/661017cf6d426a0ada11ffda044076bb.jpeg)
写在最后
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。
最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
解析).pdf**和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
[外链图片转存中…(img-OG2BORyB-1712466222041)]
Java经典面试问题(含答案解析)
[外链图片转存中…(img-BKZK1pWS-1712466222041)]
阿里巴巴技术笔试心得
[外链图片转存中…(img-QUOC5GrK-1712466222042)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!