"Только безумец верит, что может изменить мир, - и потому меняет его." Стива Джобса

Установка ZFS на Gentoo

В ядре устанавливаем следующие параметры:

General Setup --->
GCC plugins --->
[ ] Randomize layout of sensitive kernel structures
Cryptographic API --->
<*> Deflate compression algorithm
Security options --->
[ ] Harden common str/mem functions against buffer overflows


проверяем параметры:

vim /usr/src/linux/.config

CONFIG_CRYPTO_DEFLATE=m
CONFIG_ZLIB_DEFLATE=y
CONFIG_ZLIB_INFLATE=y

Компелируем ядро:

make && make modules_install
make install
grub-mkconfig -o /boot/grub/grub.cfg

Прописываем в /etc/portage/package.accept_keywords:

echo "sys-fs/zfs-kmod ~amd64" >> /etc/portage/package.accept_keywords
echo "sys-fs/zfs ~amd64" >> /etc/portage/package.accept_keywords
(опционально):
echo "=sys-fs/zfs-kmod-9999 **" >> /etc/portage/package.accept_keywords
echo "=sys-fs/zfs-9999 **" >> /etc/portage/package.accept_keywords

Загружаем ZFS:

emerge -av sys-fs/zfs

Добавляем в уровень загрузки:

rc-update add zfs-import boot
rc-update add zfs-mount boot
rc-update add zfs-share default
rc-update add zfs-zed default

Для большинства настроек необходимы только первые два.
zfs-share предназначен для использования общих ресурсов NFS.
zfs-zed предназначен для ZFS Event Daemon, который обрабатывает замену диска через hotspares и уведомления о сбоях по электронной почте.
Для этого раскомментируем раздел «ZED_EMAIL_ADDR=""» и заполняем свой адрес электронной почты в файле /etc/zfs/zed.d/zed.rc
Для systemd:
Демон zfs монтирует пулы, просматривая файл /etc/zfs/zpool.cache. Для каждого пула, который необходимо автоматически установить демоном zfs, выполняем:

zpool set cachefile=/etc/zfs/zpool.cache ZFS-gentoo

Файл кеша можно отключить, установив cachefile = none. Это полезно для отказоустойчивых конфигураций, где пул всегда должен быть явно импортирован программным обеспечением для восстановления после сбоя.
Включаем службы, чтобы они автоматически запускались во время загрузки:

systemctl enable zfs.target
systemctl enable zfs-import-cache.service
systemctl enable zfs-mount.service
systemctl enable zfs-import.target
systemctl enable zfs-share.service
systemctl enable zfs-zed.service


ZFS on Linux использует алгоритм замены страницы ARC вместо алгоритма замены страницы, использованного другими файловыми системами. Это обеспечивает лучшую производительность. Реализация ARC в ZFS отличается от обычной тем, что объем памяти, используемой в качестве кэша, может варьироваться. Это позволяет памяти, используемой ARC, восстанавливаться, когда система находится под давлением памяти (через механизм сжатия ядра), и увеличиваться, когда у системы есть запасная память. Минимальный и максимальный объем памяти, выделенный для ARC, зависит от вашей системной памяти. Минимальный размер по умолчанию составляет 1/32 всей памяти или 64 МБ, в зависимости от того, что больше. Максимальное значение по умолчанию больше 1/2 системной памяти или 64 МБ.
Способ, которым Linux учитывает память, используемую ARC, отличается от памяти, используемой кешем страниц. В частности, память, используемая ARC, включена в «used», а не «cached» в выводе, используемом программой «free». Это никоим образом не препятствует освобождению памяти, когда системе не хватает памяти. Однако может сложиться впечатление, что ARC (и соответственно ZFS) будет использовать всю системную память, если будет предоставлена ​​такая возможность.
Минимальное и максимальное использование памяти ARC настраивается через zfs_arc_min и zfs_arc_max соответственно:

echo "options zfs zfs_arc_max=536870912" >> /etc/modprobe.d/zfs.conf

Второй способ находится в командной строке ядра, указав "zfs.zfs_arc_max = 536870912" (для 512 МБ).
Аналогичным образом, можно сделать для настройки zfs_arc_min.

Создаём пул raid z

из трёх дисков:

zpool create -f ZFS-gentoo raidz1 /dev/sdb /dev/sdc /dev/sdd

-f должно преодолеть «ошибку метки EFI».
-m точка монтирования пула. Если не указано, то пул будет подключен к /<pool>
из четырёх дисков:

zpool create -f ZFS-gentoo raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde

