Назад | Перейти на главную страницу

Ubuntu + ZFS: как перенести всю систему на новые диски?

Вот мой сценарий:

У меня Ubuntu с родной ZFS установлен на сервере с 2 дисками SATA по 500 ГБ. Я установил его, следуя этому руководству: https://github.com/dajhorn/pkg-zfs/wiki/HOWTO-install-Ubuntu-to-a-Native-ZFS-Root-Filesystem

Итак, у меня на диске 1 есть раздел размером 16 МБ для / boot / grub и остальной части этого диска, а также весь второй диск, выделенный для ZFS в zpool зеркального копирования. Все нормально работает.

Проблема в том, что теперь мне нужно избавиться от дисков емкостью 500 ГБ и заменить их на 2 диска по 1,5 ТБ.

Есть ли способ реплицировать все (данные, таблицу разделов и т. Д.) С моих двух жестких дисков емкостью 500 ГБ на два жестких диска емкостью 1 ГБ ТБ без необходимости переустановки системы с нуля?

Я добавляю сюда информацию, запрошенную @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 (разбиение на разделы и создание пула ZFS на моей новой паре дисков), затем смонтировать новую файловую систему в / mnt / new, а старую - в / mnt / old и rsync от старого к новому? Возможно ли это? Или все испортит?

Это должно работать:

  • Создайте аналогичную схему разделов на новых дисках, ZFS не сделает этого за вас.

  • Скопируйте загрузочный раздел и переустановите загрузчик.

  • установите свойство autoexpand в корневом пуле zpool set autoexpand=on labpool

  • Заменить один из дисков, например zpool replace labpool sda5 sdc5 и подождите, пока повторное обновление отразит все наборы данных пула, используя zpool status

  • Заменить второй диск zpool replace labpool sdb5 sdd5.

  • Удалите старые диски

Я написал автору руководства по установке Ubuntu + ZFS, которому я следовал, и он дал мне решение, которое сработало:

Размер экземпляров ZFS нельзя изменить, поэтому вам придется воссоздать пул на дисках большего размера, чтобы увеличить его. Сделайте что-нибудь вроде этого:

  1. Установите новые диски.
  2. Разделите новые диски на / boot плюс большую область пула.
  3. Создайте новый пул, но дайте ему другое имя.
  4. zfs snapshot -r oldpool@now
  5. zfs send -R oldpool@now | zfs recv newpool
  6. Скопируйте старый / boot в новый / boot.
  7. Повторите установку GRUB.
  8. Удалите старые диски.

Если вы хотите сохранить то же имя пула, вы должны экспортировать новый пул и использовать zpool import -R после шага 3, описанного на странице руководства.

У меня были некоторые проблемы, потому что мне нужно было изменить сокеты, к которым подключены диски, но я думал, что ответ может помочь другим в моей ситуации.

Я не пробовал решение @ jlliagre, потому что видел его позже, но я думаю, что могла быть проблема с тем, что упоминается в цитируемом мной электронном письме о том, что экземпляры ZFS не могут быть изменены (помня, что я хотел перейти от зеркало 2x500 ГБ на зеркало 2x1,5 ТБ).

Вы должны уметь использовать zpool replace <pool> <old disk> <new disk> для каждого диска. Это сохранит все разделы, атрибуты файлов и т. Д. Я успешно использовал это с zfs-fuse.

Увидеть справочная страница.