Gptzfsboot error 128

I'm running 11.1-RELEASE (I think, will double check when I have access to machine) with zfs as the root system in mirror-0 configuration. There are three SSDs as part of the mirror that were partitioned automatically during installation: each has three partitions labelled gptboot, freebsd-swap...

  • #1

I’m running 11.1-RELEASE (I think, will double check when I have access to machine) with zfs as the root system in mirror-0 configuration. There are three SSDs as part of the mirror that were partitioned automatically during installation: each has three partitions labelled gptboot<n>, freebsd-swap<n>, freebsd-zfs<n>.

In addition, there is one other SSD with a single UFS partition, used for storage. I later added two more SSDs with the intention of using them as additional storage (single UFS partition each). When I did that FreeBSD wouldn’t boot:

gptzfsboot: error 128 lba <some sector number>

I thought that the partitions got renumbered (despite plugging in the new SSDs in the highest SATA port numbers), so I booted from a rescue CD, I enabled kern.geom.label.gptid.enable="1" in

loader.conf

, I imported the zroot zfs pool specifying the device directory as

/etc/gptid

and replaced

/boot/zfs/zpool.cache

with the newly created cache from the rescue CD. I confirmed the filesystem names as given by zpool status were now the GPT UIDs rather than the disk-partition numbers before exporting the zpool and rebooting. Same error during boot.

If I simply unplug the SSDs it boots fine. I’m starting to think it has nothing to do with the zfs pool. What’s going on?

EDIT:
So after a lot of experimenting I figured out what the problem was. It looks like FreeBSD was probing all disks and was throwing the error when one of them didn’t have a valid partition table. Don’t know why it would do that rather than ignore it, as the Live CD does. All I had to do was boot the Live CD and format the new disks, then my installation booted happily.

Last edited: May 7, 2018

  • #2

I have the same problem (tried both freeNAS [11.2-U4 though 11.3-RC2] and freeBSD 12.1), however nothing helps to get rid of the gptzfsboot: error 128 lba errors. The system boots eventually but the boot takes cca N x 7 minutes (there are several gptzfsboot: error 128 lba some_sector_number lines per disk and each takes some time), where N is the number of data disks where gptzfsboot is trying to analyze.

Is there a way to tell gptzfsboot NOT to analyze other disks?

According to gptzfsboot manpage:
«gptzfsboot looks for ZFS device labels on all visible disks and in discovered supported partitions for all supported partition scheme types. The search starts with the disk from which gptzfsboot itself was loaded. Other disks are probed in BIOS defined order. After a disk is probed and gptzfsboot determines that the whole disk is not a ZFS pool member, the individual partitions are probed in their partition table order. Currently GPT and MBR partition schemes are supported. With the GPT scheme, only partitions of type freebsd-zfs are probed. The first pool seen during probing is used as a default boot pool.
The filesystem specified by the bootfs property of the pool is used as a default boot filesystem. If the bootfs property is not set, then the root filesystem of the pool is used as the default
«.

From the above I assume omitting the phase where gptzfsboot tries to probe other disks would solve the problem. (The installer CD boots the system just fine. Also, the system works just fine, including the data disks, once it has booted).

Anyway, should this be reported as a bug?

January 12, 2017

Last time (a few years back) when I tried to install FreeBSD with zfs on my HP Pavilion dm3-1130us notebook, I got the following error message during the boot:
gptzfsboot: error 66 lba 48
error 72
gptzfsboot: error 66 lba 0
gptzfsboot: error 66 lba 1
gptzfsboot: No ZFS pools located, can't boot.

I searched around for a solution but couldn’t find any so I gave up on FreeBSD.

Years after, meaning recently, I gave FreeBSD 11-RELEASE a new shot, hoping that zfs boot up problem was resolved by now. *BAM* I got the same error after installing it with zfs. For desperation, I searched again and again. Tried building partition table manually, updating bootcode after the installation, etc… But nothing worked… I even tried TrueOS (FreeBSD with zfs and more) but got the same problem after the installation. Sob…

But finally, I found a solution (sort of)!!!

Here is what I tried. I don’t think the installation medium makes difference but I used a USB boot image.

Disclaimer:
The information in this site is the result of my researches in the Internet and of my experiences. This information below is solely used for my purpose and may not be suitable for others.

Step 1) Download the FreeBSD memstick image. Find the latest release version (as of this writing, it’s 11.0) from the freebsd.org ftp site.

Step 2) dd the memstick image to a USB memory stick. The USB device name could be different depending on which OS you are using, but for FreeBSD, I read somewhere that said you need to use FreeBSD to make a bootable USB memory stick. So, I installed FreeBSD 11-RELEASE with UFS and ran the command:
# dd if=FreeBSD-11.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync

Step 3)Reboot with the USB memory stick inserted. Leave the USB memory stick attached to the notebook, rebooted the system. FreeBSD will boot and it’ll present with three options; Install, Shell or Live CD. I chose Install.

Step 4) Install the system but at the partitioning, choose Auto ZFS:

Here is the zfs configuration:

Step 5) Go through the rest of the installation until it asks you for the last manual configuration. Select Yes to update gptzfsboot and bootdcode:

Step 6) Get the updated gptzfsboot_hp from the FreeBSD Bugzilla. The url is listed in Allan Jude at Comment 29. If you are not configured its networking, enable dhcp client:
# dhclient re0

Then download gptzfsboot_hp by fetching from the location
# fetch --no-verify-peer http://trooper.hml3.scaleengine.net/gptzfsboot_hp

Step 7) Rename gptzfsboot_hp to gptzfsboot and move it to /boot.

Step 8) Update the bootcode. Make sure you are using /boot/pmbr for the GPT partition type:
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

Step 9) Make sure the partition scheme and it’s for the ada0 disk. Occasionally, its disk ID is changed to something like diskid/DISK-…. If this happens, use that disk name/id instead of ada0 at the Step 8.

