Page 1 of 1

ZFS на разделах GPT

Posted: 13 Sep 2015 11:58
by start
Соратники, есть у меня два диска объемом 1'907'730MB.
Есть желание сделать два пула из четырех разделов. А точнее на каждом диске создать по два раздела: первые разделы по 1'000'000MB ; вторые по 907'730MB. После присвоить метки всем четырем и создать два пула из разделов_на_метках - один "старйп" на 2'000'000MB из первых разделов ; а из вторых создать зеркало на 907'730MB.
Вот такой "дешевый" способ сделать на двух дисках условнонадежное хранилище для архива, и большой_2TB диск для торрентов
В этой статье http://2gusia.livejournal.com/130035.html описано как создать пул из GPT_дисков целиком.

Прошу, помогите с вопросом какими программами во nas4free воспользоваться для разметки и присвоения меток GRT, и ещё бы что бы 4К блоки были.

P.S> Понимаю что реальные разметы будут другими.
P.S.S> При выходе из строя одного диска - ставлю другой, размачиваю с аналогичным размером и заменяю устройство в зеркале. При этом потеря данных на "страйпе" ни как ни пугает. Производительность, вообще не волнует.
P.S.S.S>

Re: ZFS на разделах GPT

Posted: 13 Sep 2015 15:14
by MikeMac
start wrote:какими программами
всё аналогично посту в моём блоге. только в п 3 создаём разделы не во весь диск, а указанного размера

https://www.freebsd.org/cgi/man.cgi?que ... 9&sektion=

то есть в gpart add нужны параметры [-b start] [-s size]



в конце мана есть примеры. Размер самостоятельно посчитайте, можно на диске (пока пустой) поэкспериментировать и посмотреть результат через gpart show - справитесь, думаю

Re: ZFS на разделах GPT

Posted: 18 Sep 2015 19:46
by start
Рапортую:
Сделал в тестовой виртуальной_nas4free дополнительных три диска (da3 ; da4 ; da5)
на каждом диске разметил по два раздела (далее * - номер диска da) командами
gpart add -t freebsd-zfs -l DA*_part1 -a 4K -s 10G /dev/da*
gpart add -t freebsd-zfs -l DA*_part1 -a 4K -s 9900M /dev/da*

в итоге gpart show /dev/da* выдает:

Code: Select all

=>      34  41942973  da*  GPT  (20G)
        34         6       - free -  (3.0k)
        40  20971520    1  DA*_part1  (10G)
  20971560  20275200    2  DA*_part2  (9.7G)
  41246760    696247       - free -  (340M)
После сделал "чередующийся" пул pirog из двух разделов _part2 командной
zpool create pirog /dev/gpt/DA3_part2 /dev/gpt/DA4_part2
после сделал на нем файловую систему и поднял SAMBA шару - скопировал на нё 13ГБ файлов

потом заменил раздел диска 4, на раздел диска 5 в пуле, командой
zpool replace pirog /dev/gpt/DA4_part2 /dev/gpt/DA5_part2
дождался когда пройдет синхронизация раздела в пуле (100% замена раздела ).

после выключил виртуальный nas4free -> отключил пятый диск -> включил нас4фрии -> посмотрел что есть неисправный пул -> выключил нас4фрии -> подключил обратно пятый диск -> включил нас4фрии -> надеюсь что пул восстановиться увидев ранее_отсутствующий раздел -> но пул не восстановился :? zpool status -x возвращает следующее:

Code: Select all

  pool: pirog
 state: UNAVAIL
status: One or more devices could not be opened.  There are insufficient
        replicas for the pool to continue functioning.
action: Attach the missing device and online it using 'zpool online'.
   see: http://illumos.org/msg/ZFS-8000-3C
  scan: none requested
config:

        NAME                   STATE     READ WRITE CKSUM
        pirog                  UNAVAIL      0     0     0
          gpt/DA3_part2        ONLINE       0     0     0
          3387169038118051645  UNAVAIL      0     0     0  was /dev/gpt/DA4_part2
команда zpool scrub pirog возвращает

Code: Select all

cannot scrub 'pirog': pool is currently unavailable
вопрос: а так ли я создал пул и разделы на GPT ?
и если так, то чего пул не восстановился сам - да и вообще - можно его теперь вернуть в строй ?

Re: ZFS на разделах GPT

Posted: 19 Sep 2015 08:51
by MikeMac
start wrote:Рапортую
Во-первых, приводить стоит команды как есть. Копипастом из того места, где исполняются.

