ZFS. Расширить дисковое пространство пула: различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
== | = Описание = | ||
'''Нельзя:''' | |||
* Расширить пул, добавив отдельный диск в уже созданное виртуальное устройство (например, в '''mirror''' или в '''raidz1'''). | |||
Можно | '''Можно:''' | ||
Например, если оригинальный пул собран на основе '''mirror''', то и добавить в него можно только '''vdev''' '''mirror''' из дисков аналогичного объема | * Добавить в текущий пул аналогичное виртуальное устройство тому, которое уже работает в пуле. Например, если оригинальный пул собран на основе '''mirror''', то и добавить в него можно только '''vdev''' '''mirror''' из дисков аналогичного объема. | ||
* Заменить все диски на новые диски большего объема. | |||
= Вариант 1. Добавление виртуального устройства VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1 = | |||
=== Входные данные === | |||
Имеется пул pool01 на основе виртуального устройства типа raidz1 | |||
<code>zpool status</code> | <code>zpool status</code> | ||
| Строка 18: | Строка 25: | ||
gpt/d2 ONLINE 0 0 0 | gpt/d2 ONLINE 0 0 0 | ||
gpt/d3 ONLINE 0 0 0 | gpt/d3 ONLINE 0 0 0 | ||
Необходимо расширить дисковое пространство | === Задача === | ||
Необходимо расширить дисковое пространство. | |||
Добавим виртуальное устройство VDEV (MIRROR, RAIDZ1, RAIDZ2) в уже созданный пул RAIDZ1 | |||
=== Решение === | |||
Отформатируем новые диски аналогичного объема с gpt метками | |||
<code>gpart create -s gpt ada3</code> | <code>gpart create -s gpt ada3</code> | ||
| Строка 34: | Строка 47: | ||
<code>gpart add -t freebsd-zfs -l d6 ada5</code> | <code>gpart add -t freebsd-zfs -l d6 ada5</code> | ||
При ошибке "gpart: geom 'ada0': File exists" делаем: | При ошибке "gpart: geom 'ada0': File exists" делаем: | ||
| Строка 43: | Строка 54: | ||
<code>gpart destroy ada3</code> | <code>gpart destroy ada3</code> | ||
== Соберем такое же vdev (raidz1 из 3-х дисков), как и в существующем в пуле устройстве, и добавим его в пул == | === Соберем такое же vdev (raidz1 из 3-х дисков), как и в существующем в пуле устройстве, и добавим его в пул === | ||
<blockquote>!!! ВНИМАНИЕ !!! | <blockquote>!!! ВНИМАНИЕ !!! | ||
| Строка 69: | Строка 80: | ||
gpt/d5 ONLINE 0 0 0 | gpt/d5 ONLINE 0 0 0 | ||
gpt/d6 ONLINE 0 0 0 | gpt/d6 ONLINE 0 0 0 | ||
<code>df -h</code> | <code>df -h</code> | ||
Filesystem Size Used Avail Capacity Mounted on | Filesystem Size Used Avail Capacity Mounted on | ||
| Строка 76: | Строка 85: | ||
pool01 3.5G 144K 3.5G 0% /mnt/pool01 | pool01 3.5G 144K 3.5G 0% /mnt/pool01 | ||
... | ... | ||
= Вариант 2. Замена всех дисков в пуле на более объемные = | |||
=== Входные данные === | |||
Пул RAIDZ1 '''raid1''' из 3-х дисков по 2ГБ объемом 3.5ГБ | |||
<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 | |||
... | |||
=== Задача === | |||
Расширить объем пула, используя замену всех дисков 2ГБ на новые диски 4ГБ | |||
=== Решение === | |||
Вставим диски в сервер. | |||
Отформатируем новые диски аналогичного объема с gpt метками (также это действие можно произвести через веб-интерфейс (форматирование с GPT-метками), если используется '''Xigmanas''') | |||
<code>gpart create -s gpt ada3</code> | |||
<code>gpart create -s gpt ada4</code> | |||
<code>gpart create -s gpt ada5</code> | |||
<code>gpart add -t freebsd-zfs -l d4 ada3</code> | |||
<code>gpart add -t freebsd-zfs -l d5 ada4</code> | |||
<code>gpart add -t freebsd-zfs -l d6 ada5</code> | |||
При ошибке "gpart: geom 'ada0': File exists" делаем: | |||
<code>gpart delete -i 1 ada3</code> | |||
<code>gpart destroy ada3</code> | |||
Заменим каждый диск 2ГБ на новый диск 4ГБ | |||
<code>zpool replace raid1 da1p1 /dev/gpt/d4</code> | |||
<code>zpool replace raid1 da2p1 /dev/gpt/d5</code> | |||
<code>zpool replace raid1 da3p1 /dev/gpt/d6</code> | |||
Выключим/включим опцию авторасширения для пула | |||
<code>zpool set autoexpand=off raid1</code> | |||
<code>zpool set autoexpand=on raid1</code> | |||
Смотрим | |||
... | |||
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 | |||
... | |||
Введем команду расширения для каждого диска | |||
<code>zpool online -e raid1 gpt/d4</code> | |||
<code>zpool online -e raid1 gpt/d5</code> | |||
<code>zpool online -e raid1 gpt/d6</code> | |||
Смотрим результат | |||
<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]] | [[Категория: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ГБ.
Все файлы и директории остались на месте.