Что Общего Между Lvm И Матрёшкой?

Добрый день.

Хочу поделиться с сообществом своим практическим опытом построения системы хранения данных для KVM с использованием md RAID+LVM. Программа будет включать в себя:

  • Построение md RAID 1 из SSD NVMe.
  • Сборка md RAID 6 из SATA SSD и обычных дисков.

  • Особенности работы TRIM/DISCARD на SSD RAID 1/6.
  • Создание загрузочного массива md RAID 1/6 на общем наборе дисков.

  • Установка системы на NVMe RAID 1 при отсутствии поддержки NVMe в BIOS.
  • Использование кэша LVM и тонкого LVM.
  • Использование снимков BTRFS и отправка/получение для резервного копирования.

  • Использование тонких снимков LVM и Thin_delta для резервного копирования в стиле BTRFS.
Если вам интересно, пожалуйста, посмотрите кат.

Заявление

Автор не несет никакой ответственности за последствия использования или неиспользования материалов/примеров/кода/советов/данных из этой статьи.

Читая или используя этот материал каким-либо образом, вы принимаете на себя ответственность за все последствия этих действий.

Возможные последствия включают в себя:

  • Хрустящие твердотельные накопители NVMe.
  • Полностью израсходованный ресурс записи и выход из строя SSD-накопителей.

  • Полная потеря всех данных на всех дисках, включая резервные копии.

  • Неисправное компьютерное оборудование.

  • Зря потраченное время, нервы и деньги.

  • Любые другие последствия, не перечисленные выше.



Железо



Доступными были:

Материнская плата примерно 2013 года с чипсетом Z87 в комплекте с Intel Core i7/ Haswell.
  • Процессор 4 ядра, 8 потоков
  • 32 ГБ оперативной памяти DDR3
  • 1x16 или 2x8 PCIe 3.0
  • 1 х 4 + 1 х 1 PCIe 2.0
  • 6 разъемов SATA 3 по 6 Гбит/с
SAS адаптер LSI SAS9211-8I перепрошил в режим IT/HBA. Прошивка с поддержкой RAID была намеренно заменена прошивкой HBA, чтобы:
  1. Вы в любой момент можете выбросить этот адаптер и заменить его на любой другой, который вам попадется.

  2. TRIM/Discard нормально работал на дисках, потому что.

    в прошивке RAID эти команды вообще не поддерживаются, а HBA вообще не важно, какие команды передаются по шине.

Жесткие диски — 8 штук HGST Travelstar 7K1000 емкостью 1 ТБ в форм-факторе 2,5, как для ноутбуков.

Эти диски ранее находились в массиве RAID 6. Они также найдут применение в новой системе.

Для хранения локальных резервных копий.



Дополнительно добавлено:

6 штук SATA SSD модели Samsung 860 QVO 2 ТБ.

Этим SSD требовался большой объем, желательны были наличие SLC-кэша, надежность и невысокая цена.

Требовалась поддержка сброса/обнуления, что проверяется строкой в dmesg:

kernel: ata1.00: Enabling discard_zeroes_data

2 твердотельных накопителя NVMe модели Samsung SSD 970 EVO 500 ГБ.

Для этих твердотельных накопителей важна произвольная скорость чтения/записи и емкость ресурсов, соответствующая вашим потребностям.

Радиатор для них.

Обязательно.

Абсолютно.

В противном случае поджарьте их до хрустящей корочки во время первой синхронизации RAID. Адаптер StarTech PEX8M2E2 для 2 твердотельных накопителей NVMe, установленных в слот PCIe 3.0 8x. Это опять же просто HBA, но для NVMe. От дешевых адаптеров он отличается тем, что не требует поддержки разветвления PCIe со стороны материнской платы за счет наличия встроенного переключателя PCIe. Он будет работать даже в самой древней системе с PCIe, даже если это слот x1 PCIe 1.0. Естественно, с соответствующей скоростью.

Никаких рейдов там нет. Встроенного биоса на плате нет. Таким образом, ваша система не научится волшебным образом загружаться с NVMe, а тем более выполнять NVMe RAID благодаря этому устройству.

Этот компонент появился исключительно за счет наличия в системе всего одного свободного 8x PCIe 3.0, а при наличии 2 свободных слотов его можно легко заменить на два копеечные PEX4M2E1 или аналоги, которые можно купить где угодно по цене 600р.

