TrueNAS和dd(Data Duplicator)指令的原理和角色:
1. TrueNAS Scale
TrueNAS核心分為Core與Scale兩大分支。本文採用的TrueNAS Scale是基於Debian Linux與ZFS檔案系統的開源儲存作業系統。與基於FreeBSD的 Core 版本相比,Scale具備更強大的Linux生態、容器化支援與硬體驅動相容性。而ZFS作為TrueNAS的靈魂,提供了企業級的資料防護機制(如寫入時複製Copy-on-Write、資料自我修復、快照等)。2. dd(Data Duplicator)
Linux 系統中,dd的核心機制是區塊級(Block-level)複製。一般檔案級備份的cp或rsynx指令,會受制於不同的檔案系統(如 ext4, NTFS),且無法複製未掛載的隱藏磁區、引導扇區(Boot Sector)與分割表。而 區塊級備份的dd指令完全不管檔案系統與目錄結構,它將硬碟視為一連串的二進位0與1,換言之,其具備底層操作權限。當執行dd時,它會從來源端(如SD卡)的第一個Byte開始,循序漸進地讀取每一個區塊,並原封不動地寫入目的地。這意味著:
- 連同引導磁區(MBR/GPT)一起備份:燒錄還原後保證能直接開機。
- 保留所有權限與連結:軟體配置、特殊權限、虛擬記憶體(Swap)完全不漏。
- 空白處也會被備份:即使 SD 卡只用了10GB,其餘50GB的空白區塊也會被視為二進位資料一併讀取。
實作環境和配置步驟:
- Raspberry Pi 4B/8g: 安裝Ubuntu 24.04 desktop LTS作業系統。
- TrueNAS SCALE 25.10.1 Community: 架設在VMware的虛擬客體。
a.建立和命名一個儲存池(Pool)和資料集(Dataset)
在TrueNAS的Storage中,建立儲存池和對應資料集,這個動作即定義了備份到TrueNAS的路徑,其資料樹狀結構和路徑如圖三的紅框處。另外,建立儲存池的過程中,會出現關於選擇虛擬硬碟和RAID的選項,本文僅用於備份樹莓派的映像檔,採用最簡單的Strip模式(等同於RAID 0),優點是備份速度快,缺點是無冗餘和無容錯能力。建議若在正式生產環境,要選擇RAIDZ1或RAIDZ2等模式,確保資料安全,這部分再依照需求自行選擇其可。
| 圖一、建立儲存池 |
![]() |
| 圖二、建立資料集 |
| 圖三、查看已建立的資料集和路徑 |
b.開啟SSH service和使用者存取權限
為了讓樹莓派的資料透過SSH備份到TrueNAS,接著進到TrueNAS -> System -> Services,開啟SSH服務,使其顯示為running,如圖四所示。另外,進到TrueNAS -> Credentials -> Users,選擇add新增一個使用者帳號,同時讓這個使用者帳號具備SSH密碼登入權限和具備該備份路徑的存取權限,如圖五和圖六所示。
利用dd指令將樹莓派作業環境備份到TrueNAS:
sudo -v && sudo dd if=/dev/mmcblk0 bs=4M status=progress | ssh 設定的使用者帳號@TrueNAS的ip "cat > /mnt/main_pool/ubuntu_24.04_desktop_rpi4_backup/raspberrypi_backup_\$(date +%Y%m%d).img"
詳細指令說明如下:
- sudo -v : -v指的是Validate,功能是更新目前樹莓派使用者的sudo權限暫存時間(預設可維持15分鐘不需再輸入密碼),但它不會執行任何實質命令,其最主要功能就是避免"樹莓派本地使用者sudo密碼輸入提示" 與 "遠端TrueNAS使用者ssh密碼輸入提示"互相卡關。
- sudo dd : 以系統管理員最高權限啟動dd指令,確保能直接讀取底層物理設備檔案。
- if=/dev/mmcblk0 : if 代表 Input File(輸入來源)。在樹莓派中,SD卡的物理識別名稱通常為 /dev/mmcblk0,這裡指定要複製「整顆硬碟」,而非單一分割區(如 mmcblk0p1)。
- bs=4M : bs代表Block Size(區塊大小)。設定為4M意即每次讀寫以4 Megabytes為一個單位。不設定的話預設只有512 Bytes,會導致讀寫次數頻繁和備份速度緩慢。
- status=progress : 當dd在執行過程中,在樹莓派端即時顯示目前已傳輸的資料量、耗時和平均寫入速度。
- | : 利用Pipe 管線功能將左邊dd輸出的二進位資料串流(Stdout)作為到右邊指令的輸入端(Stdin)資料,好處是資料不需要額外在樹莓派上進行儲存再轉傳到TrueNAS。
- ssh 設定的使用者帳號@TrueNAS的ip : 透過加密通道連線到TrueNAS,終端機會需要輸入遠端TrueNAS使用者的ssh登入密碼。
- "cat > ..." : 在TrueNAS端執行的命令。利用cat 接收從網路管線傳過來的資料流,並透過 > 重新導向(Redirect)寫入成實體檔案。
- /mnt/main_pool/ubuntu_24.04_desktop_rpi4_backup/... : 備份到TrueNAS儲存池與資料集的路徑。
- \$(date +%Y%m%d).img : 動態命名語法,利用TrueNAS本身的系統時間,自動抓取當天日期(如 20260605),使得產出的檔案包含時間戳(如raspberrypi_backup_20260605.img),方便版本控管。注意 : 在雙引號內使用 $ 必須加上反斜線 \ 進行轉義,否則時間會變成樹莓派的時間,而非執行當下的指令字串。
完成備份後,後續利用sftp由TrueNAS取得該備份映像檔,並用燒錄軟體重新燒錄到大容量的儲存裝置即可。
呼~跟AI學到不少東西,然而上述當儲存裝置正常時的備份方式,若是儲存裝置出現檔案系統故障而呈現唯讀狀態呢? 如何救援資料? 這又是另一段學習歷程,有待下次紀錄,也是跟AI學的。





沒有留言:
張貼留言