Страница 1 из 1

В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-05 0:36:58
SiAl
Попал на общие грабли, после zpool import/export пропал /dev/gpt и с ним все метки. Как видно ниже система с gptid успешно перешла на diskid
Было:
ls /dev/gpt
gptboot0 swap0
gpart show -l ada0
=> 34 156299308 ada0 GPT (75G)
34 1024 1 gptboot0 (512K)
1058 8388608 2 swap0 (4.0G)
8389666 147909676 3 zfs0 (71G)
glabel list | grep -E 'Geom|Name'
Geom name: ada0p1
1. Name: gpt/gptboot0
1. Name: ada0p1
Geom name: ada0p1
1. Name: gptid/3962b058-8d8d-11e3-8873-bcaec598a128
1. Name: ada0p1
Geom name: ada0p2
1. Name: gpt/swap0
1. Name: ada0p2
Стало:
ll /dev/diskid/
total 1
dr-xr-xr-x 2 root wheel 512B 4 мар 15:59 ./
dr-xr-xr-x 10 root wheel 512B 4 мар 15:59 ../
crw-r----- 1 root operator 0x86 4 мар 15:59 DISK-9PS013ZV
crw-r----- 1 root operator 0x91 4 мар 15:59 DISK-9PS013ZVp1
crw-r----- 1 root operator 0x92 4 мар 15:59 DISK-9PS013ZVp2
crw-r----- 1 root operator 0x93 4 мар 15:59 DISK-9PS013ZVp3
glabel list | grep -E 'Geom|Name'
Geom name: ada0
1. Name: diskid/DISK-9PS013ZV
1. Name: ada0
gpart show -l ada0
gpart: No such geom: ada0.
gpart show -lp diskid/DISK-9PS013ZV
=> 34 156299308 diskid/DISK-9PS013ZV GPT (75G)
34 1024 diskid/DISK-9PS013ZVp1 gptboot0 (512K)
1058 8388608 diskid/DISK-9PS013ZVp2 swap0 (4.0G)
8389666 147909676 diskid/DISK-9PS013ZVp3 zfs0 (71G)
gpart list | egrep 'Name|label'
1. Name: diskid/DISK-9PS013ZVp1
label: gptboot0
2. Name: diskid/DISK-9PS013ZVp2
label: swap0
3. Name: diskid/DISK-9PS013ZVp3
label: zfs0
1. Name: diskid/DISK-9PS013ZV
freebsd-version
10.0-RELEASE
Заранее извиняюсь за вопросы, но кабы знать что именно искать, может их и не возникло бы.
Главное - как вернуть назад? Не нашел вариантов кроме как с CD работать. Но раз все это незаметно произошло, то есть подозрение, что просто существует какой нить параметр переключающий режимы?
1) как просмотреть какой установлен загрузчик, какие прописаны настройки загрузки?
2) diskid - каждый раз дает новые номера и на них ориентироваться не стоит?
3) Как понимаю следующие параметры отвечают за создание при загрузке /dev/gpt/(GPT labels) и /dev/gptid/(GPT IDs) соответственно?
sysctl -a | grep -E kern.geom.label.gptid.enable\|kern.geom.label.gpt.enable
kern.geom.label.gpt.enable: 1
kern.geom.label.gptid.enable: 1
Что тогда отвечает в системе за то какой из них работает?
4) Как избежать подобного в будущем?
5) Как вообще правильно настроить диски чтобы их можно легко было в случае чего поднять на другой системе без дополнительных плясок с бубном?
6) Есть подозрение, что такое поведение как то связано с последним zpool import-ом. Просто теперь без второго пула дисков система не грузится, как будто все настройки загрузчика теперь на втором пуле.

Re: В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-05 11:09:35
guest
# man glabel

Код: Выделить всё

     This GEOM class also provides volume label detection for file systems.
     Those labels cannot be set with glabel, but must be set with the appro-
     priate file system utility, e.g. for UFS the file system label is set
     with tunefs(8).  Currently supported file systems are:

           o   UFS1 volume names (directory /dev/ufs/).
           o   UFS2 volume names (directory /dev/ufs/).
           o   UFS1 file system IDs (directory /dev/ufsid/).
           o   UFS2 file system IDs (directory /dev/ufsid/).
           o   MSDOSFS (FAT12, FAT16, FAT32) (directory /dev/msdosfs/).
           o   CD ISO9660 (directory /dev/iso9660/).
           o   EXT2FS (directory /dev/ext2fs/).
           o   REISERFS (directory /dev/reiserfs/).
           o   NTFS (directory /dev/ntfs/).

     Support for partition metadata is implemented for:

           o   GPT labels (directory /dev/gpt/).
           o   GPT UUIDs (directory /dev/gptid/).
