飞牛NAS系统盘迁移:256G 换 512G 全程记录
飞牛 fnOS 装在一块 2242 尺寸的 256G NVMe 上。用了一年多, 系统盘告急, 想换一块 512G 的 2280。
最省事的想法是” 直接把盘对拷过去”。但系统盘不是数据盘, 拷完能不能启动、空间能不能用满, 全是坑。
我折腾了一下午, 全程记录在这里。下次遇到类似的事, 可以直接照做。
先搞清一件事 还是 Legacy
这决定你能不能放心用 dd。
SSH 登录飞牛, 跑一句:
lsblk找到系统盘 nvme0n1, 看第一个分区的挂载点:
nvme0n1p1 94M /boot/efi ← 有 /boot/efi 挂载点 = UEFInvme0n1p2 63.9G / ← 根分区nvme0n1p3 174.5G ← 存储卷p1 挂到了 /boot/efi, 就是 UEFI 引导。如果是 Legacy, 这里不会有 /boot/efi, 是个没有挂载点的裸分区。
原因很简单
模式下, 只要做扇区级整盘克隆, EFI 分区和引导记录会原样复制, 新盘大概率能直接启动。这给了我用 dd 的底气。三种方案, 为什么选 dd
| 方案 | 优点 | 缺点 |
|---|---|---|
| 硬件对拷机 | 免电脑、扇区级 | 要额外买设备, 一次性操作不值 |
| DiskGenius 克隆 | 有图形界面 | 默认文件级克隆, UEFI 引导可能丢, 得手动选” 按扇区复制” |
| dd | 免费、扇区级、可控 | 命令行, 写错盘毁所有 |
手头两块 NVMe 都能接电脑, 又不想为一次性操作买对拷机, dd 最合适。省下的钱差不多顶一个 DiskGenius 付费版。
dd 实操
关键
dd 自己。系统盘正在用, 边读边写会出问题。得用一个 Linux Live 环境。我用的是 Debian 13 Live U 盘, Ubuntu 也行, 任何 Linux Live 都行。
从 U 盘启动后, 先确认设备名:
lsblk这里踩了第一个坑
(512G) 没显示成 nvme1n1, 而是 sda。别慌。有的主板会把 NVMe 映射成 SCSI 设备, 名字不重要, 认准容量就行 ——465.8G 那个就是 512G 新盘。源盘还是 nvme0n1 (256G 飞牛系统盘)。
确认没挂载, 直接 dd:
sudo dd if=/dev/nvme0n1 of=/dev/sda bs=64K conv=noerror,sync status=progress三个点:
- 目标盘不用预先格式化。dd 是扇区级覆盖, 原数据、分区表、文件系统全被盖掉, 清不清空无所谓。
- if= 是源盘, of= 是目标盘。写反了, 256G 盘会被 512G 盘的内容盖掉, 数据全没。
- 256G 大概跑 15-40 分钟, 看盘速。跑完打印一行 “X bytes copied” 统计, 然后回到命令提示符。
修 GPT 备份表
这步容易漏, 但很关键。
dd 把 256G 的内容原样复制到 512G, 可 GPT 分区表的备份表存在磁盘末尾, 新盘比源盘大, 末尾位置变了, 备份表就” 错位” 了。不修的话, 有些系统会起不来。
sudo sgdisk -e /dev/sda如果提示 sgdisk 不存在 (Debian Live 默认可能没装),先装:
sudo apt update && sudo apt install gdisk或者用 fdisk /dev/sda 进去按 w 保存退出, 效果一样。
换盘启动
关机, 拔掉源盘, 只留 512G 新盘, 开机。
进飞牛 Web 后台能正常登录、数据都在, 就说明克隆成功。
我的情况一次通过。因为走的是 UEFI + 扇区级 dd,EFI 分区完整。
四层扩容
新盘起来了, 但系统还只认 256G—— 分区表还是原来 256G 的布局, 多出来的 ~238G 没分配。
普通 Linux 扩容可能 growpart + resize2fs 两步搞定。但飞牛系统盘是四层嵌套结构:
nvme0n1p3 (分区) └─ md0 (RAID1) └─ LVM (逻辑卷) └─ btrfs (/vol1)
一层都不能跳, 得按 分区→RAID→LVM→btrfs 的顺序逐层扩。顺序错了会破坏数据。
先看完整结构:
lsblkcat /proc/mdstatdf -hT /vol1我的 /vol1 是 md0 (单成员 RAID1)→ LVM → btrfs。然后按顺序执行:
第 1 步, 扩分区:
sudo parted -s /dev/nvme0n1 resizepart 3 100%sudo partprobe /dev/nvme0n1第 2 步, 扩 RAID:
sudo mdadm --grow /dev/md0 --size=max第 3 步, 扩 LVM:
sudo pvresize /dev/md0sudo lvextend -l +100%FREE /dev/mapper/<你的LV名>LV 名用 lsblk 里那个 lvm 设备名, 照着抄就行。
第 4 步, 扩 btrfs:
sudo btrfs filesystem resize max /vol1最后验证:
df -hT /vol1我的结果:/vol1 从 175G 涨到 413G,119G 数据原封不动。
踩坑清单
- 目标盘显示成 sda 而不是 nvme1n1—— 主板映射成 SCSI, 不影响, 认容量。
- umount 写少一个斜杠 (dev/sda1),报 no mount point specified—— 低级但真实, 命令写完整 /dev/sda1。
- 忘修 GPT 备份表 ——dd 之后必须 sgdisk -e, 否则可能起不来。
- 扩容直接动分区表 —— 飞牛的 md0 是 RAID1, 得按 分区→RAID→LVM→btrfs 四层来, 跳过 RAID 那层直接 resize2fs 会失败。
- 在跑着的系统里 dd 自己 —— 必须进 Live 环境, 别偷懒。
换盘这件事, 难点从来不在 dd 那一行命令, 而在搞清楚你的盘到底是几层结构。
数据还在, 空间也用满了, 这个下午算没白折腾。