Step 10) Reboot the system.

After the reboot, you would see the prompt for GELI Passphrase. However, this solution solved the boot up problem with ZFS. I still see the error 66 with lba:
gptzfsboot: error 66 lba 48
error 72
gptzfsboot: error 66 lba 0
gptzfsboot: error 66 lba 1
GELI Passphrase for disk0p3:

After entering GELI passphrase correctly, voilà, you’ll see the login prompt!

That’s all!
-gibb

Модераторы: Trinity admin`s, Free-lance moderator`s

Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

FreeBSD не грузится с Promise SX6000

При установке с CD-ROM FreeBSD 5.2-RELEASE распознает этот рейд контроллер как pst0 Вся установка проходит нормально. А вот грузиться отказывается… Пишет об ошибке чтения с lba0… Помогите плз… Что мне с этим делать-то?


Аватара пользователя

setar

Site Admin
Site Admin
Сообщения: 1990
Зарегистрирован: 22 авг 2002, 12:03
Откуда: St. Petersburg

Сообщение

setar » 17 фев 2004, 14:08

Вопрос сформулирован неполносью, на него невозможно грамотно ответить.
На каком этапе происходит сбой загрузки:
1 прошёл ли загрузчик
2 загрузилось ли ядро
3 подгрузился ли драйвер pst из initrd (и есть ил он там вообще)
4 и что именно пишет система


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 17 фев 2004, 14:50

setar писал(а):Вопрос сформулирован неполносью, на него невозможно грамотно ответить.
На каком этапе происходит сбой загрузки:
1 прошёл ли загрузчик

Перестает грузиться сразу после появления первой крутящейся палочки, т.е. еще до появления каких либо надписей…
На черном экране в левом верхнем углу появляется знак — и мигающий курсор. Длительное время ничего не меняется, а потом появляется сообщение

error 128 lba 0

FreeBsd/i386 boot

Default: 0: ad (0,a) /boot/loader
boot:

После boot: стоит курсор и можно что-то написать…
Больше ничего добавить к сожалению не могу…
Но у меня сложилось что FreeBSD пытается грузиться не с рейда а с ad0…


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 17 фев 2004, 18:02

Vicont писал(а):

error 128 lba 0

FreeBsd/i386 boot

Default: 0: ad (0,a) /boot/loader
boot:

После boot: стоит курсор и можно что-то написать…
Больше ничего добавить к сожалению не могу…
Но у меня сложилось что FreeBSD пытается грузиться не с рейда а с ad0…

скорее всего так. Под рукой нет 5-ой ветки.
Покажите:
ls -l /dev/pst*
cat /boot/loader.conf

Есть вариант что на /dev/pst0s1 нет MBR/не коректный MBR
Что если сказать:
fdisk -B -b /boot/boot0 /dev/pst0


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 17 фев 2004, 18:31

art писал(а):

Vicont писал(а):

скорее всего так. Под рукой нет 5-ой ветки.
Покажите:
ls -l /dev/pst*
cat /boot/loader.conf

Есть вариант что на /dev/pst0s1 нет MBR/не коректный MBR
Что если сказать:
fdisk -B -b /boot/boot0 /dev/pst0

При попытке что-то написать она воспринимает все написанное как путь к loader…
Но загрузить ессно ничего не может…
Попробую все это проделать после загрузки с virtual fs CD-ROM


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 17 фев 2004, 18:54

Vicont писал(а):

При попытке что-то написать она воспринимает все написанное как путь к loader…
Но загрузить ессно ничего не может…
Попробую все это проделать после загрузки с virtual fs CD-ROM

Ну, это конечно же.
С CD получаете консоль и, если pst вкомпилен в KERNEL.generic можно попробовать.

Вообще советую прочесть вот это:
http://www.freebsd.org/doc/en_US.ISO885 … locks.html

идеально расписано. По крайней мере будет ясно, на каком этапе проблема.
______________
FreeBSD HandBook — rulezzz


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 17 фев 2004, 19:22

идеально расписано. По крайней мере будет ясно, на каком этапе проблема.
______________
FreeBSD HandBook — rulezzz

Судя по написанному проблемма на 2 этапе… Уж больно занкомый скриншот… ;)
А pst в /kernel имеется… и подмонтировать
mount /dev/ad0s1a /mnt
получается…
и каталог /mnt/boot
на месте и внутри у него все есть…


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 18 фев 2004, 11:46

Vicont писал(а):
Судя по написанному проблемма на 2 этапе… Уж больно занкомый скриншот… ;)
А pst в /kernel имеется… и подмонтировать
mount /dev/ad0s1a /mnt
получается…
и каталог /mnt/boot
на месте и внутри у него все есть…

Так так…

Ещё раз прошу:
1) ls -l /dev/pst*
ls -l /dev/ad*
2) как сконфигурирован контроллер с RAID или без, сколько дисков и т.д.,
3) показать вывод
bsdlabel ad0
bsdlabel pst0
(или disklabel, не помню как в 5.х ветке)

без это трудно помочь.


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 18 фев 2004, 12:42

Ещё раз прошу:
1) ls -l /dev/pst*
ls -l /dev/ad*
2) как сконфигурирован контроллер с RAID или без, сколько дисков и т.д.,
3) показать вывод
bsdlabel ad0
bsdlabel pst0
(или disklabel, не помню как в 5.х ветке)

без это трудно помочь.
Пока дам конфиг RAIDа остальное чуть позже выложу…
OS Selection : Other OS
Driver Version IxWorks 1.1 FCS Ver: 0201
Promise IDE HDM : Ver : 77RM
Promise RAID ISM Ver : 77RM

Number of Channels : 6
Processor Memory:128

