Про одноплатник и про конкурентов
Давайте теперь поближе посмотрим на само устройство. Само устройство это 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
И у нас тут есть несколько полей, которые надо заполнить. Тут надо задать пути к папкам.
Compose Files -> Shared Folder
Data -> Shared Folder
Backup -> Shared Folder
Docker -> Docker Storage
Нам нужно обязательно сделать так чтобы все эти папки физически находились на наших NVME. Потому что у нас в EMMC катастрофически мало памяти.
Поэтому создаем эти папки на нашем диске.
После этого можно нажать на кнопку “Reinstall Docker” и он установится в папку которую мы задали.
Теперь нам нужно установить портейнер. Это делается командой:
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.
Через несколько минут наш контейнер Nextcloud будет создан.
Теперь можем зайти по нашему айпишнику и увидеть интерфейс некстклауда
Но на этом шаге будьте аккуратны
Не нужно сразу же нажимать на кнопку “Установить”
Для начала нужно обязательно выбрать базу MariaDB. Так у нас наш некстклауд будет работать значительно быстрее.
Если мы на этом наше просто нажмем на кнопку “Установить”, то будет использован SQLlite.
Поэтому обязательно на этом шаге нажимаем в этом окне на кнопку “Хранилище и база данных” и переходим во вкладку MySQL/MariaDB и тут вводим креды от нашей базы (мы это создавали несколько шагов назад)
На этом шаге посчи во всех гайдах написано что нужно оставлять localhost в поле “Хост базы данных”, но у меня с ним никак не работало. Я посмотрел айпишник mariadb в контейнере
Это можете сделать и вы у себя. У вас он может быть другой
Готово
Теперь можно перейти в настройки системы и посмотреть сколько у нас памяти.
Тут же можно сразу же установить необходимые плагины.
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 – код нового накопителя.
Я расчитывал на то, что если я вытащу один из дисков, то у меня все продолжит работать так же как работало.
Но как оказалось не работает.
У меня виделся диск
Но при этом файловая система не монтировалась
Но отображалась она при этом как рабочая и был статус онлайн
Теперь глянем что же у нас в консоли
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мегабайт в секунду.
Меня это прям сильно удивило, и я даже не понял сначала куда копать. Но я подумал, что надо отмести сначала самые очевидные варианты.
Сначала я посмотреть какая у меня скорость моей сети. Оказалось что гигабит
Проверил сеть для того чтобы убедиться что все в порядке. Запустил iperf3 на компе с которого закачиваю и куда закачиваю. Оказалось что скорость между ними была 923 Mbits/sec
Это означает что лимит по сети примерно 115 мегабайт в секунду.
Но тем не менее когда я пытаюсь закачивать что-то по сети у меня какие-то катастрофически плохие показатели.
Я подумал, что дело в том, что у меня рейд. И мне ничего не оставалось кроме того как сносить все то, что я так долго устанавливал. Потому что мне казалось, что виной всему этому как раз рейд.
Удаляю рейд и все данные. Форматирую два диска в EXT4. Создаю для каждого раздел и подключаю эти папки.
Тестирую скорость закачивания файлов на один и на второй диск.
Скорость была 22-23
То есть дело было даже не в рейде. Ужасная скорость у нас и на рейде просто на разделах без рейда.
Я подумал, что проблема может быть все-таки в компе с которого я закачиваю файл. И я попробовал закачать этот же файл с этого же компа на другой комп и скорость была 110
Тут стало очевидно, что проблема ни в компе с которого закачиваю, ни в сети. Проблема в банане. Но я не понимаю в чем она заключается.
Я пробую перекинуть файл с одного NVME в banana на другой его NVME. И вижу, что скорость между дисками тоже ужасная
При этом Дмитрий скинул мне скриншот с его скоростью копирования. И на нем видно, что скорость в 10 раз больше чем у меня.
Но если я начинаю копировать какой-нибудь большой файл с одного диска на другой то скоростсь получается очень уж низкая
Как можно видеть по скрину тут скорость 110 мегабит в сенкуду, что примерно 14мегабайт в секунду. Хотя должно бы ЗНАЧИТЕЛЬНО выше. (должно быть около 400)
Если я оставляю только один диск в системе и пробую закачивать что-то на нее, то получается вот так
Сначала я посмотреть какая у меня скорость моей сети. Оказалось что гигабит
Проверил сеть для того чтобы убедиться что все в порядке. Запустил iperf3 на компе с которого закачиваю и куда закачиваю. Оказалось что скорость между ними была 923 Mbits/sec
Это означает что лимит по сети примерно 115 мегабайт в секунду.
Но тем не менее когда я пытаюсь закачивать что-то по сети у меня какие-то катастрофически плохие показатели
На скриншоте выше я на обеих NVME сделал два раздела EXT4 и сначала попробовал закачать файл на один, потом на другой. Скорость была 22-23
При этом я попробовал закачать с этого же компа этот же файл на другой комп и скорость была 110 и тут упор явно был в сеть.
Причем синтетические тесты вроде бы выдают нормальный результат
Грузимся с флешки
Пробуем закинуть файл через ssh и получаем очень низкую скорость
При этом если скидываем этот же файл через SMB то получаем скорость значительно выше
Если начнем перекидывать один файл с одного диска в системе на другой диск в системе (то есть без сети) то тоже получаем довольно низкую скорость
Очень странное происходит когда перекидываешь с одного диска на другой используя SMB. Скорость получается ниже, чем при перекидывании файла по сети на один диск.
И так же странной является скорость копирования файла на самом диске. То есть тут нет ни сети, ни другого диска. Мы копируем один файл из одной папки на диске в другую папку на этом же диске. Скорость тут всего 100мб хотя должна быть значительно больше
Для какого-то референса я взял обычный комп на x86, и поднял на нем OMV. Вставил туда точно так же NVME диски и решил проверить скорость.
Если я скидываю файл через SMB то скорость стабильно около 110MB/s и по графику видно что она никогда не падает. По SSH скорость такая же.
Если я скидываю что-то с одного диска на диск внутри самой системы, то скорость может быть безумная. Пятигигабайтный файл копируется за несколько секунд
Решил взять и поставить другую ОС
Изначально я брал сборку с официальной страницы Banana PI m7 - https://www.armbian.com/bananapi-m7/
Там есть сборка с OMV, ее я как раз и ставил
Решил просто поставить другую
И после того как поставил все заработало отлично
Теперь скорость закачивания файла на любой диск ограничивается только сетью.
Поэтому я начал устанавливать все заново. Опять же, скачиваем файл, точно так же распаковываем его как раньше и записываем его на 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