Если в них вносить ошибки (а они точно будут - люди не идеальны), то разобраться - без возможности. Напр. команда
gpart add -t freebsd-zfs -l DA*_part1 -a 4K -s 9900M /dev/da*
уж точно не создаст раздел DA*_part2

во вторых, если не понятно что-то - желательно не рассказывать, что вы думаете про систему, а что система думает про себя.
типа camcontrol devlist, zpool status, zpool history.

Ну и самое главное.
zpool create pirog /dev/gpt/DA3_part2 /dev/gpt/DA4_part2
вы создаёте страйп, пул без всякой надёжности. А затем пытаетесь с ним делать операции как с пулом с избыточностью.
Проблема в том, что вряд ли кто-то интересовался таким, извините за термин, извратом. Так что тут вы - первопроходец. Наверное, разработчики zfs интересовались - но и то не поручусь.

Re: ZFS на разделах GPT

Posted: 08 Nov 2015 13:12
by start
MikeMac wrote:Если в них вносить ошибки (а они точно будут - люди не идеальны), то разобраться - без возможности. Напр. команда
gpart add -t freebsd-zfs -l DA*_part1 -a 4K -s 9900M /dev/da*
уж точно не создаст раздел DA*_part2
Согласен - здесь я указал * как замену цифрам, что бы не писать на 1,2,3,4 разделы выводы команд отличающиеся лишь циферками.
Не буду мурыжить дальше эту тему т.к. тут у меня пока не хватает академических знаний (буду изучать по ходу)
Ниже опишу другую ситуацию.


================================= Ниже новая тема =================================

Имею 4 диска по 2ТБ , но речь будет только о двух из них.
На этих двух дисках GPT разметка, и по два раздела
ls /dev/gpt/

Code: Select all

p1-241ARMMTS
p1-241B44GTS
p2-241ARMMTS
p2-241B44GTS
как вы понимаете, имя раздела состоит из его номера и диска.

Из этих Четырех разделов создал два пула:
(аналог RAID0) разряженный pool: altern-gpt1200g
и зеркальный pool: mirr-gpt1200g

Вывод zfs list

Code: Select all

NAME                        USED  AVAIL  REFER  MOUNTPOINT
altern-gpt1200g             753G   526G    19K  /mnt/altern-gpt1200g
altern-gpt1200g/mediateca   753G   526G   753G  /mnt/altern-gpt1200g/mediateca
mirr-gpt1200g               372G   783G    19K  /mnt/mirr-gpt1200g
mirr-gpt1200g/archive       371G   783G   371G  /mnt/mirr-gpt1200g/archive
mirr-gpt1200g/fs4sys        471K  1024M   471K  /mnt/mirr-gpt1200g/fs4sys
Пулы делал по инструкции с 4К кластером и после удалил "нупы"всё что этим шрифтом, это я дописал позже - прошу считать работой над ошибками описания проблемы. !Пулы собирались из разделов GPT, с указанием пути к разделу в /dev/gpt/... , без создания nup_ов
Разделы GPT были выравнены кластеру кратному 4К
разделы на диске 3

Code: Select all

nas4free: ~# zpool labelclear /dev/da3
 nas4free: ~# gpart create -s GPT /dev/da3
da3 created
 nas4free: ~# gpart add -t free-bsd -l p1-241B44GTS -a 4K -b 50  -s 1200G /dev/da3
gpart: Invalid argument
 nas4free: ~# gpart add -t freebsd-zfs -l p1-241B44GTS -a 4K -b 50 -s 1200G /dev/da3
da3p1 added
 nas4free: ~# gpart show /dev/da3
=>        34  3907029101  da3  GPT  (1.8T)
          34          22       - free -  (11K)
          56  2516582400    1  freebsd-zfs  (1.2T)
  2516582456  1390446679       - free -  (663G)

 nas4free: ~# gpart add -t freebsd-zfs -l p2-241B44GTS -a 4K -s 662G /dev/da3
da3p2 added
 nas4free: ~# gpart show /dev/da3
=>        34  3907029101  da3  GPT  (1.8T)
          34          22       - free -  (11K)
          56  2516582400    1  freebsd-zfs  (1.2T)
  2516582456  1388314624    2  freebsd-zfs  (662G)
  3904897080     2132055       - free -  (1.0G)
разделы на диске 2

Code: Select all

