BananaNAS

Про одноплатник и про конкурентов

Давайте теперь поближе посмотрим на само устройство. Само устройство это banana pi m7. Собственно это одноплатник, который работает на ARM процессоре. И процессор тут Rockchip RK3588. И хоть он вышел еще в середине 2022 года, но это все еще один из топовых процессоров на ARM, которые используются в одноплатниках. Например, в Raspberry PI 5, который вышел недавно стоит процессор BCM2712, который вообще вышел вроде бы совсем недавно, в середине этого года, но процессор у распберри проигрывает этому процентов на тридцать. Ну и у банана восемь физических ядер, тогда как у малинки их четыре.

Кроме процессора у нас тут нормальный по размеру выход HDMI. Это радует. Мне всегда не нравились HDMI мелкого размера. HDMI 2.1 up to 8K@60FPS

Два порта Ethernet скоростью в 2.5gbps, WiFi 6 and BT5.2

PCIe 3.0 x4 NVMe SSD

Два Type-c разъема. Один из которых работает только на зарядку, второй может работать как otg, или как DP в режиме 8K@30FPS.

Можно выбрать 8GB/16GB/32GB(LPDDR4x) оперативки и 64/128 eMMC

И у устройства вообще мало конкурентов.

Вот если взять тот же Raspberry PI 5 то там тоже можно подключить плату с переходником на NVME, но только меня лично растраивает то, что у распберри нет EMMC и грузится все равно придется с флешки. Ну или можно сделать сам NVME загрузочным диском.

В случае же с бананом у тебя вся ОС находится в EMMC, которой довольно много и которая работает на довольно приличных скоростях (у меня не получилось выяснить какая скорость именно у этой EMMC, но судя по всему это что-то вроде 400mbps)

У banana pi m7 вообще довольно мало конкурентов если использовать его именно для этих целей. Я знаю только про одно - “CM3588 ARM board”. Про него Линус рассказывал в одном из своих видео. У этого девайса такой же процессор. И возможность подключить сразу 4 NVME диска. И вроде бы все хорошо, но меня в нем сильно смущает совсем небольшая распространенность и небольшое количество документации.

Установка ОС

Вообще изначально мне Дмитрий дал эту штуку уже собранной, настроенной. Вообще по его словам у него эту штуку можно купить уже даже с дисками.

Но мне для видео все равно хотелось взять и установить все самому. Чтобы понять насколько все просто или насколько все сложно. Ну и вообще углубиться в детали.

Изначально тут установлена такая операционная система для NAS, которая называется OpenMediaVault. Конечно, это не операционная система. По сути это форк дебиана без десктопа (то есть без wm/dm). И собсвенно эта операционная система довольно просто устанавливается и предоставляет вам веб интерфейс уже для управления NAS.

И сделано это довольно удобно. Эта штука опенсорсная и что мне нравится она поддерживает множество расширений-плагинов.

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

Можно сразу же расшарить все файлы, по умолчанию там уже есть FTP, самба, SSH.

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

Но что мне БОЛЬШЕ всего понравилось так это то, что через него можно поставить некстклауд. И это прям вообще круто.

Установка OpenMediaVault на Banana PI m7

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

Далее этот образ мы можем сразу же записать на microsd карточку через какую-нибудь balenaether (если вы на винде) или через dd (если вы на linux)

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

После этого можно будет зайти на OMV через веб-интерфейс. Для этого можете со своего основного компа зайти на айпи адрес, который покажется в интерфейсе (ну или можете посмотреть айпи адрес у вас в роутере)

Сейчас вы можете уже переходить к настройке OMV, но если я рекомендую сделать и следующий шаг. Но его при желании можно и пропустить.

А следующий шаг заключается в том, чтобы перестать использовать microsd вообще. И закачать все по внутреннюю память самого банана (она называется EMMC). Тут этой памяти 32 или 64 гигабайта. Что вполне хватит для того чтобы закачать туда систему.

Лично я довольно активно использую различные одноплатники в самых разных проектах. Например, у меня дома есть 4 штуки 3д-принтера, которые фактически работают на raspberry pi. И я заметил, что из всей электроники microsd это самое слабое место. Они очень часто или полностью перестают работать, или как-то деградируют и на них появляются бэды или быввют ситуации когда принтер улетает в ошибку из-за microsd. Поэтому лично я их терпеть не могу и стараюсь от них избавиться. Ну а так как тут это довольно просто, то грех это не сделать.

OVERLAY

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

Для этого можете скачать файл armsom-sige7-pcie-split.dts

переместить этот файл в корень /

и выполнить команду

sudo armbian-add-overlay armsom-sige7-pcie-split.dts

OMV Долго загружается

