如何在 Synology NAS 故障時在電腦上還原資料?

如何在 Synology NAS 故障時在電腦上還原資料?

目的

本文章將引導您在 Synology NAS 故障時在電腦上還原資料。

注意事項:

  • 硬碟轉移至新的 NAS 後,可能無法重新掛載儲存空間。

環境

適用於:

  • DSM 版本 6.2.x 及以上
  • 使用 Btrfs 或 ext4 檔案系統的儲存空間
  • Ubuntu 版本 18.04 (可於此處下載 ubuntu-18.04-desktop-amd64.iso)

不適用於:

  • 使用讀寫 SSD 快取的儲存空間

解決方法

使用電腦還原資料

  1. 確認您的電腦具備足夠的硬碟插槽以供安裝硬碟。
  2. 將硬碟從 Synology NAS 取出,並安裝到電腦。若使用 RAID 或 SHR 配置,您必須將所有硬碟 (Hot Spare 硬碟除外) 同時安裝到電腦。
  3. 依據此應用教學中的步驟來準備 Ubuntu 環境。
  4. 前往左側欄位的檔案並選擇家目錄
  5. 按一下右鍵並選取新增資料夾,建立一個或多個資料夾,作為掛載點以供存取資料。1
  6. 在新資料夾上按一下右鍵,再按一下屬性,上層資料夾加上資料夾名稱即為 ${mount_point}
    • 例如:若上層資料夾為 /home/ubuntu/ 且資料夾名稱為 Test,掛載點為 /home/ubuntu/Test/
  7. 前往左下角的顯示應用程式 > 輸入以搜尋...
  8. 在搜尋欄位輸入 Terminal 並選擇終端機
  9. 輸入以下指令以取得 root 權限。
    sudo -i
  10. 輸入以下指令來安裝 mdadmlvm2 (皆為 RAID 管理工具)。必須安裝 lvm2,否則 vgchange 將無法運作。
    apt-get update
    apt-get install -y mdadm lvm2
  11. 輸入以下指令來重組所有從 Synology NAS 取出的硬碟,其結果可能會因 Synology NAS 上的儲存集區配置而有所不同。
    mdadm -AsfR && vgchange -ay
  12. 輸入以下指令來取得 ${device_path} 的資訊。
    cat /proc/mdstat
    lvs
    依據是否有 pvs / vgs / lvs 輸出,裝置路徑如下:
    ${device_path}
    無 lvs 輸出
    /dev/${md}2
    有 lvs 輸出
    /dev/${VG}/${LV}3

    以下為與 RAID 及儲存空間類型對應的 md 狀態範例:

    裝置路徑
    單一儲存集區的傳統 RAID
    cat / proc / mdstat

    root@ubuntu:~# cat /proc/mdstat

    Personalities : [raid1]

    md4 : active raid1 sdc3[0]

    73328704 blocks super 1.2 [1/1] [U]

    unused devices:<none>

    lvs
    無輸出
    ${device_path}
    /dev/md4
    裝置路徑
    單一儲存集區的 SHR
    cat / proc / mdstat

    root@ubuntu:~# cat /proc/mdstat

    Personalities : [raid1]

    md3 : active raid1 sda5[0]

    73319616 blocks super 1.2 [1/1] [U]

    unused devices:<none>

    lvs
    root@ubuntu:~# lvs

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

    lv vg1000 -wi-a----- 69.92g

    ${device_path}
    /dev/vg1000/lv
    裝置路徑
    多個儲存集區的傳統 RAID / SHR
    cat / proc / mdstat

    Personalities : [raid1]

    md3 : active raid1 sdc3[0] sdd3[1]

    73328704 blocks super 1.2 [2/2] [UU]

    unused devices:<none>

    lvs
    root@ubuntu:~# lvs

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy% Sync Convert

    syno_vg_reserved_area vg1 -wi-a----- 12.00m

    volume_1 vg1 -wi-a----- 30.00g

    volume_3 vg1 -wi-a----- 30.00g

    ${device_path}
    /dev/vg1/volume_1
    /dev/vg1/volume_3
  13. 輸入以下指令來將所有硬碟掛載為唯讀以存取資料。依照步驟 12 的 RAID 及儲存空間類型將您的裝置路徑輸入 ${device_path},並將步驟 6 建立的掛載點輸入 ${mount_point}。您的資料將會被置於掛載點的路徑。
    mount ${device_path} ${mount_point} -o ro
  14. 前往檔案 > 家目錄 > 於步驟 5 建立的資料夾以檢查資料。
  15. 關於加密儲存空間及共用資料夾:

若您無法透過以上步驟還原資料,請勿嘗試其他方法修復,因為此舉可能會進一步損害您的資料。請向當地的資料救援公司尋求協助,但請理解我們無法保證可取回資料。

使用電腦掛載加密儲存空間

