點(diǎn)擊上方[全棧開發(fā)者社區(qū)]→右上角[...]→[設(shè)為星標(biāo)?]
點(diǎn)擊領(lǐng)取全棧資料:全棧資料
本文將向你展示如何使用 UrBackup 和 Linux Deploy在一臺(tái) Android 舊手機(jī)上搭建一臺(tái)備份服務(wù)器。舊手機(jī)的污染問題眾所周知,我有一臺(tái)舊手機(jī),雖然外殼有裂紋和磨損,但性能還很好,因此我打算廢物再利用一下。- 并沒有那么舊(你會(huì)像換手機(jī)那樣一兩年就換一臺(tái)電腦嗎?)
- 有 4-8 個(gè)處理器和大約 4GB 的內(nèi)存,以及內(nèi)置 UPS。只需要再加一個(gè)外部硬盤驅(qū)動(dòng),就可以備份整個(gè)家庭的網(wǎng)絡(luò)了!
警告:這只是一個(gè)嘗試可能性的項(xiàng)目。由于我們使用的是 Android,因此必須克服一些困難,而且很多方面都會(huì)受到限制。這可能并不是最簡(jiǎn)單的備份家庭網(wǎng)絡(luò)的方法,也不是使用 UrBackup 的最佳用途。但在設(shè)置完成,服務(wù)器可以正常運(yùn)行后,你就可以輕松地管理多臺(tái)機(jī)器的備份并添加存儲(chǔ)。- 文件系統(tǒng)只能使用 EXT4。這是唯一兼容 UrBackup 和 Android 的文件系統(tǒng)。因此沒有文件系統(tǒng)級(jí)別的壓縮等功能。
- 從 chroot 環(huán)境下無法直接調(diào)用 systemd。我們會(huì)安裝一個(gè)簡(jiǎn)單的啟動(dòng)腳本,啟動(dòng) UrBackup 服務(wù),并使用 pkill 停止服務(wù)。此外,我們還會(huì)添加一個(gè) cronjob,在系統(tǒng)啟動(dòng)時(shí)啟動(dòng)服務(wù)。
- UrBackup 主要以 Windows 為主。雖然它提供 Linux 的完整備份功能,但其 Linux 版本的完整鏡像依然是 beta 版狀態(tài)。此處我們會(huì)安裝穩(wěn)定版,所以我們的服務(wù)器無法支持利用 Linux 客戶端進(jìn)行完整鏡像備份。但是,你可以在客戶端上創(chuàng)建備份鏡像,然后備份含有這些鏡像的目錄。最后,UrBackup 團(tuán)隊(duì)也在開發(fā) Mac 客戶端支持,但同樣是beta 版。對(duì)于我來說,我沒有 Windows 服務(wù)器,我也不想備份我的Windows 筆記本電腦,所以我只在 Linux 服務(wù)器上使用 UrBackup。
- Linux Deploy 提供的發(fā)行版和版本支持很有限。我試驗(yàn)了 Centos7、Ubuntu 18.04 和 Debian 10,其中只有 Debian 10 能夠毫無錯(cuò)誤地運(yùn)行。UrBackup 對(duì) Debian 的支持也為最好(其他發(fā)行版都沒有 ARM64 的 .deb 包)。
如果你打算與我一起嘗試一下,則請(qǐng)看下面的行動(dòng)計(jì)劃:- root 手機(jī)。具體做法請(qǐng)參考相關(guān)文檔,不在此贅述。
- 安裝 Linux Deploy 并部署 Debian Buster。
請(qǐng)記住,本教程采用了非常特殊的配置,,其中大部分是為了適應(yīng)在 chroot 環(huán)境中,在 Android 上使用 Debian。準(zhǔn)備工作
我的手機(jī)是 Pixel 4a(8核CPU,6GB內(nèi)存)。手機(jī)的特定型號(hào)應(yīng)該沒有太大關(guān)系,但不同的型號(hào)可能會(huì)遇到不同的問題。如果你的手機(jī)是在過去五年內(nèi)發(fā)布的,那么規(guī)格上應(yīng)該沒問題。我建議至少 4 核 CPU 和 2GB 的內(nèi)存,這對(duì)于大多數(shù)家庭網(wǎng)絡(luò)來說應(yīng)該就夠了,但是你必須想清楚備份要求。此外不要忘記, Android 操作系統(tǒng)本身將占用一些資源。如果你打算通過 Magisk 來 root 手機(jī),則請(qǐng)注意:- 確保你使用的 boot.img 文件與手機(jī)當(dāng)前的引導(dǎo)程序版本相符。
- 如果你使用的是 Android 11,而且 Magisk 程序無法正常工作,請(qǐng)降級(jí)到 Android 10再試。我在 Pixel 4a 上擺弄了一整天的 Android 11。
- 如果你不想使用 Magisk,請(qǐng)非常謹(jǐn)慎地使用其他工具。有很多其他應(yīng)用程序可能含有惡意軟件。CF-Auto-Root 也是一款很好的 root 工具,但請(qǐng)確認(rèn)下載源的安全。
該應(yīng)用可以在 Debian 服務(wù)器上運(yùn)行 chroot 環(huán)境。你可以從 GitHub 下載最新版本。應(yīng)用商店中的版本已經(jīng)沒人維護(hù)了。該應(yīng)用可以為 Linux Deploy 提供 Unix 工具程序??捎玫摹癇usy Box”應(yīng)用有好幾個(gè),但只有這個(gè)版本與 Linux Deploy 兼容。你可以從 GitHub 下載最新版本。應(yīng)用商店中的版本已經(jīng)沒人維護(hù)了。從另一臺(tái)機(jī)器上通過 SSH 連接到服務(wù)器盡管理論上可以在手機(jī)上安裝 Termux 或 SSH 應(yīng)用進(jìn)行操作,但通過鍵盤進(jìn)行操作肯定更容易。可選設(shè)備(強(qiáng)烈推薦)
盡管從技術(shù)的角度來看,你可以將備份存儲(chǔ)在 SD 卡上,但不建議這樣做。SD 卡的速度較慢,可靠性較低,并且無法長(zhǎng)時(shí)間處理持續(xù)寫入。如果你計(jì)劃備份到SD 卡,那么估計(jì)一年內(nèi)就會(huì)損壞(如果數(shù)據(jù)量大,甚至一個(gè)月內(nèi)就會(huì)出問題)。大小和寫入速度取決于你個(gè)人,但我更關(guān)心可靠性,而不是存儲(chǔ)和速度。如果你有大量存儲(chǔ)空間(幾百甚至幾千GB),則速度很重要。在這種情況下,寫入速度很關(guān)鍵,因?yàn)槟憧梢约皶r(shí)完成備份。為了可靠性,我們必須考慮品牌。使用廉價(jià)的驅(qū)動(dòng)器,就要做好心理準(zhǔn)備備份過程中會(huì)出現(xiàn) I/O 錯(cuò)誤。根據(jù)你的手機(jī),可能需要支持 micro USB 或 USB-C。這個(gè)擴(kuò)展塢應(yīng)該至少有一個(gè) USB 端口,可以連接到外部驅(qū)動(dòng)器,而且還有一個(gè)充電的端口,但我建議選擇一個(gè)帶有以太網(wǎng)適配器的擴(kuò)展塢。你可以通過 WiFi 運(yùn)行該服務(wù)器,但以太網(wǎng)更快、更可靠。如果你在以太網(wǎng)上運(yùn)行服務(wù)器,則需要準(zhǔn)備一個(gè)以太網(wǎng)線。
第一步:安裝 Linux Deploy 并部署 Debian Buster
1-1. 在 root 完手機(jī)后,打開 GitHub,下載 Linux Deploy 和 BusyBox的 .apk 軟件包,安裝這兩個(gè)應(yīng)用。1-2. 安裝完畢后,打開 BusyBox。安裝的過程中,記錄下 BusyBox 的安裝位置。在下圖中,BusyBox 安裝到了"/system/xbin"。稍后我們會(huì)用到這個(gè)位置。1-3. 打開 Linux Deploy,點(diǎn)擊右下方的設(shè)置圖標(biāo)。所有安卓手機(jī)都是 AARCH64/ARM64。確保顯示的是 “arm64”(或者是其他發(fā)行版的 “aarch64”)。默認(rèn)值是 "${EXTERNAL_STORAGE}/linux.img"。這是你的 SD 卡,你可以留著它(可以在樹莓派上工作)。但是,如果沒有插入 SD 卡或未正確格式化,則安裝將失敗。我建議安裝到你的內(nèi)部存儲(chǔ)中。我假設(shè)你不會(huì)使用手機(jī)干別的事情,因?yàn)樗枰恢辈逯姟?/span>我建議至少保留 15 GB,但請(qǐng)確保為 Android 留出足夠的存儲(chǔ)空間。這部分空間會(huì)占用內(nèi)部存儲(chǔ),因此最后剩下的空間可能沒有 50 GB 這么多。如果沒有設(shè)置為 “sysv”,則 cronjobs 將不會(huì)在啟動(dòng)時(shí)運(yùn)行。如果你不擔(dān)心將來的存儲(chǔ)擴(kuò)展,則掛載外部塊設(shè)備時(shí)只需將其路徑直接添加到掛載點(diǎn)。如果以后有擴(kuò)展存儲(chǔ)的打算,則可以考慮邏輯分區(qū)。我們?cè)诖思虞d的設(shè)備,都可以在啟動(dòng)時(shí)直接訪問,但不能用于分區(qū)和格式化。但是,請(qǐng)記住,重新啟動(dòng)手機(jī)時(shí),塊設(shè)備的名稱 (/dev/block/sdX) 可能會(huì)變化,因此可能需要在重新啟動(dòng)時(shí)檢查/更新此配置。如果你掛載的是邏輯卷,則名稱不會(huì)變化,也不需要檢查。在 Android 上,你可以通過 “/dev/block/sdX”(而不是 “/dev/sdX”)找到塊設(shè)備。為了確定哪個(gè) sdX 設(shè)備是外部塊設(shè)備,你需要在插入該設(shè)備的服務(wù)器上運(yùn)行“l(fā)sblk”。然后搜索各種設(shè)備,并查看哪一個(gè)與你的設(shè)備一致(就存儲(chǔ)容量/現(xiàn)有分區(qū)而言)。如果你在啟動(dòng)后插入設(shè)備,則可能是最后一個(gè)設(shè)備。注意:掛載塊設(shè)備后,你必須先解除掛載或關(guān)閉服務(wù)器,然后才能從物理上斷開塊設(shè)備的連接。如果在未解除掛載的情況下斷開塊設(shè)備的連接,則很可能會(huì)丟失所有數(shù)據(jù)。1-4. 回到首頁(yè),并打開左上角的菜單。選擇 “Settings”(設(shè)置),并一直向下滾動(dòng)到 “PATH variable”(路徑變量)。這就是你安裝 BusyBox 的位置。設(shè)置好 “PATH variable” 后,選擇 “Update ENV”(更新環(huán)境變量)。1-5. 返回首頁(yè),打開右上角的菜單。點(diǎn)擊 “Install”(安裝)。你將看到安裝的實(shí)時(shí)日志。完成后,日志將以 “deploy”結(jié)尾。 選擇屏幕左下角的 “START”(開始)。Android 手機(jī)上就開始運(yùn)行 Debian 服務(wù)器了!
第二步:安裝 UrBackup 服務(wù)器
IP 地址與手機(jī)相同,端口為 22,你可以使用步驟 1-3 中設(shè)置的憑據(jù)登錄。本教程后續(xù)內(nèi)容均假設(shè)你以 root 身份登錄。打開 Linux Deploy 就可以看到你的 IP: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
在這個(gè)例子中,我將備份目錄設(shè)置為 “/mnt/backup”。如果你掛載了存儲(chǔ),則目錄已經(jīng)創(chuàng)建好了;如果沒有,請(qǐng)創(chuàng)建目錄:chown urbackup /mnt/backupchgrp urbackup /mnt/backup
我們無法在 chroot 環(huán)境中調(diào)用 systemd,因此需要手動(dòng)啟動(dòng)該服務(wù):/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
為了避免每次都輸入該命令,我們可以創(chuàng)建一個(gè)腳本:nano /usr/bin/urbackupsrv-star
#!/bin/sh
/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
chmod 755 /usr/bin/urbackupsrv-start
該命令將啟動(dòng)服務(wù)器的日志。你可以按下 CTRL-C 停止服務(wù),因此需要另開一個(gè) SSH 會(huì)話。由于我們無法以傳統(tǒng)的方式“啟用” UrBackup 服務(wù),因此需要設(shè)置一個(gè)定時(shí)作業(yè)來啟動(dòng)該服務(wù)。此外,如果你斷開外部塊存儲(chǔ)或重新啟動(dòng)手機(jī),備份目錄的權(quán)限可能會(huì)恢復(fù)。為確保在重新啟動(dòng)時(shí)這些設(shè)置能保留下來,我們需要添加定時(shí)作業(yè)。@reboot chown urbackup [full/path/to/backup_directory] && chgrp urbackup [full/path/to/backup_directory] && urbackupsrv-start
通過 Web 瀏覽器導(dǎo)航到服務(wù)器的端口 55414:http://YOUR_SERVER_IP:55414第三步:連接客戶端
3-1. 點(diǎn)擊屏幕右下方的 “Add new client”(添加新客戶端):3-2. 點(diǎn)擊 “Add new Internet client/client behind NAT”,并輸入新客戶端的名稱:按照“Download preconfigured client installer for Windows” 的說明安裝客戶端。記下頂部的 “Default authentication key”,回頭有需要。TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.4.11/UrBackup%20Client%20Linux%202.4.11.sh" -O $TF && sudo sh $TF; rm -f $TF在安裝過程中,腳本會(huì)要求你選擇快照機(jī)制。對(duì)于“LVM - Logical Volume Manager snapshots”,請(qǐng)輸入“2”:安裝完成后,請(qǐng)確認(rèn)客戶端的正常運(yùn)行:service urbackupclientbackend status
如果客戶端沒有運(yùn)行,請(qǐng)運(yùn)行下述命令:service urbackupclientbackend start
urbackupclientctl set-settings \-k internet_mode_enabled -v true \-k internet_server -v "YOUR_SERVER_IP" \-k internet_server_port -v "55415" \-k computername -v "YOUR_CLIENT_NAME" \-k internet_authkey -v "YOUR_DEFAULT_AUTHENTICATION_KEY"
請(qǐng)確保"YOUR_CLIENT_NAME"與3-2中設(shè)置的主機(jī)名相同,"YOUR_DEFAULT_AUTHENTICATION_KEY"是服務(wù)器前面生成的鍵。返回 Web 界面,你會(huì)發(fā)現(xiàn)客戶端并不在線,點(diǎn)擊頂部導(dǎo)航欄上的“Settings”(設(shè)置):點(diǎn)擊“Settings”頁(yè)面上的“Internet”(互聯(lián)網(wǎng))頁(yè)簽,檢查如下設(shè)置:(如果所有客戶端都是本地的,則可以取消“Do image backups over the internet”以及“Do full file backups over the internet”。)在“Settings”頁(yè)面上,點(diǎn)擊“”Client settings(客戶端設(shè)置)。選中“Separate settings for this client”,在“File Backups”下的“Default directories to backup”中設(shè)置你想備份的目錄。如果想添加多個(gè)目錄,可以用分號(hào)“;”分隔。對(duì)于 Linux 客戶端,你也可以從客戶端的命令行設(shè)置:urbackupclientctl add-backupdir -d FILE_PATH
pkill urbackupurbackupsrv-start
到此為止,客戶端已經(jīng)連接好了。可能“File backup status”(文件備份狀態(tài))會(huì)顯示“No paths to backup configured”(沒有設(shè)置備份路徑),但沒關(guān)系,在第一次完成備份之前,都會(huì)這顯示。另外請(qǐng)注意,如果你連接的是Linux 客戶端,則不支持鏡像備份。但是,你可以通過 Linux 客戶端運(yùn)行鏡像備份,并設(shè)置備份鏡像的目錄。覺得本文對(duì)你有幫助?請(qǐng)分享給更多人
關(guān)注「全棧開發(fā)者社區(qū)」加星標(biāo),提升全棧技能
本公眾號(hào)會(huì)不定期給大家發(fā)福利,包括送書、學(xué)習(xí)資源等,敬請(qǐng)期待吧!
如果感覺推送內(nèi)容不錯(cuò),不妨右下角點(diǎn)個(gè)在看轉(zhuǎn)發(fā)朋友圈或收藏,感謝支持。
好文章,留言、點(diǎn)贊、在看和分享一條龍吧??