Advanced Format представляет собой новый формат диска, который изначально использует размер сектора 4096 байт, а не 512 байт. Чтобы поддерживать совместимость с унаследованными системами ZFS автоматически определит размер сектора диска, но это может привести к плохо выровненному доступу к диску, что значительно ухудшит производительность пула.
Свойство ashift было добавлено ​​в команду zpool. Оно позволяет явно назначать размер сектора, обычно при создании пула или добавлении vdev в пул. Значения варьируются от 9 до 16.
Значение по умолчанию 0, что означает, zfs должен автоматически определять размер сектора.
Это значение на самом деле является значением сдвига бит, поэтому значение 512 байтов равно 9 (2 ^ 9 = 512), тогда как значение для 4096 байт составляет 12 (2 ^ 12 = 4096).
Для использования пулом 4096 байт секторов при создания пула, запускаем:

zpool create -o ashift=12 ZFS-gentoo mirror sdb sdc

Для использования пулом 4096 байт секторов при добавлении vdev в пул, запускаем:

zpool add -o ashift=12 ZFS-gentoo mirror sdd sde

Создаём набор данных в zpool (например home):

zfs create ZFS-gentoo/home

Функция горячих запасных частей позволяет идентифицировать диски, которые могут быть использованы для замены неисправного или неисправных устройств в одном или нескольких пулах хранилищ.
Назначение устройства в качестве горячего резерва означает, что устройство не является активным устройством в пуле, но если активное устройство в пуле не работает, горячий резерв автоматически заменяет неисправное устройство.
Устройства могут быть назначены в качестве «горячих» запасных частей следующими способами,
когда пул создается:

zpool create ZFS-gentoo mirror /div/sdb /div/sdc spare /div/sdd /div/sde

или добавлением их в пул после создания пула:

zpool add ZFS-gentoo spare /div/sdd /div/sde

Горячие запасные части можно удалить из пула хранения:

zpool remove ZFS-gentoo /div/sde

В настоящее время команда zpool remove поддерживает только удаление устройств горячего резерва и устройств кэширования.
Горячий резерв нельзя удалить, если он в настоящее время используется пулом хранения.
Если физически заменить неисправное устройство активным запасным устройством, можно повторно активировать оригинальное устройство, используя команду zpool detach для отсоединения запасного.

Установка Gentoo на zfs

Создаём загрузочную флешку:
В linux с одного из зеркал сайта https://wiki.gentoo.org/wiki/User:Fearedbliss
загружаем "System Rescue", который включает ZFS.
Вставляем флешку и выполняем команды:

mkdir /tmp/iso
mount -o loop,ro sysresccd-X.X.X_zfs_X.X.X.iso /tmp/iso
/tmp/iso/usb_inst.sh

Откроется экран, на котором выбираем подключенный флеш-накопитель и запускаем.
Отмантируем и вынимаем флешку для использования.
Загружаемся с созданой флешки.

Разбиваем диск без поддержки efi: с поддержкой efi:
parted -a optimal /dev/sda parted -a optimal /dev/sda
(parted) mklabel gpt (parted) mklabel gpt
(parted) unit kb (parted) unit kb
(parted) mkpart primary 1024 3072 (parted) mkpart primary 1024 3072
(parted) name 1 grub (parted) name 1 grub
(parted) set 1 bios_grub on (parted) set 1 bios_grub on
(parted) mkpart primary 3072 134144 (parted) mkpart primary 3072 134144
(parted) name 2 boot (parted) name 2 esp
(parted) set 2 boot on (parted) set 2 boot on
(parted) mkpart primary 134144 -1 (parted) mkpart primary 134144 265216
(parted) name 3 rootfs (parted) name 3 boot
(parted) mkpart primary 265216 -1
(parted) name 4 rootfs
(parted) print (parted) print
(parted) q (parted) q
mkfs.fat -F32 /dev/sda2

Если прошивка материнской платы, настроенная для загрузки в BIOS / CSM , имеет проблему с загрузкой дисков с меткой GPT. Обходим эту проблему:

fdisk -t dos /dev/sda
Command (m for help): a
Command (m for help): w


Создаём pool:

zpool create -f -o ashift=12 -o cachefile= -O normalization=formD -m none -R /mnt/gentoo -d -o feature@async_destroy=enabled -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled -o feature@spacemap_histogram=enabled -o feature@enabled_txg=enabled -o feature@extensible_dataset=enabled -o feature@bookmarks=enabled rpool /dev/sda3 # для системы с efi /dev/sda4

Создание наборов данных zfs:

