ZFS. Расширить дисковое пространство пула: различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «Добавим виртуальное устройство VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1<blockquote>РАСШИРИТЬ...»)
 
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
Добавим виртуальное устройство VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1<blockquote>РАСШИРИТЬ ПУЛ, ДОБАВИВ ОТДЕЛЬНЫЙ ДИСК В УЖЕ СОЗДАННОЕ ВИРТУАЛЬНОЕ УСТРОЙСТВО (НАПРИМЕР, В MIRROR ИЛИ В RAIDZ1), НЕЛЬЗЯ!
= Описание =
'''Нельзя:'''


МОЖНО ЛИШЬ ДОБАВИТЬ В ТЕКУЩИЙ ПУЛ АНАЛОГИЧНОЕ ВИРТУАЛЬНОЕ УСТРОЙСТВО ТОМУ, КОТОРОЕ УЖЕ РАБОТАЕТ В ПУЛЕ.
* Расширить пул, добавив отдельный диск в уже созданное виртуальное устройство (например, в '''mirror''' или в '''raidz1''').


НАПРИМЕР, ЕСЛИ ОРИГИНАЛЬНЫЙ ПУЛ СОБРАН НА ОСНОВЕ MIRROR, ТО И ДОБАВИТЬ В НЕГО МОЖНО ТОЛЬКО VDEV MIRROR ИЗ ДИСКОВ АНАЛОГИЧНОГО ОБЪЕМА
'''Можно:'''


НАПРИМЕР, У НАС ЕСТЬ ПУЛ pool01 НА ОСНОВЕ ВИРТУАЛЬНОГО УСТРОЙСТВА ТИПА RAIDZ1</blockquote>
* Добавить в текущий пул аналогичное виртуальное устройство тому, которое уже работает в пуле. Например, если оригинальный пул собран на основе '''mirror''', то и добавить в него можно только '''vdev''' '''mirror''' из дисков аналогичного объема.
zpool status
* Заменить все диски на новые диски большего объема.
<blockquote>  pool: pool01


state: ONLINE
= Вариант 1. Добавление виртуального устройства VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1 =


  scan: none requested
=== Входные данные ===
Имеется пул pool01 на основе виртуального устройства типа raidz1


config:
<code>zpool status</code>
  pool: pool01
state: ONLINE
  scan: none requested
config:
       NAME        STATE     READ WRITE CKSUM
       pool01      ONLINE       0     0     0
         raidz1-0  ONLINE       0     0     0
           gpt/d1  ONLINE       0     0     0
           gpt/d2  ONLINE       0     0     0
           gpt/d3  ONLINE       0     0     0


       NAME        STATE     READ WRITE CKSUM
=== Задача ===
Необходимо расширить дисковое пространство.


       pool01      ONLINE       0     0     0


         raidz1-0  ONLINE       0     0     0


           gpt/d1  ONLINE       0     0     0
Добавим виртуальное устройство VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1


           gpt/d2  ONLINE       0     0     0
=== Решение ===
Отформатируем новые диски аналогичного объема с gpt метками


           gpt/d3  ONLINE       0     0     0</blockquote>           
<code>gpart create -s gpt ada3</code>


НЕОБХОДИМО РАСШИРИТЬ ДИСКОВОЕ ПРОСТРАНСТВО
<code>gpart create -s gpt ada4</code>


СНАЧАЛА ОТФОРМАТИРУЕМ НОВЫЕ ДИСКИ АНАЛОГИЧНОГО ОБЪЕМА С GPT МЕТКАМИ
<code>gpart create -s gpt ada5</code>


gpart create -s gpt ada3
<code>gpart add -t freebsd-zfs -l d4 ada3</code>


gpart create -s gpt ada4
<code>gpart add -t freebsd-zfs -l d5 ada4</code>


gpart create -s gpt ada5
<code>gpart add -t freebsd-zfs -l d6 ada5</code>


(
При ошибке "gpart: geom 'ada0': File exists" делаем:


// при ошибке "gpart: geom 'ada0': File exists" делаем:
<code>gpart delete -i 1 ada3</code>


gpart delete -i 1 ada3
<code>gpart destroy ada3</code>


gpart destroy ada3
=== Соберем такое же vdev (raidz1 из 3-х дисков), как и в существующем в пуле устройстве, и добавим его в пул ===
<blockquote>!!! ВНИМАНИЕ !!!


)
Как только новое '''vdev''' будет добавлено к существующему пулу и объем пула будет увеличен, не будет способа удалить этот или оригинальный '''vdev''' из пула.