Если у вас OMV загржуается слишком долго и висит на процессе с сетью, то можно это поправить

Для этого введите команду

sudo systemctl edit systemd-networkd-wait-online.service

Она создаст файл

/etc/systemd/system/systemd-networkd-wait-online.service.d

В этот файл вам нужно добавить следующее содержимое

[Service]
ExecStart=
ExecStart=/usr/lib/systemd-networkd-wait-online --any

Установка OpenMediaVault на EMMC

Для установки нам понадобится microsd (как раз та, на которую вы уже установили систему и подойдет) и еще обычная USB-A флешка.

Файл с образом, который мы уже скачали нам нужно кинуть на флешку. Для удобства мы можем назвать его как-нибудь покороче, чтобы не набирать потом полное имя файла. Можем переименовать его в omv.armb.xz

Флешка должна быть отформатирована в exFAT, иначе наш линукс не увидит ее если будет FAT или NTFS.

Загружаем наш банан с microsd и после того как все загрузилось вставляем флешку в USB разъем.

После этого выполняем команду lsblk и смотрим что флешка подключилась

После монтируем флешку и переходим в смонтированную директорию

sudo mount /dev/sda1 /mnt
cd /mnt

Далее нам надо распаковать файл omv.armb.xz и сделать из него armb.img

Это делается командой:

unxz omv.armb.xz

И после этого накатываем образ в EMMC

sudo dd if=armb.img of=/dev/mmcblk0 bs=10M

И после этого уже отключаем питание. Вынимаем флешку и микросд и загружаемся, если все сделали правильно, то система должна загрузиться с EMMC.

NEXTCLOUD

На этом шаге можем считать что у нас все готово. И мы можем нормально пользоваться системой.

Я лично хочу пойти чуть дальше и установить еще и некстклауд.

Для этого нам надо зайти по SSH

ssh root@192.168.0.111

После того как подключились в банану скачаем плагины разработчика выполнив команду:

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

После этого обновим странинцу и идем в раздел Plugins

И тут в поиске ищем и устанавливаем плагин openmediavault-compose x.x.x

После установки появится раздел System -> omv-extras., в нем будет только одна галочка “Docker repo”. Мы должны ее включить и сохранить конфиг для того чтобы мы смогли установить докер

Переходим в раздел Services -> Compose -> Settings

Screenshot_129

И у нас тут есть несколько полей, которые надо заполнить. Тут надо задать пути к папкам.

Compose Files -> Shared Folder

Data -> Shared Folder

Backup -> Shared Folder

Docker -> Docker Storage

Screenshot_130

Нам нужно обязательно сделать так чтобы все эти папки физически находились на наших NVME. Потому что у нас в EMMC катастрофически мало памяти.

Поэтому создаем эти папки на нашем диске.

Screenshot_131

После этого можно нажать на кнопку “Reinstall Docker” и он установится в папку которую мы задали.

Screenshot_132

Теперь нам нужно установить портейнер. Это делается командой:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Заходим в браузере на наш айпишник на порт 9443. Там надо установить пользователя и пароль. (убедитесь что ввели https в начале)

https://192.168.0.111:9443/

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

Создаем MariaDB

Идем в портейнере в раздел Stacks > Add stacks

В поле name дайте какое-нибудь название типа mariadb

и после этого вставляем следующий код в окно

version: '2'

services: 
  db: 
    image: mariadb:10.5
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes: 
      - /var/lib/docker/volumes/Nextcloud_Database:/var/lib/mysql
    environment: 
      - MYSQL_ROOT_PASSWORD=password 
      - MYSQL_PASSWORD=password 
      - MYSQL_DATABASE=nextcloud 
      - MYSQL_USER=nextcloud

При этом измените тут пароль на свой.

и нажимаем на кнопку Deploy the stack. Несколько секунд это все будет разворачиваться и потом мы увидим новый стак.

Меняем порт OpenMediaVault

Это не обязательный, но желательный шаг. Нам лучше поменять порт у OMV для того чтобы освободить 80 порт для некстклауда.

в OpenMediaVault, идем в раздел System > Workbench

меняем Port на 8090 и нажимаем Save.

Теперь наш OMV будет доступен по ссылке

http://192.168.0.114:8090

Устанавливаем и настраиваем nextcloud на OpenMediaVault

Заходим в portainer и идем в Volumes > Add Volume. Создаем два volume: nextcloud_config и nextcloud_data. Все что нужно сделать это просто добавить имя и нажать на Create a volume

Теперь идем в Containers > Add Container

Называем контейнер Nextcloud и в строку image field вставляем следующий код

linuxserver/nextcloud

Нажимаем на кнопку “+ map additional port” и вводим 8080 в host и 80 в container (tcp).

