使用镜像扩展现有单磁盘 ZFS,无需格式化现有 HDD

kau*_*lex 7 server zfs

我的服务器上有一个硬盘,格式化为单盘 zfs 系统。它看起来像下面这样: 在此输入图像描述

现在我想将其转换为 zfs 镜像而不格式化原始磁盘。有任何想法吗?

结果应该是这样的:

hdd0
   mirror0
       ata-........................
       ata-........................

  
Run Code Online (Sandbox Code Playgroud)

Car*_*teo 17

我在虚拟机中复制了您的案例并逐步粘贴到此处。:)

注意:首先,请做好数据备份。我添加了一个空的新磁盘,因此 ZFS 毫不怀疑主驱动器是什么。虽然您应该没有问题,因为第一个驱动器已经构成池的一部分,但建议进行备份。

快速回答:您需要zpool Attach命令。

基本上: sudo zpool attach hdd0 existinghdd blankhdd

之后,执行以下操作:

zpool status
Run Code Online (Sandbox Code Playgroud)

你会看到一面镜子已经创建了。您在现有驱动器上的数据将被保留,并将被复制到新驱动器(重新同步)。

由于 ZFS 仅复制实际信息,因此此过程将花费或多或少的时间,具体取决于数据量。在我的虚拟机中,300 GB 在 3 秒内复制,而根据我使用 SAS 和 SATA 驱动器的经验,我在不到 24 小时内重新同步了 10 TB(为此我使用了从 10 TB 到 14 TB SAS 的驱动器)。

现在是我在 Virtual Box VM 中所做的一切的长答案:

lsblk --scsi
Run Code Online (Sandbox Code Playgroud)

通过 ls /dev/disk/by-id/ 识别两个空驱动器

选择其中之一并创建一个像您一样的池: sudo zpool create hdd0 id_of_mydrive

查看池 /hdd0 已创建并安装在 root 上。

sudo zpool status
sudo zpool list
sudo ls -al /hdd0
Run Code Online (Sandbox Code Playgroud)

填充一些随机数据(或更好地复制文件)以生成像您一样的驱动器数据。我从随机生成: 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状态=进度 sudo dd id=/dev/urandom of=/hdd0/file.002 bs=1M 计数=100状态=进度

然后我得到了校验和并保存以供稍后验证。

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
Run Code Online (Sandbox Code Playgroud)

zpool list 显示近 100GB 空间。

zpool attach hdd0 id_of_mydrive id_of_the_drive_to_add
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我验证了校验和。

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 开头。