руб.

Отказ от всякого рода аппаратных или встроенных чипсетных/BIOS RAID-ов был сделан сознательно, чтобы иметь возможность полностью заменить всю систему, за исключением самих SSD/HDD, с сохранением всех данных.

В идеале, чтобы можно было сохранить даже установленную операционную систему при переходе на совершенно новое/другое оборудование.

Главное, чтобы были порты SATA и PCIe. Это как live CD или загрузочная флешка, только очень быстрая и немного громоздкая.

Юмор Иначе сами знаете что бывает — иногда нужно срочно взять с собой на вынос весь массив.

Но я не хочу потерять данные.

Для этого все упомянутые носители удобно расположены на слайдах в 5,25 отсеках стандартного кейса.

Ну, и, конечно же, для экспериментов с разными методами SSD-кэширования в Linux.

Аппаратные рейды — это скучно.

Включите его.

Это либо работает, либо нет. А с mdadm всегда есть варианты.



Программное обеспечение

Раньше на железе, близком к EOL, устанавливался Debian 8 Jessie. RAID 6 был собран из вышеупомянутых HDD в паре с LVM. Он запускал виртуальные машины в kvm/libvirt. Т.

к.

автор имеет соответствующий опыт создания портативных загрузочных SATA/NVMe флешек, а также, чтобы не нарушать привычный apt-шаблон, в качестве целевой системы была выбрана Ubuntu 18.04, уже достаточно стабилизированная, но имеющая еще 3 года эксплуатации.

поддержки в будущем.

Упомянутая система «из коробки» содержит все необходимые нам драйверы оборудования.

Нам не нужно стороннее программное обеспечение или драйверы.



Подготовка к установке

Для установки системы нам понадобится Ubuntu Desktop Image. Серверная система имеет какой-то ядрёный установщик, который показывает чрезмерную независимость, которую невозможно отключить, запихнув системный раздел UEFI на один из дисков, портя всю красоту.

Соответственно, он устанавливается только в режиме UEFI. Не предлагает никаких вариантов.

Нас это не устраивает. Почему? К сожалению, загрузка UEFI крайне плохо совместима с загрузочным программным RAID, потому что… Никто не предлагает нам резервирование раздела UEFI ESP. В сети есть рецепты, предлагающие разместить раздел ESP на флешке в USB-порт, но это точка отказа.

Есть рецепты с использованием программного mdadm RAID 1 с метаданными версии 0.9, которые не мешают UEFI BIOS видеть этот раздел, но это живет до того счастливого момента, когда BIOS или другая аппаратная ОС что-то запишет в ESP и забудет синхронизировать с другими.

зеркала.

Кроме того, загрузка UEFI зависит от NVRAM, которая не перенесется вместе с дисками в новую систему, т.к.

является частью материнской платы.

Так что мы не будем изобретать новое колесо.

У нас уже есть готовый, проверенный временем дедушкин велосипед, который теперь называется Legacy/BIOS boot и носит гордое имя CSM на UEFI-совместимых системах.

Мы просто возьмем его с полки, смажем, накачаем шины и протрим влажной тряпкой.

Десктопную версию Ubuntu также невозможно установить корректно с загрузчиком Legacy, но здесь, как говорится, по крайней мере, есть варианты.

И так, собираем железо и загружаем систему с загрузочной флешки Ubuntu Live. Нам нужно будет загрузить пакеты, поэтому мы настроим сеть, которая подойдет вам.

Если не получится, можно заранее загрузить необходимые пакеты на флэшку.

Заходим в среду рабочего стола, запускаем эмулятор терминала и понеслось:

#sudo bash

Как.

? Строка выше — канонический триггер для холиваров по поводу sudo. С б О приходят большие возможности и О большая ответственность.

Вопрос в том, сможете ли вы взять это на себя.

Многие думают, что использовать sudo таким образом, по меньшей мере, неосторожно.

Однако:

#apt-get install mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc

Почему не ZFS.? Когда мы устанавливаем программное обеспечение на наш компьютер, мы, по сути, предоставляем наше оборудование разработчикам этого программного обеспечения для управления им.

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

С этой точки зрения ZFS — это Феррари, а mdadm+lvm больше похож на велосипед. Субъективно автор предпочитает одолжить в кредит неизвестным лицам велосипед вместо Феррари.