zfs create rpool/ROOT
zfs create -o mountpoint=/ rpool/ROOT/gentoo
zfs create -o mountpoint=/home rpool/HOME


Для grub безопаснее создавать отдельный zpool, у которого отключены все флаги функций:

zpool create -f -d -o ashift=12 -o cachefile= -m /boot -R /mnt/gentoo boot /dev/sda2 # для системы с efi /dev/sda3

Создаём swap zvol:

zfs create -o sync=always -o primarycache=metadata -o secondarycache=none -b 4k -V 4G -o logbias=throughput rpool/swap
mkswap -f /dev/zvol/rpool/swap
swapon /dev/zvol/rpool/swap


Проверяем pool:

zpool status
zfs list


Проверяем и установливаем время:

date

Подготовка к chroot:

cd /mnt/gentoo

Загружаем stage3-amd64:

wget http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-*.tar.xz

Распаковываем:

tar xpf stage3-amd64-*.tar.xz

Для системы с efi добавляем:

mkdir boot/efi
mount /dev/sda2 boot/efi


Копируем zpool cache:

mkdir etc/zfs
cp /etc/zfs/zpool.cache etc/zfs


Копируем настройки сети:

cp -L /etc/resolv.conf etc/

Устанавливаем необходимые устройства:

mount --types=proc /proc proc
mount --rbind /dev dev
mount --rbind /sys sys


Изменение корневого каталога для перехода в новую среду:

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"


Копируем конфигурацию portage по умолчанию:

cp /usr/share/portage/config/repos.conf /etc/portage/

Переходим к "Настройка Portage."
Переходим к "Настройка переменной USE."
Настроить дату:

ln -sf /usr/share/zoneinfo/Europe/Volgograd /etc/localtime
date ММДДччммГГГГГ


Переходим к "Установка исходных кодов ядра."
Ядро компилируем с учотом "Установка ZFS на Gentoo".
Создать символическую ссылку mtab:

ln -sf /proc/self/mounts /etc/mtab

Создаём fstab:

nano /etc/fstab

/dev/sda2 /boot/efi vfat noauto 1 2 # добавляем для системы с efi
/dev/zvol/rpool/swap none swap sw 0 0

Пароль root:

passwd

Переходим к "Установка ZFS на Gentoo."
Для включения зависимостей, необходимых при загрузки пула, содержащего rootfs, добавляем USE - флаг:

echo "sys-fs/zfs rootfs" >> /etc/portage/package.use

Включаем поддержку ZFS в GRUB:

echo "sys-kernel/genkernel ~amd64" >> /etc/portage/package.accept_keywords
echo "sys-boot/grub ~amd64" >> /etc/portage/package.accept_keywords
echo "sys-boot/grub libzfs" >> /etc/portage/package.use


Устанавливаем bootfs:

zpool set bootfs=rpool/ROOT/gentoo rpool

Переходим к "Установка GRUB 2."
Проверяем, может ли GRUB определить тип файловой системы:

grub-probe /boot

должно выдать 'zfs'.

Для системы с efi:

grub-probe /boot/efi

должно выдать 'fat'.


Указываем grub, что используем ZFS, и том для загрузки.

nano /etc/default/grub
GRUB_CMDLINE_LINUX="dozfs real_root=ZFS=rpool/ROOT/gentoo"


Устанавливаем genkernel:

emerge --ask sys-kernel/genkernel

Настраивается конфигурация genkernel в /etc/genkernel.conf.
Настраиваем initramfs:

genkernel --install --zfs --bootloader=grub --disklabel --callback="emerge @module-rebuild" initramfs
grub-mkconfig -o /boot/grub/grub.cfg


Перезагружаем компьютер:

exit
reboot


WARNING... для устранения возникающих ошибок, запускаем систему в корне ZFS, с помощью аварийного загрузочного диска "System Rescue":

zpool import -f -R /mnt/gentoo rpool
zpool import -f -R /mnt/gentoo boot

Команды zfs

Опция -f предписывает принудительное выполнение данной операции и требуется, например, при создании пула из неразмеченных устройств.
Опция -n ыводит результат, например, субкоманды zpool create без фактического создания пула. И соответственно, сообщает об ошибках, если таковые имеются.
Просмотреть пул можно с помощью команд:

df -h /ZFS-gentoo
или
zfs list

Проссмотреть, какие диски включены в пул можно командой:

zpool status

Извлечение всех существующих свойств набора данных:

zfs get all ZFS-gentoo

Добавление дисков в пул:

zpool add -f ZFS-gentoo raidz /dev/sdb /dev/sdc /dev/sdd