gpart add -t freebsd-zfs -l d4 ada3
Теперь новый '''vdev''' - часть пула, и далее объем пула можно только увеличить новым '''vdev'''!


gpart add -t freebsd-zfs -l d5 ada4
Единственный способ уменьшить объем текущего пула - это сделать резервную копию данных пула, уничтожить текущий пул и собрать новый!</blockquote><code>zpool add pool01 raidz /dev/gpt/d4 /dev/gpt/d5 /dev/gpt/d6</code>


gpart add -t freebsd-zfs -l d6 ada5
Объем пула увеличен в 2 раза


// СОБЕРЕМ ТАКОЕ ЖЕ VDEV (RAIDZ1 из 3-х дисков), КАК И В СУЩЕСТВУЮЩЕМ В ПУЛЕ УСТРОЙСТВЕ, И ДОБАВИМ ЕГО В ПУЛ
<code>zpool status</code>
  pool: pool01
state: ONLINE
  scan: none requested
config:
       NAME        STATE     READ WRITE CKSUM
       pool01      ONLINE       0     0     0
         raidz1-0  ONLINE       0     0     0
           gpt/d1  ONLINE       0     0     0
           gpt/d2  ONLINE       0     0     0
           gpt/d3  ONLINE       0     0     0
         raidz1-1  ONLINE       0     0     0
           gpt/d4  ONLINE       0     0     0
           gpt/d5  ONLINE       0     0     0
           gpt/d6  ONLINE       0     0     0
<code>df -h</code>
Filesystem    Size    Used   Avail Capacity  Mounted on
...
pool01        3.5G    144K    3.5G     0%    /mnt/pool01
...


// !!!ВНИМАНИЕ!!!
= Вариант 2. Замена всех дисков в пуле на более объемные =


// КАК ТОЛЬКО НОВОЕ VDEV БУДЕТ ДОБАВЛЕНО К СУЩЕСТВУЮЩЕМУ ПУЛУ И ОБЪЕМ ПУЛА БУДЕТ УВЕЛИЧЕН,
=== Входные данные ===
Пул RAIDZ1 '''raid1''' из 3-х дисков по 2ГБ объемом 3.5ГБ


// НЕ БУДЕТ СПОСОБА УДАЛИТЬ ЭТОТ ИЛИ ОРИГИНАЛЬНЫЙ VDEV ИЗ ПУЛА.
<code>zpool status raid1</code>
...
pool: raid1
state: ONLINE
config:
         NAME        STATE     READ WRITE CKSUM
         raid1       ONLINE       0     0     0
           raidz1-0  ONLINE       0     0     0
             da1p1   ONLINE       0     0     0
             da2p1   ONLINE       0     0     0
             da3p1   ONLINE       0     0     0
...
<code>zfs list</code>
...
NAME             USED  AVAIL     REFER  MOUNTPOINT
raid1           68.4M  3.47G      128K  /mnt/raid1
raid1/dataset1  67.7M  3.47G     67.7M  /mnt/raid1/dataset1
...


// ТЕПЕРЬ НОВЫЙ VDEV - ЧАСТЬ ПУЛА, И ДАЛЕЕ ОБЪЕМ ПУЛА МОЖНО ТОЛЬКО УВЕЛИЧИТЬ НОВЫМ VDEV!
=== Задача ===
Расширить объем пула, используя замену всех дисков 2ГБ на новые диски 4ГБ


// ЕДИНСТВЕННЫЙ СПОСОБ УМЕНЬШИТЬ ОБЪЕМ ТЕКУЩЕГО ПУЛА - ЭТО СДЕЛАТЬ РЕЗЕРВНУЮ КОПИЮ ДАННЫХ ПУЛА,
=== Решение ===
Вставим диски в сервер.


// УНИЧТОЖИТЬ ТЕКУЩИЙ ПУЛ И СОБРАТЬ НОВЫЙ!
Отформатируем новые диски аналогичного объема с gpt метками (также это действие можно произвести через веб-интерфейс (форматирование с GPT-метками), если используется '''Xigmanas''')


zpool add pool01 raidz /dev/gpt/d4 /dev/gpt/d5 /dev/gpt/d6
<code>gpart create -s gpt ada3</code>


// ОБЪЕМ ПУЛА УВЕЛИЧЕН В 2 РАЗА
<code>gpart create -s gpt ada4</code>