nas4free: ~# zpool labelclear /dev/da2
 nas4free: ~# gpart create -s GPT /dev/da2
da2 created
 nas4free: ~# gpart show /dev/da2
=>        34  3907029101  da2  GPT  (1.8T)
          34  3907029101       - free -  (1.8T)

 nas4free: ~# gpart add -t freebsd-zfs -l p1-241ARMMTS -a 4K -b 56 -s 1200G /dev/da2
da2p1 added
 nas4free: ~# gpart show /dev/da2
=>        34  3907029101  da2  GPT  (1.8T)
          34          22       - free -  (11K)
          56  2516582400    1  freebsd-zfs  (1.2T)
  2516582456  1390446679       - free -  (663G)

 nas4free: ~# gpart add -t freebsd-zfs -l p2-241ARMMTS -a 4K -s 662G /dev/da2
da2p2 added
 nas4free: ~# gpart show /dev/da2
=>        34  3907029101  da2  GPT  (1.8T)
          34          22       - free -  (11K)
          56  2516582400    1  freebsd-zfs  (1.2T)
  2516582456  1388314624    2  freebsd-zfs  (662G)
  3904897080     2132055       - free -  (1.0G)
[/color]
Все было ОК и zdb показывал ashift 12



(!) Встала задача смены компьютера и соответственно инсталляция NAS4FREE тоже новая. (при этом на старой и новой системах версия nas4free одинаковая 10.2.0.2 - Prester revision 1906 )
На старой системе экспортировал все пулы (zpool export) > выключил компьютер > перенес диски в другой-новый компьютер с nas4free >
Включил новый компьютер. При старте nas4free пулы автоматом были импортированы НО!...
но пулы на gpt имеют следующий статус "One or more devices are configured to use a non-native block size"
nas4free: ~# zpool status

Code: Select all

  pool: altern-gpt1200g
 state: ONLINE
status: One or more devices are configured to use a non-native block size.
        Expect reduced performance.
action: Replace affected devices with devices that support the
        configured block size, or migrate data to a properly configured
        pool.
  scan: none requested
config:

        NAME                STATE     READ WRITE CKSUM
        altern-gpt1200g     ONLINE       0     0     0
          gpt/p2-241ARMMTS  ONLINE       0     0     0  block size: 512B configured, 4096B native
          gpt/p2-241B44GTS  ONLINE       0     0     0  block size: 512B configured, 4096B native

errors: No known data errors

  pool: mirr-gpt1200g
 state: ONLINE
status: One or more devices are configured to use a non-native block size.
        Expect reduced performance.
action: Replace affected devices with devices that support the
        configured block size, or migrate data to a properly configured
        pool.
  scan: none requested
config:

        NAME                  STATE     READ WRITE CKSUM
        mirr-gpt1200g         ONLINE       0     0     0
          mirror-0            ONLINE       0     0     0
            gpt/p1-241ARMMTS  ONLINE       0     0     0  block size: 512B configured, 4096B native
            gpt/p1-241B44GTS  ONLINE       0     0     0  block size: 512B configured, 4096B native
И тут я пока в ступоре - на диски ни чего не пишу, буду искать решение - позволяющее вернуть использование 4K без потери данных(без пересоздания пулов)
Если у кого то есть совет, или действенное руководство - прошу, опишите его ибо ночь темна и полна ужаса у меня пока нет решения

Re: ZFS на разделах GPT

Posted: 08 Nov 2015 13:32
by MikeMac
start wrote: Пулы делал по инструкции с 4К кластером и после удалил "нупы"
zdb показывал ashift 12
Не оч верю в чудеса.

Code: Select all

zdb | grep ashift
в студию, плиз

А заодно -

Code: Select all

uname -a
zpool history 

Re: ZFS на разделах GPT

Posted: 08 Nov 2015 13:54
by start
zdb | grep ashift

Code: Select all

            ashift: 9
            ashift: 9
            ashift: 9
            ashift: 12
т.к. в системе 4 диска (на двух есть зеркальный пул wd2t-mirr), предыдущий вывод не очень информативный, поэтому полный:
zdb

Code: Select all