Например создаём raidz1 добавлением двух дисков к существующему пулу ZFS-gentoo, состоящего из одного диска.
Проссматриваем, что из этого может получиться (опция -n):

zpool add -n -f ZFS-gentoo raidz1 /dev/sdc /dev/sdd
would update 'ZFS-gentoo' to the following configuration:
ZFS-gentoo
sdb
raidz1
sdc
sdd


Создаём пул raidz1:

zpool add -f ZFS-gentoo raidz1 /dev/sdc /dev/sdd

Исключить устройство из пула:

zpool detach ZFS-gentoo /dev/sdd

Удаление пула:

zpool destroy ZFS-gentoo

Экспорт пула (размонтирование):

zpool export ZFS-gentoo

Если размонтировать какую-либо из файловых систем не удается, ее можно размонтировать принудительно с помощью параметра -f

zpool export -f ZFS-gentoo

Получение списка доступных пулов:

zpool import

По умолчанию команда zpool import позволяет выполнить поиск устройств только в каталоге /dev/dsk.
При наличии устройств в другом каталоге или файловых пулов для их поиска следует использовать параметр -d

zpool import -d /file

Импорт пула (монтирование):

zpool import ZFS-gentoo

Меняем точку монтирования:

zfs set mountpoint=/mnt ZFS-gentoo

При изменении свойства mountpoint файловая система автоматически размонтируется из старой точки монтирования и монтируется в новой (/mnt) точке.
Проверка пула на ошибки:

zpool status -x

all pools are healthy данный вывод сообщает об отсутствии ошибок.

Определение команд ZFS, после выполнения которых возникла ошибка:

zpool history ZFS-gentoo

Проверкой целостности данных является очистка всех данных в пуле. Это позволяет проследить все данные в пуле и проверить возможность чтения блоков на определенный момент времени.
Операция может негативно повлиять на производительность, несмотря на то, что файловая система остается доступной и обеспечивает в процессе очистки почти такой же отклик.
Для очистки используется команда:

zpool scrub ZFS-gentoo

Информацию по очистке можно вывести командой;

zpool status -v ZFS-gentoo
pool: ZFS-gentoo
state: ONLINE
scan: scrub in progress since Wed Jun 1 13:54:28 2016
377G scanned out of 1,65T at 60,2M/s, 6h12m to go
0 repaired, 22,27% done
config:

NAME STATE READWRITECKSUM
ZFS-gentoo ONLINE 0 0 0
sdb ONLINE 0 0 0

errors: No known data errors

Остановить очистку можно командой:

zpool scrub -s ZFS-gentoo

Для восстановления уничтоженного пула устройств хранения данных используется команда:

zpool import -D ZFS-gentoo

Сделать снимок системы, если будет необходимость вернуться или восстановить файлы:

zfs snapshot ZFS-gentoo@20170103

ZFS-gentoo@20170103 полное имя моментального снимка, все после символа @ может быть любой буквенно-цифровой комбинацией.
Можно просмотреть содержимое всех доступных снимков:

zfs list -t snapshot -o name,creation

Откат полного объема до предыдущего состояния:

zfs rollback ZFS-gentoo@20170103

Удаление снимков системы:

zfs destroy ZFS-gentoo@20170103

ZFS позволяет автоматически сжимать данные.
Уменьшенный размер данных означает, что меньше данных будут физически прочитаны и записаны, из чего следует более быстрые операции ввода/вывода. По умолчанию используется lz4, самый безопасный и значительно быстрее всех остальных вариантов при хорошей производительности.
Для смены уровня компрессии можно использовать команду:

zfs set compression=gzip-9 ZFS-gentoo

можно сменить тип сжатия:

zfs set compression=lz4 ZFS-gentoo

просмотр уровеня компрессии:

zfs get compressratio

Обновление пулов устройств хранения данных zfs

zpool status может проинформировать об использовании в пулах старых версий.
Для вывода дополнительной информации по определенной версии и поддерживаемым релизам используется следующая команда:

zpool upgrade -v

Обновляем ZFS-gentoo:

zpool upgrade ZFS-gentoo

Для обновления версии всех zpools в системе:

zpool upgrade -a

При обновлении пула до новой версии ZFS пул будет недоступен в системе, использующей более старую версию ZFS
После каждой переустановке ядра необходимо переустановить модули:
sys-kernel/spl и sys-fs/zfs-kmod

emerge --ask @module-rebuild

и перезагрузиться

reboot

Замена диска

