Zfs

增加 ZFS 分區以使用整個磁碟

  • December 20, 2018

我有一個目前佔用 100Gb 的 ZFS 池。我將磁碟大小增加到 150Gb,但似乎無法讓 ZFS 使用整個磁碟。

昨天我在另一台伺服器上遇到了同樣的問題,並且有一定的混合zpool set autoexpand=on,zpool 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

更新

更多數據:

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  -

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

自動展開

# zpool get autoexpand
NAME   PROPERTY    VALUE   SOURCE
lxd    autoexpand  off     default
zdata  autoexpand  on      local

展開

# zpool get expandsize zdata
NAME   PROPERTY    VALUE     SOURCE
zdata  expandsize  -         -

磁碟

# 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

我在Google云上,這是一個 ubuntu VM 實例,zfs 在我通過“Google云平台 - 計算引擎”連接到伺服器的第二個磁碟上。

在這種情況下擴展 ZFS 分區的正確方法是什麼?

解決方案

最終,我按照下面的@ewwhite 回答讓它開始工作。為了完整起見,這裡是如何刪除額外的分區#9:

parted /dev/sdb rm 9
parted /dev/sdb resizepart 1 100%

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

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

順序應該是這樣的:

  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 並重複上述操作。

引用自:https://serverfault.com/questions/946055