altern-gpt1200g:
    version: 5000
    name: 'altern-gpt1200g'
    state: 0
    txg: 622775
    pool_guid: 17776563145731519749
    hostid: 910059550
    hostname: 'nas4free.local'
    vdev_children: 2
    vdev_tree:
        type: 'root'
        id: 0
        guid: 17776563145731519749
        children[0]:
            type: 'disk'
            id: 0
            guid: 3489878547209911077
            path: '/dev/gpt/p2-241ARMMTS'
            phys_path: '/dev/gpt/p2-241ARMMTS'
            whole_disk: 1
            metaslab_array: 37
            metaslab_shift: 32
            ashift: 9
            asize: 710812368896
            is_log: 0
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 14772276702531142477
            path: '/dev/gpt/p2-241B44GTS'
            phys_path: '/dev/gpt/p2-241B44GTS'
            whole_disk: 1
            metaslab_array: 34
            metaslab_shift: 32
            ashift: 9
            asize: 710812368896
            is_log: 0
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
mirr-gpt1200g:
    version: 5000
    name: 'mirr-gpt1200g'
    state: 0
    txg: 607684
    pool_guid: 15270087529047170876
    hostname: ''
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 15270087529047170876
        children[0]:
            type: 'mirror'
            id: 0
            guid: 611262538117176820
            metaslab_array: 34
            metaslab_shift: 33
            ashift: 9
            asize: 1288485470208
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 12250053146930875508
                path: '/dev/gpt/p1-241ARMMTS'
                phys_path: '/dev/gpt/p1-241ARMMTS'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 8252644147772816328
                path: '/dev/gpt/p1-241B44GTS'
                phys_path: '/dev/gpt/p1-241B44GTS'
                whole_disk: 1
                create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
wd2t-mirr:
    version: 5000
    name: 'wd2t-mirr'
    state: 0
    txg: 472181
    pool_guid: 2744409211717078721
    hostname: ''
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 2744409211717078721
        children[0]:
            type: 'mirror'
            id: 0
            guid: 14139383143497001706
            metaslab_array: 34
            metaslab_shift: 34
            ashift: 12
            asize: 2000394125312
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 16341555174013437377
                path: '/dev/ada3'
                phys_path: '/dev/ada3'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 11591316611048637454
                path: '/dev/ada2'
                phys_path: '/dev/ada2'
                whole_disk: 1
                create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
uname -a

Code: Select all

FreeBSD nas4free.local 10.2-RELEASE-p5 FreeBSD 10.2-RELEASE-p5 #0 r289200M: Tue Oct 13 00:54:46 CEST 2015     root@dev.nas4free.org:/usr/obj/nas4free/usr/src/sys/NAS4FREE-amd64  amd64
zpool history

Code: Select all

History for 'altern-gpt1200g':
2015-09-29.23:38:51 zpool create -m /mnt/altern-gpt1200g altern-gpt1200g /dev/gpt/p2-241ARMMTS /dev/gpt/p2-241B44GTS
2015-09-29.23:41:28 zfs create -o utf8only=on altern-gpt1200g/mediateca
2015-10-01.20:37:27 zpool import -d /dev -f -a
2015-11-08.12:31:52 zpool export altern-gpt1200g
2015-11-08.12:42:45 zpool export altern-gpt1200g
2015-11-08.13:52:37 zpool import -d /dev -f -a
2015-11-08.14:21:46 zpool export altern-gpt1200g
2015-11-08.14:22:04 zpool import altern-gpt1200g

History for 'mirr-gpt1200g':
2015-09-29.23:37:04 zpool create -m /mnt/mirr-gpt1200g mirr-gpt1200g mirror /dev/gpt/p1-241ARMMTS /dev/gpt/p1-241B44GTS
2015-09-30.22:34:45 zfs create -o utf8only=on mirr-gpt1200g/archive
2015-10-01.11:44:11 zfs create mirr-gpt1200g/fs4sys
2015-10-01.11:45:18 zfs set reservation=1Gb mirr-gpt1200g/fs4sys
2015-10-01.11:46:47 zfs set quota=1Gb mirr-gpt1200g/fs4sys
2015-10-25.22:04:34 zpool import -d /dev -f -a
2015-10-27.18:42:56 zpool import -d /dev -f -a
2015-10-31.22:57:52 zpool import -d /dev -f -a
2015-11-07.19:04:16 zpool import -d /dev -f -a
2015-11-08.12:42:10 zpool export mirr-gpt1200g

Re: ZFS на разделах GPT

Posted: 08 Nov 2015 22:42
by MikeMac
Как я понимаю, вас волнуют пулы
altern-gpt1200g и mirr-gpt1200g
zdb на обоих дисках страйпа показывает ashift 9
zpool history показывает, что создавали вы его без всяких nop