Array NO 1
Type: Raid 5
Total Drv : 5x120Gb
Capacity 479999
Status: Functional
Stripe Block: 64kb
Gigabyte Boundary : OFF

Вообще-то там стоит 6 винтов по 120GB
но один пришлось отключить т.к. FreeBSD ругался на IDE Disk размером больше 512 GB еще на стадии установки говорил что-то про Disk Geometry но я так и не понял чего он от меня хочет… Поэтому просто один диск из массива выкинул и заново перестроил этот массив с вышеуказанными параметрами. Правда я этот массив уже перестраивал раз так 10… И устанавливать пробовал разные версии фрей от 4.8 до 5.2… Благо канал у нас толстый заркало фрей лежит у нашего провайдера и траффик до провайдера у нас бесплатны… То я собственно накачал от туда кучу обазов CD-ROM и всех по очереди пробовал ставить. На сказевом рейде при установке 5.2 была похожая беда, но вылечилась она сама собой начальной установкой 4.8 а потом установкой поверх нее 5.2


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 18 фев 2004, 13:25

Ещё раз прошу:
1) ls -l /dev/pst*
ls -l /dev/pst *
Дает:
crw-r—— 1 root operator 4, 14 Feb 18 17:35 /dev/pst0
crw-r—— 1 root operator 4, 16 Feb 18 17:35 /dev/pst0s1
crw-r—— 1 root operator 4, 17 Feb 18 17:35 /dev/pst0s1a
crw-r—— 1 root operator 4, 18 Feb 18 17:35 /dev/pst0s1b
crw-r—— 1 root operator 4, 19 Feb 18 17:35 /dev/pst0s1c
crw-r—— 1 root operator 4, 20 Feb 18 17:35 /dev/pst0s1d
crw-r—— 1 root operator 4, 21 Feb 18 17:35 /dev/pst0s1e
crw-r—— 1 root operator 4, 22 Feb 18 17:35 /dev/pst0s1f

ls -l /dev/ad*

No such file or directory
3) показать вывод
bsdlabel ad0
No such file or directory
bsdlabel pst0 (или disklabel, не помню как в 5.х ветке)
дает
No valid label found
bsdlabel /dev/pst0s1:
дает
# /dev/pst0s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 20971520 0 4.2BSD 2048 16384 28552
b: 4194304 20971520 swap
c: 937489077 0 unused 0 0 # «raw» part, don’t edit
d: 41943040 25165824 4.2BSD 2048 16384 28552
e: 41943040 67108864 4.2BSD 2048 16384 28552
f: 828437173 109051904 4.2BSD 2048 16384 28552

без это трудно помочь.[/quote]


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 18 фев 2004, 13:54

Полагаю так (рассуждаю вслух):
1) загрузка была проведена с CD, корень смонитрован в md0
2) pst0 найден, slice pst0s1 существует, его разделы видны

Что делать?

1) отключить в БИВИСЕ оба IDE контроллера (совсем)

2)попробовать с CD:
fdisk -B -b /boot/boot0 /dev/pst0

3) перазагрузиться уже с pst. Если не грузится — посмотреть, как выглядит надпись:

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/kernel
boot:

или

>> FreeBSD/i386 BOOT
Default: 0:pst(0,a)/kernel
boot:


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 18 фев 2004, 15:10

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/kernel
boot:

Именно так… Ничего не изменилось…
У меня кажется созрело лечение этого трабла…
Сейчас попробую поставить фрю на обычный IDE , а потом сделаю
dd if=/dev/ad0 of=/dev/pst0
Посмотрим как она тогда запоет!!!


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 18 фев 2004, 15:22

Vicont писал(а):>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/kernel
boot:

Ну дык! Вот и ответ!

никакие dd не помогут. Нужно выбрать руками pst(0,a)

Она же пишет, что будет грузить ядро с ad0 !


Vicont

Junior member
Сообщения: 17
Зарегистрирован: 17 фев 2004, 13:33

Сообщение

Vicont » 18 фев 2004, 15:43

Она же пишет, что будет грузить ядро с ad0 !

А как это сделать?[/quote]


Аватара пользователя

art

free-lance moderator
Сообщения: 653
Зарегистрирован: 15 май 2003, 11:25
Откуда: SPb

Сообщение

art » 18 фев 2004, 15:51

на первой «палочке» жмешь ESC и после
boot:

пишешь
0:pst(0,a)/boot/loader

это, помоему зашито прямо в загрузчике (при инсталляции), как поменять — нужно читать handbook


Вернуться в «Серверы — ПО, Unix подобные системы»


Перейти

  • Серверы
  • ↳   Серверы — Конфигурирование
  • ↳   Конфигурации сервера для 1С
  • ↳   Серверы — Решение проблем
  • ↳   Серверы — ПО, Unix подобные системы
  • ↳   Серверы — ПО, Windows система, приложения.
  • ↳   Серверы — ПО, Базы Данных и их использование
  • ↳   Серверы — FAQ
  • Дисковые массивы, RAID, SCSI, SAS, SATA, FC
  • ↳   Массивы — RAID технологии.
  • ↳   Массивы — Технические вопросы, решение проблем.
  • ↳   Массивы — FAQ
  • Майнинг, плоттинг, фарминг (Добыча криптовалют)
  • ↳   Proof Of Work
  • ↳   Proof Of Space
  • Кластеры — вычислительные и отказоустойчивые ( SMP, vSMP, NUMA, GRID , NAS, SAN)
  • ↳   Кластеры, Аппаратная часть
  • ↳   Deep Learning и AI
  • ↳   Кластеры, Программное обеспечение
  • ↳   Кластеры, параллельные файловые системы
  • Медиа технологии, и цифровое ТВ, IPTV, DVB
  • ↳   Станции видеомонтажа, графические системы, рендеринг.
  • ↳   Видеонаблюдение
  • ↳   Компоненты Digital TV решений
  • ↳   Студийные системы, производство ТВ, Кино и рекламы
  • Инфраструктурное ПО и его лицензирование
  • ↳   Виртуализация
  • ↳   Облачные технологии
  • ↳   Резервное копирования / Защита / Сохранение данных
  • Сетевые решения
  • ↳   Сети — Вопросы конфигурирования сети
  • ↳   Сети — Технические вопросы, решение проблем
  • Общие вопросы
  • ↳   Обсуждение общих вопросов
  • ↳   Приколы нашего IT городка
  • ↳   Регистрация на форуме