если верхнее внимательно почитаете, все встанет на свои места:

имена томов ufs: (newfs/tunefs -L volname) - /dev/ufs/names
ufs filesystems IDs: /dev/ufsid
gpt label'ы для партиций и дисков (glabel/gpart -l) : /dev/gpt/names
gpt uuid для них: /dev/gptid/names
diskid - disk ident via geom label: /dev/diskid/names

Код: Выделить всё

disable autogenerate ufsid(/dev/ufsid), gptid(/dev/gptid), diskid(/dev/diskid):

kern.geom.label.ufsid.enable=0
kern.geom.label.gptid.enable=0
kern.geom.label.disk_ident.enable=0

disable autogenerate ufs volname (/dev/ufs), gpt label (/dev/gpt):
kern.geom.label.ufs.enable=0
kern.geom.label.gpt.enable=0
взависимости от того что и как Вы создавали и какие лейблы использовали, нужны соответствующие действия,
например посмотреть что будет если отключить автогенерацию disk_ident или gptid (или и то и другое в 0)
Аккуратно смотреть что в zpool status перед тем как делать export/import.

ps. Для disk_ident вроде описание в man еще не добавили.

Re: В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-05 13:58:34
SiAl
взависимости от того что и как Вы создавали и какие лейблы использовали, нужны соответствующие действия
Ничегошеньки не создавал. Система автоматом ставилась на один диск с ZFZboot, потом для тестов подцепил zpool созданный в nas4free. Все работало, хотя я обратил внимание, что swap перестал цепляться, но не до него было. А тут с vimage пришлось таки ядро переконфигурить и вот тут вылезла проблема. Устанавливается ядро, перезагрузка - все работает, а вот следующая перезагрузка выдает отсутствие zpool/zroot. Тогда то и разобрался что произошла смена gpt меток на gptid. Помимо это появился вопрос, что же блин меняться может в /boot/kernel/? Потому как повторная установка ядра опять дает возможность загрузиться ОДИН раз.

Re: В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-05 19:51:02
SiAl
Посмотрел чужой лог как bsdinstall разбивал диски и устанавливал загрузчик
/tmp/bsdinstall_log

Код: Выделить всё

gpart create -s gpt "$disk"
	ada0 created
gpart add -l gptboot$index -t freebsd-boot -s 512k "$disk"
	ada0p1 added
gpart bootcode -b "/boot/pmbr" -p "/boot/gptzfsboot" -i 1 "$disk"
	bootcode written to ada0
gpart add -l swap$index -t freebsd-swap "$disk"
	ada0p2 added
gpart add -l zfs$index -t freebsd-zfs -s ${partsize}b "$disk"
	ada0p3 added
