После перевода таблиц истории и тенденций Zabbix, хранившихся в MySQL, с движка InnoDB на TokuDB, базы данных на всех серверах Zabbix ужались примерно в 10 раз. Проблемы с нехваткой места на дисках решены и больше не приходится урезать глубину хранения истории или тенденций.
Т.к. базы данных стали значительно меньше, появился смысл использовать накопители SSD меньшего объёма с программным RAID вместо SAS-дисков и аппаратных RAID-контроллеров. При сравнимой цене накопителей SSD и SAS-дисков, SSD позволяют обеспечить более высокую скорость работы дисковой подсистемы.
После консультации с более опытным коллегой (привет, Рамиль), уже имеющим опыт использования накопителей SSD, выбор остановился на накопителе SSD 480GB SATA 2.5« 5200 MAX <mtfddak480tdn> Micron (MTFDDAK480TDN-1A T1ZABYY).
Накопители SSD содержат микросхемы флеш-памяти, в которых читать или записывать можно только страницу целиком. При этом записывать данные можно только в пустую страницу. Страницы группируются в блоки и очистить можно только блок целиком. У каждой страницы количество перезаписей ограничено, по достижении которого данные могут начать записываться с ошибками. Если страницу долгое время не читать, то данные на ней могут исказиться и пропасть. Контроллеру флеш-памяти в SSD приходится учитывать все эти ограничения. Для каждой страницы он должен вести учёт, содержит ли страница данные или она пустая, сколько раз её перезаписывали, как давно её последний раз читали. Прежде чем очистить блок, контроллеру нужно скопировать страницы с данными из этого блока в пустые страницы другого блока. Записывать данные лучше всего в те страницы, которые имеют меньшее количество перезаписей. При каждом перемещении данных из одной страницы в другую контроллеру нужно отметить соответствие линейного адреса страницы, которым манипулирует контроллер SATA, реальному положению страницы во флеш-памяти. Страницы, которые давно не читались, нужно периодически перечитывать, чтобы информация на них не пропала.
Вот почему версия прошивки SSD может оказывать значительно большее влияние на срок службы и надёжность, чем версия прошивки обычного жёсткого диска. Именно поэтому стоит обновить прошивку SSD до самой свежей версии, прежде чем вводить сервер в эксплуатацию.
Эта инструкция по обновлению прошивок SSD была написана по просьбе менее опытного коллеги (привет, Кирилл), которому придётся продолжить работу, начатую мной.
На сайте производителя www.micron.com доступны утилита, прошивки и документация. Для их получения нужно зарегистрироваться на сайте. Список субъектов федерации на сайте довольно забавен. В частности, в выпадающем списке нет Башкирии, зато есть «Пермякия», которую я и выбрал по сочетанию сходства с реальным названием и близости географического расположения.
На странице Enterprise SSD Downloads в разделе msecli Software for Linux Systems можно найти установщик фирменной утилиты msecli для Linux. В этом разделе есть ссылка на скачивание Download.
На той же странице Enterprise SSD Downloads в разделе Storage Executive Command Line Interface можно найти документацию на фирменную утилиту msecli. В этом разделе есть ссылка на скачивание Download.
На странице Software and Drivers в разделе 5200 D1MU020/D1MU420/D1MU520/D1MU820 Storage Executive Firmware Update можно найти свежие прошивки для дисков. В нём есть ссылка на скачивание Download.
На странице Clonezilla Live on USB flash drive or USB hard drive описана процедура подготовки загрузочной флешки с Clonezilla. На странице Clonezilla Live Download можно скачать zip-архив для распаковки на флешку. Я выбрал стабильную версию на основе Debian и попал на страницу Downloads. В меню выбрал архитектуру amd64, формат zip, репозитории auto и нажал кнопку Download.
После скачивания zip-архива нужно разметить флешку, распаковать на неё этот архив и установить загрузчик.
Не вставляя флешку, определяем имена имеющихся в системе дисков:
~# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdb2
Теперь вставляем флешку и повторяем операцию:
~# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdc /dev/sdc1
Видно, что в системе появилось новое блочное устройство /dev/sdc, на котором определился один раздел.
Запустим утилиту fdisk для изменения разделов на блочном устройстве /dev/sdc:
~# fdisk /dev/sdc Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
Создадим на диске пустую таблицу разделов типа DOS командой o:
Command (m for help): o Created a new DOS disklabel with disk identifier 0x2806276a.
Посмотрим на список имеющихся разделов, введя команду p:
Command (m for help): p Disk /dev/sdc: 14,4 GiB, 15502147584 bytes, 30277632 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x2806276a
Создаём новый первичнй раздел от начала до конца свободного места на флешке. Вводим команду создания нового раздела n:
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions)
Утилита спрашивает, раздел какого типа нужно создать: первичный или расширенный. В качестве загрузочного раздела можно использовать только первичный. Расширенный раздел может быть только один. Максимальное количество первичных и расширенных разделов в сумме может быть не больше 4. Внутри расширенного раздела можно создавать практически не ограниченное количество логических разделов, но ни один из них не может быть загрузочным. Т.к. нам нужно загрузить Clonezilla с этой флешки, выбираем первичный раздел, нажимая букву p:
Select (default p): p
Выбираем номер раздела, по умолчанию предлагается создать раздел с номером 1. Соглашаемся на предложение нажатием Enter:
Partition number (1-4, default 1):
Выбираем сектор, начиная с которого должен начаться раздел. Соглашаемся с предложением по умолчанию начать раздел с сектора 2048 нажатием Enter:
First sector (2048-30277631, default 2048):
Выбираем сектор, которым должен заканчиваться раздел. Можно ввести номер сектора, а можно указать размер раздела в секторах, килобайтах, мегабайтах, гигабайтах, терабайтах или петабайтах. По умолчанию предлагается последний сектор из неразмеченного пространства.
Clonezilla требует создавать раздел размером не менее 200 мегабайт. На самом деле это ложь и раздела размером 200 мегабайт не хватит, т.к. даже zip-архив больше 200 мегабайт. Кроме того, нужно создать раздел с запасом для размещения утилиты для msecli_Linux.run и прошивок для SSD. Подойдёт раздел размером 512 мегабайт, но стоит сделать его меньше на зарезервированные в начале 2048 секторов. Поступим проще, просто посчитаем номер последнего сектора: 512*1024*1024/512=1048576. Введём получившееся число:
Last sector, +sectors or +size{K,M,G,T,P} (2048-30277631, default 30277631): 1048576 Created a new partition 1 of type 'Linux' and of size 511 MiB.
Раздел нужного размера создан, но нужно поменять его тип. Для этого введём команду t:
Command (m for help): t Selected partition 1
Программа не спрашивает у нас номер раздела, т.к. он всего один, а сразу предлагает ввести номер типа раздела или ввести команду L, чтобы увидеть список всех возможных идентификаторов типов разделов. После ввода L получаем такой список:
Partition type (type L to list all types): L 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32m 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto 1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep 1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
Нам нужен раздел для размещения файловой системы FAT 32, флешка имеет линейную адресацию секторов, поэтому наиболее подходящим выбором будет вариант «W95 FAT32 (LBA)». Вводим тип c и нажимаем Enter:
Partition type (type L to list all types): c Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Осталось пометить раздел как загрузочный. Вводим команду a:
Command (m for help): a Selected partition 1 The bootable flag on partition 1 is enabled now.
Раздел 1 помечен как загрузочный.
Посмотрим на список разделов снова. Для этого введём команду p:
Command (m for help): p Disk /dev/sdc: 14,4 GiB, 15502147584 bytes, 30277632 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x2806276a Device Boot Start End Sectors Size Id Type /dev/sdc1 * 2048 1048576 1046529 511M c W95 FAT32 (LBA)
Всё верно, вводим команду w для записи изменений на флешку:
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
fdisk сообщает, что таблица разделов записана.
Теперь можно создать пустую файловую систему FAT 32 на флешке в разделе 1. Для этого воспользуемся такой командой:
~# mkfs.vfat -F 32 /dev/sdc1 mkfs.fat 4.1 (2017-01-24)
Готово. Теперь нужно смонтировать раздел в какой-нибудь пустой каталог. У меня для подобных целей имеется каталог /mnt:
~# mount /dev/sdc1 /mnt/
Теперь нужно распаковать содержимое zip-архива с Clonezilla в этот каталог:
~# cd /mnt /mnt# unzip /home/stupin/Downloads/clonezilla-live-2.6.6-15-amd64.zip
Полный вывод второй команды не привожу, т.к. в нём перечисляются все извлечённые файлы, которых много.
Теперь переходим в каталог utils/linux и запускаем команду установки загрузчика:
/mnt# cd utils/linux/ /mnt/utils/linux# bash makeboot.sh /dev/sdc1 This command will install MBR and syslinux/extlinux bootloader on /dev/sdc Clonezilla files are assumed to be on /dev/sdc1 -------------------------------------------- Machine: Unknown product name: Model: Kingston DataTraveler 3.0 (scsi) Disk /dev/sdc: 15.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 537MB 536MB primary fat32 boot, lba -------------------------------------------- Are you sure you want to continue?
Установщик загрузчика показал нам информацию о разделе, загрузчик для которого мы хотим установить и спрашивает у нас подтверждения. Подтверждаем выбор буквой y:
[y/n] y OK! Let's do it! -------------------------------------------- File system of /dev/sdc1: vfat -------------------------------------------- Do you want to install MBR on /dev/sdc on this machine "Unknown product name" ?
Установщик спрашивает, хотим ли мы устновить главную загрузочную запись на диск /dev/sdc. Соглашаемся нажатием y:
[y/n] y OK! Let's do it! Running: cat "/mnt/utils/mbr/mbr.bin" > /dev/sdc -------------------------------------------- Do you want to install the syslinux boot files on /dev/sdc1 on this machine "Unknown product name" ?
Установщик спрашивает, хотим ли мы установить файлы загрузчика syslinux в раздел /dev/sdc1. Подтверждаем наше желание нажатием y:
[y/n] y OK! Let's do it! A filesystem supporting Unix file mode for syslinux is required. Copying syslinux to /tmp/linux_tmp.fZmDyo '/mnt/utils/linux/x64/syslinux' -> '/tmp/linux_tmp.fZmDyo/syslinux' Running: "/tmp/linux_tmp.fZmDyo/syslinux" -d syslinux -f -i "/dev/sdc1" //NOTE// If your USB flash drive fails to boot (maybe buggy BIOS), try to use "syslinux -d syslinux -fs /dev/sdc1", i.e. running with "-fs". syslinux ran successfully in installation mode. Done!
Флешка готова. Осталось поместить на неё утилиту и файлы с прошивок. Перейдём в корневой каталог флешки, создадим каталог ssd, поместим в него установщик утилиты msecli и распакованные прошивки:
/mnt/utils/linux# cd ../.. /mnt# mkdir ssd /mnt# cd ssd /mnt/ssd# cp /home/stupin/Downloads/msecli_Linux.run . /mnt/ssd# unzip /home/stupin/Downloads/5200_D1MU_020_420_520_820_fwbin.zip Archive: /home/stupin/Downloads/5200_D1MU_020_420_520_820_fwbin.zip inflating: D1MU020/1.bin inflating: D1MU420/1.bin inflating: D1MU520/1.bin inflating: D1MU820/1.bin inflating: firmware.properties
Выставим права исполнимости на установщик утилиты msecli_Linux.run:
/mnt/ssd# chmod +x msecli_Linux.run
Теперь можно выйти из каталога, в который смонтирована флешка, отмонтировать его и на всякий случай снять с флешки образ:
/mnt/ssd# cd ~# umount /mnt ~# dd bs=1M count=512 if=/dev/sdc of=/home/stupin/Downloads/clonezilla-live-2.6.6-15-amd64.img
Т.к. образ снят под пользователем root, не забываем поменять владельца файла, чтобы потом можно было без проблем удалить его или переместить в другое место:
~# chown stupin:stupin /home/stupin/Downloads/clonezilla-live-2.6.6-15-amd64.img
В файле /home/stupin/Downloads/clonezilla-live-2.6.6-15-amd64.img будет сохранён образ, который в дальнейшем можно будет записать на любую флешку размером не менее 512 мегабайт. Например, для записи образа на флешку /dev/sdc можно будет воспользоваться такой командой:
~# dd if=/home/stupin/Downloads/clonezilla-live-2.6.6-15-amd64.img of=/dev/sdc
После загрузки с флешки нужно выбрать в меню загрузку в командную строку. Прежде чем приступить непосредственно к обновлению прошивок, нужно устанавить в систему утилиту msecli. Запускаем установщик:
# /usr/lib/live/mount/medium/ssd/msecli_Linux.run
Читаем лицензию, принимаем, соглашаемся на установку утилиты.
Узнаём текущие версии прошивок:
# msecli -F Device Name FW-Rev /dev/sda D1MU004 /dev/sdb D1MU004 /dev/sdс D1MU004 Firmware version retrieved successfully CMD_STATUS : Success STATUS_CODE : 0 Copyright (C) 2019 Micron Technology, Inc.
Как видно, на трёх имеющихся в системе накопителях SSD определилась прошивка версии D1MU004. При подготовке флешки содержимое zip-архива с прошивками мы распаковали в каталог /ssd. В файле firmware.properties можно найти информацию о совместимости прошивок с моделями накопителей. Для Micron 5200MAX подходит прошивка, находящаяся в каталоге D1MU020.
Обновляем прошивки до свежих версий:
# msecli -U -i D1MU020 -n /dev/sda This will update the 5200MAX drive in the system Are you sure you want to continue(Y|N):Y Updating firmware on drive /dev/sda (Serial No. XXXXXXXXXXXX) .................. Device Name : /dev/sda Firmware Update on /dev/sda Succeded! CMD_STATUS : Success STATUS_CODE : 0 Copyright (C) 2019 Micron Technology, Inc. # msecli -U -i D1MU020 -n /dev/sdb This will update the 5200MAX drive in the system Are you sure you want to continue(Y|N):Y Updating firmware on drive /dev/sdb (Serial No. XXXXXXXXXXXX) .................. Device Name : /dev/sdb Firmware Update on /dev/sdb Succeded! CMD_STATUS : Success STATUS_CODE : 0 Copyright (C) 2019 Micron Technology, Inc. # msecli -U -i D1MU020 -n /dev/sdс This will update the 5200MAX drive in the system Are you sure you want to continue(Y|N):Y Updating firmware on drive /dev/sdc (Serial No. XXXXXXXXXXXX) .................. Device Name : /dev/sdc Firmware Update on /dev/sdc Succeded! CMD_STATUS : Success STATUS_CODE : 0 Copyright (C) 2019 Micron Technology, Inc.