Замена диска в RAID массиве - потенциально опасная операция.
Если в процессе замены заменяющий диск даст сбой, будут проблемы, от неприятных до фатальных.
ZFS - надежная система. И в большинстве случаев выдерживает такую проблему. Но не всегда.
Если диск ранее использовался в zfs пуле, необходимо обнулить его:

zpool labelclear /dev/xxx

Определяем с каким именно диском проблемма, взглянув на его SMART Diagnostics(Information) S.M.A.R.T. (смотри Smartmontools)
Отключать или нет сбойный диск zfs массива при замене?
Предположим, оказалось, что виновен именно диск. Есть два варианта -
1. отключить его, подключить вместо него новый, провести замену.
2. оставить сбойный диск, подключить на другой SATA порт новый, провести замену, отключить сбойный диск.
Вариант 1 проще, позволяет забрать диск. Но есть важный недостаток. В случае raidz (или одиночного зеркала) в процессе замены данные - без избыточности. Возможен сбой в процессе замены, а это часы, - и часть данных может быть потеряна.
Вариант 2 сложнее, требует свободного (хотя бы временно) SATA порта и диска из подменного фонда.
Но есть важный плюс - данные в процессе замены имеют избыточность. Каждый блок достаточно прочитать либо со сбойного диска, либо с остальных. Единичный сбой не страшен.
Обычно исходят из того, что данные ценнее дисков. Поэтому вариант 2 выглядит предпочтительным. Но есть детали.
Если диск сбоит сильно, то процесс замены значительно затягивается. Это увеличивает риск сбоя остальных дисков массива. Поэтому придётся как-то на глаз оценить плюсы и минусы.
Если RAIDZ2, способный выдержать выход из строя двух дисков - то цепляться за сбоящий диск смысла нет. Разумно идти по варианту 1 - избыточность ведь сохраняется.
Если raidz или простое зеркало - то решение принять труднее. Желательно сохранить избыточность до последнего, пока диск не умер, а затем - отключить от него питание.
Определяемся с возможностью использования заменяемого диска в процессе замены. Если с него хоть что-то читается, имеется свободный SATA порт и временное место ещё под один диск - подключаем заменяющий диск параллельно заменяемому. Это улучшит шансы на хороший исход если что-то пойдёт не так.
Начинается замена, за которой можно наблюдать командой status.
Для замены устройства пул должен находиться в состоянии ONLINE.
Если устройство повреждено, но находится в оперативном режиме, заменить его можно только до перевода пула в состояние FAULTED.
Пример - Замена отказавшего устройства.
Определяем повреждённый диск:

zpool status -x
pool: ZFS-gentoo
state: DEGRADED
status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: scrub canceled on Sat Dec 9 22:00:43 2017
config:

NAME STATEREADWRITECKSUM
ZFS-gentoo DEGRADED 0 0 0
ata-SAMSUNG_HD204UI_S2H7J90B901313ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
ata-ST2000VX000-1ES164_Z4Z7WWBF ONLINE 0 0 0
14418579150418840623 UNAVAIL 0 0 0 was /dev/disk/by-id/ata-ST2000VX000-1ES164_Z4Z7WD8V-part1

errors: No known data errors

Отключаем его:

zpool offline ZFS-gentoo 14418579150418840623
zpool status -x
pool: ZFS-gentoo
state: DEGRADED
status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub canceled on Sat Dec 9 22:00:43 2017
config:

NAME STATEREADWRITECKSUM
ZFS-gentoo DEGRADED 0 0 0
ata-SAMSUNG_HD204UI_S2H7J90B901313ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
ata-ST2000VX000-1ES164_Z4Z7WWBF ONLINE 0 0 0
14418579150418840623 OFFLINE 0 0 0 was /dev/disk/by-id/ata-ST2000VX000-1ES164_Z4Z7WD8V-part1

errors: No known data errors

Удаляем повреждённый диск с компьютера и устанавливаем новый.
Для замены поврежденного устройства другим устройством используем следующую команду:

zpool replace ZFS-gentoo ata-ST2000VX000-1ES164_Z4Z7WD8V ata-ST2000DM006-2DM164_Z4ZBC5S1

Эта команда инициирует переход данных в новое устройство из поврежденного устройства или других устройств пула, если для него используется конфигурация с избыточностью.

zpool status -x
pool: ZFS-gentoo
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Aug 12 15:20:06 2018
171G scanned at 2,63G/s, 341G issued at 5,25G/s, 5,20T total
0B resilvered, 6,40% done, 0 days 00:15:51 to go
config:

