Ubuntu

Ubuntu + ZFS:如何將整個系統遷移到新磁碟?

  • February 25, 2012

這是我的場景:

我在具有 2 x 500 GB SATA 磁碟的伺服器上安裝了帶有本機 ZFS的 Ubuntu。我按照本指南安裝了它:https ://github.com/dajhorn/pkg-zfs/wiki/HOWTO-install-Ubuntu-to-a-Native-ZFS-Root-Filesystem

所以我在磁碟 1 上有一個 16 MB 的分區,用於 /boot/grub 和該磁碟的其餘部分,以及鏡像 zpool 中專用於 ZFS 的整個第二個驅動器。一切正常。

問題是現在我需要擺脫 500 GB 磁碟並將它們替換為 2 x 1.5 TB 磁碟。

有什麼方法可以將我的兩個 500 GB 硬碟驅動器中的所有內容(數據、分區表等)複製到兩個 1.GB TB 硬碟驅動器,而無需從頭開始重新安裝系統?

我在這裡添加@jlliagre 要求的資訊:

磁碟:

# 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 步(在我的新磁碟對上分區和創建 ZFS 池),然後將新文件系統掛載到 /mnt/new 和舊文件系統上怎麼辦? /mnt/old 中的一個和從舊到新的 rsync?那可能嗎?還是會把一切都搞砸?

這應該有效:

  • 在新磁碟上創建類似的分區佈局,ZFS 不會為您做這件事。
  • 複製引導分區並重新安裝引導載入程序。
  • 在根池 zpool 上設置 autoexpand 屬性set autoexpand=on labpool
  • 更換其中一個磁碟,例如zpool replace labpool sda5 sdc5,等待重新同步以鏡像所有池數據集,使用zpool status
  • 更換第二個磁碟zpool replace labpool sdb5 sdd5
  • 刪除舊磁碟

您應該能夠使用zpool replace <pool> <old disk> <new disk>每個磁碟。這將保留所有分區、文件屬性等。我已經成功地將它與 zfs-fuse 一起使用。

請參閱手冊頁

引用自:https://serverfault.com/questions/362743