This page is a good quick reference for typical operational procedures for running FreeBSD on ZFS.

Contents

  • 1 Fixing
    • 1.1 Inspection commands
    • 1.2 Boot problems
    • 1.3 Replacing a disk
    • 1.4 Adding a vdev
    • 1.5 Recovering from other issues
  • 2 Creating a zpool
  • 3 Installing/Restoring FreeBSD on ZFS
  • 4 Send/Receive
  • 5 Notes on filesystem hierarchies
  • 6 Adding gmirror for swap
  • 7 Wizardly tricks
  • 8 See Also

Fixing

Inspection commands

  • zpool status
  • top (look at ARC)
  • iftop (pkg install iftop)
  • gstat
  • iostat -xz 1
  • vmstat 1
  • systat -ifstat
  • systat -vmstat
  • zpool iostat 1
  • gpart show [-l]
  • trafshow (pkg install trafshow)
  • procstat
  • Show block alignment: zdb -C | fgrep ashift
  • See also http://www.brendangregg.com/blog/2015-03-06/performance-analysis-bsd.html
  • «camcontrol identify ada0» can help identify disks. Camcontrol has lots of other commands too; read its man page.
  • smartctl (pkg install smartmontools) can inspect SMART data and run the disk’s SMART tests. For example, «smartctl -a /dev/ada0» will list all SMART info.

Boot problems

If boot fails, boot from installation media and try the following:

  • Check that the zpool’s bootfs property is set correctly. The command for this example is «zpool set bootfs=tank/. tank».
  • Reload gptzfsboot (not zfsboot or another) in the freebsd-boot partition on each disk. The command is «gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i ? ada0» replacing ? with the partition number of the freebsd-boot partition (not the ZFS partition, or you’ll toast it!).
  • Check /boot/loader.conf specifies zfs_load=»YES». If the kernel boots but can’t find the root filesystem, this is likely missing.
  • Check /etc/rc.conf specifies zfs_enable=»YES». If the system boots but doesn’t mount any filesystems besides root, this is likely missing.
  • DO NOT set recordsize > 128 KB on the filesystem containing /boot. (At least on FreeBSD 11.0 or before.) It will seem to work at first, until some day after you run freebsd-upgrade and new boot files are written with big blocks. Then gptzfsboot will fail with the error «blocks larger than 128k are not supported». To fix: boot from installation media, import the zpool, use «zfs set recordsize=128K tank/.» to stop the effects on new files, and then rewrite the startup files with: «cp -PRp /boot/ /boot-new/ && mv -i /boot /boot-broken && mv -i /boot-new /boot && rm -rf /boot-broken». It may be surprising that rewriting these files actually gets the boot loader working reliably again even if there are larger blocks remaining outside of /boot, but it worked experimentally at least a few times.
  • Try rebuilding zpool.cache. FreeBSD 10 no longer requires zpool.cache to boot from zfs. However, this file is where the kernel remembers the machine’s unique hostid, which zpools to import, and their devices. If someone fiddled with things, it could be goofed up. The easiest approach is to remove /boot/zfs/zpool.cache and reboot. This will automatically create a new zpool.cache with the root zpool imported, after which you’ll need to import any additional zpools. Naturally, you’ll need to prevent any services that depend on the additional zpools from starting until they’re imported. On FreeBSD 9, or if that doesn’t work, try the manual method: boot from installation media and use something like «zpool import -f -o altroot=/mnt -o cachefile=/tmp/zpool.cache tank && cp /tmp/zpool.cache /mnt/boot/zfs/».

Replacing a disk

  • Prepare the replacement disk with gpart as shown below.
  • Replace the disk using the command «zpool replace».

Adding a vdev

Adding a vdev is easy enough. You should consider maintaining 4 KB blocks, in case you later replace a disk built on 512 byte sectors with a disk built on 4 KB sectors. This operation cannot be reversed, so be sure you type in right the first time; be especially careful to place the «mirror» or «raidz» keyword correctly.

# sysctl vfs.zfs.min_auto_ashift=12
# zpool add tank mirror /dev/gpt/tank.zfs0 /dev/gpt/tank.zfs1

Recovering from other issues

  • To access a zpool from the FreeBSD Live CD. If you have a failing disk, using «-o readonly=on» will prevent the system from automatically trying to resilver or fix problems. This will improve your odds of copying data off of a failing magnetic disk before it’s completely inaccessible.
zpool import -f -o altroot=/mnt [-o readonly=on] tank
  • To rename a zpool. For example, you may need to do this if you put the zpool in another machine for recovery, and it has the same name as the new machine’s root pool. The command for renaming may appear temporary, but it is permanent. «guid» can be the old name of the pool if it is unique.
zpool import  # To list importable pools.
zpool import [-o altroot=/mnt] guid newname
  • To reguid a pool. You may need to do this if you cloned a pool by splitting mirrors or cloning disks with dd. The symptom is that if two zpools with the same GUID are in the same system, zpool import won’t show the disks because it’ll think they’re part of the pool that’s already imported.

Creating a zpool

  • You may need to remove a software RAID formerly configured by the hardware or BIOS, because FreeBSD supports these and locks the host devices, resulting in a rather mysterious «Operation not permitted» error. The commands you’re looking for which will destroy data are:
# graid list -a
Geom name: Intel-4829475d
...
# graid delete Intel-4829475d
  • Prepare each disk’s partitions and boot loader. Notes:
    • Nothing stops you from configuring swap on a zpool, but doing so leads to deadlocks.
    • If you don’t put any swap space at the beginning, then leave a little unused space at the beginning. It can be handy if boot code grows, etc. A generous 256 MB gap is 0.2% of a 100 GB disk so don’t be stingy.
    • Keep the ZFS partitions a bit smaller than your disk in case you RMA a disk and get back one slightly smaller. It happens. Use the slack space for swap.
    • Put swap before zfs partitions. For example, if you later need to create a special /boot partition to work around a cranky BIOS that can’t read beyond 2 TB, you will find it handy to have swap there to steal space from. Also it makes swap space slightly faster.
    • Name partitions uniquely or you’ll have trouble referencing them by name.
    • Creating the GPT with -n 152 pads the table so the first partition starts at a 4k boundary, regardless of whether the sector size is 512 bytes, 4k, or 4k reporting 512.
    • According to https://wiki.freebsd.org/ZFSTuningGuide , «The caveat about only giving ZFS full devices is a solarism that doesn’t apply to FreeBSD. On Solaris write caches are disabled on drives if partitions are handed to ZFS. On FreeBSD this isn’t the case.»
# gpart create -s gpt -n 152 ada0
# gpart add -i 1 -t freebsd-boot -l tank.boot0 -s 1090 ada0
# gpart add -i 2 -t freebsd-swap -l tank.swap0 -b 524288 -s 64G ada0
# gpart add -i 3 -t freebsd-zfs -l tank.zfs0 ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

# gpart create -s gpt -n 152 ada1
# gpart add -i 1 -t freebsd-boot -l tank.boot1 -s 1090 ada1
# gpart add -i 2 -t freebsd-swap -l tank.swap1 -b 524288 -s 64G ada1
# gpart add -i 3 -t freebsd-zfs -l tank.zfs1 ada1
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
  • zpool create
    • At this point, you should consider using the format for 4 KB blocks rather than the sector size of your disks, which may be 4KB or 512 bytes. Using larger blocks than the disk’s native sector size is fine, but the reverse incurs a nasty performance penalty. If you later replace (possibly expanding) a disk that uses 512 byte sectors with a newer disk that uses 4 KB sectors, the zpool’s performance will suffer. Worse, once a vdev is added to a zpool, either with «zpool create» or «zpool add», its block size cannot be changed and the vdev cannot be removed; the only recourse is to create a replacement zpool and copy the data to it. To force 4 KB blocks, use vfs.zfs.min_auto_ashift=12, shown below. This sysctl only affects the «zpool create» and «zpool add» commands, not existing vdevs or zpools. Use zdb to examine existing pools.
    • For example, to create a simple mirror:
# sysctl vfs.zfs.min_auto_ashift=12
# zpool create -o altroot=/mnt -o autoexpand=on -O mountpoint=/ -O canmount=off -O atime=off -O compression=lz4 -O recordsize=1M -O redundant_metadata=most -O com.sun:auto-snapshot=true [-O aclmode=passthrough] [-O aclinherit=passthrough-x] [-O dedup=on] tank mirror /dev/gpt/tank.zfs0 /dev/gpt/tank.zfs1

or single disk:

# sysctl vfs.zfs.min_auto_ashift=12
# zpool create -o altroot=/mnt -o autoexpand=on -O mountpoint=/ -O canmount=off -O atime=off -O compression=lz4 -O recordsize=1M -O redundant_metadata=most -O com.sun:auto-snapshot=true [-O aclmode=passthrough] [-O aclinherit=passthrough-x] [-O dedup=on] tank /dev/gpt/tank.zfs0

or raidz, multiple mirrors, etc, see man zpool.

Installing/Restoring FreeBSD on ZFS

  • First arrange your root and descendent filesystems. See notes below on notes about filesystem hierarchies.
# zfs create -o refquota=8G -o refreservation=8G -o recordsize=128K tank/.
# zfs create -o refquota=64G -o refreservation=64G tank/mysql
# zfs create -o refquota=64G -o refreservation=64G tank/pgsql
# zfs create tank/home
  • Now that these are (automatically) mounted, load the data. If you’re restoring from a backup or cloning another machine, now would be the time to populate the files. Use «tar|nc» or see below for «zfs send|zfs receive». To do a fresh installation, extract the distfiles from the live CD as follows:
[for FreeBSD 10]
# tar -C /mnt -xpf /usr/freebsd-dist/base.txz
# tar -C /mnt -xpf /usr/freebsd-dist/doc.txz
# tar -C /mnt -xpf /usr/freebsd-dist/games.txz
# tar -C /mnt -xpf /usr/freebsd-dist/kernel.txz
# tar -C /mnt -xpf /usr/freebsd-dist/lib32.txz
[Add ports.txz and/or src.txz if needed.]

[for FreeBSD 11]
# tar -C /mnt -xpf /usr/freebsd-dist/base.txz
# tar -C /mnt -xpf /usr/freebsd-dist/doc.txz
# tar -C /mnt -xpf /usr/freebsd-dist/kernel.txz
# tar -C /mnt -xpf /usr/freebsd-dist/lib32.txz
[Add ports.txz src.txz tests.txz if needed.]
  • Check/fix permissions on each mountpoint, especially /tmp, /var/tmp, etc.
# chmod 1777 /mnt/tmp /mnt/var/tmp /mnt/var/tmp/vi.recover
  • Prepare boot config:
