![为什么我的 ZFS 池没有使用 Linux 上的 ZFS 进行扩展?](https://linux22.com/image/661778/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20ZFS%20%E6%B1%A0%E6%B2%A1%E6%9C%89%E4%BD%BF%E7%94%A8%20Linux%20%E4%B8%8A%E7%9A%84%20ZFS%20%E8%BF%9B%E8%A1%8C%E6%89%A9%E5%B1%95%EF%BC%9F.png)
我在 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?
答案1
我在 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 -
激活自动扩展:
# 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
两次才能使更改生效。
答案2
我读到freebsd 论坛建议使用的帖子zpool online -e <pool> <vdev>
(无需先离线 vdev)
这最终是一个解决方案,但是它要求首先禁用 ZFS 自动扩展:
[root@timestandstill ~]# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
dfbackup 214G 207G 7.49G 96% 1.00x ONLINE -
[root@timestandstill ~]# zpool get autoexpand
NAME PROPERTY VALUE SOURCE
dfbackup autoexpand on local
[root@timestandstill ~]# zpool set autoexpand=off dfbackup
[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 249G 207G 42.5G 82% 1.00x ONLINE -
需要使用zpool set autoexpand=off
后跟zpool online -e
来让 zpool 为我扩展,在 Linux 上使用 ZFS(在内核中,而不是使用 FUSE)