請備好加密儲存空間的復原金鑰。僅有復原金鑰正確,才可透過以下步驟完成掛載。

  1. 終端機輸入以下指令以安裝 cryptsetup
    apt-get install cryptsetup
  2. 輸入以下指令解碼您的復原金鑰。將 ${your_recovery_key_path} 替換為復原金鑰所在位置,並將 ${base64_decode_output_path} 替換為欲輸出的檔案名稱及位置。
    base64 --decode ${your_recovery_key_path} > ${base64_decode_output_path}
    • 例如:若復原金鑰位於 /mnt/volume1.rkey,輸出檔案欲命名為 decode_output,並存放在 /mnt,則輸入的指令為:base64 --decode /mnt/volume1.rkey > /mnt/decode_output
  3. 輸入以下指令測試復原金鑰是否正確。將 ${base64_decode_output_path} 替換為輸出檔案的名稱及位置。
    cryptsetup open --test-passphrase /dev/vgX/volume_Y -S 1 -d ${base64_decode_output_path} -v
    • 例如:若輸出檔案名為 decode_output 並位於 /mnt,則輸入的指令為:cryptsetup open --test-passphrase /dev/vgX/volume_Y -S 1 -d /mnt/decode_output -v
  4. 查看結果以確認復原金鑰是否正確:
    • 正確金鑰:
      Key slot 1 unlocked.
      Command successful.
    • 錯誤金鑰:
      No key available with this passphrase.
      Command failed with code -2 (no permission or bad passphrase).
      請找出正確的金鑰,並回到前一個步驟再次嘗試解碼。
  5. 使用復原金鑰並輸入以下指令,為加密儲存空間解密。
    cryptsetup open --allow-discards /dev/vgX/volume_Y cryptvol_Y -S 1 -d ${base64_decode_output_path}
  6. 輸入以下指令為所有硬碟掛載為唯讀以存取資料。。將 ${device_path} 替換為您的裝置路徑 /dev/mapper/cryptvol_Y,並將 ${mount_point} 替換?您在步驟 6 建立的掛載點。您的資料將會被置於掛載點的路徑。
    mount ${device_path} ${mount_point} -o ro
  7. 請參?步驟 14 還原您的資料。

使用電腦掛載加密共用資料夾

請備好加密共用資料夾的加密金鑰。僅有加密金鑰正確,才可透過以下步驟完成掛載。

  1. 終端機輸入以下指令以取得 root 權限。
    sudo -i
  2. 輸入以下指令以啟用 universe repo 並安裝 ecryptfs-utils
    apt-get-repository universe
    apt-get update
    apt-get install ecryptfs-utils
  3. 輸入以下指令以取得加密金鑰的 FNEK 值 (File Name Encryption Key,即「檔名加密金鑰」)。
    ecryptfs-add-passphrase --fnek
    1. 出現提示時,請於 Passphrase 欄位輸入加密金鑰。
    2. 您會得到類似以下的輸出內容:
      Inserted auth tok with sig [79d78a9afb5ebc95] into the user session keyring
      Inserted auth tok with sig [e4e4e8a3ca7d5d54] into the user session keyring
      第二組方括號裡的值為您的 FNEK 值。請記下此值,會在下列步驟中使用它。
  4. 使用 cd 指令,前往上一階段之步驟 6 所建立的掛載點。
    cd ${mount_point}
    • 例如:若掛載點 ${mount_point}/home/ubuntu/Test/,則輸入的指令會是:cd /home/ubuntu/Test/.
  5. 建立暫時的資料夾,以作為加密共用資料夾的掛載點。使用 mkdir 指令以建立新資料夾。
    mkdir folder_name
    在上述指令中,請將 folder_name 替換為資料夾的命名。
  6. 輸入以下指令以掛載加密共用資料夾。
    mount -t ecryptfs folder_name
    請務必將 folder_name 替換為前一個步所驟建立的暫時資料夾名稱。若要完成掛載,還需要額外輸入。請依照下列指示來操作:
    1. Passphrase:輸入加密金鑰。
    2. Select cipher:輸入 1 以選擇 aes 作為加密標準。
    3. Select key bytes:輸入 2 以選擇 32 作為金鑰位元組。
    4. Enable plaintext passthrough:輸入 n 以停用此選項。
    5. Enable filename encryption:輸入 y 以啟用此選項。
    6. Filename Encryption Key (FNEK) Signature:輸入於步驟 3 中取得的 FNEK 值。
    7. 輸入完 FNEK 值後,您會得到類似以下的輸出內容:
      Attempting to mount with the following options:
      ecryptfs_unlink_sigs
      ecryptfs_fnek_sig=e4e4e8a3ca7d5d54
      ecryptfs_key_bytes=32
      ecryptfs_cipher=aes
      ecryptfs_sig=79d78a9afb5ebc95

      WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt], it looks like you have never mounted with this key before. This could mean that you have typed your passphrase wrong.
      此警告訊息僅為提醒之用。若已確認加密金鑰正確,您可放心略過此處警告並繼續操作。
    8. Would you like to proceed with the mount:輸入 y 以同意繼續掛載。
    9. Would you like to append sig ... in order to avoid this warning in the future:輸入 n 以繼續。
    10. 若掛載成功,您會得到以下的輸出內容:
      Mounted eCryptfs

注意事項:

  1. 一個掛載點等於一個儲存空間。若您需還原多個儲存空間,請建立同等數量的資料夾。
  2. md (陣列) 數量會列於 cat /proc/mdstat 的結果。
  3. syno_vg_reserved_area 可忽略,volume_x 的數量等於儲存空間數量。
目的
環境
解決方法
使用電腦還原資料
使用電腦掛載加密儲存空間
使用電腦掛載加密共用資料夾