ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu18 挂载群晖 NAS 硬盘:RAID 与 LVM 数据恢复实战

Ubuntu18 挂载群晖 NAS 硬盘:RAID 与 LVM 数据恢复实战 简介这份资源面向需要在群晖NAS故障后抢救数据的运维人员与进阶用户提供一套基于Ubuntu 18的USB外接恢复思路与配套代码。适用于非RAID配置的群晖DS设备硬盘文件系统为EXT4或Btrfs的场景帮助读者在NAS无法启动时仍能读取并转移重要数据。压缩包共3个文件包含1个inscode工程配置、1个html说明页面与1个gitignore文件整体仅6KB轻量易取用。资源围绕挂载损坏NAS硬盘、安装依赖、使用rsync断点续传与分批传输、再以DU和DIFF校验数据一致性等关键环节展开代码与说明可直接对照操作降低恢复门槛。目前已有217人学习适合希望掌握群晖数据恢复流程、需要可复用脚本与排错思路的技术人员参考。1. Ubuntu18 挂载群晖 NAS 硬盘为什么直接插上电脑读不出数据群晖 NAS 用久了最怕的不是硬盘坏而是机器先坏。主板烧了、电源挂了、DSM 崩了进不去系统硬盘本身却是好的——这种场景在 DIY NAS 和老旧群晖机型上太常见了。很多人第一反应是把硬盘拔下来插到 Ubuntu 电脑上结果发现文件管理器里根本看不到盘fdisk -l能看到设备但挂不上于是开始慌。其实群晖用的是 Linux 的 mdadm 软 RAID 加 LVM 再加 Btrfs 或 ext4 的组合Ubuntu18 本身完全有能力读它只是需要手动按顺序把 RAID 阵列、LVM 卷组、逻辑卷一层层激活。这篇就是讲清楚在 Ubuntu18 上恢复群晖 NAS 数据的完整路径从识别硬盘、组装阵列、激活 LVM到最终挂载读取以及哪些操作会把数据彻底搞没。适合手里有群晖硬盘、机器已经开不了机、又不想花大价钱找数据恢复的人。2. 先搞清楚群晖硬盘的分区结构和 RAID 类型2.1 群晖 DSM 在硬盘上到底写了什么把群晖硬盘插到 Ubuntu 机器上第一件事不是急着挂载而是先看清楚分区布局。群晖每块盘的分区结构大致是这样的前面有几个小分区分别是 2GB 左右的系统分区md0、2GB 的交换分区md1后面才是占满剩余空间的数据分区md2。系统分区在每个盘上都有副本做 RAID1数据分区根据你当初选的 RAID 类型可能是 RAID1、RAID5、RAID6、SHR 或者 Basic。SHR 是群晖自己的东西底层还是 mdadm RAID 加 LVM只是组合方式特殊。用lsblk和fdisk -l先看设备名和分区情况# 查看所有块设备确认群晖硬盘的设备名 lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT # 查看具体分区表假设硬盘是 /dev/sdb /dev/sdc /dev/sdd /dev/sde sudo fdisk -l /dev/sdb输出里你会看到类似/dev/sdb1、/dev/sdb2、/dev/sdb5这样的分区。群晖的分区编号有时候不连续这是正常的因为 DSM 用的是 GPT 分区表加自定义布局。关键要确认的是数据分区通常是最大的那个文件系统类型显示为linux_raid_member说明它是 RAID 成员盘。注意这一步只读不写不要对硬盘做任何格式化或分区操作。一旦写入RAID 元数据可能被覆盖恢复难度直接翻倍。2.2 判断你的群晖用的是哪种 RAID 和文件系统群晖的数据分区底层是 mdadm RAID上面可能直接是 ext4也可能再套一层 LVM 然后是 Btrfs。判断方法很简单先看 RAID 成员# 扫描所有 RAID 成员盘不组装只看信息 sudo mdadm --examine /dev/sdb5 sudo mdadm --examine /dev/sdc5 sudo mdadm --examine /dev/sdd5输出里重点看几个字段Raid Level告诉你这是 RAID1 还是 RAID5Array UUID确认这几块盘是不是同一个阵列Device Role告诉你每块盘在阵列里的位置。如果Raid Level显示raid5那至少需要三块盘才能组装raid1两块就行raid6至少四块。如果mdadm --examine的输出里看到Member Device或者Container之类的字段说明上面还有 LVM。这时候先别急着组装把信息记下来后面按顺序来。常见组合我列个表方便对照群晖 RAID 类型底层 mdadm 级别上层文件系统最少硬盘数Basic无 RAIDext4/Btrfs1RAID1raid1ext4/Btrfs2RAID5raid5ext4/Btrfs3RAID6raid6ext4/Btrfs4SHRraid1/raid5LVM ext4/Btrfs2 起SHR 的情况稍微复杂一点它可能把不同容量的盘组合成多个 RAID 再套 LVM但恢复思路是一样的先组 RAID再激活 LVM最后挂载。3. 在 Ubuntu18 上组装 RAID 并激活 LVM 的完整命令3.1 安装必要工具并扫描所有阵列Ubuntu18 默认可能没装 mdadm 和 lvm2先补上sudo apt update sudo apt install mdadm lvm2 -y装完之后先让系统自动扫描一下现有的 RAID 阵列# 扫描所有块设备上的 RAID 元数据 sudo mdadm --assemble --scan --verbose这个命令会尝试自动组装所有能识别的阵列。如果成功你会看到/dev/md0、/dev/md1、/dev/md2这样的设备出现。但自动组装有时候会失败尤其是 SHR 或者阵列顺序乱了的情况所以更稳妥的方式是手动指定成员盘组装。手动组装数据阵列假设数据分区是/dev/sdb5、/dev/sdc5、/dev/sdd5RAID5# 手动组装 RAID5指定三块成员盘 sudo mdadm --assemble /dev/md2 /dev/sdb5 /dev/sdc5 /dev/sdd5 # 查看组装结果 cat /proc/mdstat/proc/mdstat里会显示阵列状态[UUU]表示三块盘都在线[U_U]表示有一块盘掉了。如果显示active且没有degraded说明组装成功。注意如果mdadm --assemble报错说device or resource busy可能是 Ubuntu 自动挂载了某个分区先umount掉再试。如果报no such device检查设备名有没有写错。3.2 激活 LVM 并找到数据逻辑卷RAID 组装好之后如果群晖用了 LVM/dev/md2上面不会直接是文件系统而是 PV物理卷。用pvs、vgs、lvs三层查看# 扫描物理卷 sudo pvs # 扫描卷组 sudo vgs # 扫描逻辑卷 sudo lvs如果pvs能看到/dev/md2但vgs是空的说明卷组还没激活# 激活所有卷组 sudo vgchange -ay # 再次查看逻辑卷 sudo lvs这时候应该能看到类似vg1/lv或者volume_1/volume_1这样的逻辑卷。群晖的卷组名通常是vg1或者volume_1逻辑卷名一般是lv或者volume_1。记下逻辑卷的路径比如/dev/vg1/lv下一步挂载要用。如果pvs里根本看不到/dev/md2说明 RAID 没组装成功回到上一步检查mdadm --examine的输出确认成员盘有没有漏掉或者顺序错了。3.3 挂载逻辑卷并验证数据完整性找到逻辑卷之后先别急着挂载用blkid确认文件系统类型# 查看逻辑卷的文件系统类型 sudo blkid /dev/vg1/lv输出里TYPEext4或者TYPEbtrfs。如果是 ext4直接挂载如果是 BtrfsUbuntu18 默认支持但建议装一下btrfs-progs# 安装 Btrfs 工具 sudo apt install btrfs-progs -y # 创建挂载点 sudo mkdir -p /mnt/synology # 挂载 ext4 逻辑卷 sudo mount -o ro /dev/vg1/lv /mnt/synology # 如果是 Btrfs挂载命令一样但建议加恢复选项 sudo mount -o ro,recovery /dev/vg1/lv /mnt/synology注意这里用了-o ro只读挂载。这是血泪经验恢复数据的时候第一遍一定要只读挂载确认数据完整之后再考虑读写。只读挂载不会修改文件系统即使有问题也不会让情况变得更糟。挂载成功后ls /mnt/synology应该能看到群晖的共享文件夹比如homes、photo、video这些。如果看到的是空目录或者报input/output error可能是文件系统有损坏需要先修复。4. 恢复过程中最容易翻车的五个坑4.1 坑一Ubuntu 自动挂载了 RAID 成员盘导致阵列无法组装现象执行mdadm --assemble时报device or resource busy或者/proc/mdstat里阵列状态是inactive。原因Ubuntu 桌面版会自动挂载它能识别的文件系统。群晖的每个 RAID 成员盘上都有系统分区Ubuntu 可能把这些分区挂到了/media下面导致 mdadm 无法独占设备。解决先卸载所有自动挂载的分区# 查看当前挂载了哪些群晖相关的分区 mount | grep sd # 逐个卸载假设是 /dev/sdb1 /dev/sdc1 等 sudo umount /dev/sdb1 sudo umount /dev/sdc1 # 再重新组装 RAID sudo mdadm --assemble /dev/md2 /dev/sdb5 /dev/sdc5 /dev/sdd5如果umount报target is busy用lsof看看谁在占用或者直接sudo umount -l强制卸载。4.2 坑二SHR 阵列直接按 RAID5 组装导致失败现象mdadm --examine显示Raid Level是raid5但按 RAID5 组装后/proc/mdstat显示degraded或者根本组不起来。原因SHR 底层可能把不同容量的盘分成多个 RAID 区域直接按 RAID5 组装会漏掉某些成员盘或者顺序不对。解决先用mdadm --examine把所有盘的Array UUID和Device Role都看一遍确认哪些盘属于同一个阵列。SHR 的情况下可能需要分多次组装不同的 md 设备然后再用 LVM 把它们串起来。如果搞不定可以用mdadm --assemble --scan让系统自动尝试成功率比手动高。4.3 坑三LVM 卷组同名冲突导致激活失败现象vgchange -ay报错Duplicate VG name或者激活后lvs看不到逻辑卷。原因Ubuntu 系统本身可能已经有一个叫vg1或者ubuntu-vg的卷组和群晖的卷组重名了。解决先查看所有卷组sudo vgs如果看到两个同名的用 UUID 区分# 查看卷组 UUID sudo vgs -o vg_name,vg_uuid # 用 UUID 激活指定卷组 sudo vgchange -ay --select vg_uuid你的群晖卷组UUID或者临时把 Ubuntu 自己的卷组改名避免冲突。4.4 坑四Btrfs 文件系统挂载后报 I/O 错误现象mount成功但ls的时候报input/output error或者只能看到部分目录。原因Btrfs 文件系统可能有元数据损坏或者 RAID 组装不完整导致数据不一致。解决先用只读加恢复模式挂载sudo mount -o ro,recovery /dev/vg1/lv /mnt/synology如果还是不行用btrfs check检查# 只读检查不要加 --repair sudo btrfs check --readonly /dev/vg1/lvbtrfs check的输出会告诉你哪里有问题。如果只是少量元数据损坏可以尝试--repair但一定要先备份重要数据。如果损坏严重建议找专业数据恢复不要自己反复折腾。4.5 坑五RAID 重建过程中断电导致数据彻底丢失现象组装 RAID 后系统提示resync或recovery进行中这时候断电或者强制关机再开机阵列直接failed。原因mdadm 在组装 RAID 时可能会触发重建重建过程中写入元数据如果中断元数据可能不一致导致阵列无法再次组装。解决组装 RAID 时加--readonly参数避免任何写入sudo mdadm --assemble --readonly /dev/md2 /dev/sdb5 /dev/sdc5 /dev/sdd5只读组装不会触发重建也不会修改元数据是最安全的恢复方式。如果已经触发了重建耐心等它完成期间不要断电。如果重建卡住可以尝试echo idle /sys/block/md2/md/sync_action暂停但不要直接拔盘。5. 用 ddrescue 做全盘镜像再恢复的稳妥做法如果你觉得直接操作原盘风险太大或者数据特别重要我一般会建议先做全盘镜像然后在镜像上做恢复。这样即使操作失误原盘数据还在。工具用ddrescueUbuntu18 装一下sudo apt install gddrescue -y假设群晖数据盘是/dev/sdb准备一块容量不小于它的空盘挂到/mnt/backup然后# 做全盘镜像-n 跳过坏道快速拷贝-r 重试次数 sudo ddrescue -n /dev/sdb /mnt/backup/synology_disk1.img /mnt/backup/disk1.log # 如果第一次有坏道再跑一次精细拷贝 sudo ddrescue -r 3 /dev/sdb /mnt/backup/synology_disk1.img /mnt/backup/disk1.log镜像做完之后用losetup把镜像挂成回环设备再按前面的步骤组装 RAID# 把镜像文件关联到 loop 设备 sudo losetup -fP /mnt/backup/synology_disk1.img # 查看关联结果假设是 /dev/loop0 lsblk /dev/loop0 # 然后按前面的步骤组装 RAID成员盘换成 /dev/loop0p5 这样的 sudo mdadm --assemble --readonly /dev/md2 /dev/loop0p5 /dev/loop1p5 /dev/loop2p5这样做的好处是所有操作都在镜像上原盘完全不动。坏处是需要额外的存储空间而且速度慢一些。但对于重要数据来说这点代价完全值得。最后说一个我自己的习惯每次做这种恢复我都会在旁边开一个终端跑watch -n 2 cat /proc/mdstat实时盯着阵列状态。一旦看到degraded或者failed立刻停下来检查不要心存侥幸继续操作。数据恢复这件事慢就是快稳就是赢。希望帮到你。本文还有配套的精品资源点击获取
返回列表