Там цена вопроса не высока.

Права не нужны.

Проще, чем правила дорожного движения.

Парковка бесплатная.

Проходимость лучше.

К велосипеду всегда можно прикрепить ножки, а можно отремонтировать велосипед своими руками.

Почему тогда БТРФС.

? Чтобы загрузить операционную систему, нам нужна файловая система, которая поддерживается в Legacy/BIOS GRUB «из коробки» и в то же время поддерживает живые снимки.

Мы будем использовать его для раздела /boot. Кроме того, автор предпочитает использовать эту ФС для /(root), не забывая отметить, что для любого другого ПО можно создавать отдельные разделы на LVM и монтировать их в нужные каталоги.

Мы не будем хранить на этой ФС никакие образы виртуальных машин или баз данных.

Эта ФС будет использоваться только для создания снимков системы без ее выключения и последующей передачи этих снимков на резервный диск с помощью send/receive. Кроме того, автор обычно предпочитает держать минимум программного обеспечения непосредственно на оборудовании, а все остальное программное обеспечение запускать на виртуальных машинах, используя такие вещи, как проброс графических процессоров и хост-контроллеров PCI-USB на KVM через IOMMU. На оборудовании осталось только хранилище данных, виртуализация и резервное копирование.

Если больше доверять ZFS, то в принципе для указанного приложения они взаимозаменяемы.

Однако автор намеренно игнорирует встроенные функции зеркалирования/RAID и резервирования, которыми обладают ZFS, BRTFS и LVM. В качестве дополнительного аргумента у BTRFS есть возможность превращать случайные записи в последовательные, что крайне положительно сказывается на скорости синхронизации снапшотов/бэкапов на HDD. Давайте пересканируем все устройства:

#udevadm control --reload-rules && udevadm trigger

Давайте осмотримся вокруг:

#lsscsi && nvme list [0:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sda [1:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdb [2:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdc [3:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdd [4:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sde [5:0:0:0] disk ATA Samsung SSD 860 2B6Q /dev/sdf [6:0:0:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdg [6:0:1:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdh [6:0:2:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdi [6:0:3:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdj [6:0:4:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdk [6:0:5:0] disk ATA HGST HTS721010A9 A3B0 /dev/sdl [6:0:6:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdm [6:0:7:0] disk ATA HGST HTS721010A9 A3J0 /dev/sdn Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 S466NXXXXXXX15L Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7 /dev/nvme1n1 S5H7NXXXXXXX48N Samsung SSD 970 EVO 500GB 1 0,00 GB / 500,11 GB 512 B + 0 B 2B2QEXE7



Разметка диска



NVMe твердотельный накопитель

Но мы их никак не будем отмечать.

Все равно наш биос не видит эти диски.

А значит, они полностью перейдут на программный RAID. Мы даже разделы там создавать не будем.

Если вы хотите следовать «канону» или «принципу», создайте один большой раздел, например на жестком диске.



SATA-жесткий диск

Здесь не нужно ничего особенного выдумывать.

Мы создадим один раздел для всего.

Мы создадим раздел, потому что биос видит эти диски и может даже попытаться с них загрузиться.

Мы даже позже установим на эти диски GRUB, чтобы система вдруг смогла это сделать.



#cat >hdd.part << EOF label: dos label-id: 0x00000000 device: /dev/sdg unit: sectors /dev/sdg1 : start= 2048, size= 1953523120, type=fd, bootable EOF #sfdisk /dev/sdg < hdd.part #sfdisk /dev/sdh < hdd.part #sfdisk /dev/sdi < hdd.part #sfdisk /dev/sdj < hdd.part #sfdisk /dev/sdk < hdd.part #sfdisk /dev/sdl < hdd.part #sfdisk /dev/sdm < hdd.part #sfdisk /dev/sdn < hdd.part



SATA SSD

Здесь для нас все становится интересным.

Во-первых, наши диски имеют размер 2 ТБ.

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

При необходимости можно заменить на GPT. Диски GPT имеют уровень совместимости, который позволяет MBR-совместимым системам видеть первые 4 раздела, если они расположены в пределах первых 2 терабайт. Главное, чтобы загрузочный раздел и раздел bios_grub на этих дисках были в начале.