printf "$FSTAB_FMT" "/dev/gpt/swap$index" "none" "swap" "sw" "0" "0" >> "$BSDINSTALL_TMPETC/fstab"
Так чем же можно просмотреть загрузочную запись, что именно там сейчас указано?
отладочная информация по классу GEOM с изменением kern.geom.debugflags не выводится. Не знаю как еще можно проследить почему метки не срабатывают ((

Re: В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-06 17:02:19
SiAl
Потратил время на эксперименты с gpart и zpool и могу с уверенностью сказать метки дисков при импорте не теряются. По крайней мере на виртуальных дисках. При импорте можно пользоваться явным указанием куда собственно импортировать.

Код: Выделить всё

 zpool import -d /dev/gpt		# /dev/gptid или /dev/diskid
Заодно выяснил, что у виртуальных дисков нет diskid, а только у физических. Глянул более внимательно на запись diskid/DISK-9PS013ZVp3 и стало ясно, что циферки 9PS013ZV серийный номер, что наверно даже лучше чем GPT метки - точно не изменятся. А в fstab поменял запись метки на /dev/diskid/DISK-9PS013ZVp2 и все ок. Попозже еще с хардом поэкспериментирую и листинг выложу.

Остается выяснить что же определяет какой вариант из /dev/gpt /dev/gptid или /dev/diskid используется.

Re: В который раз про zpool import/export и /dev/gpt

Добавлено: 2014-03-14 17:54:41
SiAl
Был зеркальный пул на ada[23], из-за импорта которого все и началось, его и переделывал. Предварительно были очищены разметки - zpool destroy и gpart destroy. Все чисто, артефактов от старой разметки не выявлено.
1) Создание ZFS зеркала на GPT разделах, листинг подробный с отображением промежуточной информации для общей картины
По идее при использовании полной емкости диска, разметку надо делать на меньшем из дисков и клонировать на второй
Единственная проблема при этом перечитать диск /dev/ada3 чтобы появился лэйбл photo1 в /dev/gpt - ни наю как ((

Код: Выделить всё

#gpart create -s gpt /dev/ada2
#gpart add -l photo0 -t freebsd-zfs /dev/ada2
#gpart backup /dev/ada2 | gpart restore /dev/ada3
#gpart modify -i 1 -l photo1 dev/ada3
Но у меня диски идентичны, так что просто создаю разделы на каждом диске.

Код: Выделить всё

# Создание разметки диска, со схемой GPT
gpart create -s gpt /dev/ada2				
	ada2 created
gpart create -s gpt /dev/ada3				#
	ada3 created
gpart show -lp /dev/ada[23]
	=>        34  1953525101  ada2  GPT  (932G)
		  34  1953525101        - free -  (932G)

	=>        34  1953525101  ada3  GPT  (932G)
		  34  1953525101        - free -  (932G)
# Создание партиции на весь диск на дисках /dev/ada[23], c меткой photo[01]
gpart add -l photo0 -t freebsd-zfs /dev/ada2
	ada2p1 added
gpart add -l photo1 -t freebsd-zfs /dev/ada3		#
	ada3p1 added
gpart show -lp /dev/gpt/photo[01]
	=>        34  1953525101    ada2  GPT  (932G)
		  34  1953525101  ada2p1  photo0  (932G)

	=>        34  1953525101    ada3  GPT  (932G)
		  34  1953525101  ada3p1  photo1  (932G)
ls /dev/gpt/photo*
	/dev/gpt/photo0  /dev/gpt/photo1
# Создание геометрии c 4k размером блока
gnop create -S 4096 /dev/gpt/photo[01]			
ls /dev/gpt/photo*
	/dev/gpt/photo0      /dev/gpt/photo0.nop  /dev/gpt/photo1      /dev/gpt/photo1.nop
# Создание пула zphoto на двух дисках с GPT партициями
zpool create -m /jail/homenas/shared/photo -f zphoto mirror /dev/gpt/photo[01].nop	
zdb -C zphoto |egrep ashift\|path
                ashift: 12
                    path: '/dev/gpt/photo0.nop'
                    phys_path: '/dev/gpt/photo0.nop'
                    path: '/dev/gpt/photo1.nop'
                    phys_path: '/dev/gpt/photo1.nop'
zfs list |grep photo
	zphoto               528K   913G   144K  /jail/homenas/shared/photo
zpool export zphoto					#
gnop destroy /dev/gpt/photo[01].nop			#
ls /dev/gpt/photo*
	/dev/gpt/photo0  /dev/gpt/photo1
zpool import
	   pool: zphoto
	     id: 3576859738913535329
	  state: ONLINE
	 action: The pool can be imported using its name or numeric identifier.
	 config:

		zphoto                      ONLINE
		  mirror-0                  ONLINE
		    gpt/photo0              ONLINE
		    diskid/DISK-9VPBWNRHp1  ONLINE
2) diskid/DISK-9VPBWNRHp1 вот оно! Вместо GPT метки - DISKID, ладно, далее импорт и просмотр состояния

Код: Выделить всё

pool import zphoto
zpool status zphoto
	  pool: zphoto
	 state: ONLINE
	  scan: none requested
	config:

		NAME                        STATE     READ WRITE CKSUM
		zphoto                      ONLINE       0     0     0
		  mirror-0                  ONLINE       0     0     0
		    gpt/photo0              ONLINE       0     0     0
		    diskid/DISK-9VPBWNRHp1  ONLINE       0     0     0

	errors: No known data errors
zdb -C zphoto | grep path
                    path: '/dev/gpt/photo0'
                    phys_path: '/dev/gpt/photo0'
                    path: '/dev/diskid/DISK-9VPBWNRHp1'
                    phys_path: '/dev/diskid/DISK-9VPBWNRHp1'
gpart show -lp /dev/ada[23]
	=>        34  1953525101    ada2  GPT  (932G)
		  34  1953525101  ada2p1  photo0  (932G)

	gpart: No such geom: /dev/ada3.
Как видно все хорошо, за исключением gpart: No such geom: /dev/ada3., хорошо экспорт и проверка GPT

Код: Выделить всё

zpool export zphoto
gpart show -lp /dev/ada[23]
	=>        34  1953525101    ada2  GPT  (932G)
		  34  1953525101  ada2p1  photo0  (932G)

	=>        34  1953525101    ada3  GPT  (932G)
		  34  1953525101  ada3p1  photo1  (932G)
Все на месте же! Тут закрадывается подозрение, что старые ZFS данные по дискам еще хранятся в системе
Ниже привожу варианты возможного импорта пула по diskid/gptid/gpt

Код: Выделить всё

zpool import -d /dev/diskid/
	   pool: zphoto
	     id: 3576859738913535329
	  state: ONLINE
	 action: The pool can be imported using its name or numeric identifier.
	 config:

		zphoto                      ONLINE
		  mirror-0                  ONLINE
		    diskid/DISK-9VPBWVHQp1  ONLINE
		    diskid/DISK-9VPBWNRHp1  ONLINE
zpool import -d /dev/gptid/
	   pool: zphoto
	     id: 3576859738913535329
	  state: ONLINE
	 action: The pool can be imported using its name or numeric identifier.
	 config:

		zphoto                                          ONLINE
		  mirror-0                                      ONLINE
		    gptid/c8a982f3-aab0-11e3-8ec1-bcaec598a128  ONLINE
		    gptid/fc7afe50-aab0-11e3-8ec1-bcaec598a128  ONLINE
zpool import -d /dev/gpt/
	   pool: zphoto
	     id: 3576859738913535329
	  state: ONLINE
	 action: The pool can be imported using its name or numeric identifier.
	 config:

		zphoto          ONLINE
		  mirror-0      ONLINE
		    gpt/photo0  ONLINE
		    gpt/photo1  ONLINE
3) gpt/photo1 ONLINE Что и нужно! Дале импорт с явным указанием предпочтения /dev/gpt/

Код: Выделить всё

zpool import -d /dev/gpt/ 3576859738913535329
zdb -C zphoto | grep path
                    path: '/dev/gpt/photo0'
                    phys_path: '/dev/gpt/photo0'
                    path: '/dev/gpt/photo1'
                    phys_path: '/dev/gpt/photo1'
Вот и славно, но далее то что за...

Код: Выделить всё

gpart show -lp /dev/ada[23]
	=>        34  1953525101    ada2  GPT  (932G)
		  34  1953525101  ada2p1  photo0  (932G)

	gpart: No such geom: /dev/ada3.
# Как так когда
geom disk list ada2 ada3
	Geom name: ada2
	Providers:
	1. Name: ada2
	   Mediasize: 1000204886016 (932G)
	   Sectorsize: 512
	   Mode: r1w1e3
	   descr: ST31000524AS
	   lunid: 5000c5002ded4e1f
	   ident: 9VPBWVHQ
	   fwsectors: 63
	   fwheads: 16

	Geom name: ada3
	Providers:
	1. Name: ada3
	   Mediasize: 1000204886016 (932G)
	   Sectorsize: 512
	   Mode: r1w1e3
	   descr: ST31000524AS
	   lunid: 5000c5002de918dd
	   ident: 9VPBWNRH
	   fwsectors: 63
	   fwheads: 16
#Не понятно, но хотя бы GPT метки работают
gstat -f gpt/photo\[01\]
	 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
	    0      0      0      0    0.0      0      0    0.0    0.0| gpt/photo1
	    0      0      0      0    0.0      0      0    0.0    0.0| gpt/photo0
Тут окончательно становится понятно, что данные в системе остались от предыдущей конфигурации пула и дополнительно рождается теория что при создании старого пула zpool create zphoto mirror были явно указаны /dev/ad[01]p1 и так как система работала с флешки - их нумерация была 0 и 1 При импорте пула в систему где уже был /dev/ad0p1 - идентификация дисков сменилась на DISKID. Все логично! Для обновления GEOM-а осталось ребутнуться, ну или кто знает как - перечитать дисковую подсистему.

Код: Выделить всё

shutdown -r now
gpart show -lp /dev/ada[23]
	=>        34  1953525101    ada2  GPT  (932G)
		  34  1953525101  ada2p1  photo0  (932G)

	=>        34  1953525101    ada3  GPT  (932G)
		  34  1953525101  ada3p1  photo1  (932G)
gstat -f ada\[23\]
dT: 1.023s  w: 1.000s  filter: ada[23]
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0      0      0      0    0.0      0      0    0.0    0.0| ada2
    0      0      0      0    0.0      0      0    0.0    0.0| ada3
    0      0      0      0    0.0      0      0    0.0    0.0| ada2p1
    0      0      0      0    0.0      0      0    0.0    0.0| ada3p1
Все как и ожидалось! Параметры GEOM в норме!