如何在 Synology NAS 故障時在電腦上還原資料?
如何在 Synology NAS 故障時在電腦上還原資料?
環境
適用於:
- DSM 版本 6.2.x 及以上
- 使用 Btrfs 或 ext4 檔案系統的儲存空間
- Ubuntu 版本 18.04 (可於此處下載 ubuntu-18.04-desktop-amd64.iso)
不適用於:
- 使用讀寫 SSD 快取的儲存空間
解決方法
使用電腦還原資料
- 確認您的電腦具備足夠的硬碟插槽以供安裝硬碟。
- 將硬碟從 Synology NAS 取出,並安裝到電腦。若使用 RAID 或 SHR 配置,您必須將所有硬碟 (Hot Spare 硬碟除外) 同時安裝到電腦。
- 依據此應用教學中的步驟來準備 Ubuntu 環境。
- 前往左側欄位的檔案並選擇家目錄。
- 按一下右鍵並選取新增資料夾,建立一個或多個資料夾,作為掛載點以供存取資料。1
- 在新資料夾上按一下右鍵,再按一下屬性,上層資料夾加上資料夾名稱即為
${mount_point}
。- 例如:若上層資料夾為
/home/ubuntu/
且資料夾名稱為Test
,掛載點為/home/ubuntu/Test/
- 例如:若上層資料夾為
- 前往左下角的顯示應用程式 > 輸入以搜尋...。
- 在搜尋欄位輸入 Terminal 並選擇終端機。
- 輸入以下指令以取得 root 權限。
sudo -i
- 輸入以下指令來安裝
mdadm
與lvm2
(皆為 RAID 管理工具)。必須安裝lvm2
,否則vgchange
將無法運作。apt-get update
apt-get install -y mdadm lvm2 - 輸入以下指令來重組所有從 Synology NAS 取出的硬碟,其結果可能會因 Synology NAS 上的儲存集區配置而有所不同。
mdadm -AsfR && vgchange -ay
- 輸入以下指令來取得
${device_path}
的資訊。依據是否有cat /proc/mdstat
lvspvs / vgs / lvs
輸出,裝置路徑如下:以下為與 RAID 及儲存空間類型對應的
md 狀態
範例:裝置路徑單一儲存集區的傳統 RAIDcat / 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
裝置路徑單一儲存集區的 SHRcat / 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>
lvsroot@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 / SHRcat / proc / mdstat
Personalities : [raid1]
md3 : active raid1 sdc3[0] sdd3[1]
73328704 blocks super 1.2 [2/2] [UU]
unused devices:<none>
lvsroot@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 - 輸入以下指令來將所有硬碟掛載為唯讀以存取資料。依照步驟 12 的 RAID 及儲存空間類型將您的裝置路徑輸入
${device_path}
,並將步驟 6 建立的掛載點輸入${mount_point}
。您的資料將會被置於掛載點的路徑。mount ${device_path} ${mount_point} -o ro
- 前往檔案 > 家目錄 > 於步驟 5 建立的資料夾以檢查資料。
- 關於加密儲存空間及共用資料夾:
若您無法透過以上步驟還原資料,請勿嘗試其他方法修復,因為此舉可能會進一步損害您的資料。請向當地的資料救援公司尋求協助,但請理解我們無法保證可取回資料。
使用電腦掛載加密儲存空間
請備好加密儲存空間的復原金鑰。僅有復原金鑰正確,才可透過以下步驟完成掛載。
- 在終端機輸入以下指令以安裝
cryptsetup
。apt-get install cryptsetup
- 輸入以下指令解碼您的復原金鑰。將
${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
- 例如:若復原金鑰位於
- 輸入以下指令測試復原金鑰是否正確。將
${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
- 例如:若輸出檔案名為
- 查看結果以確認復原金鑰是否正確:
- 正確金鑰:
Key slot 1 unlocked.
Command successful. - 錯誤金鑰:請找出正確的金鑰,並回到前一個步驟再次嘗試解碼。
No key available with this passphrase.
Command failed with code -2 (no permission or bad passphrase).
- 正確金鑰:
- 使用復原金鑰並輸入以下指令,為加密儲存空間解密。
cryptsetup open --allow-discards /dev/vgX/volume_Y cryptvol_Y -S 1 -d ${base64_decode_output_path}
- 輸入以下指令為所有硬碟掛載為唯讀以存取資料。。將
${device_path}
替換為您的裝置路徑/dev/mapper/cryptvol_Y
,並將${mount_point}
替換?您在步驟 6 建立的掛載點。您的資料將會被置於掛載點的路徑。mount ${device_path} ${mount_point} -o ro
- 請參?步驟 14 還原您的資料。
使用電腦掛載加密共用資料夾
請備好加密共用資料夾的加密金鑰。僅有加密金鑰正確,才可透過以下步驟完成掛載。
- 在終端機輸入以下指令以取得 root 權限。
sudo -i
- 輸入以下指令以啟用
universe repo
並安裝ecryptfs-utils
。apt-get-repository universe
apt-get update
apt-get install ecryptfs-utils - 輸入以下指令以取得加密金鑰的 FNEK 值 (File Name Encryption Key,即「檔名加密金鑰」)。
ecryptfs-add-passphrase --fnek
- 出現提示時,請於
Passphrase
欄位輸入加密金鑰。 - 您會得到類似以下的輸出內容:第二組方括號裡的值為您的 FNEK 值。請記下此值,會在下列步驟中使用它。
Inserted auth tok with sig [79d78a9afb5ebc95] into the user session keyring
Inserted auth tok with sig [e4e4e8a3ca7d5d54] into the user session keyring
- 出現提示時,請於
- 使用
cd
指令,前往上一階段之步驟 6 所建立的掛載點。cd ${mount_point}
- 例如:若掛載點
${mount_point}
為/home/ubuntu/Test/
,則輸入的指令會是:cd /home/ubuntu/Test/
.
- 例如:若掛載點
- 建立暫時的資料夾,以作為加密共用資料夾的掛載點。使用
mkdir
指令以建立新資料夾。在上述指令中,請將mkdir folder_name
folder_name
替換為資料夾的命名。 - 輸入以下指令以掛載加密共用資料夾。請務必將
mount -t ecryptfs folder_name
folder_name
替換為前一個步所驟建立的暫時資料夾名稱。若要完成掛載,還需要額外輸入。請依照下列指示來操作:Passphrase
:輸入加密金鑰。Select cipher
:輸入1
以選擇 aes 作為加密標準。Select key bytes
:輸入2
以選擇 32 作為金鑰位元組。Enable plaintext passthrough
:輸入n
以停用此選項。Enable filename encryption
:輸入y
以啟用此選項。Filename Encryption Key (FNEK) Signature
:輸入於步驟 3 中取得的 FNEK 值。- 輸入完 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. Would you like to proceed with the mount
:輸入y
以同意繼續掛載。Would you like to append sig ... in order to avoid this warning in the future
:輸入n
以繼續。- 若掛載成功,您會得到以下的輸出內容:
Mounted eCryptfs