kaulex Asked: 2020-12-22 05:52:20 +0800 CST2020-12-22 05:52:20 +0800 CST 2020-12-22 05:52:20 +0800 CST 使用镜像扩展现有 Single Disk ZFS,无需格式化现有 HDD 772 我的服务器上有一个格式化为单盘 zfs 系统的 HDD。它如下所示: 现在我想在不格式化原始磁盘的情况下将其转换为 zfs 镜像。有任何想法吗? 结果应该是这样的: hdd0 mirror0 ata-........................ ata-........................ server zfs 1 个回答 Voted Best Answer Carles Mateo 2020-12-29T11:10:21+08:002020-12-29T11:10:21+08:00 我在虚拟机中复制了您的案例,并逐步粘贴到此处。:) 注意:首先,请备份您的数据。我添加了一个空的新磁盘,因此 ZFS 毫不怀疑主驱动器是什么。虽然您应该没有问题,因为第一个驱动器已经构成池的一部分,但建议进行备份。 快速回答:您需要zpool attach命令。 基本上: sudo zpool attach hdd0 existinghdd blankhdd 之后,执行: zpool status 你会看到已经创建了一个镜像。您在现有驱动器上的数据将被保留,并将被复制到新驱动器(重新同步)。 由于 ZFS 仅复制实际信息,因此此过程将或多或少地取决于数据量。在我的虚拟机中,3 秒内复制了 300 GB,而我使用 SAS 和 SATA 驱动器的经验,我在不到 24 小时内重新同步了 10 TB(因为我使用的是 10TB 到 14TB SAS 的驱动器)。 现在,我在 Virtual Box VM 中所做的一切都得到了长长的回答: lsblk --scsi 通过 ls /dev/disk/by-id/ 识别两个空驱动器 选择其中一个并创建一个像您这样的池: sudo zpool create hdd0 id_of_mydrive 看到池 /hdd0 已创建并安装在 root 上。 sudo zpool status sudo zpool list sudo ls -al /hdd0 填充一些随机数据(或在那里更好地复制文件)以生成像您这样的数据驱动器。我从随机生成: sudo dd id=/dev/urandom of=/hdd0/file.000 bs=1M count=100 status=progress sudo dd id=/dev/urandom of=/hdd0/file.001 bs=1M count =100 status=progress sudo dd id=/dev/urandom of=/hdd0/file.002 bs=1M count=100 status=progress 然后我得到校验和并保存以供以后验证。 sudo su # Please note I continue as root sha512sum file.000 > file.000.sha512 sha512sum file.001 > file.001.sha512 sha512sum file.002 > file.002.sha512 zpool list 显示将近 100GB 的空间。 zpool attach hdd0 id_of_mydrive id_of_the_drive_to_add zpool 状态将显示: pool: hdd0 state: ONLINE scan: resilvered 301M in 0 days 00:00:03 with 0 errors... NAME STATE READ WRITE CKSUM hdd0 mirror-0 ata-VBOX_HARDDISK_VBa8... ONLINE 0 0 0 ata-VBOX_HARDDISK_VB8c... ONLINE 0 0 0 errors: No known data errors 我验证了校验和。 zpool list 也将返回 99GB 的可用空间,因为镜像中使用了两个 100GB 的驱动器。 所以正如kaulex提到的格式是: zpool attach 其中 device 是您以前的带有数据的 vdev(ZFS 池中名为“hdd0”的带有数据的单个硬盘驱动器)。 正如我所做的那样,您想使用设备的 ID 而不是名称,因此您将使用 /dev/disk/by-id/ 中的标识符而不是 sdb、sdc ...(请注意,添加 /dev/ 是不必要)。不使用 sdb、sdc、sdea 等设备名称的原因是这些名称可能会改变 live 运行或重新启动之间的原因。id 永远不会改变。在真实系统中,而不是 Virtual Box,它们可能以 wwn 开头。
我在虚拟机中复制了您的案例,并逐步粘贴到此处。:)
注意:首先,请备份您的数据。我添加了一个空的新磁盘,因此 ZFS 毫不怀疑主驱动器是什么。虽然您应该没有问题,因为第一个驱动器已经构成池的一部分,但建议进行备份。
快速回答:您需要zpool attach命令。
基本上:
sudo zpool attach hdd0 existinghdd blankhdd
之后,执行:
你会看到已经创建了一个镜像。您在现有驱动器上的数据将被保留,并将被复制到新驱动器(重新同步)。
由于 ZFS 仅复制实际信息,因此此过程将或多或少地取决于数据量。在我的虚拟机中,3 秒内复制了 300 GB,而我使用 SAS 和 SATA 驱动器的经验,我在不到 24 小时内重新同步了 10 TB(因为我使用的是 10TB 到 14TB SAS 的驱动器)。
现在,我在 Virtual Box VM 中所做的一切都得到了长长的回答:
通过 ls /dev/disk/by-id/ 识别两个空驱动器
选择其中一个并创建一个像您这样的池: sudo zpool create hdd0 id_of_mydrive
看到池 /hdd0 已创建并安装在 root 上。
填充一些随机数据(或在那里更好地复制文件)以生成像您这样的数据驱动器。我从随机生成: sudo dd id=/dev/urandom of=/hdd0/file.000 bs=1M count=100 status=progress sudo dd id=/dev/urandom of=/hdd0/file.001 bs=1M count =100 status=progress sudo dd id=/dev/urandom of=/hdd0/file.002 bs=1M count=100 status=progress
然后我得到校验和并保存以供以后验证。
zpool list 显示将近 100GB 的空间。
zpool 状态将显示:
我验证了校验和。
zpool list 也将返回 99GB 的可用空间,因为镜像中使用了两个 100GB 的驱动器。
所以正如kaulex提到的格式是: zpool attach
其中 device 是您以前的带有数据的 vdev(ZFS 池中名为“hdd0”的带有数据的单个硬盘驱动器)。
正如我所做的那样,您想使用设备的 ID 而不是名称,因此您将使用 /dev/disk/by-id/ 中的标识符而不是 sdb、sdc ...(请注意,添加 /dev/ 是不必要)。不使用 sdb、sdc、sdea 等设备名称的原因是这些名称可能会改变 live 运行或重新启动之间的原因。id 永远不会改变。在真实系统中,而不是 Virtual Box,它们可能以 wwn 开头。