收起左侧

飞牛ext4和btrfs存储空间扩容实操保姆级教程视频,适用于虚拟机的飞牛扩容磁盘。

0
回复
25
查看
[ 复制链接 ]

【飞牛存储空间扩容实操保姆级教程视频,适用于虚拟机的飞牛扩容磁盘。】 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 的文件系统可能是 ext4btrfs,通过 df -hTlsblk -f 可查看。两者的扩容流程仅在**最后一步(扩展文件系统)**有区别,前面的步骤完全相同。

⚠️ 前置条件

  1. 已在虚拟化平台扩大磁盘容量(如 PVE/KVM 中将磁盘从 50G 调整为 55G)
  2. 飞牛NAS已识别到新的磁盘大小
  3. 确保有足够的备份(虽然在线扩容通常安全,但备份永远是好习惯)

[!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 --detailRaid Level ⚠️关键raid1linear 扩容方式不同
VG 名称 vgs 输出的 VG 列 trim_xxx_xxx
LV 名称 lvs 输出的 LV 列 0
LV 设备路径 VG名-LV名组合 /dev/mapper/<VG>-<LV>
挂载点 dflsblk 的 MOUNTPOINT /vol1/vol2
分区表类型 fdisk -l 的 Disklabel type gptdos(MBR)
文件系统类型 df -hT 的 Type 列 ⚠️关键ext4btrfs 最后一步扩展命令不同

[!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 名称可通过 vgslvs 命令查看

验证

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)完全相同,仅最后一步不同:

  • ext4sudo resize2fs /dev/mapper/<VG>-<LV>(参数是设备路径)
  • btrfssudo 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 扩容

收藏
送赞
分享
https://www.xiaozhuhouses.asia/欢迎访问我的博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则