по зеркалу - один vdev, как и положено. И он с ashift 9
из истории - тоже никаких следов nop устройств

поэтому утверждение
Пулы делал по инструкции с 4К кластером и после удалил "нупы"
считаю ошибочным

Что делать. В принципе, если это что-то временное - то можно жить и так. Ну чуть медленнее будет - зато места немного больше. Только не забивайте такой пул более чем на 95% - будет многократное снижение скорости.

Если это часть чего-то надолго - то
1) Зеркало придётся точно развалить, изменить ashift на vdev зеркале или raidz нельзя. Данные куда-то бекапить. При создании зеркала достаточно одному из дисков указать nop с правильным сектором. Но можно и обоим.

2) Страйп можно попытаться обмануть.
- создать раздел точно того же размера
- дать на него nop с 4K сектором
- сделать на этот nop реплейс с одного из разделов страйпа.
- на освободившемся разделе делать nop с 4K сектором
- повторять, пока не останутся только только устройства с ashift 12
- экспортировать, убить нопы, импортировать

PS Я не очень понимаю - вроде 10 версия FreeBSD достаточно умная, чтобы сразу делать пулы с ashift 12. Вы точно не на девятке это всё делали в ночь с 29 на 30 октября?

Re: ZFS на разделах GPT

Posted: 16 Nov 2015 13:55
by start
MikeMac wrote:zpool history показывает, что создавали вы его без всяких nop
Уважаемый MikeMac - ты прав!
Действительно, я создавал пулы по новой инструкции - без создания нуп. И после этого ashift на пулах был равен =12
_На текущий момент я просто скопировал все с пулов altern-gpt1200g и mirr-gpt1200g на резервный диск и пересоздал эти пулы (с обязательным labelclear).
MikeMac wrote:PS Я не очень понимаю - вроде 10 версия FreeBSD достаточно умная, чтобы сразу делать пулы с ashift 12. ...
Действительно! вот что интересного заметил с пулом wd2t-mirr
Изначально его я создавал из веб-морды 9ой версии, и потом у него я удалил нупы ( запутал всех в своём первоначальном коменте, за что извиняюсь)
при этом до экспорта zdb на этом пуле wd2t-mirr показывал 9
А после импорта, на пуле wd2t-mirr ashift стал = 12! , что по факту очень здорово!

Code: Select all

wd2t-mirr:
    version: 5000
    name: 'wd2t-mirr'
    state: 0
    txg: 472181
    pool_guid: 2744409211717078721
    hostname: ''
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 2744409211717078721
        children[0]:
            type: 'mirror'
            id: 0
            guid: 14139383143497001706
            metaslab_array: 34
            metaslab_shift: 34
            ashift: 12
            asize: 2000394125312
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 16341555174013437377
                path: '/dev/ada3'
                phys_path: '/dev/ada3'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 11591316611048637454
                path: '/dev/ada2'
                phys_path: '/dev/ada2'
                whole_disk: 1
                create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
Видимо есть нюансы при экспорте/импорте пулов на GPT (или на файлах) – возможно из за того что ZFS их понимает не_как_блочные_устройства

Re: ZFS на разделах GPT

Posted: 16 Nov 2015 18:36
by MikeMac
start wrote:Изначально его я создавал из веб-морды 9ой версии, и потом у него я удалил нупы
IMHO эти слова - 100% гарантия того, что пул создавался на nop устройствах. Что, в свою очередь, на 99.9% что nop были 4K и, соответсвенно, ashift и был и есть 12. Насколько я знаю, у vdev изменить ashift невозможно.

Re: ZFS на разделах GPT

Posted: 18 Nov 2015 21:27
by sergey1878
Блин, читал и не мог оторваться. Не понял ничего...... Лихо закрутили: и автор и уважаемый гуру. Почище Конан Дойля.
Можно простым языком: а зачем весь этот геморой?

Re: ZFS на разделах GPT

Posted: 19 Nov 2015 22:35
by MikeMac
sergey1878 wrote:а зачем весь этот геморой?
Ну, в первом посте камрад start так излагает свой путь и рыбку съесть и на ней же прокатиться
Вот такой "дешевый" способ сделать на двух дисках условнонадежное хранилище для архива, и большой_2TB диск для торрентов
То есть две половинки под зеркало, две - под старайп. Извратом попахивает, конечно, но ни УК на законами физики не запрещено ;)