Ubuntu + ZFS:如何将整个系统迁移到新磁盘?

这是我的场景:

我在安装有2个500 GB SATA磁盘的服务器上安装了本机ZFS的 Ubuntu。 我按照这个指南安装它: https : //github.com/dajhorn/pkg-zfs/wiki/HOWTO-install-Ubuntu-to-a-Native-ZFS-Root-Filesystem

因此,我在磁盘1上为/ boot / grub分配了一个16 MB的分区,该磁盘的其余部分以及在镜像zpool中专用于ZFS的整个第二个驱动器。 一切工作正常。

问题是,现在我需要摆脱500 GB的磁盘,并replace为2 x 1.5 TB的磁盘。

有什么方法可以将我的两个500 GB硬盘的所有内容(数据,分区表等)复制到两个1.GB TB硬盘上,而无需从零开始重新安装系统?

我在这里添加@jlliagre所要求的信息:

FDISK:

# fdisk -l Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 identifier: 0xf4bfe018 Device Boot Start End Blocks Id System /dev/sda1 * 63 32129 16033+ be Solaris boot /dev/sda2 32130 976773167 488370519 5 Extended /dev/sda5 32193 976773167 488370487+ bf Solaris Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 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 identifier: 0xf4bfe018 Device Boot Start End Blocks Id System /dev/sdb1 63 976773167 488386552+ 5 Extended /dev/sdb5 126 976773167 488386521 bf Solaris 

zpool状态:

 # zpool status pool: labpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM labpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 sda5 ONLINE 0 0 0 sdb5 ONLINE 0 0 0 errors: No known data errors 

zpool列表

 # zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT labpool 464G 70.7G 393G 15% 1.00x ONLINE - 

zpool历史

 # zpool history History for 'labpool': 2012-02-17.19:23:39 zpool create labpool mirror /dev/disk/by-id/ata-WDC_WD5000AAKX-001CA0_WD-WCAYUFF66324-part5 /dev/disk/by-id/ata-WDC_WD5000AAKX-001CA0_WD-WCAYUFJ06204-part5 2012-02-17.19:26:39 zfs create labpool/ROOT 2012-02-17.19:26:44 zfs create labpool/ROOT/ubuntu-1 2012-02-17.19:27:15 zfs set mountpoint=/ labpool/ROOT/ubuntu-1 2012-02-17.19:27:36 zpool set bootfs=labpool/ROOT/ubuntu-1 labpool 2012-02-17.19:28:03 zpool export labpool 2012-02-17.19:28:30 zpool import -d /dev/disk/by-id/ -R /mnt labpool 2012-02-17.20:48:20 zpool export labpool 2012-02-17.21:03:30 zpool import -f -N labpool 2012-02-17.21:07:35 zpool import -f -N labpool 2012-02-17.21:42:09 zpool import -f -N labpool 2012-02-17.21:51:39 zpool import -f -N labpool 2012-02-17.21:55:49 zpool import -f -N labpool 2012-02-17.21:58:10 zpool import -f -N labpool 2012-02-22.13:25:26 zpool import -f -N labpool 2012-02-22.13:40:15 zpool import -f -N labpool 2012-02-22.12:50:38 zpool import -f -N labpool 

我一直在想:如果从LiveCD启动,请按照安装指南进行步骤4(在新的磁盘对上分区和创buildZFS池),然后将新的文件系统挂载到/ mnt / new和旧的一个in / mnt / old和rsync从旧到新? 这可能吗? 还是会把一切搞砸了?

这应该工作:

  • 在新磁盘上创build一个类似的分区布局,ZFS不会为你做。

  • 复制启动分区并重新安装启动加载器。

  • 在您的根池zpool上set autoexpand=on labpool autoexpand属性set autoexpand=on labpool

  • replace其中一个磁盘,例如zpool replace labpool sda5 sdc5然后等待重新同步以使用zpool status镜像所有池数据集

  • replace第二个磁盘zpool replace labpool sdb5 sdd5

  • 删除旧的磁盘

您应该能够为每个磁盘使用zpool replace <pool> <old disk> <new disk> 。 这将保持所有的分区,文件属性等。我已经成功地使用了zfs-fuse。

请参阅联机帮助页 。

我通过电子邮件发送了我遵循的安装Ubuntu + ZFS的指南的作者,他给了我一个解决scheme:

ZFS实例无法resize,因此您必须在较大的磁盘上重新创build池以将其扩大。 做这样的事情:

  1. 安装新的磁盘。
  2. 为/ boot分区新磁盘加上一个较大的池区。
  3. 创build一个新的池,但给它一个不同的名称。
  4. zfs snapshot -r oldpool@now
  5. zfs send -R oldpool@now | zfs recv newpool
  6. 将旧的/ boot复制到新的/ boot。
  7. 重复GRUB安装。
  8. 删除旧的磁盘。

如果要保留相同的池名称,则必须导出新池,并在手册页中介绍的步骤3之后使用zpool import -R

我有一些问题,因为我需要改变连接的磁盘插槽,但我认为答案可以帮助其他人在我的情况。

我没有尝试@ jlliagre的解决scheme,因为我后来看到它,但我认为可能是电子邮件中提到的问题,我引用的ZFS实例无法resize(记住我想传递一个2×500 GB镜子到一个2×1.5 TB镜子)。