我在 ZFS 上运行 Ubuntu 16.04。
我的操作系统在 rpool 上,数据在 /tank 上
问题:我使用以下命令向我的 zvol 添加了 2 个 6TB 驱动器:
# zpool add -f tank 镜像 ${DISK1} ${DISK2}
驱动器已添加。我原本预计会获得接近 6TB 的容量,但最后却多出了 2TB。以下是df -h /tank
Filesystem Size Used Avail Use% Mounted on
tank 2.1T 0 2.1T 0% /tank
下面是输出# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 2.57T 460G 2.12T - 7% 17% 1.00x ONLINE -
以下是输出# zpool status
pool: rpool
state: ONLINE
scan: scrub repaired 0 in 0h0m with 0 errors on Sun Feb 12 00:24:58 2017
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-Samsung_SSD_850_EVO_250GB_S2R5NB0HA87070Z-part1 ONLINE 0 0 0
ata-Samsung_SSD_850_EVO_250GB_S2R5NB0HB09374D-part1 ONLINE 0 0 0
errors: No known data errors
pool: tank
state: ONLINE
scan: scrub repaired 0 in 1h8m with 0 errors on Sun Feb 12 01:32:07 2017
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
wwn-0x50014ee0561bff3f-part1 ONLINE 0 0 0
wwn-0x50014ee1011a7ad7-part1 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ata-ST6000NE0021-2EN11C_ZA14Q289 ONLINE 0 0 0
ata-ST6000NE0021-2EN11C_ZA13YT32 ONLINE 0 0 0
cache
ata-Samsung_SSD_850_PRO_512GB_S39FNX0J102027A ONLINE 0 0 0
errors: No known data errors
我试过了# zpool set autoexpand=on tank
,但没成功。仍然报告 2.5TB。
以下是输出# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 477G 0 disk
├─sda1 8:1 0 477G 0 part
└─sda9 8:9 0 8M 0 part
sdb 8:16 0 2T 0 disk
├─sdb1 8:17 0 2T 0 part
└─sdb9 8:25 0 8M 0 part
sdc 8:32 0 2T 0 disk
├─sdc1 8:33 0 2T 0 part
└─sdc9 8:41 0 8M 0 part
sdd 8:48 0 596.2G 0 disk
└─sdd1 8:49 0 596.2G 0 part
sde 8:64 0 596.2G 0 disk
└─sde1 8:65 0 596.2G 0 part
sdf 8:80 0 232.9G 0 disk
├─sdf1 8:81 0 232.9G 0 part
├─sdf2 8:82 0 1007K 0 part
└─sdf9 8:89 0 8M 0 part
sdg 8:96 0 232.9G 0 disk
├─sdg1 8:97 0 232.9G 0 part
├─sdg2 8:98 0 1007K 0 part
└─sdg9 8:105 0 8M 0 part
sr0 11:0 1 1024M 0 rom
zd0 230:0 0 4G 0 disk [SWAP]
钥匙:
sda = L2ARC 用于坦克(三星专业版)
sdb 和 sdc = Seagate Ironwolf 6TB 硬盘(存储槽中的新镜像)
sdd & sde = WD 596G 硬盘镜像
sdf & sdg = rpool 镜像
你知道为什么我的机器只将这些新驱动器视为 2TB 吗?
我能做些什么吗?
我是否需要毁掉我的坦克来解决这个问题(如果有解决办法的话)?
答案1
这里发生了两件事。
- 您的 SATA 控制器可能不支持大于 2TB 的磁盘。您必须购买新的控制器才能充分利用它们的全部容量。
- 您已将 2TB(6TB 磁盘)镜像添加到具有 596GB 镜像 vdev 的池中。虽然从技术上讲,这会为池增加存储空间,但这对于性能来说是一种糟糕的设置。考虑池为空的情况。写入分散在条带 vdev 上以提高性能。596GB vdev 的填充速度比 2TB vdev 快得多,迫使 ZFS 几乎只向 2TB vdev 写入。这会抵消您从运行条带镜像中获得的任何性能提升。
为了获得最佳性能,您总是希望池中的所有 vdev 都具有相同大小的驱动器(我认为理想情况下甚至是相同的几何形状)。
我能做些什么吗?
现在无法移除已添加的虚拟设备,但可以用更大的磁盘替换磁盘。如果您想要获得最佳性能,可以
- a) 获取支持 >2TB 驱动器的 SATA 控制器和另外 2 个 6TB 驱动器来替换 596GB 驱动器。
- b) 获取 4 个 2TB 驱动器并替换所有 4 个驱动器,并将 6TB 驱动器用于其他用途。
我是否需要毁掉我的坦克来解决这个问题(如果有解决办法的话)?
上述任何解决方案都无法解决问题。如果要删除其中一个镜像,则必须重新创建池。
答案2
通过查看lsblk
输出,您的设备被报告为 2 TB 磁盘。这意味着销毁并重新创建池不会对可用空间产生影响。
您的 SATA 端口是否配置为 Legacy/IDE 模式?如果是,请尝试将其置于 AHCI 模式。
另外,请发布输出dmesg | grep -i sdb