"Только безумец верит, что может изменить мир, - и потому меняет его." Стив Джобс
"Только безумец верит, что может изменить мир, - и потому меняет его." Стив Джобс
В ядре устанавливаем следующие параметры:
General Setup --->
GCC plugins --->
[ ] Randomize layout of sensitive kernel structures
Cryptographic API --->
Security options --->
<*> Deflate compression algorithm
[ ] 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.
Рекомендуется использовать имена дисков из каталога /dev/disk/by-id/ (ata-изготовитель_модель_серийный-номер, scsi-изготовитель_модель_серийный-номер, scsi-WWID, wwn-WWN (8 байт), wwn-WWID (16 байт)) или /dev/disk/by-path/ (позволяет разнести диски по ящикам, но нельзя тасовать их; в Solaris работает логика замены сбойнувшего диска на новый в ту же ячейку, а в Linux?) или /dev/disk/by-vdev/ (надо предварительно заполнить /etc/zfs/vdev_id.conf).
Создаём пул из трёх дисков:
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 для отсоединения запасного.
Создаём загрузочную флешку:
Понадобится ISO, содержащий OpenZFS, который имеется на компакт-диске "Admin CD".
Вставляем флешку и выполняем команды:
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 b | (parted) unit b |
(parted) mkpart primary 1048576 3145727 | (parted) mkpart primary 1048576 3145727 |
(parted) name 1 grub | (parted) name 1 grub |
(parted) set 1 bios_grub on | (parted) set 1 bios_grub on |
(parted) mkpart primary 3145728 137363455 | (parted) mkpart primary 3145728 137363455 |
(parted) name 2 boot | (parted) name 2 esp |
(parted) set 2 boot on | (parted) set 2 boot on |
(parted) mkpart primary 137363456 1000066206719 | (parted) mkpart primary 137363456 271581183 |
(parted) name 3 rootfs | (parted) name 3 boot |
(parted) mkpart primary 271581184 1000066206719 | |
(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
Опция -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 | READ | WRITE | CKSUM |
---|---|---|---|---|
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
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 | STATE | READ | WRITE | CKSUM |
---|---|---|---|---|
ZFS-gentoo | DEGRADED | 0 | 0 | 0 |
ata-SAMSUNG_HD204UI_S2H7J90B901313 | ONLINE | 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 | STATE | READ | WRITE | CKSUM |
---|---|---|---|---|
ZFS-gentoo | DEGRADED | 0 | 0 | 0 |
ata-SAMSUNG_HD204UI_S2H7J90B901313 | ONLINE | 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 | STATE | READ | WRITE | CKSUM |
---|---|---|---|---|
ZFS-gentoo | DEGRADED | 0 | 0 | 0 |
ata-SAMSUNG_HD204UI_S2H7J90B901313 | ONLINE | 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 | STATE | READ | WRITE | CKSUM |
---|---|---|---|---|
ZFS-gentoo | ONLINE | 0 | 0 | 0 |
ata-SAMSUNG_HD204UI_S2H7J90B901313 | ONLINE | 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 проверяем до тех пор, пока не получим результат:
all pools are healthy
Если устройство уже было удалено и заменено новым устройством в том же местоположении, используется форма команды для одного устройства:
zpool replace ZFS-gentoo /dev/xxx
Эта команда выполняет надлежащее форматирование неформатированного диска и инициирует перенос актуальных данных из оставшейся конфигурации.
Удаляем информацию об ошибках пула:
zpool clear ZFS-gentoo
Устанавливаем 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 | 0x000f | 111 | 099 | 006 | Pre-fail | Always | - | 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 | 0x0013 | 100 | 100 | 097 | Pre-fail | Always | - | 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 | 0x0010 | 100 | 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?
Спасибо большое за помощь в проверке пула ZFS на работоспособность! Благодаря Вашему сайту я убедился, что мой RAID на ZFS работает без ошибок!
Николай: И Вам спасибо что не забываете заходить на сайт.
Николай: Люди тратили уйму своего времени и труда, чтобы создать этот софт и дарят его Вам. Найдите, пожалуйста, немного времени, чтобы прочитать документацию и научиться это использовать!
Николай: Не понравился сайт, хотите научить меня администрировать? Пожалуйста, с удовольствием буду учиться. Отзывы в Вашем распоряжении!