Это даже позволяет вам загружаться с дисков GPT Legacy/BIOS. Но это не наш случай.

Здесь мы создадим два раздела.

Первый из них будет иметь размер 1 ГБ и использоваться для RAID 1/boot. Второй будет использоваться для RAID 6 и займет все оставшееся свободное пространство, за исключением небольшой нераспределенной области в конце диска.

Что это за необозначенная территория? По данным источников в сети, наши SATA SSD имеют на борту динамически расширяемый SLC-кеш размером от 6 до 78 гигабайт. 6 гигабайт мы получаем «на халяву» из-за разницы между «гигабайтами» и «гибибайтами» в паспорте накопителя.

Остальные 72 гигабайта выделены из неиспользуемого пространства.

Здесь следует отметить, что у нас имеется SLC-кэш, и пространство занято в 4-битном режиме MLC. Для нас это фактически означает, что на каждые 4 гигабайта свободного места мы получим только 1 гигабайт кэша SLC. Умножаем 72 гигабайта на 4 и получаем 288 гигабайт. Это свободное пространство, которое мы не будем выделять, чтобы позволить дискам в полной мере использовать кэш SLC. Таким образом, мы фактически получим до 312 гигабайт SLC-кэша всего от шести накопителей.

Из всех дисков 2 будут использоваться в RAID для резервирования.

Такой объём кеша позволит нам крайне редко в реальной жизни столкнуться с ситуацией, когда запись не идёт в кеш.

Это чрезвычайно хорошо компенсирует самый печальный недостаток памяти QLC — крайне низкую скорость записи при записи данных в обход кэша.

Если ваши нагрузки этому не соответствуют, то рекомендую хорошенько задуматься, как долго ваш SSD протянет под такой нагрузкой с учетом TBW из даташита.



#cat >ssd.part << EOF label: dos label-id: 0x00000000 device: /dev/sda unit: sectors /dev/sda1 : start= 2048, size= 2097152, type=fd, bootable /dev/sda2 : start= 2099200, size= 3300950016, type=fd EOF #sfdisk /dev/sda < ssd.part #sfdisk /dev/sdb < ssd.part #sfdisk /dev/sdc < ssd.part #sfdisk /dev/sdd < ssd.part #sfdisk /dev/sde < ssd.part #sfdisk /dev/sdf < ssd.part



Создание массивов

Сначала нам нужно переименовать машину.

Это необходимо, поскольку имя хоста является частью имени массива где-то внутри mdadm и где-то на что-то влияет. Конечно, массивы потом можно переименовать, но это лишний шаг.



#mcedit /etc/hostname #mcedit /etc/hosts #hostname vdesk0



NVMe твердотельный накопитель



#mdadm --create --verbose --assume-clean /dev/md0 --level=1 --raid-devices=2 /dev/nvme[0-1]n1

Почему --предположим-чистым.

? Чтобы избежать инициализации массивов.

Это справедливо для обоих уровней RAID 1 и 6. Все может работать без инициализации, если это новый массив.

Более того, инициализация SSD-массива при его создании — это пустая трата ресурса TBW. Мы используем TRIM/DISCARD там, где это возможно, на собранных SSD-массивах для их «инициализации».

Для массивов SSD RAID 1 DISCARD поддерживается «из коробки».

Для массивов SSD RAID 6 DISCARD необходимо включить его в параметрах модуля ядра.

Это следует делать только в том случае, если все твердотельные накопители, используемые в массивах уровня 4/5/6 в этой системе, имеют рабочую поддержку ignore_zeroes_data. Иногда попадаются странные диски, которые сообщают ядру, что данная функция поддерживается, но на самом деле ее нет, или функция не всегда работает. На данный момент поддержка доступна практически везде, однако есть старые диски и прошивки с ошибками.

По этой причине поддержка DISCARD для RAID 6 по умолчанию отключена.

Внимание, следующая команда уничтожит все данные на дисках NVMe, «инициализируя» массив «нулями».



#blkdiscard /dev/md0

Если что-то пойдет не так, попробуйте указать шаг.



#blkdiscard --step 65536 /dev/md0



SATA SSD



#mdadm --create --verbose --assume-clean /dev/md1 --level=1 --raid-devices=6 /dev/sd[a-f]1



#blkdiscard /dev/md1