zpool status
<code>gpart create -s gpt ada5</code>


...
<code>gpart add -t freebsd-zfs -l d4 ada3</code>


  pool: pool01
<code>gpart add -t freebsd-zfs -l d5 ada4</code>


state: ONLINE
<code>gpart add -t freebsd-zfs -l d6 ada5</code>


  scan: none requested
При ошибке "gpart: geom 'ada0': File exists" делаем:


config:
<code>gpart delete -i 1 ada3</code>


       NAME        STATE     READ WRITE CKSUM
<code>gpart destroy ada3</code>


       pool01      ONLINE       0     0     0
Заменим каждый диск 2ГБ на новый диск 4ГБ


         raidz1-0  ONLINE       0     0     0
<code>zpool replace raid1 da1p1 /dev/gpt/d4</code>


           gpt/d1  ONLINE       0     0     0
<code>zpool replace raid1 da2p1 /dev/gpt/d5</code>


           gpt/d2  ONLINE       0     0     0
<code>zpool replace raid1 da3p1 /dev/gpt/d6</code>


           gpt/d3  ONLINE       0     0     0
Выключим/включим опцию авторасширения для пула


         raidz1-1  ONLINE       0     0     0
<code>zpool set autoexpand=off raid1</code>


           gpt/d4  ONLINE       0     0     0
<code>zpool set autoexpand=on raid1</code>


           gpt/d5  ONLINE       0     0     0
Смотрим
 
...
           gpt/d6  ONLINE       0     0     0
zpool status
 
  pool: raid1
...
  state: ONLINE
 
  scan: resilvered 34.8M in 00:00:00 with 0 errors on Tue Oct 24 20:09:54 2023
           
config:
         NAME        STATE     READ WRITE CKSUM
         raid1       ONLINE       0     0     0
           raidz1-0  ONLINE       0     0     0
             gpt/d4  ONLINE       0     0     0
             gpt/d5  ONLINE       0     0     0
             gpt/d6  ONLINE       0     0     0
...
Введем команду расширения для каждого диска


df -h
<code>zpool online -e raid1 gpt/d4</code>


...
<code>zpool online -e raid1 gpt/d5</code>


Filesystem    Size    Used   Avail Capacity  Mounted on
<code>zpool online -e raid1 gpt/d6</code>


...
Смотрим результат


pool01        3.5G    144K    3.5G     0%    /mnt/pool01
<code>zfs list raid1</code>
...
NAME    USED  AVAIL     REFER  MOUNTPOINT
raid1  68.4M  7.35G      128K  /mnt/raid1
...
<code>df -h</code>
...
raid1             7.4G    128K    7.4G     0%    /mnt/raid1
raid1/dataset1    7.4G     68M    7.4G     1%    /mnt/raid1/dataset1
...
Нетрудно видеть, что объем пула увеличился с 3.5ГБ до 7.5ГБ.


...
Все файлы и директории остались на месте.
[[Категория:ZFS]]
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
[[Категория:FreeBSD]]

Текущая версия на 23:40, 24 октября 2023

Описание

Нельзя:

  • Расширить пул, добавив отдельный диск в уже созданное виртуальное устройство (например, в mirror или в raidz1).

Можно:

  • Добавить в текущий пул аналогичное виртуальное устройство тому, которое уже работает в пуле. Например, если оригинальный пул собран на основе mirror, то и добавить в него можно только vdev mirror из дисков аналогичного объема.
  • Заменить все диски на новые диски большего объема.

Вариант 1. Добавление виртуального устройства VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1

Входные данные

Имеется пул pool01 на основе виртуального устройства типа raidz1

zpool status

  pool: pool01
state: ONLINE
  scan: none requested
config:
       NAME        STATE     READ WRITE CKSUM
       pool01      ONLINE       0     0     0
         raidz1-0  ONLINE       0     0     0
           gpt/d1  ONLINE       0     0     0
           gpt/d2  ONLINE       0     0     0
           gpt/d3  ONLINE       0     0     0

Задача

Необходимо расширить дисковое пространство.


Добавим виртуальное устройство VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1

Решение

Отформатируем новые диски аналогичного объема с gpt метками

gpart create -s gpt ada3

gpart create -s gpt ada4

gpart create -s gpt ada5

gpart add -t freebsd-zfs -l d4 ada3

gpart add -t freebsd-zfs -l d5 ada4

gpart add -t freebsd-zfs -l d6 ada5

