我在 VMWare 工作站中使用带有一个虚拟硬盘的 Debian Jessie。
在 /dev/sda1 上我有一个 /boot,在 /dev/sda2 上我有 /,在 /dev/sda3 上我有 swap,并且 /dev/sda5 和 /dev/sda6 我在 ZFS 镜像池中(总共大约 4.7 GB)并且已经在 zfs_pool/home 上安装了 /home,一切运行正常,但我有以下情况:我的镜像池的容量即将用完,我想增加镜像池的容量,但首先:我的虚拟磁盘容量。
如上图所示,我将虚拟硬盘扩展到 10GB,并使用 gparted 创建 /dev/sda7 分区,从 zfs_pool 中我分离了 /dev/sda5,连接了 /dev/sda7 并将数据从 /dev/sda6 重新同步到 /dev/sda7,然后我也分离了 /dev/sda6,因为现在我想增加镜像池的容量,我需要创建(从 /dev/sda5 和 /dev/sda6)一个分区并将其作为镜像附加到 /dev/sda7(这是增加镜像池容量的推荐方法吗?)
现在我的池不处于镜像状态,它仅由 /dev/sda7 组成,但如果我想删除 /dev/sda5 和 /dev/sda6,我的分区 /dev/sda7 现在将具有名称 /dev/sda5,并且当我重新启动时,zfs 无法识别我的池,这是 zdb 和 fdisk -l 的输出
如您所见,路径仍然是 /dev/sda7,但我有 /dev/sda5,(我认为)正确的数据在哪里,有什么解决方案可以替换此路径吗?或者只是从未分配的空间中创建仅包含 /dev/sda5 和 /dev/sda6 的新镜像池?
谢谢您的回答并祝您有愉快的一天。
答案1
增加容量的最佳方法
增加池容量的最佳方法是向池中添加vdev
。如果这不是一个选项,那么您可以以某种方式替换驱动器resilver -> replace -> resilver
。
你的配置发生了什么:
Linux 根据分区数量设置分区名称,在您的例子中,您有 7 个分区,因此您有 名称sda1..7
。但是当您合并这两个分区时,这会减少您的分区数量,从而产生 名称sda1..5
。这就是为什么根据唯一标识符添加驱动器是一个好主意,因为如果名称sda
发生变化,ZFS 仍然可以找到它。
如何修复此问题:
如果您运行,zpool import
它应该能够找到以前构建的池,/dev/sda7
以及现在的池/dev/sda5
。您很可能会得到类似下面的输出:
# zpool import
pool: dozer
id: 2704475622193776801
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
dozer ONLINE
c1t9d0 ONLINE
我第一次尝试使用 导入池 ID zpool import 2704475622193776801
。如果不成功,您可能需要使用 命令 将其导入为其他名称,以重命名池zpool import old_name new_name
。
笔记:
您的第一张图片显示zpool status
:
NAME: STATE READ WRITE CKSUM
zfs_pool ONLINE 0 0 0
sda7 ONLINE 0 0 0
在此配置中没有mirror
vdev。通过将新合并的分区添加到此池,它不会镜像驱动器,而是所谓的dynamic stripe
本质上的镜像RAID 0
。为了创建镜像,您可能需要重新创建池。祝你好运,希望这对你有帮助!
来源: 导入 ZFS 存储池