Linux 挂载群辉硬盘

版权声明:署名-非商业性使用-相同方式共享

@@ Tags: Synology;Btrfs
@@ Date: 2026-01-18
@@ Note:

Linux 系统中挂载 Synology Btrfs 文件系统

zero@ubuntu-2404-x64:/mnt$ lsblk
NAME                            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                               8:0    0    40G  0 disk
├─sda1                            8:1    0     1M  0 part
├─sda2                            8:2    0     2G  0 part  /boot
└─sda3                            8:3    0    38G  0 part
  └─ubuntu--vg-ubuntu--lv       252:0    0    19G  0 lvm   /
sdb                               8:16   0 465.8G  0 disk  # 这是我的群辉磁盘
├─sdb1                            8:17   0     8G  0 part
│ └─md125                         9:125  0     0B  0 md
├─sdb2                            8:18   0     2G  0 part
│ └─md126                         9:126  0     0B  0 md
└─sdb3                            8:19   0 455.5G  0 part
  └─md127                         9:127  0 455.5G  0 raid1
    ├─vg3-syno_vg_reserved_area 252:1    0    12M  0 lvm
    └─vg3-volume_3              252:2    0   455G  0 lvm

zero@ubuntu-2404-x64:~$ cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sdb3[0]
      477662208 blocks super 1.2 [1/1] [U]

md125 : inactive sdb1[29](S)
      8387584 blocks super 1.2

md126 : inactive sdb2[29](S)
      2096128 blocks super 1.2

unused devices: <none>


zero@ubuntu-2404-x64:~$ sudo lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <19.00g


zero@ubuntu-2404-x64:~$ sudo mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Tue Jul  2 22:41:46 2024
        Raid Level : raid1
        Array Size : 477662208 (455.53 GiB 489.13 GB)
     Used Dev Size : 477662208 (455.53 GiB 489.13 GB)
      Raid Devices : 1
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Thu Jan  8 23:56:44 2026
             State : clean, FAILED
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

    Number   Major   Minor   RaidDevice State
       0       8       19        0      active sync   missing

在高版本的内核中直接挂载群晖 Btrfs 卷很可能会失败:

$ sudo mount -t btrfs -o ro /dev/vg3/volume_3 /mnt/syno-btrfs
mount: /mnt/syno-btrfs: can't read superblock on /dev/mapper/vg3-volume_3.
       dmesg(1) may have more information after failed mount system call.

原因是:

Synology在BTRFS文件系统中使用了自定义的标志位(flags)

从Linux 5.4-rc1开始,内核添加了严格的BTRFS根标志检查(commit 259ee7754b67),拒绝挂载含有不支持标志的文件系统。

这个检查被反向移植到Ubuntu LTS版本(包括4.15内核),导致官方Synology恢复指南失效。

解决方案:

使用特定内核版本

  • Ubuntu Bionic(18.04) + 内核 4.15.0-108
  • Ubuntu Xenial(16.04) + 内核 4.15.0-107

操作步骤

下载安装 Ubuntu Bionic(18.04)版本, 开始安装服务器版本, 但安装过程总是出现错误, 转而安装了 desktop 版本.

  1. sudo apt install linux-image-4.15.0-108-generic
  2. sudo reboot
  3. 重启时,在Grub引导界面(可能需要按 Shift 或 Esc 键唤出)选择 “Advanced options for Ubuntu”,然后找到并启动你刚安装的 4.15 内核
  4. 确定物理连接情况: sudo lsblk -f
  5. sudo apt install -y btrfs-progs mdadm lvm2
  6. sudo mdadm --assemble --scan
    1. 这一步如果失败, 可能需要先停止现有的md设备
      • 检查md设备 cat /proc/mdstat
      • 再次执行: sudo mdadm --assemble --scan --detail
    2. 到了这一步, 在桌面版系统上, 可以通过文件浏览器自动挂载到 /media/<user>/ 目录下
  7. sudo vgscan --mknodes
  8. sudo vgchange -ay
  9. sudo lvs
  10. sudo mount -o ro,rescue=all /dev/你的磁盘分区 /mnt/recovery
    1. 或者用 -o ro,rescue=usebackuproot 选项

安全的移除设备

  • 首先卸载文件系统
    • sudo umount /dev/你的磁盘分区
    • sudo umount /dev/sdb*
  • 停止LVM逻辑卷, 如果使用LVM逻辑卷
    • sudo vgchange -an vg1
  • 停止md设备, 如果使用mdadm
    • sudo mdadm --stop /dev/md*
  • 确保没有进程占用设备
    • sudo lsof | grep /dev/sdb
    • sudo fuser -mv /dev/sdb*
  • 刷新并移除设备
    • sudo sync
    • sudo blockdev --flushbufs /dev/sdb

或者(推荐)

# 查看设备信息
udisksctl status

# 卸载并弹出(会自动执行所有必要步骤)
udisksctl unmount -b /dev/sdb*
udisksctl power-off -b /dev/sdb

原因分析

群辉断电后, 出现 Btrfs 磁盘可以读取目录, 但不能读取内容。

  • 将磁盘挂载到 Windows 后, 通过 winhex 可以正常打开, 并可以拷贝磁盘数据建立磁盘镜像。
  • 通过 Ubuntu 挂载后, 也是可以访问目录, 但不能拷贝文件(出现io无响应)。
  • 该磁盘作为下载磁盘,断电时可能正在写入数据(少量数据)。

这是 典型的 Btrfs 在异常断电后出现的“逻辑一致性破坏 + 读路径差异”问题:

断电导致“全盘”或全局性问题,而不是仅仅影响正在写入的单个文件,主要是因为 Btrfs是一个“写时复制”(CoW)的、日志式元数据文件系统
简单来说,一次断电可能同时破坏了用于描述全盘文件布局的“地图”(元数据),以及文件系统记录自己变更的“笔记本”(日志)

解决方案

能识别到卷的基础上, 不挂载文件系统, 执行 btrfs restore

btrfs restore -v [-i -s] /dev/sdX /path/to/backup/

常用参数:

  • -v
    显示正在恢复的文件
  • -vv
    显示 inode、extent、block 级别信息
  • -i
    交互式: 遇到错误时, 询问是否跳过
  • -s
    跳过错误
  • -x
    跳过 xattr / ACL / SELinux label(救命参数)

挂载 ext4

挂载流程基本与 Btrfs 相同, 磁盘结构基本相同, 唯一区别就是卷的文件系统不同。

sdb                               8:16   0 465.8G  0 disk
├─sdb1                            8:17   0     8G  0 part
│ └─md125                         9:125  0     8G  0 raid1
├─sdb2                            8:18   0     2G  0 part
│ └─md126                         9:126  0     2G  0 raid1
└─sdb3                            8:19   0 455.5G  0 part
  └─md127                         9:127  0 455.5G  0 raid1
    ├─vg1-syno_vg_reserved_area 253:0    0    12M  0 lvm
    └─vg1-volume_1              253:1    0   455G  0 lvm   /mnt/g

参考链接