当 Synology NAS 出现故障时,如何使用计算机恢复数据?

sunfeng 2023-12-14 15:26 阅读数 126 #synology

目的

本文将引导您在 Synology NAS 出现故障时在计算机上恢复数据。

注意:

  • 硬盘在迁移到新的 NAS 后可能无法重新装载存储空间。

环境

适用于:
  • DSM 版本 6.2.x 及以上版本
  • 使用 Btrfs 或 ext4 文件系统的存储空间
  • Ubuntu 版本 18.041
不适用于:
  • 使用读写 SSD 缓存的存储空间

注意:

  1. Ubuntu 18.04 (ubuntu-18.04-desktop-amd64.iso) 可从此处下载。

解决方法

使用计算机恢复数据

  1. 确保您的计算机具有足够的硬盘插槽以用于安装硬盘。
  2. 从 Synology NAS 中卸下硬盘,然后将其安装到计算机中。对于 RAID 或 SHR 配置,必须同时在计算机中安装所有硬盘(不包括 Hot Spare 硬盘)。
  3. 按照本教程中的说明准备 Ubuntu 环境。
  4. 前往左侧栏上的文件并选择家目录
  5. 右键单击并选择新建文件夹,然后创建一个或多个文件夹作为装载点来访问数据。1
  6. 右键单击新文件夹,单击属性,父文件夹及文件夹名称为 ${mount_point}
    • 示例:如果父文件夹为 /home/ubuntu/,且文件夹名称为 Test,则装载点为 /home/ubuntu/Test/
  7. 前往左下角的显示应用程序 > 输入以搜索...
  8. 在搜索栏中输入终端机,然后选择终端机
  9. 输入以下命令以获取 root 权限。
    sudo -i
  10. 输入以下命令以安装 mdadm 和 lvm2(两者都是 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. 输入以下命令以采用只读方式装载所有硬盘,从而可访问数据。在 ${device_path} 中输入设备路径(根据步骤 12 中的 RAID 和存储空间类型),并在 ${mount_point} 中输入装载点(在步骤 6 中创建)。数据会放在装载点下。
    mount ${device_path} ${mount_point} -o ro
  14. 文件 > 家目录 > 步骤 5 中创建的文件夹中检查数据。
  15. 对于加密存储空间和共享文件夹:
如果您仍然无法通过以上步骤恢复数据,请勿尝试任何其他方法进行修复,因为这可能会对您的数据造成更多损坏。作为您的最后选择,请向当地数据救援公司寻求帮助。请理解,仍无法保证可取回数据。

在计算机上装载加密存储空间

确保您拥有加密存储空间的恢复密钥。以下步骤仅在恢复密钥正确时才有效。
  1. 终端机中,输入以下命令以安装 cryptsetup
    apt-get install cryptsetup
  2. 输入以下命令以解码恢复密钥。
    base64 --decode ${your_recovery_key_path} > ${base64_decode_output_path}
  3. 输入以下命令以测试恢复密钥是否正确。
    cryptsetup open --test-passphrase /dev/vgX/volume_Y -S 1 -d ${base64_decode_output_path}
    如果不正确,返回值会显示 No key available with this passphrase。请找到正确的密钥并返回上一步以再次解码。
  4. 输入以下命令以使用解码的恢复密钥为加密存储空间解密。
    cryptsetup open --allow-discards /dev/vgX/volume_Y cryptvol_Y -S 1 -d ${base64_decode_output_path}
  5. 输入以下命令以采用只读方式装载所有硬盘,从而可访问数据。将 ${device_path} 替换为您的设备路径 /dev/mapper/cryptvol_Y,并将 ${mount_point} 替换为在步骤 6 中创建的装载点。数据会放在装载点下。
    mount ${device_path} ${mount_point} -o ro
  6. 请参阅步骤 14 以恢复数据。

在计算机上装载加密共享文件夹

确保您拥有加密共享文件夹的加密密钥。以下步骤仅在加密密钥正确时才有效。
  1. 在 Terminal 中,输入以下命令以获得 root 权限。
    sudo -i
  2. 输入以下命令以启用 universe repo 并安装 ecryptfs-utils
    apt-get-repository universe apt-get update apt-get install ecryptfs-utils
  3. 输入以下命令以获取加密密钥的 FNEK(文件名加密密钥)值。
    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 的数量等于存储空间数量。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索
标签列表