#mdadm --create --verbose --assume-clean /dev/md2 --chunk-size=512 --level=6 --raid-devices=6 /dev/sd[a-f]2

Почему такой большой.

? Увеличение размера chunk положительно влияет на скорость случайного чтения блоков до размера chunk включительно.

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

Поэтому IOPS со всех устройств суммируются.

По статистике 99% IO не превышает 512К.

RAID имеет 6 операций ввода-вывода в секунду на запись Всегда меньше или равно IOPS одного диска.

Когда при случайном чтении IOPS может быть в несколько раз больше, чем у одного диска, и здесь ключевое значение имеет размер блока.

Автор не видит смысла пытаться оптимизировать параметр, который плох в RAID 6 по замыслу, и вместо этого оптимизирует то, в чем RAID 6 хорош.

Мы компенсируем плохую случайную запись RAID 6 с помощью кэша NVMe и трюков с тонким выделением ресурсов.

Мы еще не включили DISCARD для RAID 6. Поэтому мы пока не будем «инициализировать» этот массив.

Сделаем это позже, после установки ОС.



SATA-жесткий диск



#mdadm --create --verbose --assume-clean /dev/md3 --chunk-size=512 --level=6 --raid-devices=8 /dev/sd[g-n]1



LVM на NVMe RAID

Для повышения скорости мы хотим разместить корневую файловую систему на NVMe RAID 1, то есть /dev/md0. Однако этот быстрый массив нам все равно понадобится для других нужд, таких как обмен метаданными, LVM-кэш и метаданные LVM-thin, поэтому мы создадим LVM VG на этом массиве.



#pvcreate /dev/md0 #vgcreate root /dev/md0

Создадим раздел для корневой файловой системы.



#lvcreate -L 128G --name root root

Создадим раздел для подкачки по размеру оперативной памяти.



#lvcreate -L 32G --name swap root



установка ОС

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

Запустите мастер установки системы из среды Ubuntu Live. Нормальная установка.

Только на этапе выбора дисков для установки нужно указать следующее:

  • /dev/md1, — точка монтирования /boot, FS — BTRFS
  • /dev/root/root (он же /dev/mapper/root-root), — точка монтирования / (корень), FS — BTRFS
  • /dev/root/swap (он же /dev/mapper/root-swap), — использовать в качестве раздела подкачки
  • Установите загрузчик в /dev/sda.
Если вы выберете BTRFS в качестве корневой файловой системы, программа установки автоматически создаст два тома BTRFS с именем «@» для / (корневой) и «@home» для /home. Приступим к установке.

Установка завершится модальным диалоговым окном с сообщением об ошибке установки загрузчика.

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

Мы выходим из системы и снова входим в систему, оказываясь на чистом рабочем столе Ubuntu Live. Откройте терминал и еще раз:

#sudo bash

Создайте среду chroot для продолжения установки:

#mkdir /mnt/chroot #mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@ /dev/mapper/root-root /mnt/chroot #mount -o defaults,space_cache,noatime,nodiratime,discard,subvol=@home /dev/mapper/root-root /mnt/chroot/home #mount -o defaults,space_cache,noatime,nodiratime,discard /dev/md1 /mnt/chroot/boot #mount --bind /proc /mnt/chroot/proc #mount --bind /sys /mnt/chroot/sys #mount --bind /dev /mnt/chroot/dev

Давайте настроим сеть и имя хоста в chroot:

#cat /etc/hostname >/mnt/chroot/etc/hostname #cat /etc/hosts >/mnt/chroot/etc/hosts #cat /etc/resolv.conf >/mnt/chroot/etc/resolv.conf

Давайте зайдем в среду chroot:

#chroot /mnt/chroot

Прежде всего, мы доставим посылки:

apt-get install --reinstall mdadm lvm2 thin-provisioning-tools btrfs-tools util-linux lsscsi nvme-cli mc debsums hdparm

Давайте проверим и исправим все пакеты, которые были установлены криво из-за неполной установки системы:

#CORRUPTED_PACKAGES=$(debsums -s 2>&1 | awk '{print $6}' | uniq) #apt-get install --reinstall $CORRUPTED_PACKAGES

Если что-то не получается, возможно, вам придется сначала отредактировать /etc/apt/sources.list. Давайте настроим параметры модуля RAID 6, чтобы включить TRIM/DISCARD:

