【飞牛存储空间扩容实操保姆级教程视频,适用于虚拟机的飞牛扩容磁盘。】 https://www.bilibili.com/video/BV1M3AMzfEUq/?share_source=copy_web&vd_source=6fdda38be5eb9fcf9f074fd04e9bf9ae
飞牛NAS磁盘在线扩容指南
本文记录了飞牛NAS(fnOS)从 50G 扩容到 55G 的完整过程,适用于基于 GPT分区 + MD RAID + LVM + ext4/btrfs 存储架构的磁盘在线扩容场景。
📋 环境信息
| 项目 |
详情 |
| 系统 |
飞牛NAS (fnOS) |
| 磁盘 |
/dev/vdb(虚拟磁盘) |
| 分区表 |
GPT |
| 分区 |
/dev/vdb1(Linux RAID 类型) |
| RAID |
/dev/md127(RAID1 单盘模式) |
| LVM PV |
/dev/md127 |
| LVM VG |
trim_56233b13_6bd4_4915_8af4_531da9d5a95a |
| LVM LV |
0(逻辑卷名) |
| 文件系统 |
ext4 / btrfs(根据实际环境确认) |
| 挂载点 |
/vol1 |
🏗️ 存储架构
物理磁盘 /dev/vdb (55G)
**── GPT 分区 /dev/vdb1
**── MD RAID /dev/md127 (raid1, 单盘)
**── LVM PV
**── LVM VG
**── LVM LV
**── ext4 或 btrfs 文件系统 → /vol1
[!NOTE]
飞牛NAS 的文件系统可能是 ext4 或 btrfs,通过 df -hT 或 lsblk -f 可查看。两者的扩容流程仅在**最后一步(扩展文件系统)**有区别,前面的步骤完全相同。
⚠️ 前置条件
- 已在虚拟化平台扩大磁盘容量(如 PVE/KVM 中将磁盘从 50G 调整为 55G)
- 飞牛NAS已识别到新的磁盘大小
- 确保有足够的备份(虽然在线扩容通常安全,但备份永远是好习惯)
[!IMPORTANT]
飞牛NAS默认不支持 root 用户直接登录,需要通过 sudo 执行所有管理命令。
🔍 确认环境信息
[!IMPORTANT]
扩容前必须先确认环境信息,不同环境的磁盘名、MD设备名、RAID模式、VG/LV名称都可能不同,直接照搬命令可能导致操作失败甚至数据丢失。
运行以下命令获取关键参数:
# 1. 查看磁盘和分区层级关系(确认磁盘名、分区名、MD设备名、LV名、挂载点)
sudo lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
# 2. 查看 MD RAID 详情(确认 Raid Level 是 raid1 还是 linear,这决定了扩容方式)
sudo mdadm --detail /dev/md*
# 3. 查看 LVM 物理卷、卷组、逻辑卷信息(获取 VG 和 LV 名称)
sudo pvs
sudo vgs
sudo lvs
# 4. 查看文件系统类型和挂载信息(⚠️ 注意 Type 列是 ext4 还是 btrfs)
sudo df -hT /vol*
# 5. 查看分区表类型(GPT 或 MBR)
sudo fdisk -l /dev/vdb
根据输出结果,确认以下关键参数后再进行扩容操作:
| 需确认项 |
获取方式 |
说明 |
| 磁盘设备名 |
lsblk 第一层 |
如 /dev/vdb、/dev/sda |
| 分区设备名 |
lsblk 第二层 |
如 /dev/vdb1、/dev/sda1 |
| MD 设备名 |
lsblk 第三层 或 cat /proc/mdstat |
如 /dev/md0、/dev/md127 |
| RAID 模式 |
mdadm --detail 的 Raid Level |
⚠️关键:raid1 和 linear 扩容方式不同 |
| VG 名称 |
vgs 输出的 VG 列 |
如 trim_xxx_xxx |
| LV 名称 |
lvs 输出的 LV 列 |
如 0 |
| LV 设备路径 |
VG名-LV名组合 |
如 /dev/mapper/<VG>-<LV> |
| 挂载点 |
df 或 lsblk 的 MOUNTPOINT |
如 /vol1、/vol2 |
| 分区表类型 |
fdisk -l 的 Disklabel type |
gpt 或 dos(MBR) |
| 文件系统类型 |
df -hT 的 Type 列 |
⚠️关键:ext4 和 btrfs 最后一步扩展命令不同 |
[!WARNING]
RAID 模式决定了第四步的操作方式:
- raid1:可直接使用
mdadm --grow --size=max 在线扩展
- linear:不支持在线扩展,必须停止阵列后用
--update=devicesize 重新组装(详见 Linear 模式扩容)
🔧 扩容步骤
第一步:确认磁盘已扩大
sudo -S fdisk -l /dev/vdb 2>&1
预期输出中应显示磁盘已扩大到目标大小(如 55 GiB),但分区仍保持原大小(如 50G)。
同时检查是否有 GPT 警告:
GPT PMBR size mismatch (104857599 != 115343359) will be corrected by write.
第二步:修复 GPT 分区表
由于磁盘容量变化,GPT 备份表的位置不正确,需要先修复:
sudo bash -c "echo 'Fix' | parted ---pretend-input-tty /dev/vdb print"
说明:
---pretend-input-tty 是 parted 的特殊参数,允许在非交互模式下自动回答提示
echo 'Fix' 自动回答 "Fix/Ignore?" 提示,选择修复 GPT 表
第三步:扩展 GPT 分区
sudo parted /dev/vdb resizepart 1 100%
说明:
resizepart 1 100% 表示将第1个分区扩展到占用所有可用空间
- 此操作是在线完成的,无需卸载
验证:
sudo parted /dev/vdb print
确认分区大小已变为目标值(如 59.1GB ≈ 55GiB)。
第四步:扩展 MD RAID 阵列
sudo mdadm --grow /dev/md127 --size=max
说明:
--grow 模式用于调整 RAID 阵列大小
--size=max 自动使用底层设备的全部可用空间
验证:
sudo mdadm --detail /dev/md127
确认 Array Size 已增大。
第五步:扩展 LVM 物理卷(PV)
sudo pvresize /dev/md127
验证:
sudo pvs
sudo vgs
确认 PV 大小增大,VG 出现 PFree(空闲空间)。
第六步:扩展 LVM 逻辑卷(LV)
# 将所有空闲空间分配给逻辑卷
sudo lvextend -l +100%FREE /dev/<VG名称>/<LV名称>
实际例子:
sudo lvextend -l +100%FREE /dev/trim_56233b13_6bd4_4915_8af4_531da9d5a95a/0
说明:
-l +100%FREE 使用所有剩余空闲 PE(Physical Extent)
- VG 和 LV 名称可通过
vgs 和 lvs 命令查看
验证:
sudo lvs
第七步:扩展文件系统
[!IMPORTANT]
此步骤根据文件系统类型不同,使用的命令也不同。请先通过 df -hT /vol1 确认文件系统类型。
方式A:ext4 文件系统
sudo resize2fs /dev/mapper/<VG名称>-<LV名称>
实际例子:
sudo resize2fs /dev/mapper/trim_56233b13_6bd4_4915_8af4_531da9d5a95a-0
说明:
- ext4 支持在线扩容(无需卸载文件系统)
resize2fs 不带大小参数时,自动扩展到逻辑卷的最大可用空间
方式B:btrfs 文件系统
sudo btrfs filesystem resize max <挂载点>
实际例子:
sudo btrfs filesystem resize max /vol1
说明:
- btrfs 同样支持在线扩容(无需卸载文件系统)
max 参数表示自动扩展到底层设备的最大可用空间
- btrfs 扩容命令的参数是挂载点路径(如
/vol1),而非设备路径
验证(btrfs 额外验证):
# 查看 btrfs 文件系统详情
sudo btrfs filesystem show /vol1
最终验证(通用):
sudo df -hT /vol1
✅ 扩容结果
| 项目 |
扩容前 |
扩容后 |
磁盘 /dev/vdb |
50 GiB |
55 GiB |
分区 /dev/vdb1 |
50G |
55G |
RAID /dev/md127 |
49.98 GiB |
54.98 GiB |
| LVM PV |
49.98g |
54.98g |
| LVM LV |
49.98g |
54.98g |
文件系统 /vol1 |
50G (使用41%) |
55G (使用37%) |
📝 完整命令汇总
以下是按执行顺序的完整命令列表(一键复制版):
ext4 文件系统版本:
# 1. 确认磁盘状态
sudo fdisk -l /dev/vdb
# 2. 修复 GPT 分区表
sudo bash -c "echo 'Fix' | parted ---pretend-input-tty /dev/vdb print"
# 3. 扩展分区至最大
sudo parted /dev/vdb resizepart 1 100%
# 4. 扩展 RAID
sudo mdadm --grow /dev/md127 --size=max
# 5. 扩展 PV
sudo pvresize /dev/md127
# 6. 扩展 LV(使用所有空闲空间)
sudo lvextend -l +100%FREE /dev/<VG>/<LV>
# 7. 扩展文件系统(ext4)
sudo resize2fs /dev/mapper/<VG>-<LV>
# 8. 验证结果
sudo df -hT /vol1
btrfs 文件系统版本:
# 1. 确认磁盘状态
sudo fdisk -l /dev/vdb
# 2. 修复 GPT 分区表
sudo bash -c "echo 'Fix' | parted ---pretend-input-tty /dev/vdb print"
# 3. 扩展分区至最大
sudo parted /dev/vdb resizepart 1 100%
# 4. 扩展 RAID
sudo mdadm --grow /dev/md127 --size=max
# 5. 扩展 PV
sudo pvresize /dev/md127
# 6. 扩展 LV(使用所有空闲空间)
sudo lvextend -l +100%FREE /dev/<VG>/<LV>
# 7. 扩展文件系统(btrfs)
sudo btrfs filesystem resize max /vol1
# 8. 验证结果
sudo df -hT /vol1
sudo btrfs filesystem show /vol1
🔍 常见问题
Q: 如果 parted resizepart 报错 "Unable to satisfy all constraints"?
A: 这通常是因为 GPT 备份表未修复。确保先执行第二步(修复 GPT 分区表),然后再尝试扩展分区。
Q: resize2fs 可以在线执行吗?
A: 是的,ext4 文件系统支持在线(已挂载状态下)扩容。不需要卸载 /vol1。
Q: btrfs 文件系统如何扩容?
A: 使用 btrfs filesystem resize max /vol1 命令,同样支持在线(已挂载状态下)扩容。注意参数是挂载点路径而非设备路径。
Q: 如何判断文件系统是 ext4 还是 btrfs?
A: 运行 df -hT /vol1,查看 Type 列。或使用 lsblk -f 查看 FSTYPE 列。
Q: btrfs 和 ext4 扩容有什么区别?
A: 前六步(磁盘 → 分区 → RAID → PV → LV)完全相同,仅最后一步不同:
- ext4:
sudo resize2fs /dev/mapper/<VG>-<LV>(参数是设备路径)
- btrfs:
sudo btrfs filesystem resize max /vol1(参数是挂载点路径)
Q: 扩容过程中数据安全吗?
A: 在线扩容是安全的,所有步骤都是追加空间,不会修改已有数据。但强烈建议在扩容前做好数据备份。
Q: 为什么飞牛不能直接用 root 用户?
A: 飞牛NAS(fnOS)出于安全考虑,默认禁用 root 直接登录。所有管理操作需要通过 sudo 进行权限提升。
Q: 如果是缩容(缩小磁盘)怎么办?
A: 缩容比扩容复杂且危险得多,需要反向操作:先缩小文件系统 → 缩小 LV → 缩小 PV → 缩小 RAID → 缩小分区。且必须先卸载文件系统,不支持在线操作。非必要不建议缩容。
[!WARNING]
btrfs 不支持在线缩容。btrfs 缩容必须在挂载状态下执行 btrfs filesystem resize -<大小> /vol1,但操作风险极高,可能导致数据丢失。
🔀 Linear 模式扩容(与 RAID1 的区别)
[!IMPORTANT]
如果你的 MD 阵列是 Linear 模式(通过 mdadm --detail /dev/mdX 检查 Raid Level: linear),扩容步骤与 RAID1 有重要差异。
Linear 模式 vs RAID1 对比
| 对比项 |
RAID1 模式 |
Linear 模式 |
| MD扩展方式 |
mdadm --grow --size=max ✅ 在线 |
❌ 不支持,报错 Cannot set device size |
| 扩展方案 |
直接在线扩展 |
需要停止阵列 → 重新组装 |
| 是否需要卸载 |
不需要 |
需要卸载文件系统 |
| 重组装命令 |
不适用 |
mdadm --assemble --update=devicesize |
Linear 模式扩容步骤
前三步与 RAID1 模式相同(确认磁盘 → 修复 GPT → 扩展分区),从第四步开始不同:
第四步(替代):停止并重组装 MD Linear 阵列
[!TIP]
推荐:先通过飞牛网页卸载存储空间,可以省略手动停服务、卸载文件系统的步骤(见下方说明)。
方式一:通过飞牛网页提前卸载(推荐)
通过飞牛网页管理界面卸载存储空间后,系统会自动完成:
- ✅ 停止相关服务(
trim_file_monitor 等)
- ✅ 卸载文件系统(
/vol1)
但以下操作不会自动完成,仍需手动执行:
- ❌ LVM 仍处于激活状态(LV 状态为 active)
- ❌ MD 阵列仍在运行
因此飞牛网页卸载后,只需执行:
# 1. 停用 LVM(网页卸载后仍需手动操作)
sudo lvchange -an <VG名称>/<LV名称>
sudo vgchange -an <VG名称>
# 2. 停止 MD 阵列(网页卸载后仍需手动操作)
sudo mdadm --stop /dev/md0
# 3. 重新组装阵列(关键:--update=devicesize 让 MD 识别新的分区大小)
sudo mdadm --assemble /dev/md0 /dev/vdb1 --update=devicesize
# 4. 重新激活 LVM
sudo vgchange -ay <VG名称>
方式二:全部通过命令行操作
如果没有通过网页卸载,需要手动完成所有步骤:
# 1. 先停止占用挂载点的服务
sudo systemctl stop trim_file_monitor
# 查看是否还有进程占用
sudo lsof +D /vol1
# 2. 卸载文件系统
sudo umount /vol1
# 3. 停用 LVM
sudo lvchange -an <VG名称>/<LV名称>
sudo vgchange -an <VG名称>
# 4. 停止 MD 阵列
sudo mdadm --stop /dev/md0
# 5. 重新组装阵列(关键:--update=devicesize 让 MD 识别新的分区大小)
sudo mdadm --assemble /dev/md0 /dev/vdb1 --update=devicesize
# 6. 重新激活 LVM
sudo vgchange -ay <VG名称>
之后的步骤(扩展 PV → 扩展 LV → 挂载 → 扩展文件系统)与 RAID1 模式相同。
最后别忘了恢复服务(如果是通过飞牛网页卸载的,可直接在网页上重新挂载存储空间):
sudo systemctl start trim_file_monitor
飞牛网页卸载后的步骤省略对照
| 步骤 |
命令 |
网页卸载后能省略? |
停止 trim_file_monitor |
systemctl stop trim_file_monitor |
✅ 可以省略 |
| 检查进程占用 |
lsof +D /vol1 |
✅ 可以省略 |
| 卸载文件系统 |
umount /vol1 |
✅ 可以省略 |
| 停用 LVM |
lvchange -an / vgchange -an |
❌ 不能省略 |
| 停止 MD 阵列 |
mdadm --stop |
❌ 不能省略 |
| 重组装 MD |
mdadm --assemble --update=devicesize |
❌ 不能省略 |
| 扩展 PV/LV/文件系统 |
pvresize / lvextend / resize2fs 或 btrfs resize |
❌ 不能省略 |
| 挂载文件系统 |
mount |
可通过网页挂载替代 |
| 恢复服务 |
systemctl start trim_file_monitor |
可通过网页挂载替代 |
示例命令(完整 Linear 模式流程)
精简版(已通过飞牛网页卸载存储空间):
# 1-2. 修复GPT → 扩展分区
sudo bash -c "echo 'Fix' | parted ---pretend-input-tty /dev/vdb print"
sudo parted /dev/vdb resizepart 1 100%
# 3. Linear模式特有:停LVM → 停MD → 重组装(网页已处理卸载,省略3步)
sudo lvchange -an <VG>/<LV>
sudo vgchange -an <VG>
sudo mdadm --stop /dev/md0
sudo mdadm --assemble /dev/md0 /dev/vdb1 --update=devicesize
sudo vgchange -ay <VG>
# 4. 扩展PV → LV → 文件系统
sudo pvresize /dev/md0
sudo lvextend -l +100%FREE /dev/<VG>/<LV>
sudo mount /dev/mapper/<VG>-<LV> /vol1
# ext4 文件系统用:sudo resize2fs /dev/mapper/<VG>-<LV>
# btrfs 文件系统用:sudo btrfs filesystem resize max /vol1
sudo resize2fs /dev/mapper/<VG>-<LV> # 或 btrfs filesystem resize max /vol1
# 5. 验证(之后可通过飞牛网页重新挂载存储空间)
sudo df -hT /vol1
完整版(全命令行操作):
# 1-2. 修复GPT → 扩展分区
sudo bash -c "echo 'Fix' | parted ---pretend-input-tty /dev/vdb print"
sudo parted /dev/vdb resizepart 1 100%
# 3. 停服务 → 卸载 → 停LVM → 停MD → 重组装
sudo systemctl stop trim_file_monitor
sudo umount /vol1
sudo lvchange -an <VG>/<LV>
sudo vgchange -an <VG>
sudo mdadm --stop /dev/md0
sudo mdadm --assemble /dev/md0 /dev/vdb1 --update=devicesize
sudo vgchange -ay <VG>
# 4. 扩展PV → LV → 文件系统
sudo pvresize /dev/md0
sudo lvextend -l +100%FREE /dev/<VG>/<LV>
sudo mount /dev/mapper/<VG>-<LV> /vol1
# ext4 文件系统用:sudo resize2fs /dev/mapper/<VG>-<LV>
# btrfs 文件系统用:sudo btrfs filesystem resize max /vol1
sudo resize2fs /dev/mapper/<VG>-<LV> # 或 btrfs filesystem resize max /vol1
# 5. 恢复服务并验证
sudo systemctl start trim_file_monitor
sudo df -hT /vol1
📅 文档更新日期:2026-03-22
🔄 操作环境:飞牛NAS (fn-test),磁盘 50G → 55G 扩容