NAME STATEREADWRITECKSUM
ZFS-gentoo DEGRADED 0 0 0
ata-SAMSUNG_HD204UI_S2H7J90B901313ONLINE 0 0 0
raidz1-1 DEGRADED 0 0 0
ata-ST2000VX000-1ES164_Z4Z7WWBF ONLINE 0 0 0
replacing-1 DEGRADED 0 0 0
14418579150418840623 OFFLINE 0 0 0 was /dev/disk/by-id/ata-ST2000VX000-1ES164_Z4Z7WD8V-part1
ata-ST2000DM006-2DM164_Z4ZBC5S1 ONLINE 0 0 0

errors: No known data errors

По завершении выполнения команды поврежденное устройство отключается от конфигурации, после чего может быть удалено из системы:

zpool detach ZFS-gentoo 14418579150418840623
zpool status -x
pool: ZFS-gentoo
state: ONLINE
status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Aug 12 15:20:06 2018
887G scanned at 3,04G/s, 1,73T issued at 6,07G/s, 5,20T total
0B resilvered, 33,27% done, 0 days 00:09:45 to go
config:

NAME STATEREADWRITECKSUM
ZFS-gentoo ONLINE 0 0 0
ata-SAMSUNG_HD204UI_S2H7J90B901313ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
ata-ST2000VX000-1ES164_Z4Z7WWBF ONLINE 0 0 0
ata-ST2000DM006-2DM164_Z4ZBC5S1 ONLINE 0 0 0

errors: No known data errors

Проверяем Pool:

zpool status -x
pool: ZFS-gentoo
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Aug 12 15:43:07 2018
1,28T scanned at 453M/s, 763G issued at 264M/s, 2,45T total
254G resilvered, 30,37% done, 0 days 01:53:01 to go
config:

NAME STATE READ WRITE CKSUM
ZFS-gentoo ONLINE 0 0 0
raidz1-1 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0 (resilvering)

errors: No known data errors

Pool проверяем до тех пор, пока не получим результат:

all pools are healthy

Если устройство уже было удалено и заменено новым устройством в том же местоположении, используется форма команды для одного устройства:

zpool replace ZFS-gentoo /dev/xxx

Эта команда выполняет надлежащее форматирование неформатированного диска и инициирует перенос актуальных данных из оставшейся конфигурации.
Удаляем информацию об ошибках пула:

zpool clear ZFS-gentoo

Smartmontools

Устанавливаем smartmontools:

emerge --ask sys-apps/smartmontools

Запускаем smartmontools:

/etc/init.d/smartd start

Добавляем в автозагрузку:

rc-update add smartd default

Для systemd:

systemctl start smartd.service
systemctl enable smartd.service

Пакет smartmontools состоит из двух утилит (smartctl и smartd), которые контролируют и следят за системными накопителями используя самопроверку, анализ и систему технологического отчёта (S.M.A.R.T.), встроенную в большинство современных ATA и SCSI жёстких дисков.
Определяем, поддерживает ли диск технологию SMART:

smartctl -i /dev/sdc
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.9.16-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate SV35
Device Model: ST2000VX000-1ES164
Serial Number: Z4Z7WD8V
LU WWN Device Id: 5 000c50 0a289fb1c
Firmware Version: CV27
User Capacity: 2 000 398 934 016 bytes [2,00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 7200 rpm
Form Factor: 3.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-2, ACS-3 T13/2161-D revision 3b
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Wed Jun 28 12:56:27 2017 +03
SMART support is: Available - device has SMART capability.
SMART support is: Enabled


Приминение smartctl:

smartctl -h

Быстрый тест здоровья жесткого диска:

smartctl -H /dev/sdc
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.9.16-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED


Если тест не пройден - стоит задуматься о замене жесткого диска.
Выполнить расширенные встроенные тесты для диска /dev/sdc:

smartctl --test=long /dev/sdc

Команду можно использовать на работающей системе. Для просмотра результатов выполнения тестов используется команда вывода внутреннего журнала после завершения теста:

smartctl -l selftest /dev/sdc

Отмена теста:

smartctl -X

Журнал ошибок диска:

smartctl -l error /dev/sdc
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.9.16-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged


Если диск не страдал сбоями, журнал пуст. Обычно, следует беспокоится, если дисковые ошибки в журнале появляются сразу с большими номерами.
Выводим атрибуты SMART для HDD:

smartctl -A /dev/sdc
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.9.16-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:


ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f111 099 006 Pre-failAlways - 36483048
3 Spin_Up_Time 0x0003 096 096 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 16
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 100 253 030 Pre-fail Always - 285941
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 46
10 Spin_Retry_Count 0x0013100 100 097 Pre-failAlways - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 16
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0
189 High_Fly_Writes 0x003a 094 094 000 Old_age Always - 6
190 Airflow_Temperature_Cel 0x0022 065 064 045 Old_age Always - 35(Min/Max26/35)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 2
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 16
194 Temperature_Celsius 0x0022 035 040 000 Old_age Always - 35(0 23 0 0 0)
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010100 100 000 Old_age Offline- 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0

Атрибуты состоят из нескольких полей, (наиболее часто обозначаемых как VALUE, WORST, THRESH, RAW_VALUE), каждое из которых является определенным показателем, характеризующим техническое состояние накопителя на данный момент времени. Программы считывания S.M.A.R.T. выводят содержимое атрибутов, как правило, в виде нескольких колонок:
ID# - числовой идентификатор атрибута
ATTRIBUTE_NAME - название атрибута
FLAG - флаги атрибутов, задаваемые производителем HDD. Характеризуют тип атрибута ( большинство программ интерпретируют флаги в виде символов k,c,r,s,o,p или аббревиатур, например, EC – Event Count, счетчик событий ). Pre-Failure (PF, 01h) - при достижении порогового значения данного типа атрибутов диск требует замены. Иногда данный бит флагов обозначают как Life Critical (CR) или Pre-Failure warranty (PW)
Online test (OC, 02h)– атрибут обновляет значение при выполнении off-line/on-line встроенных тестов SMART;
Perfomance Related (PE или PR , 04h)– атрибут характеризует производительность ;
Error Rate (ER , 08h )– атрибут отражает счетчики ошибок оборудования;
Event Counts (EC, 10h ) – атрибут представляет собой счетчик событий;
Self Preserving (SP, 20h ) – самосохраняющися атрибут;
Некоторые из программ могут интерпретировать флаги в виде текстовых описаний, близких по смыслу к рассмотренным выше. Один атрибут может иметь несколько установленных в единицу значений флагов, например, атрибут с идентификатором 05 отражающий количество переназначенных из-за сбоев секторов из резервной области, имеет установленные флаги SP+EC+OC – самосохраняющийся, счетчик событий, обновляется при автономном и интерактивном режиме накопителя.
Каждый атрибут имеет величины:
VALUE - текущее значение атрибута. Для анализа состояния накопителя, самым важным значением атрибута является VALUE - условное число (обычно от 0 до 100 или до 253), заданное производителем. Значение VALUE изначально установлено на максимум при производстве накопителя и уменьшается в случае ухудшения его параметров.
Низкое значение говорит о быстрой деградации диска или о возможном скором сбое. т.е. чем выше значение VALUE атрибута, тем лучше;
WORST - самое худшее значение атрибута за все время работы накопителя;
THRESH - минимальное возможное значение атрибута, при котором гарантируется безотказная работа накопителя.
При Значении атрибута меньше Threshold очень вероятен сбой в работе или полный отказ.
Выход критически важного параметра за пределы Threshold фактический означает выход диска из строя, выход за переделы допустимых значений некритически важного параметра свидетельствует о наличии проблемы, но диск может сохранять свою работоспособность;
TYPE - некоторые из программ в данном необязательном поле отображают информацию из флажков атрибутов или признаки их критичности Critical или Pre-fail, отражающих ухудшение характеристик оборудования и Old-age для атрибутов, отражающих выработку ресурса;
WHEN_FAILED - для отслеживания надежности диска прошивка конвертирует сырые данные в нормализованные в диапазоне целых от 1 до 253. Если нормализованное значение меньше или равно пороговому (THRESH), данный атрибут генерирует состояние failed, которое отображается в этой колонке;
RAW_VALUE - это значение атрибута во внутреннем формате производителя.
Критичные атрибуты:
1 Raw_Read_Error_Rate - частота ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска.
Ненулевое значение должно сильно насторожить, а большие значение и вовсе говорят о скором выходе диска из строя. Известно, что на дисках Seagate, Samsung (семейства F1 и более новые) и Fujitsu 2,5″ большое значение в этом поле является нормальным. Для остальных же дисков в идеале значение должно быть равно нулю;
3 Spin_Up_Time - время раскрутки пакета дисков из состояния покоя до рабочей скорости.
При расчете нормализованного значения (Value) практическое время сравнивается с некоторой эталонной величиной, установленной на заводе. Не ухудшающееся немаксимальное значение при Spin Retry Count Value = max (Raw равном 0) не говорит ни о чем плохом. Отличие времени от эталонного может быть вызвано рядом причин, например просадка по вольтажу блока питания.
Чем меньше — тем лучше. Большие значения говорят о низкой отзывчивости;
5 Reallocated_Sector_Ct - число операций переназначения секторов.
SMART в современных дисках способен произвести анализ сектора на стабильность работы "на лету" и в случае признания его сбойным, произвести его переназначение. Очень плохо, если этот параметр растёт. Диск готовится к вымиранию, которое может начаться и через неделю и через минуту;
7 Seek_Error_Rate - частота ошибок при позиционировании блока головок.
Высокое значение Raw свидетельствует о наличии проблем, которыми могут являться повреждение сервометок, чрезмерное термическое расширение дисков, механические проблемы в блоке позиционирования и др. Постоянное высокое значение Value говорит о том, что все хорошо;
10 Spin_Retry_Count - число повторных попыток раскрутки дисков до рабочей скорости, в случае если первая попытка была неудачной.
Ненулевое значение Raw (соответственно немаксимальное Value) свидетельствует о проблемах в механической части накопителя. Большое значение говорит о плохом состоянии диска;
191 G-Sense_Error_Rate - число ошибок, возникших из-за внешних нагрузок. Атрибут хранит показания встроенного акселерометра, который фиксирует все удары, толчки, падения и даже неаккуратную установку диска в корпус компьютера;
198 Offline_Uncorrectable — количество неисправных секторов. Большое значение говорит о поврежденной поверхности.
Не критичные атрибуты:
4 Start_Stop_Count - полное число запусков/остановов шпинделя.
Гарантировано мотор диска способен перенести лишь определенное число включений/выключений. Это значение выбирается в качестве Treshold;
9 Power_On_Hours - число часов проведенных во включенном состоянии.
В качестве порогового значения для него выбирается паспортное время наработки на отказ (MBTF). Обычно величина MBTF огромна и маловероятно, что этот параметр достигнет критического порога. Но даже в этом случае выход из строя диска совершенно не обязателен. По нему можно узнать сколько проработал диск во включённом состоянии;
12 Power_Cycle_Count — количество включений/выключений диска. По этому атрибуту можно оценить, например, сколько использовался диск;
194 Temperature_Celsius - температура диска в градусах Цельсия. Здесь хранятся показания встроенного термодатчика.
Температура имеет огромное влияние на срок службы диска (даже если она находится в допустимых пределах). Вернее имеет влияние не на срок службы диска а на частоту возникновения некоторых типов ошибок, которые влияют на срок службы;
Не нулевые, растущие три следующих параметра могут означать как реальные проблемы с диском, так и проблемы с SATA кабелем. Последнее намного вероятнее.
196 Reallocated_Event_Count — количество операций перераспределения секторов;
197 Current_Pending_Sector - Число секторов, являющихся кандидатами на замену.
Они не были еще определенны как плохие, но считывание их отличается от чтения стабильного сектора, так называемые подозрительные или нестабильные сектора;
199 UDMA_CRC_Error_Count - число ошибок, возникающих при передаче данных по внешнему интерфейсу. Могут быть вызваны некачественными кабелями, нештатными режимами работы.
Контролировать и подстраивать поведение smartd можно с помощью конфигурационного файла /etc/smartd.conf. Этот файл, монитор просматривает после запуска до перехода в фоновый режим. Каждая строка содержит инструкции по поводу отдельного диска. Конфигурационный файл на узлах нашего кластера выглядит так:

vim /etc/smartd.conf
/dev/sda -S on -o on -a -I 194 -m umanov@mail.ru
/dev/sdb -S on -o on -a -I 194 -m umanov@mail.ru
/dev/sdc -S on -o on -a -I 194 -m umanov@mail.ru
/dev/sdd -S on -o on -a -I 194 -m umanov@mail.ru


Первая колонка содержит устройства для мониторинга. Директива -o включает автоматические off-line тесты, -S - автоматическое сохранение значений атрибутов. После ключа -m указывается адрес для сообщений об ошибках. Ключ -a требует просмотра всех атрибутов SMART для данного диска. В этой конфигурации журналы монитора все время пополняются нормализованными значениями атрибутов. Опции, подобные -I 194 заставляют игнорировать изменения значения атрибута ID 194, поскольку температура диска меняется часто и эти данные не требуют частой проверки. Параметры вышли из нормы или статус здоровья диска получен в виде NOT OK?

Продаются
книги

Оставить отзыв

Установи и
БУДЕШЬ СЧАСТЛИВ!

Спасибо, Господи, что взял деньгами...

Scrooge
Dollar
Ruble
Ruble
Gold