ниже переходим в таб Volumes, кликаем**+ map additional volume** два раза чтобы появились два раздела.

в первый вводим /config и выбираем nextcloud_config volume. Во второй вводим /data и выбираем nextcloud_data volume.

Идем во вкладку Network и выбираем host.

Во вкладке Restart Policy, выбираем Unless Stopped

После этого нажимаем кнопку Deploy the container.

Screenshot_134

Screenshot_135

Screenshot_136

Screenshot_137

Через несколько минут наш контейнер Nextcloud будет создан.

Screenshot_127

Теперь можем зайти по нашему айпишнику и увидеть интерфейс некстклауда

Screenshot_138

Но на этом шаге будьте аккуратны

Не нужно сразу же нажимать на кнопку “Установить”

Для начала нужно обязательно выбрать базу MariaDB. Так у нас наш некстклауд будет работать значительно быстрее.

Если мы на этом наше просто нажмем на кнопку “Установить”, то будет использован SQLlite.

Поэтому обязательно на этом шаге нажимаем в этом окне на кнопку “Хранилище и база данных” и переходим во вкладку MySQL/MariaDB и тут вводим креды от нашей базы (мы это создавали несколько шагов назад)

На этом шаге посчи во всех гайдах написано что нужно оставлять localhost в поле “Хост базы данных”, но у меня с ним никак не работало. Я посмотрел айпишник mariadb в контейнере

Это можете сделать и вы у себя. У вас он может быть другой

Screenshot_140

Готово

Screenshot_141

Теперь можно перейти в настройки системы и посмотреть сколько у нас памяти.

Тут же можно сразу же установить необходимые плагины.

RAID

Теперь давайте проверим самое интересное.

В принципе мы покупаем такую вот штуковину ради двух дисков. Один в принципе есть и в самой банане. Но мы берем и покупаем два. Два мы покупаем скорей всего из-за рейда.

Что приятно у нас тут софтовый а не хардовый рейд.

Ну и давайте представим, что один из наших дисков просто умер.

Вопрос в следующем.

Будет ли вся эта штуковина работать с одним диском.

Насколько просто будет взять и восстановить рейд добавив еще один диск.

Ну и с какими сложностями я вообще столкнусь.

Тут у меня рейд btrfs. Я с ним раньше даже не работал. Все мои рейды которые у меня есть и были до этого были на ext4 и я использовал mdadm.

Сейчас же хочется посмотреть, а что ж будет с btrfs

BTRFS

Сейчас OMV монтирует наш рейд в папку /srv и мы можем посмотреть инфу про смонтированный рейд

root@bananapim7:/# sudo btrfs filesystem usage /srv/dev-disk-by-uuid-797d11bb-af5e-4c44-84ff-f458503b0737
Overall:
    Device size:                   1.84TiB
    Device allocated:              5.02GiB
    Device unallocated:            1.84TiB
    Device missing:                  0.00B
    Device slack:                    0.00B
    Used:                          2.31GiB
    Free (estimated):              1.84TiB      (min: 1.84TiB)
    Free (statfs, df):             1.84TiB
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:                3.53MiB      (used: 0.00B)
    Multiple profiles:                  no

Data,RAID0: Size:4.00GiB, Used:2.24GiB (55.92%)
   /dev/nvme1n1    2.00GiB
   /dev/nvme0n1    2.00GiB

Metadata,RAID0: Size:1.00GiB, Used:70.83MiB (6.92%)
   /dev/nvme1n1  512.00MiB
   /dev/nvme0n1  512.00MiB

System,RAID0: Size:16.00MiB, Used:16.00KiB (0.10%)
   /dev/nvme1n1    8.00MiB
   /dev/nvme0n1    8.00MiB

Unallocated:
   /dev/nvme1n1  929.00GiB
   /dev/nvme0n1  951.36GiB

И если нам нужно то мы можем размонтировать диск

sudo umount /srv/dev-disk-by-uuid-797d11bb-af5e-4c44-84ff-f458503b0737
root@bananapim7:~# sudo btrfs filesystem show
Label: none  uuid: 797d11bb-af5e-4c44-84ff-f458503b0737
        Total devices 2 FS bytes used 2.31GiB
        devid    1 size 931.51GiB used 2.51GiB path /dev/nvme1n1
        devid    2 size 953.87GiB used 2.51GiB path /dev/nvme0n1

Затем заменить его на новый:

btrfs replace start <удаляемое устройство или его ID> <добавляемое устройство> <путь, куда смонтирована btrfs>

командой:

btrfs replace start 1 /dev/nvme1n1

где: 3 – это номер отсутствующего диска, а sdg – код нового накопителя.

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

Но как оказалось не работает.

У меня виделся диск

Screenshot_142

Но при этом файловая система не монтировалась