#cat >/etc/modprobe.d/raid456.conf << EOF options raid456 devices_handle_discard_safely=1 EOF

Давайте немного подправим наши массивы:

#cat >/etc/udev/rules.d/60-md.rules << EOF SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="32768" SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_min", ATTR{md/sync_speed_min}="48000" SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/sync_speed_max", ATTR{md/sync_speed_max}="300000" EOF #cat >/etc/udev/rules.d/62-hdparm.rules << EOF SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/hdparm -B 254 /dev/%k" EOF #cat >/etc/udev/rules.d/63-blockdev.rules << EOF SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/sbin/blockdev --setra 1024 /dev/%k" SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", RUN+="/sbin/blockdev --setra 0 /dev/%k" SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="nvme[0-9]n1", RUN+="/sbin/blockdev --setra 0 /dev/%k" SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="dm-*", ATTR{queue/rotational}=="0", RUN+="/sbin/blockdev --setra 0 /dev/%k" SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="md*", RUN+="/sbin/blockdev --setra 0 /dev/%k" EOF

Что это было.

? Мы создали набор правил udev, которые будут выполнять следующие действия:

  • Установите размер блочного кэша для RAID 6, достаточный для 2020 года.

    Значение по умолчанию, похоже, не менялось с момента создания Linux и уже давно не является адекватным.

  • Зарезервируйте минимум операций ввода-вывода на время проверок/синхронизации массива.

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

  • Ограничьте максимальный ввод-вывод во время проверок/синхронизации массивов.

    Это необходимо для того, чтобы синхронизация/проверка RAID-массивов SSD не испортила ваши диски дотла.

    Особенно это касается NVMe. (Помните про радиатор? Я не шутил.

    )

  • Запретите дискам останавливать вращение шпинделя (HDD) через APM и установите время ожидания для контроллеров дисков на 7 часов.

    Вы можете полностью отключить APM, если ваши диски могут это сделать (-B 255).

    При значении по умолчанию приводы остановятся через пять секунд. Потом ОС захочет сбросить кэш диска, диски снова раскрутятся, и все начнется сначала.

    Диски имеют ограниченное максимальное количество оборотов шпинделя.

    Такой простой цикл по умолчанию может легко уничтожить ваши диски за пару лет. Не все диски этим страдают, но у нас «ноутбучные», с соответствующими настройками по умолчанию, из-за которых RAID выглядит как мини-МАИД.

  • Установка упреждающего чтения на дисках (вращающихся) 1 мегабайт - два последовательных блока/куска RAID 6
  • Отключить упреждающее чтение на SATA SSD
  • Отключить упреждающее чтение на SSD NVMe
  • Отключите упреждающее чтение на всех томах LVM, собранных из SSD.
  • Отключите упреждающее чтение на всех RAID-массивах.

Давайте отредактируем /etc/fstab:

#cat >/etc/fstab << EOF # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5).

# file-system mount-point type options dump pass /dev/mapper/root-root / btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@ 0 1 UUID=$(blkid -o value -s UUID /dev/md1) /boot btrfs defaults,space_cache,noatime,nodiratime,discard 0 2 /dev/mapper/root-root /home btrfs defaults,space_cache,noatime,nodiratime,discard,subvol=@home 0 2 /dev/mapper/root-swap none swap sw 0 0 EOF

Почему это.

? Мы будем искать раздел /boot по UUID. Именование массивов теоретически может измениться.

Остальные разделы будем искать по именам LVM в нотации /dev/mapper/vg-lv, поскольку они идентифицируют разделы достаточно однозначно.

Мы не используем UUID для LVM, поскольку UUID томов LVM и их снимков могут совпадать.

Смонтировать /dev/mapper/root-root. дважды? Да.

Точно.

Особенность BTRFS. Эту ФС можно монтировать несколько раз с разными сабволами.

По этой же причине я рекомендую никогда не создавать снимки LVM активных томов BTRFS. Вы можете получить сюрприз при перезагрузке.

Давайте восстановим конфигурацию mdadm:

#/usr/share/mdadm/mkconf | sed 's/#DEVICE/DEVICE/g' >/etc/mdadm/mdadm.conf

Давайте настроим настройки LVM:

#cat >>/etc/lvm/lvmlocal.conf << EOF activation { thin_pool_autoextend_threshold=90 thin_pool_autoextend_percent=5 } allocation { cache_pool_max_chunks=2097152 } devices { global_filter=["r|^/dev/.