# cat >> /mnt/boot/loader.conf << EOF
zfs_load="YES"
#vfs.zfs.arc_max=64M  # Enable on small-memory or 32-bit systems.
#vfs.zfs.vdev.cache.size=8M  # Enable on small-memory or 32-bit systems.
EOF
# cat >> /mnt/etc/rc.conf << EOF
zfs_enable="YES"
EOF
  • If you use swap space, add it to /etc/fstab now. Almost certainly one should encrypt swap by adding .eli to the device names as follows:
# cat >> /mnt/etc/fstab << EOF
/dev/gpt/tank.swap0.eli none swap sw 0 0
/dev/gpt/tank.swap1.eli none swap sw 0 0
EOF
  • Make zpool bootable.
# zpool set bootfs=tank/. tank
  • Reboot.

Send/Receive

To get all preceding snapshots:

zfs send -R sourcetank@sent | zfs receive -Fv desttank

To get only the specified snapshot:

zfs send -p sourcetank@sent | zfs receive -Fv desttank

Send across a network with nc:

zfs send -R sourcetank@sent | nc -N -l 12345
nc -v othermachine 12345 | zfs receive -Fv desttank

Notes on filesystem hierarchies

Every zpool begins with one filesystem which has the same name as the zpool and cannot be deleted or renamed or replaced. The filesystems in the zpool are named in a hierarchy starting with this first filesystem. This hierarchy is not the same as the hierarchy of mountpoints, but is related. The mountpoint for the special first filesystem defaults to the name of it (under /). The default mountpoint of descendent filesystems is the mountpoint of the parent, with the name of the child appended (slash separated). Explicitly changing the mountpoint of a parent will change the default mountpoints of its children. Explicitly changing the name of a parent which is using its default mountpoint will change the parent’s mountpoint along with the default mountpoints of its children. Most properties are inherited, and inheritance always follows the filesystem hierarchy, not the mountpoint hierarchy; after all, mountpoints are merely properties to be inherited (with the special treatment of appending). The filesystem hierarchy cannot be sparse, unlike the mountpoint hierarchy; to create tank/var/log, you must create tank/var first. However, you can create tank/var-log and explicitly set its mountpoint property to /var/log while leaving /var as a simple directory in /. Perhaps it’s surprising that filesystems can be renamed into other positions in the filesystem hierarchy, and as you might expect, doing so changes the properties that they inherited. The command «zfs get» will let you view which properties are inherited and which are local (meaning explicitly set).

The zpool’s special first filesystem has awkward restrictions. There is no command to clear its contents in bulk, and one cannot create a replacement and swap it in. The example creates a descendent filesystem for / and sets the first filesystem’s canmount property to off (which is a special property that is not inherited). Thereafter, its existence has no effect except to seed inherited properties of descendents. Although the name of the special first filesystem cannot be changed, the example changes its mountpoint to /. This way the mountpoint of tank/mysql defaults to /mysql as desired. The example shows a clever trick of naming a filesystem «tank/.». This is a perfectly valid name and will result in its inherited mountpoint being «/.» which is canonicalized to «/». Because the resulting root mountpoint inherits its mountpoint property rather than setting it explicitly, this trick allows you to use «zfs rename -u» and «reboot» to swap it with another filesystem, if you are brave.

One may desire configuring additional, perhaps for external storage arrays. On the additional pools, it is helpful to again avoid using the default first filesystem for storage, because of its awkward restrictions. A convenient pattern is to configure additional zpools similarly, by setting the first filesystem’s mountpoint explicitly to «/» and setting its canmount property to off. Thereafter, any descendent filesystems will infer a reasonable mountpoint based on their name prefixed with «/».

Traditional reasons for separating filesystems are not relevant. Mostly, separating filesystems in the traditional patterns is make-work, and merely impedes the mv command. However, there are new reasons for separate filesystems. You may want to separate a directory to make it easier to back up or replicate: incremental changes can be collected without scanning the whole file hierarchy by using «zfs send -i», which operates only on an entire filesystem. One can guarantee free space for a filesystem («zfs set refreservation») and limit the size of a filesystem («zfs set refquota»). Properties such as compression, deduplication, and noatime are set on a whole filesystem. Snapshots are created, destroyed, and rollbacked in units of whole filesystems. Rollbacking the root filesystem without killing all stateful services would cause weird problems, but being able to snapshot and rollback mysql’s storage directory can be quite helpful when setting up mysql replication, or keeping checkpoints from which one can replay transaction logs. Keeping periodic snapshots is a fantastic tool, but some data sets are not appropriate to snapshot at all. For example, a filesystem storing Bacula volumes must avoid having snapshots to avoid running out of space, because the volumes are fully rewritten over the course of normal operation, with the expectation that the overwritten space can be reclaimed immediately. If housing jails, putting each jail in its own filesystem is handy for cloning, sending, and rollbacking whole jails without affecting the other jails or the host machine.

Other quick notes:

  • Compression usually speeds up IO. lz4 is the best option for most zpools, with good worst-cases for uncompressible data that are faster than spinning rust.
  • quota is inherited by descendents in the ZFS hierarchy and snapshots, but refquota is not.
  • reservation includes descendents in the ZFS hierarchy in the space reservation, but refreservation does not.
  • ZFS uses NFSv4 ACLs. If you don’t care about ACLs, omit aclmode or aclinherit above; this way chmod will remove ACLs.
  • If you add cache devices, consider diddling logbias for logs and databases?
  • utf8only=on seems like a good idea, but I’m unaware of potential consequences. (It specifies to reject filenames that are invalid UTF-8 encodings.)
  • Log devices (also «intent log») store critical data and should be mirrored; cache devices (also «L2ARC») are disposable and cannot be mirrored.

Adding gmirror for swap

  • In this scenario, you probably want to reduce the size of your swap partitions slightly so that if you RMA a disk and get a smaller replacement, you don’t have to swapoff, destroy, and rebuild the whole gmirror.
gpart resize -i xxx -s 16G ada0
  • Run:
kldload geom_mirror
gmirror label -F -v tank.swap /dev/gpt/tank.swap0 /dev/gpt/tank.swap1
  • Add to /etc/fstab:
/dev/mirror/tank.swap.eli none swap sw 0 0
  • Add to /boot/loader.conf:
geom_mirror_load="YES"
  • To activate until reboot:
geli onetime -d /dev/mirror/tank.swap
swapon -a

Note: Before 10.1, gmirror lacked the «destroy» subcommand. As far as I can tell, to remove the last device from a mirror, one had to reboot into single user mode or without the geom_mirror module loaded and clear the last sector of each partition involved.

Wizardly tricks

  • Quick aliases:
alias zfsget='zfs get -t filesystem,volume -s local,received,temporary'
alias zfslist='zfs list -o name,mounted,mountpoint,avail,usedbydataset,usedbysnapshots,refcompressratio'
alias zfslistl='zfs list -o name,mounted,canmount,mountpoint,avail,usedbydataset,usedbysnapshots,refcompressratio,refquota,refreservation'
  • Use com.sun:auto-snapshot=true with `pkg add zfstools` to maintain rolling snapshots. Add to /etc/crontab:
0 * * * * root lockf -kst0 /var/run/zfs-auto-snapshot_hourly.lockf zfs-auto-snapshot -ku hourly 168
0 6 * * * root lockf -kst0 /var/run/zfs-auto-snapshot_daily.lockf zfs-auto-snapshot -ku daily 28
0 6 * * Mon root lockf -kst0 /var/run/zfs-auto-snapshot_weekly.lockf zfs-auto-snapshot -ku weekly 53
  • Here’s a dandy parlor trick to specify your GPT labels without fiddling with gpart add. For example, consider a 3.6 TiB («4 TB») disk. (36/10 avoids a floating point result.)
printf "GPT 152n1 freebsd-boot $((o=40)) $((s=1090)) test.boot0n2 freebsd-swap $((o+=s)) $((s=1024**3/512*256)) test.swap0n3 freebsd-zfs $((o+=s)) $((1024**4/512*36/10-o)) test.zfs0n" | gpart restore -Fl ada0

See Also

  • https://wiki.freebsd.org/ZFSTuningGuide
  • http://www.b0rken.org/freebsd/install.html
  • https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/9.0-RELEASE
  • http://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSCachefiles
  • Oracle docs on NFSv4 ACLs
  • FreeBSD docs on NFSv4 ACLs
  • ZFS on root in Azure
Автор Сообщение

Заголовок сообщения: gpart create с 34 блока

СообщениеДобавлено: Сб 16 фев, 2019 12:42 am 

Не в сети



Зарегистрирован: Сб 14 янв, 2006 12:09 pm
Сообщения: 11

Добрый день,

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

рабочий диск разбит с 34 блока
root@test:~ # gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 128 1 freebsd-boot (64K)
162 8388608 2 freebsd-swap (4.0G)
8388770 3898640365 3 freebsd-zfs (1.8T)

На новом же диске сразу после gpart create -s GPT отступ выставляется в 40 блок
root@test:~ # gpart show ada1
=> 40 3907029088 ada1 GPT (1.8T)
40 3907029088 — free — (1.8T)