При ошибке "gpart: geom 'ada0': File exists" делаем:

gpart delete -i 1 ada3

gpart destroy ada3

Соберем такое же vdev (raidz1 из 3-х дисков), как и в существующем в пуле устройстве, и добавим его в пул

!!! ВНИМАНИЕ !!!

Как только новое vdev будет добавлено к существующему пулу и объем пула будет увеличен, не будет способа удалить этот или оригинальный vdev из пула.

Теперь новый vdev - часть пула, и далее объем пула можно только увеличить новым vdev!

Единственный способ уменьшить объем текущего пула - это сделать резервную копию данных пула, уничтожить текущий пул и собрать новый!

zpool add pool01 raidz /dev/gpt/d4 /dev/gpt/d5 /dev/gpt/d6

Объем пула увеличен в 2 раза

zpool status

  pool: pool01
state: ONLINE
  scan: none requested
config:
       NAME        STATE     READ WRITE CKSUM
       pool01      ONLINE       0     0     0
         raidz1-0  ONLINE       0     0     0
           gpt/d1  ONLINE       0     0     0
           gpt/d2  ONLINE       0     0     0
           gpt/d3  ONLINE       0     0     0
         raidz1-1  ONLINE       0     0     0
           gpt/d4  ONLINE       0     0     0
           gpt/d5  ONLINE       0     0     0
           gpt/d6  ONLINE       0     0     0

df -h

Filesystem    Size    Used   Avail Capacity  Mounted on
...
pool01        3.5G    144K    3.5G     0%    /mnt/pool01
...

Вариант 2. Замена всех дисков в пуле на более объемные

Входные данные

Пул RAIDZ1 raid1 из 3-х дисков по 2ГБ объемом 3.5ГБ

zpool status raid1

...
pool: raid1
state: ONLINE
config:
        NAME        STATE     READ WRITE CKSUM
        raid1       ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            da1p1   ONLINE       0     0     0
            da2p1   ONLINE       0     0     0
            da3p1   ONLINE       0     0     0
...

zfs list

...
NAME             USED  AVAIL     REFER  MOUNTPOINT
raid1           68.4M  3.47G      128K  /mnt/raid1
raid1/dataset1  67.7M  3.47G     67.7M  /mnt/raid1/dataset1
...

Задача

Расширить объем пула, используя замену всех дисков 2ГБ на новые диски 4ГБ

Решение

Вставим диски в сервер.

Отформатируем новые диски аналогичного объема с gpt метками (также это действие можно произвести через веб-интерфейс (форматирование с GPT-метками), если используется Xigmanas)

gpart create -s gpt ada3

gpart create -s gpt ada4

gpart create -s gpt ada5

gpart add -t freebsd-zfs -l d4 ada3

gpart add -t freebsd-zfs -l d5 ada4

gpart add -t freebsd-zfs -l d6 ada5

При ошибке "gpart: geom 'ada0': File exists" делаем:

gpart delete -i 1 ada3

gpart destroy ada3

Заменим каждый диск 2ГБ на новый диск 4ГБ

zpool replace raid1 da1p1 /dev/gpt/d4

zpool replace raid1 da2p1 /dev/gpt/d5

zpool replace raid1 da3p1 /dev/gpt/d6

Выключим/включим опцию авторасширения для пула

zpool set autoexpand=off raid1

zpool set autoexpand=on raid1

Смотрим

...
zpool status
  pool: raid1
 state: ONLINE
  scan: resilvered 34.8M in 00:00:00 with 0 errors on Tue Oct 24 20:09:54 2023
config:
        NAME        STATE     READ WRITE CKSUM
        raid1       ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            gpt/d4  ONLINE       0     0     0
            gpt/d5  ONLINE       0     0     0
            gpt/d6  ONLINE       0     0     0
...

Введем команду расширения для каждого диска

zpool online -e raid1 gpt/d4

zpool online -e raid1 gpt/d5

zpool online -e raid1 gpt/d6

Смотрим результат

zfs list raid1

...
NAME    USED  AVAIL     REFER  MOUNTPOINT
raid1  68.4M  7.35G      128K  /mnt/raid1
...

df -h

...
raid1             7.4G    128K    7.4G     0%    /mnt/raid1
raid1/dataset1    7.4G     68M    7.4G     1%    /mnt/raid1/dataset1
...

Нетрудно видеть, что объем пула увеличился с 3.5ГБ до 7.5ГБ.

Все файлы и директории остались на месте.