黑群晖硬盘分区结构
Disk /dev/zd32: 1 TiB, 1099511627776 bytes, 2147483648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 65536 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disklabel type: gpt Disk identifier: F7BBEB5C-7E60-47A5-B4FD-F3F968F3B488 Device Start End Sectors Size Type /dev/zd32p1 8192 16785407 16777216 8G Linux RAID /dev/zd32p2 16785408 20979711 4194304 2G Linux RAID /dev/zd32p3 21241856 2147475455 2126233600 1013.9G Linux RAID
这是最原始的裸磁盘分区,直接在外部系统查看
/dev/md0,系统分区,所有硬盘都有这个分区,RAID1/dev/md1,交换分区,所有硬盘都有这个分区,RAID1/dev/mdX,数据分区,阵列类型由磁盘阵列选项(BASIC、SHR、RAID0 1 5 6)而不同不考虑动系统和交换分区,因为是硬性规定的容量,所有硬盘都有这个区,不仅缩起来麻烦还容易炸
总结分成6部曲
比如要把1T的盘调整成500G大小,进入群晖系统拿root SSH
1、缩小文件系统容量,由于每一层都有边界问题,先多缩一些
btrfs filesystem resize 490G /volume1
2、缩小lvm卷容量
lvm lvreduce -L 491G /dev/vg1/volume_1
3、缩小lvm物理盘容量
pvresize --setphysicalvolumesize 492G /dev/mdX
4、缩小mdadm卷容量
mdadm --grow /dev/mdX --size 516947968 (493G*1024*1024)
关机,将硬盘挂载到别的系统上
5、缩小分区大小
fdisk /dev/sdX,使用O菜单导出分区表,修改导出文件(分区大小需要16k对齐, 因为扇区大小是512B,所以需要乘2),再用I导入回去,W写入 如果需要缩小硬盘镜像,额外进行以下步骤 因为GPT分区记录了尾扇区,直接缩小硬盘镜像会导致GPT分区表不正确,因此需要额外进行LBA末尾修复 fdisk /dev/sdX 使用g新建分区表,o导出到一个新的文件,把之前的文件的last-lba值改成新的,然后使用I导入改好的分区表文件即可
6、更新mdadm头数据(最重要的,关键难点,大部分教程都没有说过这个)
mdadm --assemble --verbose /dev/mdX /dev/sdX --update=devicesize
插回群晖,此时系统应该正常启动,磁盘容量也缩小到490G了,不要进行任何操作
进入群晖root SSH,填充边界进行扩容
mdadm --grow /dev/mdX --size max pvresize /dev/mdX lvextend -l +100%FREE /dev/vg1/volume_1 重启 btrfs filesystem resize max /volume1
至此,群晖盘缩容工作完成