Screenshot_143

Но отображалась она при этом как рабочая и был статус онлайн

Теперь глянем что же у нас в консоли

root@bananapim7:/srv# sudo btrfs filesystem usage dev-disk-by-uuid-797d11bb-af5e-4c44-84ff-f458503b0737
ERROR: not a btrfs filesystem: dev-disk-by-uuid-797d11bb-af5e-4c44-84ff-f458503b0737
root@bananapim7:/srv# sudo btrfs filesystem show
warning, device 1 is missing
ERROR: cannot read chunk root
Label: none  uuid: 797d11bb-af5e-4c44-84ff-f458503b0737
        Total devices 2 FS bytes used 2.32GiB
        devid    2 size 953.87GiB used 2.51GiB path /dev/nvme0n1
        *** Some devices missing

Теперь попробуем вставить новый диск (который даже не отформатирован, и там нет разделов) и будем пробовать восстановить все

Конечно идеальным вариантом было бы если бы сам OMV сказал нам что вижу диск и предложил бы все сам восстановить

root@bananapim7:~# btrfs rescue chunk-recover /dev/nvme0n1
Scanning: DONE in dev0
No mapping for 325894144-325910528
Couldn't map the block 325894144
Couldn't read tree root
open with broken chunk error

Короче говоря, какая-то проблема с суперблоками, которую я никаким образом не смог решить. Я, конечно, не утверждаю, что никто не сможет решить. Понятное дело, что тут есть какое-то решение. Но я найти его не смог. Я не смог ни смонтировать один диск из рейда ни смог и восстановить рейд добавив второй пустой диск.

Поэтому все свои эксперименты с btrfs я просто закончил.

ZFS

После этого я решил попробовать ZFS. Я до этого его не использовал. Я думал, что это просто файловая система, но судя по всему это прям какой-то огромный комбайн. И реализация выглядит действительно интересной. Ну и судя по статьям и видосам из видео zfs действительно достойна внимания.

Но только вот в рамках OMV я тоже не смог с ней подружиться. Если устанавливаешь плагин ZFS, то ничего не работает. Он ругается на то, что не установлены какие-то плагины. Тут, конечно, можно установить zfs прям из консоли через ssh, но тогда я так понимаю OMV не будет его видеть и смысл в OMV потеряется.

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

MD

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

Причем работает он как и ожидается. Если захочешь эмулировать поломку и вынимаешь один диск из двух, то второй все равно можно смонтировать, прочитать все данные. Можно добавить новый диск и сделать восстановление и рейд продолжит работать в обычном режиме. А если подцепляешь старый диск, который до этого отключался то md вообще сам начинает все восстанавливать, тебе даже делать ничего не нужно.

ТЕСТИРОВАНИЕ СКОРОСТИ

После того как я установил OMV, перенес ее на EMMC, сделал рейд, установил портейнер, докер, мариюдб, некстклауд я подумал ну что же, давайте ка тестировать.

И запустил тест скорости дисков. И ахуел.

У меня скорость была невероятно низкой. Примерно в 20 раз медленнее, чем ожидается. Примерно 20мегабайт в секунду.

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

Сначала я посмотреть какая у меня скорость моей сети. Оказалось что гигабит

Screenshot_152

Проверил сеть для того чтобы убедиться что все в порядке. Запустил iperf3 на компе с которого закачиваю и куда закачиваю. Оказалось что скорость между ними была 923 Mbits/sec

Screenshot_154

Это означает что лимит по сети примерно 115 мегабайт в секунду.

Но тем не менее когда я пытаюсь закачивать что-то по сети у меня какие-то катастрофически плохие показатели.

Я подумал, что дело в том, что у меня рейд. И мне ничего не оставалось кроме того как сносить все то, что я так долго устанавливал. Потому что мне казалось, что виной всему этому как раз рейд.

Удаляю рейд и все данные. Форматирую два диска в EXT4. Создаю для каждого раздел и подключаю эти папки.

Тестирую скорость закачивания файлов на один и на второй диск.

Screenshot_157

Скорость была 22-23

То есть дело было даже не в рейде. Ужасная скорость у нас и на рейде просто на разделах без рейда.

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

Screenshot_158

Тут стало очевидно, что проблема ни в компе с которого закачиваю, ни в сети. Проблема в банане. Но я не понимаю в чем она заключается.

Я пробую перекинуть файл с одного NVME в banana на другой его NVME. И вижу, что скорость между дисками тоже ужасная

im

При этом Дмитрий скинул мне скриншот с его скоростью копирования. И на нем видно, что скорость в 10 раз больше чем у меня.

image

Но если я начинаю копировать какой-нибудь большой файл с одного диска на другой то скоростсь получается очень уж низкая

Screenshot_163

Как можно видеть по скрину тут скорость 110 мегабит в сенкуду, что примерно 14мегабайт в секунду. Хотя должно бы ЗНАЧИТЕЛЬНО выше. (должно быть около 400)

Если я оставляю только один диск в системе и пробую закачивать что-то на нее, то получается вот так

Сначала я посмотреть какая у меня скорость моей сети. Оказалось что гигабит

Screenshot_152

Проверил сеть для того чтобы убедиться что все в порядке. Запустил iperf3 на компе с которого закачиваю и куда закачиваю. Оказалось что скорость между ними была 923 Mbits/sec

Screenshot_154

Это означает что лимит по сети примерно 115 мегабайт в секунду.

Но тем не менее когда я пытаюсь закачивать что-то по сети у меня какие-то катастрофически плохие показатели

Screenshot_157

На скриншоте выше я на обеих NVME сделал два раздела EXT4 и сначала попробовал закачать файл на один, потом на другой. Скорость была 22-23

При этом я попробовал закачать с этого же компа этот же файл на другой комп и скорость была 110 и тут упор явно был в сеть.

Screenshot_158

Причем синтетические тесты вроде бы выдают нормальный результат

Screenshot_160

Screenshot_161

Грузимся с флешки

Пробуем закинуть файл через ssh и получаем очень низкую скорость

Screenshot_165

При этом если скидываем этот же файл через SMB то получаем скорость значительно выше

Screenshot_164

Если начнем перекидывать один файл с одного диска в системе на другой диск в системе (то есть без сети) то тоже получаем довольно низкую скорость

Screenshot_166

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

Screenshot_167

И так же странной является скорость копирования файла на самом диске. То есть тут нет ни сети, ни другого диска. Мы копируем один файл из одной папки на диске в другую папку на этом же диске. Скорость тут всего 100мб хотя должна быть значительно больше

Screenshot_168

Для какого-то референса я взял обычный комп на x86, и поднял на нем OMV. Вставил туда точно так же NVME диски и решил проверить скорость.

Если я скидываю файл через SMB то скорость стабильно около 110MB/s и по графику видно что она никогда не падает. По SSH скорость такая же.

Screenshot_171

Screenshot_169

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

Screenshot_170

Решил взять и поставить другую ОС

Изначально я брал сборку с официальной страницы Banana PI m7 - https://www.armbian.com/bananapi-m7/

Там есть сборка с OMV, ее я как раз и ставил

Screenshot_1712

Решил просто поставить другую

И после того как поставил все заработало отлично

Screenshot_1711

Теперь скорость закачивания файла на любой диск ограничивается только сетью.

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

А если мы не будем его использовать, то нам нужно самим отформатировать диски, смонтировать их, добавить в fstab, сделать рейд. На первый взгляд это кажется сложным, но на самом деле это довольно просто.

Температура

apt update
apt upgrade
apt install nvme-cli
nvme smart-log /dev/nvme0n1 | grep -i '^temperature'
nvme smart-log /dev/nvme1n1 | grep -i '^temperature'
cat /sys/class/thermal/thermal_zone0/temp

Установка ZFS

sudo apt install zfs-dkms zfsutils-linux

MDADM RAID

Для начала надо установить mdadm

apt install mdadm

Для начала с помощью fdisk надо удалить все имеющиеся разделы с обоих дисков. Вводим команды

/dev/nvme1n1
/dev/nvme0n1

И там нажимаем d и потом w

Далее нужно удалить старые метаданные и подпись на дисках:

wipefs --all --force /dev/nvme0n1
wipefs --all --force /dev/nvme1n1

и можем создать рейд из двух наших дисков

mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/nvme1n1 /dev/nvme0n1

Рейд будет создаваться довольно долго. Время создания зависит от объёма и скорости ваших дисков. В моем случае на это ушло около часа.

После этого можем посмотреть статус

bananapim7:/dev:# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 nvme0n1[1] nvme1n1[0]
      976630464 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  1.3% (13603968/976630464) finish=77.9min speed=205772K/sec
      bitmap: 8/8 pages [32KB], 65536KB chunk

После того как рейд будет создан можем посмотреть инфу о нем

sudo mdadm --detail /dev/md0
bananapim7:/dev:# sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Oct 25 17:35:08 2024
        Raid Level : raid1
        Array Size : 976630464 (931.39 GiB 1000.07 GB)
     Used Dev Size : 976630464 (931.39 GiB 1000.07 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Fri Oct 25 18:56:53 2024
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : bananapim7:0  (local to host bananapim7)
              UUID : 2f662fa6:7185ff01:4246286b:1b984e4d
            Events : 913

    Number   Major   Minor   RaidDevice State
       0     259        0        0      active sync   /dev/nvme1n1
       1     259        1        1      active sync   /dev/nvme0n1

Или можем посмотреть инфу про конкретный диск в рейде

sudo mdadm --examine /dev/nvme1n1 /dev/nvme0n1
bananapim7:/dev:# sudo mdadm --examine /dev/nvme1n1 /dev/nvme0n1
/dev/nvme1n1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 2f662fa6:7185ff01:4246286b:1b984e4d
           Name : bananapim7:0  (local to host bananapim7)
  Creation Time : Fri Oct 25 17:35:08 2024
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953260976 sectors (931.39 GiB 1000.07 GB)
     Array Size : 976630464 KiB (931.39 GiB 1000.07 GB)
  Used Dev Size : 1953260928 sectors (931.39 GiB 1000.07 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=48 sectors
          State : clean
    Device UUID : cd6570e8:1460122d:7d259d05:c43201fb

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Oct 25 18:56:53 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : d2287525 - correct
         Events : 913


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/nvme0n1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 2f662fa6:7185ff01:4246286b:1b984e4d
           Name : bananapim7:0  (local to host bananapim7)
  Creation Time : Fri Oct 25 17:35:08 2024
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 2000145072 sectors (953.74 GiB 1024.07 GB)
     Array Size : 976630464 KiB (931.39 GiB 1000.07 GB)
  Used Dev Size : 1953260928 sectors (931.39 GiB 1000.07 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=46884144 sectors
          State : clean
    Device UUID : 3c0cc1cd:529b8fdc:f214233c:8c2d072b

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Oct 25 18:56:53 2024
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : d04da610 - correct
         Events : 913


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

После этого надо на нашем рейде создать файловую систему

sudo mkfs.ext4 /dev/md0

И можем ее примонтировать

sudo mkdir /mnt/raid1
sudo mount /dev/md0 /mnt/raid1

Ну и пожем посмотреть примонтировался ли он

bananapim7:/mnt:# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
mmcblk0      179:0    0  58.3G  0 disk
└─mmcblk0p1  179:1    0  57.6G  0 part  /var/log.hdd
                                        /
mmcblk0boot0 179:32   0     4M  1 disk
mmcblk0boot1 179:64   0     4M  1 disk
zram0        252:0    0   3.9G  0 disk  [SWAP]
zram1        252:1    0    50M  0 disk  /var/log
zram2        252:2    0     0B  0 disk
nvme1n1      259:0    0 931.5G  0 disk
└─md0          9:0    0 931.4G  0 raid1 /mnt/raid1
nvme0n1      259:1    0 953.9G  0 disk
└─md0          9:0    0 931.4G  0 raid1 /mnt/raid1

И можем посмотреть размер (Тут немного старнно, что размер диска 916G, а свободное пространство 870G, даже не знаю почему так)

bananapim7:/mnt:# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            106M     0  106M   0% /dev
tmpfs           794M  9.7M  785M   2% /run
/dev/mmcblk0p1   57G  2.0G   55G   4% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /tmp
/dev/zram1       47M  2.9M   41M   7% /var/log
tmpfs           794M     0  794M   0% /run/user/0
/dev/md0        916G   28K  870G   1% /mnt/raid1

Кстати, еще не лишним будет сохранить конфиг нашего рейда

sudo mdadm --detail --scan --verbose | sudo tee -a /etc/mdadm/mdadm.conf

После этой команды у нас сгенерируется файл /etc/mdadm/mdadm.conf

# mdadm.conf
#
# !NB! Run update-initramfs -u after updating this file.
# !NB! This will ensure that initramfs has an uptodate copy.
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This configuration was auto-generated on Fri, 25 Oct 2024 17:31:51 +0300 by mkconf
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=bananapim7:0 UUID=2f662fa6:7185ff01:4246286b:1b984e4d
   devices=/dev/nvme0n1,/dev/nvme1n1

После этого нам нужно сгенерировать initramfs

sudo update-initramfs -u

Ну и добавим его в fstab

nano /etc/fstab
bananapim7:mdadm:# cat /etc/fstab
UUID=291717e4-91c7-494c-a656-2c6a4ecf6df8 / ext4 defaults,noatime,commit=120,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
/dev/md0 /mnt/raid1 ext4 defaults 0 0

Еще нужно выполнить команду

update-initramfs -u

Попробуем перезагрузиться и проверить что все смонтировалось

Создание файла mdadm.conf

файле mdadm.conf находится информация о RAID-массивах и компонентах, которые в них входят. Для его создания выполняем следующие команды:

mkdir /etc/mdadm

echo “DEVICE partitions” > /etc/mdadm/mdadm.conf

mdadm –detail –scan –verbose | awk ‘/ARRAY/ {print}’ » /etc/mdadm/mdadm.conf

Пример содержимого:

DEVICE partitions ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=proxy.dmosk.local:0 UUID=411f9848:0fae25f9:85736344:ff18e41d

** в данном примере хранится информация о массиве /dev/md0 — его уровень 1, он собирается из 2-х дисков.*

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

Создание файловой системы для массива выполняется также, как для раздела, например:

mkfs.ext4 /dev/md

** данной командой мы создаем на md0 файловую систему ext4.*

или:

mkfs.xfs /dev/md0

** для файловой системы xfs.*

Примонтировать раздел можно командой:

mount /dev/md0 /mnt/raid1

** в данном случае мы примонтировали наш массив в каталог /mnt.*

Чтобы данный раздел также монтировался при загрузке системы, добавляем в fstab.

Сначала смотрим идентификатор раздела:

RAID to fstab

Добавляем в fstab. Для того чтобы рейд автоматически монтировался при загрузке

Выполняем команду blkid

bananapim7:raid1:# blkid
/dev/nvme0n1: UUID="796b99e0-a4bb-37fb-2716-3524bc66c22e" UUID_SUB="ba0c4f7e-2cfb-3267-8bd6-8e492c986396" LABEL="bananapim7:0" TYPE="linux_raid_member"
/dev/mmcblk0p1: LABEL="armbi_root" UUID="291717e4-91c7-494c-a656-2c6a4ecf6df8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="081e6659-2c6b-aa45-bd51-638291c8647b"
/dev/md0: UUID="8303e651-3da5-4ca0-afac-01a815de2417" BLOCK_SIZE="4096" TYPE="ext4"
/dev/nvme1n1: UUID="796b99e0-a4bb-37fb-2716-3524bc66c22e" UUID_SUB="1c0b8c83-ad4b-f771-b2d9-00fe41da7f34" LABEL="bananapim7:0" TYPE="linux_raid_member"
/dev/zram1: LABEL="log2ram" UUID="3badb293-8981-4b0c-be1d-832c4d436e6d" BLOCK_SIZE="4096" TYPE="ext4"
/dev/zram0: UUID="7b52a01a-8fb3-4ca8-a4e3-634da235a596" TYPE="swap"

и теперь копируем UUID рейда чтобы вставить его в /etc/fstab

nano /etc/fstab

и вставляем

UUID=291717e4-91c7-494c-a656-2c6a4ecf6df8 / ext4 defaults,noatime,commit=120,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
UUID="8303e651-3da5-4ca0-afac-01a815de2417" /mnt/raid1 ext4 defaults 0 0

Если рейд ломается

Если вдруг у вас отваливается ваш рейд, то он будет называться md127 вместо md0, в этом нет ничего страшного. Нужно просто остановить 127 рейд командой

mdadm --stop /dev/md127

И пересобрать рейд. Это делается очень быстро

mdadm --assemble --update=name --name=0 /dev/md0 /dev/nvme1n1 /dev/nvme0n1

Если отваливается то скорей всего это из-за того что вы не пересобрали ядро командой initramfs

Проверка целостности

Для проверки целостности вводим:

echo 'check' > /sys/block/md0/md/sync_action

Результат проверки смотрим командой:

cat /sys/block/md0/md/mismatch_cnt

** если команда возвращает 0, то с массивом все в порядке.*

Остановка проверки:

echo 'idle' > /sys/block/md0/md/sync_action

Восстановление RAID

Рассмотрим два варианта восстановлении массива.

Замена диска

В случае выхода из строя одного из дисков массива, команда cat /proc/mdstat покажет следующее:

cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb[0]
   1046528 blocks super 1.2 [2/1] [U_]

** о наличии проблемы нам говорит нижнее подчеркивание вместо U — **[U_]** вместо **[UU]**.*

Или:

mdadm -D /dev/md0
...
    Update Time : Thu Mar  7 20:20:40 2019
       State : clean, degraded
...

** статус degraded говорит о проблемах с RAID.*

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

mdadm /dev/md0 –remove /dev/sdc

Если нам нужно заменить диск, но при этом он в mdadm имеет рабочее состояние, мы получим ошибку:

… device or resource busy

Сначала, нам нужно пометить диск как сбойный:

mdadm /dev/md0 –manage –fail /dev/sdc

** в данном примере диск sdb массива md0 будет помечен сбойным.*

Теперь удаляем:

mdadm /dev/md0 –remove /dev/sdc

Теперь добавим новый:

mdadm /dev/md0 --add /dev/sde

Смотрим состояние массива:

mdadm -D /dev/md0
...
    Update Time : Thu Mar  7 20:57:13 2019
       State : clean, degraded, recovering
...
  Rebuild Status : 40% complete
...

** recovering говорит, что RAID восстанавливается; Rebuild Status — текущее состояние восстановления массива (в данном примере он восстановлен на 40%).*

Если синхронизация выполняется слишком медленно, можно увеличить ее скорость. Для изменения скорости синхронизации вводим:

echo '10000' > /proc/sys/dev/raid/speed_limit_min

** по умолчанию скорость speed_limit_min = 1000 Кб, speed_limit_max — 200000 Кб. Для изменения скорости, можно поменять только минимальную.*

Пересборка массива

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

mdadm --assemble --scan

** данная команда сама найдет необходимую конфигурацию и восстановит RAID.*

Также, мы можем указать, из каких дисков пересобрать массив:

mdadm --assemble /dev/md0 /dev/sdb /dev/sdc

Запасной диск (Hot Spare)

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

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

mdadm /dev/md0 --add /dev/sdd

Информация о массиве изменится, например:

mdadm -D /dev/md0
...
  Number  Major  Minor  RaidDevice State
    0    8    16     0    active sync  /dev/sdb
    2    8    48     1    active sync  /dev/sdc

​    3    8    32     -    spare  /dev/sdd

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

mdadm /dev/md0 --fail /dev/sdb

И смотрим состояние:

mdadm -D /dev/md0
...
  Rebuild Status : 37% complete
...
  Number  Major  Minor  RaidDevice State
    3    8    32     0    spare rebuilding  /dev/sdd
    2    8    48     1    active sync  /dev/sdc

​    0    8    16     -    faulty  /dev/sdb
...

** как видим, начинается ребилд. На замену вышедшему из строя sdb встал hot-spare sdd.*

Добавить диск к массиву

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

Добавляем диск к массиву:

mdadm /dev/md0 --add /dev/sde

Новый диск мы увидим в качестве spare:

4    8    16     -    spare  /dev/sde

Теперь расширяем RAID:

mdadm -G /dev/md0 --raid-devices=3

** в данном примере подразумевается, что у нас RAID 1 и мы добавили к нему 3-й диск.*

Удаление массива

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

Если нам нужно полностью разобрать RAID, сначала размонтируем и остановим его:

umount /mnt

** где /mnt — каталог монтирования нашего RAID.*

Если мы получим ошибку umount: /mnt: target is busy, то смотрим пользовательские процессы, которые мешают отмонтировать раздел:

fuser -vm /mnt

И останавливаем их.

mdadm -S /dev/md0

** где /dev/md0 — массив, который мы хотим разобрать.*

Если мы получим ошибку mdadm: fail to stop array /dev/md0: Device or resource busy, с помощью команды

lsof -f – /dev/md0

… смотрим процессы, которые используют раздел и останавливаем их.

Затем очищаем суперблоки на всех дисках, из которых он был собран:

mdadm --zero-superblock /dev/sdb
mdadm --zero-superblock /dev/sdc
mdadm --zero-superblock /dev/sdd

** где диски /dev/sdb, /dev/sdc, /dev/sdd были частью массива md0.*

А также удаляем метаданные и подпись:

wipefs --all --force /dev/sd{b,c,d}

DOCKER

Скрипт автоматической установки Docker для Linux, подходит для x86/ARM32/ARM64 систем:

sudo apt-get update

sudo apt-get install -y curl

curl -fsSL https://get.docker.com -o get-docker.sh

chmod +x get-docker.sh

sudo ./get-docker.sh

Вначале загружается файл get-docker.sh с сервера get.docker.com, затем выставляем права на запуск, и запускаем скрипт установки с правами sudo .

Ход установки:

Для проверки текущей версии Docker необходимо выполнить команду:

docker version

Проверить статус работы Docker сервиса, команда:

sudo systemctl status docker

DOCKER TO RAID

После того как мы установили докер нам надо перенести все файлы докера в наш рейд

cd /mnt/raid1

mkdir docker

Останавливаем сервис докера

sudo service docker stop

Добавляем конфиг в котором переопределим путь

Перейдем в директорию /etc/docker и в ней создадим файл daemon.json и добавим в него следующее содержимое:

{
  "data-root": "/path/to/your/docker"
}

Тут задайте путь до своего рейда. В моем случае это /mnt/raid1/docker.

Копируем содержимое в новое место

sudo rsync -aP /var/lib/docker/ /mnt/raid1/docker

Переименовываем старую директорию

sudo mv /var/lib/docker /var/lib/docker.old

Теперь можем затестить все ли в порядке

Перезапуск docker daemon

sudo service docker start

Тестируем

Если все хорошо, то все должно запуститься. Если все ок, то можем удалить старую директорию

sudo rm -rf /var/lib/docker.old

Contents

comments powered by Disqus