*_corig$|","r|^/dev/.

*_cdata$|","r|^/dev/.

*_cmeta$|","r|^/dev/.

*gpv$|","r|^/dev/images/.

*$|","r|^/dev/mapper/images.*$|","r|^/dev/backup/.

*$|","r|^/dev/mapper/backup.*$|"] issue_discards=1 } EOF

Что это было.

? Мы включили автоматическое расширение тонких пулов LVM при достижении 90% занимаемого пространства на 5% объема.

Мы увеличили максимальное количество блоков кэша для кэша LVM. Мы запретили LVM искать тома LVM (PV) на:

  • устройства, содержащие кэш LVM (cdata)
  • устройства, кэшированные с использованием кеша LVM в обход кеша ( _corig).

    При этом само кэшированное устройство все равно будет сканироваться через кэш (просто ).

  • устройства, содержащие метаданные кэша LVM (cmeta)
  • все устройства в ВГ с именами images. Здесь у нас будут образы дисков виртуальных машин, и мы не хотим, чтобы LVM на хосте активировал тома, принадлежащие гостевой ОС.

  • все устройства в ВГ с именем backup. Здесь у нас будут резервные копии образов виртуальных машин.

  • все устройства, имя которых заканчивается на «gpv» (гостевой физический том)
Мы включили поддержку DISCARD при освобождении свободного места на LVM VG. Будь осторожен.

Из-за этого удаление логических томов на SSD займет довольно много времени.

Особенно это касается SSD RAID 6. Однако по плану мы будем использовать Thin Provisioning, поэтому нам это совершенно не помешает. Давайте обновим образ initramfs:

#update-initramfs -u -k all

Установите и настройте grub:

#apt-get install grub-pc #apt-get purge os-prober #dpkg-reconfigure grub-pc

Какие диски выбрать? Все, кто сд*.

Система должна иметь возможность загрузки с любого работающего диска SATA или SSD. Зачем добавили os-prober.? За чрезмерную независимость и игривые руки.

Он не работает корректно, если один из RAID находится в деградированном состоянии.

Он пытается выполнить поиск ОС на разделах, которые используются в виртуальных машинах, работающих на этом оборудовании.

Если вам это нужно, вы можете оставить его, но имейте в виду все вышеперечисленное.

Рекомендую поискать рецепты избавления от непослушных рук в сети.

На этом мы завершили первоначальную установку.

Пришло время перезагрузиться в новую установленную ОС.

Не забудьте извлечь загрузочный Live CD/USB.

#exit #reboot

Выберите любой из твердотельных накопителей SATA в качестве загрузочного устройства.



LVM на SSD SATA

На этом этапе мы уже загрузились в новую ОС, настроили сеть, apt, открыли эмулятор терминала и запустили:

#sudo bash

Давай продолжим.

«Инициализируем» массив с SATA SSD:

#blkdiscard /dev/md2

Если не помогло, то попробуйте:

#blkdiscard --step 65536 /dev/md2

Создайте LVM VG на SSD SATA:

#pvcreate /dev/md2 #vgcreate data /dev/md2

Зачем еще один ВГ.

? Фактически у нас уже есть виртуальная группа с именем root. Почему бы не объединить все в одну ВГ? Если в ВГ несколько PV, то для корректной активации ВГ должны присутствовать все PV (онлайн).

Исключением является LVM RAID, который мы сознательно не используем.

Мы очень хотим, чтобы в случае сбоя (потеря чтения данных) на любом из массивов RAID 6 операционная система нормально загрузилась и дала нам возможность решить проблему.

Для этого на первом уровне абстракции выделим каждый тип физических «носителей» в отдельный ВГ.

С научной точки зрения разные RAID-массивы относятся к разным «областям надежности».

Не стоит создавать для них дополнительную общую точку отказа, запихивая их в одну VG. Наличие LVM на «аппаратном» уровне позволит нам произвольно вырезать куски разных RAID-массивов, комбинируя их разными способами.

Например - беги одновременно bcache + LVM тонкий, bcache + BT Теги: #linux #ssd #Резервное копирование #Хранилище данных #Настройка Linux #nvme #lvm #raid #mdadm

Вместе с данным постом часто просматривают: