当我的 Synology NAS 出现故障时,如何使用 PC 恢复数据?

[复制链接]
查看1070 | 回复0 | 2024-9-22 17:40:29 | 显示全部楼层 |阅读模式

登录网站,浏览更多精彩内容

您需要 登录 才可以下载或查看,没有账号?加入我们

×
本帖最后由 游侠 于 2024-9-22 17:42 编辑

目的
本文将指导您在 Synology NAS 故障时恢复 PC 上的数据。
注意:
  • 硬盘迁移到新 NAS 后,可能无法再次挂载卷。
环境
适用于:
  • DSM 版本 6.2.x 及以上
  • 使用 Btrfs 或 ext4 文件系统的卷
  • Ubuntu 版本 18.04 (下载ubuntu-18.04-desktop-amd64.iso这里)下载地址:https://old-releases.ubuntu.com/releases/18.04/
不适用于:
  • 使用读写 SSD 缓存的卷
解决方案使用 PC 恢复数据
  • 确保您的 PC 具有足够的硬盘插槽以安装硬盘。
  • 从 Synology NAS 中取出硬盘并将其安装到 PC 中。对于 RAID 或 SHR 配置,您必须同时在 PC 中安装所有硬盘(不包括 Hot Spare 硬盘)。
  • 按照本教程中的说明准备 Ubuntu 环境。
  • 前往左侧栏的文件并选择Home。
  • 右键单击并选择新建文件夹,创建一个或多个文件夹作为装载点以访问数据。1
  • 右键单击新文件夹,点击属性,父文件夹的文件夹名称为 ${mount_point} 。
    • 示例:如果父文件夹是 /home/ubuntu/ ,文件夹名称是 Test ,则装载点将是 /home/ubuntu/Test/
  • 前往左下角的显示应用程序 > 输入搜索...。
  • 在搜索栏中输入终端并选择终端。
  • 输入以下命令以获取 root 权限。
输入以下命令以安装 mdadmlvm2 ,它们都是 RAID 管理工具。必须安装 lvm2 ,否则 vgchange 将无法工作。
  1. apt-get update
  2. apt-get install -y mdadm lvm2
复制代码
输入以下命令以组装从 Synology NAS 中取出的所有硬盘。结果可能会根据 Synology NAS 上的存储池配置而有所不同。
  1. mdadm -AsfR && vgchange -ay
复制代码
输入以下命令以获取 ${device_path} 的信息。
  1. cat /proc/mdstat
  2. lvs
复制代码
根据 pvs/vgs/lvs 的输出,设备路径如下:

${device_path}
无 lvs 输出
/dev/${md}2
有 lvs 输出
/dev/${VG}/${LV}3
以下是 md status 对应其 RAID 和卷类型的示例:
设备路径
单卷经典 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

输入以下命令以只读方式装载所有硬盘以访问您的数据。在 ${device_path} 中输入您的设备路径(根据步骤 12 中的 RAID 和卷类型),在 ${mount_point} 中输入装载点(在步骤 6 中创建)。您的数据将放置在装载点下。
  1. mount ${device_path} ${mount_point} -o ro
复制代码
在文件 > Home >您在步骤 5 中创建的文件夹中检查数据。
对于加密的存储空间和共享文件夹:
在 PC 上装载加密存储空间
在 PC 上装载加密共享文件夹
如果通过上述步骤仍无法恢复数据,请避免尝试其他修复方法,因为这可能会对您的数据造成更大的损害。作为最后的选择,请寻求当地数据救援公司的帮助。请理解,数据检索仍然无法保证。
在 PC 上装载加密存储空间
确保您拥有加密存储空间的恢复密钥。以下步骤仅在恢复密钥正确的情况下有效。
  • 在终端机中,输入以下命令以安装 cryptsetup 。
  1. apt-get install cryptsetup
复制代码
2.输入以下命令以解码您的恢复密钥。将 ${your_recovery_key_path} 替换为恢复密钥的位置,并将 ${base64_decode_output_path} 替换为所需的输出文件名和位置。
  1. 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} 替换为输出文件名和位置。
  1. 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.检查结果以查看恢复密钥是否正确:
正确的密钥:
  1. Key slot 1 unlocked.
  2. Command successful.
复制代码
错误的密钥:
  1. No key available with this passphrase.
  2. Command failed with code -2 (no permission or bad passphrase).
复制代码
找到正确的密钥并返回上一步重新解码。
5.输入以下命令以使用解码后的恢复密钥解密加密存储空间。
  1. 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 中创建的装载点。您的数据将放置在装载点下。
  1. mount ${device_path} ${mount_point} -o ro
复制代码
7.请参阅步骤 14 以恢复您的数据。

在 PC 上装载加密共享文件夹
确保您拥有加密共享文件夹的加密密钥。以下步骤仅在加密密钥正确时有效。
  • 在终端机中,输入以下命令以获取 root 权限。

  1. sudo -i
复制代码
2.输入以下命令以启用 universe repo 并安装 ecryptfs-utils

  1. apt-get-repository universe
  2. apt-get update
  3. apt-get install ecryptfs-utils
复制代码
3.输入以下命令以获取加密密钥的 FNEK(文件名加密密钥)值。
  1. ecryptfs-add-passphrase --fnek
复制代码
  • 当提示时,将您的加密密钥输入到 Passphrase 字段。
  • 您将看到类似以下的输出:
  1. Inserted auth tok with sig [79d78a9afb5ebc95] into the user session keyring
  2. Inserted auth tok with sig [e4e4e8a3ca7d5d54] into the user session keyring
复制代码
第二个方括号内的值是您的 FNEK 值。请记下此值,因为您将在后续步骤中需要它。

4.使用 cd 命令导航到您在上一节步骤 6 中创建的装载点

  1. cd ${mount_point}
复制代码
示例:如果装载点 ${mount_point} /home/ubuntu/Test/ ,则输入的命令将如下所示: cd /home/ubuntu/Test/

5.创建一个临时文件夹作为加密共享文件夹的装载点。使用 mkdir 命令创建一个新文件夹。
  1. mkdir folder_name
复制代码
在上述命令中,将 folder_name 替换为您想要给文件夹命名的名称。

6.创建一个临时文件夹作为加密共享文件夹的装载点。使用 mkdir 命令创建一个新文件夹
  1. mkdir folder_name
复制代码
在上述命令中,将 folder_name 替换为您想要给文件夹命名的名称。

输入以下命令以装载您的加密共享文件夹。

  1. 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 值。
g.输入您的 FNEK 值后,您将看到类似以下的输出:

  1. Attempting to mount with the following options:
  2. ecryptfs_unlink_sigs
  3. ecryptfs_fnek_sig=e4e4e8a3ca7d5d54
  4. ecryptfs_key_bytes=32
  5. ecryptfs_cipher=aes
  6. ecryptfs_sig=79d78a9afb5ebc95

  7. 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.
复制代码
警告信息只是一个提醒。如果您已确认您的加密密钥是正确的,可以安全地忽略此警告并继续。

h.Would you like to proceed with the mount :输入 y 以同意继续装载。
i.Would you like to append sig … in order to avoid this warning in the future :输入 n 以继续。
j.如果装载成功,您将看到以下输出:

注意:
  • 一个装载点等于一个存储空间。如果您有多个需要恢复的存储空间,请创建与存储空间数量相同的文件夹。
  • md(阵列)的数量将在 cat /proc/mdstat 的结果中列出。
  • syno_vg_reserved_area 可以忽略,volume_x 的数量等于存储空间的数量。

中国领先的数字技术资源交流中心!

213

主题

39

回帖

3738

积分

达人

积分
3738
学费
3193