我在
Linux上有一个ZFS zpool,内核为2.6.32-431.11.2.el6.x86_64,它有一个vdev. vdev是SAN设备.我扩展了SAN的大小,尽管zpool将autoexpand设置为on,但即使重新启动计算机,导出/导入池,并使用zpool online -e,我也无法让池扩展.我确信vdev更大,因为fdisk显示它已从215GiB增加到250 GiB.以下是我所做的一个示例:
- [root@timestandstill ~]# zpool list
- NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
- dfbackup 214G 207G 7.49G 96% 1.00x ONLINE -
- [root@timestandstill ~]# zpool import -d /dev/disk/by-id/
- pool: dfbackup
- id: 12129781223864362535
- state: ONLINE
- action: The pool can be imported using its name or numeric identifier.
- config:
- dfbackup ONLINE
- virtio-sbs-XLPH83 ONLINE
- [root@timestandstill ~]# zpool import -d /dev/disk/by-id/ dfbackup
- [root@timestandstill ~]# zpool list
- NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
- dfbackup 214G 207G 7.49G 96% 1.00x ONLINE -
- venuebackup 248G 244G 3.87G 98% 1.00x ONLINE -
- [root@timestandstill ~]# zpool get autoexpand dfbackup
- NAME PROPERTY VALUE SOURCE
- dfbackup autoexpand on local
- [root@timestandstill ~]# zpool set autoexpand=off dfbackup
- [root@timestandstill ~]# zpool set autoexpand=on dfbackup
- [root@timestandstill ~]# zpool list
- NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
- dfbackup 214G 207G 7.49G 96% 1.00x ONLINE -
- venuebackup 248G 244G 3.87G 98% 1.00x ONLINE -
- [root@timestandstill ~]# zpool status -v dfbackup
- pool: dfbackup
- state: ONLINE
- scan: none requested
- config:
- NAME STATE READ WRITE CKSUM
- dfbackup ONLINE 0 0 0
- virtio-sbs-XLPH83 ONLINE 0 0 0
- errors: No known data errors
- [root@timestandstill ~]# fdisk /dev/disk/by-id/virtio-sbs-XLPH83
- WARNING: GPT (GUID Partition Table) detected on '/dev/disk/by-id/virtio-sbs-XLPH83'! The util fdisk doesn't support GPT. Use GNU Parted.
- WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
- switch off the mode (command 'c') and change display units to
- sectors (command 'u').
- Command (m for help): p
- Disk /dev/disk/by-id/virtio-sbs-XLPH83: 268.4 GB,268435456000 bytes
- 256 heads,63 sectors/track,32507 cylinders
- Units = cylinders of 16128 * 512 = 8257536 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0x00000000
- Device Boot Start End Blocks Id System
- /dev/disk/by-id/virtio-sbs-XLPH83-part1 1 27957 225443839+ ee GPT
- Command (m for help): q
- [root@timestandstill ~]# zpool online -e dfbackup /dev/disk/by-id/virtio-sbs-XLPH83
- [root@timestandstill ~]# zpool list
- NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
- dfbackup 214G 207G 7.49G 96% 1.00x ONLINE -
- venuebackup 248G 244G 3.87G 98% 1.00x ONLINE -
- [root@timestandstill ~]# zpool status -v dfbackup
- pool: dfbackup
- state: ONLINE
- scan: none requested
- config:
- NAME STATE READ WRITE CKSUM
- dfbackup ONLINE 0 0 0
- virtio-sbs-XLPH83 ONLINE 0 0 0
- errors: No known data errors
我该如何扩展这个zpool?
解决方法
我在Ubuntu 16.04上运行ZFS,经过多次试验和错误后,这就是扩展磁盘和池大小而无需重启的方法.我的系统托管在Profitbricks的云端,并使用libvirt(而不是SCSI)驱动器.
获取池和设备详细信息:
- # zpool status -v
- ...
- NAME STATE READ WRITE CKSUM
- pool ONLINE 0 0 0
- vdb ONLINE 0 0 0
- # zpool list
- NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
- pool 39.8G 27.1G 12.7G - 49% 68% 1.00x ONLINE -
激活autoexpand:
- # zpool set autoexpand=on pool
现在登录Profitbricks控制面板,将磁盘大小从40GB增加到50GB.
通知系统磁盘大小更改并扩展池:
- # partprobe
- Warning: Not all of the space available to /dev/vdb appears to be used,you can fix the GPT to use all of the space (an extra 10485760 blocks) or
- continue with the current setting?
- # zpool online -e pool vdb
- # partprobe
- # zpool list
- NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
- pool 49.8G 27.1G 21.7G - 40% 55% 1.00x ONLINE -
我不确定为什么,但有时需要运行partprobe和/或zpool online -e pool vdb两次才能使更改生效.