一些背景
- 我有一个主机跑 PVE , 我本来有一块 8T 的机械硬盘,分了 4T 给飞牛。
- 后来感觉 4T 可能不够,就又买了一个 8T 的盘,又从新盘分了 4T 给飞牛,在里面用的是 lvm + btrfs.
- 最近想着我本来就两块磁盘,而且 lvm 还是 stripe 的,没有 mirror, 没有 raid, 用两块磁盘纯属徒增故障率,就想把其中一块直通得了,总容量还是 8t 左右。
开始操作
操作的步骤如下:
因为我的数据是 5t 多,直接
pvmove的话搞不定,于是先从 pve 上创建一个 2T 的磁盘给飞牛,用于周转。# 备份数据,删除了一部分没用的,保证文件系统用量在去除一个pv 后不会爆掉 # 在pve 上加盘,在飞牛上加入新pv, 用于周转 pvcreate /dev/sde vgextend vg-name /dev/sde我怕出故障丢数据,就把飞牛上的一些数据往移动硬盘上备份了一份,结果这速度实在是太感人了,1.8T 的数据备份了 4 个多小时。
缩文件系统
# 停掉fnos 上的占用服务磁盘的服务,卸载 /vol1 umount -l /vol1 btrfs filesystem resize -4t /vol1差不多用了 5 个小时!
转移数据,移除硬盘 2
pvmove /dev/sdc1 vgreduce vg-name /dev/sdc1 pvremove /dev/sdc1这一步用了将近 8 个小时,速度差不多两小时 1T, 合 145MB/s.
PVE 上删除这个虚拟磁盘,然后整个磁盘直通给给飞牛
# pve 上执行 # source: https://pve.proxmox.com/wiki/Passthrough_Physical_Disk_to_Virtual_Machine_(VM) qm set 107 -scsi2 /dev/disk/by-id/ata-ST8000VN004-3CP101_WRQ0QV3T把数据都转移到直通的磁盘上,移除之前的 4T 虚拟磁盘和用于周转的 2T 磁盘
pvcreate /dev/sdc # 转移数据 pvmove /dev/sdb1 vgreduce vg-name /dev/sdb1 pvremove /dev/sdb1 # 周转磁盘 pvmove /dev/sde vgreduce vg-name /dev/sde pvremove /dev/sde又是八个小时。。。
btrfs 扩文件系统
btrfs filesystem resize max /vol1飞牛关机,PVE 移除磁盘,重启飞牛,大功告成!
完事
整个过程其实比较常规,而且运气不错没丢数据,但是其中几个 pvmove 耗费了大量时间,前后花了一天一夜才完成。不得不说 btrfs 扩缩文件系统都挺方便的。
而且看起来也不应该新建一个周转磁盘,直接扩原来的磁盘得了,还不用盯着啥时候 pvmove 结束。