интернет пишет, что это автоматическое округление до 4кб, но это не очень помагает, старый же как-то был разбит с 34 :(

Рабочий диск
root@test:~ # diskinfo -v ada0
ada0
512 # sectorsize
2000398934016 # mediasize in bytes (1.8T)
3907029168 # mediasize in sectors
0 # stripesize
0 # stripeoffset
3876021 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
ST2000NM0033-9ZM175 # Disk descr.
… # Disk ident.
No # TRIM/UNMAP support
7200 # Rotation rate in RPM
Not_Zoned # Zone Mode

Новый диск
root@test:~ # diskinfo -v ada1
ada1
512 # sectorsize
2000398934016 # mediasize in bytes (1.8T)
3907029168 # mediasize in sectors
4096 # stripesize
0 # stripeoffset
3876021 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
HGST HUS726020ALE610 # Disk descr.
… # Disk ident.
No # TRIM/UNMAP support
7200 # Rotation rate in RPM
Not_Zoned # Zone Mode

Производители разные, параметры отличаются только значением stripesize, у нового установлено в 4К, возможно в этом причина? Как очистить это значение?

Если нет, то как разбить новый с 34 сектора? Менять диск на идентичный рабочему?

Признателен

Вернуться к началу

Профиль  

lifejoy

Заголовок сообщения: Re: gpart create с 34 блока

СообщениеДобавлено: Сб 16 фев, 2019 12:02 pm 

Не в сети



Зарегистрирован: Сб 14 янв, 2006 12:09 pm
Сообщения: 11

Попробовал через gpart backup ada0 -> restore ada1

root@test:~ # gpart restore -F ada1 <gpt123
gpart: start ’34’: Invalid argument

та же ошибка что и при работе с gpart из командной строки;

Проверил другие сервера, там есть диски с stripesize = 4096, у которых разметка начинается с 34 блока. Правда либо оба диска с stripesize = 4096, либо stripesize = 0, разнобоя нет.

Все разбития диска всегда делал через автоматический инсталлер.

Есть идеи?

Вернуться к началу

Профиль  

lavr

Заголовок сообщения: Re: gpart create с 34 блока

СообщениеДобавлено: Сб 16 фев, 2019 7:43 pm 

Не в сети



Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2501

lifejoy писал(а):

Попробовал через gpart backup ada0 -> restore ada1

root@test:~ # gpart restore -F ada1 <gpt123
gpart: start ’34’: Invalid argument

та же ошибка что и при работе с gpart из командной строки;

Проверил другие сервера, там есть диски с stripesize = 4096, у которых разметка начинается с 34 блока. Правда либо оба диска с stripesize = 4096, либо stripesize = 0, разнобоя нет.

Все разбития диска всегда делал через автоматический инсталлер.

Есть идеи?

Идеи чего?
Вопрос в чем? Или проблема в чем?

У Вас старый диск с sectorsize=512 байт, а новый с sectorsize=4096 байт(4K).
И что?

Самой важное условие описано в man gpart:

Код:

We then create a dedicated freebsd-boot partition to hold the second-
     stage boot loader, which will load the FreeBSD kernel and modules from a
     UFS or ZFS filesystem.  This partition must be larger than the bootstrap
     code (either /boot/gptboot for UFS or /boot/gptzfsboot for ZFS), but
     smaller than 545 kB since the first-stage loader will load the entire
     partition into memory during boot, regardless of how much data it
     actually contains.  We create a 472-block (236 kB) boot partition at
     offset 40, which is the size of the partition table (34 blocks or 17 kB)
     rounded up to the nearest 4 kB boundary.

boot партиция должна быть больше чем /boot/gptboot и /boot/gptzfsboot:

Код:

[joker]~ > ls -la /boot/gptboot
-r—r—r—  1 root  wheel  62810 18 дек.  16:19 /boot/gptboot
[joker]~ > ls -la /boot/gptzfsboot
-r—r—r—  1 root  wheel  108162 18 дек.  16:19 /boot/gptzfsboot
[joker]~ >

но меньше 545 kb чтобы загрзучик поместил ее целиком в память.

Вернуться к началу

Профиль  

lifejoy

Заголовок сообщения: Re: gpart create с 34 блока

СообщениеДобавлено: Пн 18 фев, 2019 12:08 am 

Не в сети



Зарегистрирован: Сб 14 янв, 2006 12:09 pm
Сообщения: 11

спасибо за совет, все решилось.

В чем была проблема — не получалось разбить новый диск также, как и старый.
Для чего — чтобы как минимум сделать размер раздела c zfs идентичный старому.
Неожиданная проблема — похоже, что c FreeBSD 11 увеличили размер /boot/gptzfsboot, файл перестал помещаться в 64К. Учитывая, что разбивку я делал еще в 10 версии OS, обновляясь в последствии до 11 через freebsd-update, сделать идентичными размеры freebsd-boot на обоих дисках не вышло. Но, как не странно, ребилд zfs пула прошел без проблем.

root@test:~ # gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 128 1 freebsd-boot (64K)
162 8388608 2 freebsd-swap (4.0G)
8388770 3898640365 3 freebsd-zfs (1.8T)

root@test:~ # gpart show ada1
=> 40 3907029088 ada1 GPT (1.8T)
40 1024 1 freebsd-boot (512K)
1064 8388608 2 freebsd-swap (4.0G)
8389672 3898639456 3 freebsd-zfs (1.8T)

root@test:~ # zpool status
pool: rpool
state: ONLINE
scan: resilvered 419G in 7h4m with 0 errors on Sun Feb 17 06:02:39 2019
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada1p3 ONLINE 0 0 0

errors: No known data errors

Вернуться к началу

Профиль  

lavr

Заголовок сообщения: Re: gpart create с 34 блока

СообщениеДобавлено: Пн 18 фев, 2019 1:18 am 

Не в сети



Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2501

lifejoy писал(а):

спасибо за совет, все решилось.

В чем была проблема — не получалось разбить новый диск также, как и старый.
Для чего — чтобы как минимум сделать размер раздела c zfs идентичный старому.
Неожиданная проблема — похоже, что c FreeBSD 11 увеличили размер /boot/gptzfsboot, файл перестал помещаться в 64К. Учитывая, что разбивку я делал еще в 10 версии OS, обновляясь в последствии до 11 через freebsd-update, сделать идентичными размеры freebsd-boot на обоих дисках не вышло. Но, как не странно, ребилд zfs пула прошел без проблем.

root@test:~ # gpart show ada0
=> 34 3907029101 ada0 GPT (1.8T)
34 128 1 freebsd-boot (64K)
162 8388608 2 freebsd-swap (4.0G)
8388770 3898640365 3 freebsd-zfs (1.8T)

root@test:~ # gpart show ada1
=> 40 3907029088 ada1 GPT (1.8T)
40 1024 1 freebsd-boot (512K)
1064 8388608 2 freebsd-swap (4.0G)
8389672 3898639456 3 freebsd-zfs (1.8T)

root@test:~ # zpool status
pool: rpool
state: ONLINE
scan: resilvered 419G in 7h4m with 0 errors on Sun Feb 17 06:02:39 2019
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada1p3 ONLINE 0 0 0

errors: No known data errors

Ваша проблема в том, что Вы не объясняете:
— что хотите сделать
— и как

Если сейчас можно сообразить что Вы хотели добавить
в rpool второй диск и преобразовать stripe в mirror, то
в первом письме, об этом ни слова.

ZFS легко позволит создать зеркало из дисков разного
объема, уменьшив до наименьшего из двух.

Дело в другом, теперь rpool офрмлен как mirror, но
он разбалансирован, ибо один диск с sectorsize=512,
другой с sectorsize=4k. А пул вероятно с ashift=512
ибо бы создан на диске с сектором 512b.

Посмотрите:
# sysctl vfs.zfs.min_auto_ashift

Если бы Вы исследовали работу rpool с одним диском:
# zpool iostat
и затем сравнили с результатами после преобразования
в mirror, думаю, были бы удивлены.

ps. Вы понимаете разницу в размере сектора диска и что
выравнивание влияет на производительность работы с FS?

Вернуться к началу

Профиль  

Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Яндекс.Метрика

Понравилась статья? Поделить с друзьями:
  • Gps test no fix как исправить
  • Gps data error dji phantom
  • Gprinter gp 2120t ошибка печати
  • Gpo error code 267
  • Gpio error 0025 что это