增加ZFS分区使用整个磁盘

jus*_*dev 5 zfs

我有一个当前占用 100Gb 的 ZFS 池。我将磁盘大小增加到 150Gb,但似乎无法让 ZFS 使用整个磁盘。

我有一个完全相同的问题,昨天与另一台服务器,并有有一定的混合物zpool set autoexpand=onzpool export|importzpool online -e和重启让我来解决它。但是无论我做什么,在当前服务器中都不起作用

有问题的设备是 sdb,您可以从下面的 lsblk 中看到,可用 150Gb 中的分区只有 100Gb。

# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb       8:16   0  150G  0 disk
??sdb1    8:17   0  100G  0 part
??sdb9    8:25   0    8M  0 part

root@http-server-2:/home# parted -l
Model: Google PersistentDisk (scsi)
Disk /dev/sdb: 161GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size    File system  Name                  Flags
 1      1049kB  107GB  107GB   zfs          zfs-01a59d03c9294944
 9      107GB   107GB  8389kB
Run Code Online (Sandbox Code Playgroud)

更新

更多数据:

zpool列表

# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
lxd    13.9G   394K  13.9G         -     0%     0%  1.00x  ONLINE  -
zdata  99.5G  82.7G  16.8G         -    49%    83%  1.00x  ONLINE  -
Run Code Online (Sandbox Code Playgroud)

zpool 状态

# zpool status
  pool: lxd
 state: ONLINE
  scan: none requested
config:

        NAME                          STATE     READ WRITE CKSUM
        lxd                           ONLINE       0     0     0
          /var/lib/lxd/disks/lxd.img  ONLINE       0     0     0

errors: No known data errors

  pool: zdata
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zdata       ONLINE       0     0     0
          sdb       ONLINE       0     0     0
Run Code Online (Sandbox Code Playgroud)

自动展开

# zpool get autoexpand
NAME   PROPERTY    VALUE   SOURCE
lxd    autoexpand  off     default
zdata  autoexpand  on      local
Run Code Online (Sandbox Code Playgroud)

扩大规模

# zpool get expandsize zdata
NAME   PROPERTY    VALUE     SOURCE
zdata  expandsize  -         -
Run Code Online (Sandbox Code Playgroud)

磁盘

# fdisk -l /dev/sdb
Disk /dev/sdb: 150 GiB, 161061273600 bytes, 314572800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 0DA2A1D7-9A44-2E4C-856A-BB9EAEB283E0

Device         Start       End   Sectors  Size Type
/dev/sdb1       2048 209696767 209694720  100G Solaris /usr & Apple ZFS
/dev/sdb9  209696768 209713151     16384    8M Solaris reserved 1
Run Code Online (Sandbox Code Playgroud)

我在谷歌云上,这是一个 ubuntu VM 实例,zfs 位于我通过“谷歌云平台 - 计算引擎”附加到服务器的第二个磁盘上。

在这种情况下,扩展 ZFS 分区的正确方法是什么?

解决方案

最终,我按照下面的@ewwhite 回答让它开始工作。为了完整起见,这里是如何删除额外的分区#9:

parted /dev/sdb rm 9
parted /dev/sdb resizepart 1 100%
Run Code Online (Sandbox Code Playgroud)

然后一堆zpool online -e => export pool => import pool。它奏效了!

Jer*_*usk 7

尝试命令

sudo partprobe
Run Code Online (Sandbox Code Playgroud)

我相信part​​probe也能解决你的问题。https://linux.die.net/man/8/partprobe

您也可以随时在池上启用自动扩展,以避免需要执行 sudo zpool online -e my-pool sdb

zpool get autoexpand my-pool
sudo zpool set autoexpand=on my-pool
Run Code Online (Sandbox Code Playgroud)

可能有用的完整命令

sudo partprobe -s
sudo partprobe
lsblk
zpool list
sudo zpool online -e <POOL NAME> <DEVICE NAME>
# zpool online -e mypoolname sdb
zpool list
Run Code Online (Sandbox Code Playgroud)


eww*_*ite 5

ZFS 中有 1/9 分区是正常的。如果 ZFS 认为它正在使用“整个磁盘”,则会创建分区。这是处理非多路径完整磁盘的方式。

这个 8MB 缓冲区空间的原因是允许在物理设置中使用略有不同的磁盘容量。这不是您在使用该zpool online -e实用程序时需要担心的事情,因为它会在扩展期间重写分区表。

Disk /dev/nvme0n1: 960.2 GB, 960197124096 bytes, 1875385008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: E63B403D-D140-A84B-99EB-56DEDC8B91E4


#         Start          End    Size  Type            Name
 1         2048   1875367935  894.3G  Solaris /usr &  zfs-aaba011d48bf00f6
 9   1875367936   1875384319      8M  Solaris reserve
Run Code Online (Sandbox Code Playgroud)

顺序应该是这样的:

  1. 重新扫描您的磁盘:类似echo 1 > /sys/block/sdb/device/rescan.
  2. partprobe
  3. zpool online -e poolname sdb
  4. 重新启动或重新加载 ZFS 模块。
  5. zpool list
  6. 查看 的值EXPANDSZ
  7. zpool online -e poolname sdb

如果此顺序不起作用,只需删除分区 #9 并重复上述操作。

  • 我尝试了这个答案(没有删除 sdb9),但它不起作用,即使在重新启动后也是如此。我用“zpool list”“zpool status”输出更新了问题。EXPANDZ是-,是什么意思?我有点害怕删除分区#9,我怎么知道它是安全的?另外,如何删除位于 ZFS 磁盘上的分区? (2认同)