TrueNAS 掛載 NTFS 移動硬盤做冷備份


出於對數據保護的執念,我對 TrueNAS 中的數據采取了加鹽加密雲備份 + 移動硬盤冷備的措施。

一方面多地存儲更安全,不可能我的硬盤、我的移動硬盤和雲廠商的硬盤三者同時崩潰;

另一方面也最大限度的在不把 TrueNAS 暴露到公網的情況下,在外出時便捷的獲取數據。經歷過公司群暉僅暴露一個非常罕見的端口就被暴力攻擊的事件以后,我是不敢把自己的 NAS 暴露出去的。我可以通過雲服務商下載數據,然后解密;也可以直接在外出時帶上我的移動硬盤。

而為了最大限度保持數據的兼容性,保證在任何電腦都可以讀取,移動硬盤的文件格式我選擇了 NTFS,既可以支持 TrueNAS、Winodws,也可以支持 MacOS(需軟件)。當然最好的方式還是 exfat,MacOS 無需軟件也可以支持,不過目前尚未找到 TrueNAS 支持 exfat 的方案。

下面是正文。

 

一、掛載 NTFS 移動硬盤

1. 第一次掛載前,需開啟 fuse:

系統、微調、添加以下兩項:

變量:fuse_load

值:YES

類型:LOADER

 

變量:fuse_enable

值:YES

類型:rc.conf

  然后在命令行(或 SSH)中運行:

kldload fuse

 

2. 掛載 NTFS 硬盤:

首先在存儲、磁盤中確認哪個是你的硬盤,一般可通過大小、型號(點擊右側列,勾選型號)來辨認,此外 TrueNAS 內部的硬盤名稱一般是 ada 開頭,你剛剛插入的硬盤一般也會是最后一個。比如我掛了一塊希捷的 4T 硬盤,那么很明顯是最后這個:

 

 記住硬盤名稱后,在命令行或 SSH 中運行:

# 請注意以下硬盤號、路徑修改為你自己的設置

ls /dev/da1*  # 查看硬盤分區
gpart show /dev/da1* # 查看各分區大小,確定要掛載的分區是哪個
mkdir /mnt/exhdd # 創建你要掛載到的目錄
ntfs-3g /dev/da1p1 /mnt/exhdd

因為我們需要向移動硬盤復制數據,所以我直接掛載了讀寫格式,如果你只是想讀取文件,可以加上 -o -ro 參數。

關於 ntfs-3g 命令的其他參數,可以運行 man ntfs-3g 來獲取說明書。

 

注:因為我習慣插入硬盤后手動掛載,如果你想要進一步做到開機自動掛載(即 TrueNAS 重啟后,可以自動掛載),可參考這篇文章:http://baodad.blogspot.com/2016/05/freenas-mount-and-share-ntfs-partition.html

 

二、復制數據 & 設置自動復制任務

復制數據建議使用 rsync 代替 cp 命令。rsync 提供了非常豐富的參數指令,詳見 http://www.ruanyifeng.com/blog/2020/08/rsync.html

這里我們采取最簡單的 -a 遞歸指令(復制文件以及所有子文件夾的文件),以及 --exclude 排除指令。此外由於 Unix 系統的 cron 計划任務是沒有執行結果的(出錯時可查看 cron 日志或 mail 中的信息),因此我習慣把命令執行的結果通過 >> 指令輸出到指定日志中,我建立了一個存放各個程序日志的數據集,這個看個人喜好。

如果你都能接受以上喜好,可以查看下文,直接復制我的命令。如果你不能接受,請自行修改命令。

1. 模擬復制數據,確保配置正確

# 如果沒有需要排除的文件夾,可以直接刪去 exclude 參數
# -n 參數用於模擬運行,並不會實際操作
# -v 參數用於列出所有將會被傳輸的文件,配合 -n 參數模擬運行,查看是否配置正確
rsync -a --exclude={'你要排除的文件或文件夾1', 'xxx2', 'xxx3'} /mnt/media/data /mnt/exhdd/data >> /mnt/media/logs/rsyncdata.log
# 請確保目的路徑、日志存儲的路徑已建立。如未建立,運行:
mkdir -p /mnt/exhdd/data
mkdir -p /mnt/media/logs

其中,第一個路徑是源路徑,第二個路徑是目的路徑。執行完畢后,查閱日志文件,查看列出的將會被傳輸的文件是否與你的預期相符。如果文件太多不方便查看,也可以直接拉到日志的最后,查看總大小,然后對比你源路徑本身想要傳輸的總大小。確認一致就沒有問題。比如:

 

注:如果你不需要計划任務,只需要執行一次復制,那么接下來,重復執行上方命令,並刪去 -n、-v 參數即可,對你來說本文到此結束。

 

2. 設置計划任務

在設置計划任務之前,最好先手動執行一次 “去掉參數 -n、-v”  的命令,這是因為帶上 -v 參數,會生成一份取決於你的文件數量的文件,這個日志通常來說會非常大,比如我有一萬多份文件,則生成了一份 4.3MB 的文件。但 rsync 實際上每次只會傳輸和記錄差異文件。所以,我們第一次執行用手動來做,並去掉 -v 參數,計划任務則帶上-v 參數,這樣以后每次自動執行,都只會記錄新增的文件。即可以查看到詳細日志,又可以避免日志過大。

 

rsync -a --exclude={'你要排除的文件或文件夾1', 'xxx2', 'xxx3'} /mnt/media/data /mnt/exhdd/data >> /mnt/media/logs/rsyncdata.log

 

手動執行完畢后,我們來設置計划任務:

我設置的計划是每天凌晨 3 點復制一次。如果你的文件更新的更頻繁、對文件版本有更高要求,可以自行修改計划時間,比如更改為每小時運行。

我們的計划任務是基於 cron 運行的,關於 cron 的用法,可參考 https://www.cainiao.io/archives/505 這篇文章來操作。

【注1】TrueNAS 的計划任務和 crontab 中的文件不同。不建議在 TrueNAS 上使用命令行設置計划任務。

【注2】有一個坑請注意,TureNAS 計划任務中的命令,會把引號去除,導致實際命令執行有誤。比如 --exclude 參數中,大括號內引號若被去除,則指定路徑不會被排除。因此不能再使用大括號的方式來排除,只能一個個添加 --exclude

打開 任務、計划任務、添加:

描述:自行添加,可以不填。建議填寫為你能看懂的文字,便於日后管理。

命令:即上方模擬運行的命令中,刪去 -v、-n 參數:

    rsync -av --exclude 你要排除的文件或文件夾1 --exclude xxx2  --exclude xxx3 /mnt/media/data /mnt/exhdd/data >> /mnt/media/logs/rsyncdata.log

用戶身份:root (如果你需要其他用戶,那么可能需要修改權限,詳見參考資料)

計划:Custom,然后按下圖設置。你也可以稍微研究下這個界面,其實非常簡單,可以很從容的設定自己想要的執行計划:

 之后,取消勾選隱藏標准輸出、隱藏標准錯誤,勾選已啟用,點擊保存即可。

 

3. 移除硬盤

需要移除掉硬盤,帶出門的時候,運行以下命令之后拔掉即可:

 

umount /mnt/media/exhdd # 替換為你之前掛載的路徑

 

  

 

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM