ОСТОРОЖНО: Из моего опыта следует что, если ставить ОС на USB и грузить с него Raspberry, то случайное выключение питания очень быстро убивает USB диск, на 2ой-3ий раз!!!
Так у меня умерли
1Gb noname mSATA на SupTronics X856 v1.0
256Gb KingSpec M.2 NVMe на Blueendless SSD M2 PCIe
по неизвестной причине через 30-60 часов работы X725 выключается питание, и начинают разряжаться батареи, хотя питание есть!
Что нужно домашнему серверу — отказоустойчивое питание, большой быстрый диск, хорошее охлаждение, маленький размер, мобильность ну чтобы поставить везде где есть хотябы питание! Это и буду делать — питание через X725 с аккумуляторами 18650, диск на NVMe избыточно быстрый для USB3, охлаждение лучше не куда! И стильный маленький корпус — для Raspberry pi нет универсальных корпусов, под всю начинку, но можно взять стандартный и доработать его!
ПК Raspberry Pi 4
Посмотрю что у меня за модель
cat /sys/firmware/devicetree/base/model
Raspberry Pi 4 Model B Rev 1.1
Посмотрим сколько памяти
free -h
total used free shared buff/cache available Mem: 3.8Gi 90Mi 3.5Gi 8.0Mi 242Mi 3.6Gi Swap: 99Mi 0B 99Mi
4Gb!
Охлаждение Raspberry Pi
Беру кулер Low Profile Ice Tower Cooler SKU: EP-0112, почему его вот тут подробно описано Тестирование башенных куллеров ICE Tower от 52Pi для Raspberry Pi 4!.
Часы для Raspberry Pi
У меня были довольно старые DS3231 RTC
В часах стоит аккумуляторная батарейка LIR2032 должна бы под заряжаться, но не знаю как это проверить
UPS для Raspberry Pi
У меня вот такой SupTronics X725 Power Management Board, не покупайте его, есть уже более новая молель, а у этой из заявленных функций работает только электропитание и выключение — включится может от любого прикосновения. Вот тут я его более подробно тестировал X725 Power Management Board так себе шильд под аккумуляторы 18650 для Raspberry Pi!
Кнопка питания для X725
Momentary Self-Reset Power Control Switch
Блок питания
Вот такой, подключается к x725 разъем круглый
USB диск для Raspberry Pi
У меня в начале был mSATA в шильде SupTronics X856 и он отлично работал в тестовой сборке, но потом вдруг скорость на нем упала в 100 раз, стал выключаться…
Срочная замена Blueendless SSD M2 PCIe NVMe/NGFF Type C USB 3,1 и 256Gb KingSpec M.2 NVMe SSD NE Series 2280 PCIE Gen3x4 их тоже подробно тестировал во тут Выбираем USB диск для Raspberry Pi, под загрузку OS, на mSATA или NVMe!
Надеюсь что будет плюс, заработает полностью Wi-Fi так как SupTronics X856 вносит помехи в работу Wi-Fi на Raspberry Pi. С ним 2,4Mgz полностью не работает, не возможно подключиться к AP, а 5Mhz может частично работать.
Корпус для Raspberry Pi
1. Железная электрическая распределительная коробка DIY усилитель металлическая коробка 150*140*70 мм
2. Удлинительный кабель Cat6 RJ45
3. USB 2,0 Удлинительный кабель «Папа-мама» с винт крепления
4. Кабель питания зарядное устройство адаптер 1,2 м DC разъем наконечник разъем шнур кабель ноутбук питание 5,5X2,5
5. Разъем питания DC099 5,5 мм x 2,1 мм,
Корпус DIY — Drill It Yourself
В металлической части корпуса сверлю отверстия под RPI и шильд. Пожалел, что не подвинул их ближе к передней крышке, эти пару миллиметров очень бы помогли у задней крышки! Удобно сверлить отверстия аккумуляторным шуруповертом с режимом сверла, надо только помнить что он в обе стороны умеет вращать сверло…и так и так можно просверлить отверстия, но если сверло вращается по часов то сверлить гораздо проще и быстрее! Перед сверлением я накернил отверстия, надо это делать с осторожностью а то металла сразу прогибается. Места расположения портов продуманы с учетом, внутренностей и кабелей. Кабеля USB можно засунуть под x725, под RPI можно было засунуть USB NVMe, но буквально не хватает пару миллиметров, коннект USB очень длинный!
На пластмассовой крышке есть разметка внутри, это помогает проделывать отверстия под порты. Использовал шуруповерт и дремель с фрезой.
Разъем питания припаял к кабелю питания. В центре плюс красный, с боку земля черный — подсказка есть на блоке питания. На кабелях USB отрезал на коннекторах защиту от сгибания, а то не влезали
x725 и RPI соединил обычными ардуиновскими кабелями, первые 7 пинов(со стороны питания два ряда). Пару раз ошибался и кабеля у меня плавились… но RPI и x725(она и до этого фигово работала) выжили! К x725 подключаю часы DS3231 RTC, как раз в перекинутые на ней пины с RPI. Переднею панель присоединяю в последний момент, кнопку подключаю к соответствующему рзьему на x725
Внутри жуткая мешанина из кабелей, но все влезло! Сверху лежит USB NVMe. Вентилятор CPU перевернул, чтобы работал на выдув, на корупсе как раз рядом отверстия! На 3.3 он достаточно слабо, но дует, зато тихо!
Снаружи все прилично и красиво — специально для малинки брал красный корпус!
Для включения нажимаем и отпускаем единственную кнопку! Для выключения нажимаем её же и держим 3-4 секунд, когда она начнет мигать, значит запущен процесс выключения. Если держать долго, принудительно выключится, если 1-2 секунлды то перезашрузится, все это работает только е сли тсаивть скрипты для x725.
Первичная установка на SD карту
Надо ставить Raspberry Pi OS (32-bit) Lite (ранее известный как Raspbian) в этой версии нет Desktop окружения.
Качаю последнею версию тут www.raspberrypi.org/downloads/raspbian/
А вот тут качаю установщик https://www.raspberrypi.org/downloads/
Чтобы ssh работал, на карте в BOOT разделе надо сделать пустой файл с именем ssh и оно после этого будет работать. После этого можно карту вставлять в малинку, подключать ethernet кабель, включать и смотреть какой малинка получила IP я посмотрел на роутере, можно и на малинку руками зайти и посмотреть коммандой
ifconfig
Имя для ssh: pi
и пароль: raspberry
Подключение и загрузка с NVMe по USB
Подключаюсь и гружусь пока с SD карты.
Смотрим какая сейчас прошивка
vcgencmd bootloader_version
Apr 16 2020 18:11:26 version a5e1b95f320810c69441557c5f5f0a7f2460dfb8 (release) timestamp 1587057086
Не последняя — обновляемся
sudo apt update
sudo apt full-upgrade
sudo rpi-eeprom-update
sudo rpi-eeprom-update -a
Можно и вручную, но только после апдейта всего. Должна появится новая прошивка и надо обновить её, для этого меняем в файле
sudo vi /etc/default/rpi-eeprom-update
слово critical на stableсмотрим какие прошивки есть в
ls /lib/firmware/raspberrypi/bootloader/stable/
ставим последную pieeprom-2020-09-03.bin
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-09-03.bin
перезагружаемся
смотрим
vcgencmd bootloader_version
Sep 3 2020 13:11:43 version c305221a6d7e532693cc7ff57fddfc8649def167 (release) timestamp 1599135103
теперь последняя
NVMe у нас с диском подключен и определятся как sda
Как нибудь скачиваем и кладем на малинку последний образ 2020-08-20-raspios-buster-armhf-lite.zip на сайте нет прямой ссылки, так что как-нибудь!
unzip 2020-08-20-raspios-buster-armhf-lite.zip
Пишем этот образ на NVMe
sudo dd bs=4M if=2020-08-20-raspios-buster-armhf-lite.img of=/dev/sda conv=fsync
Монтируем первый раздел в папку например
sudo mkdir /mnt/usb
sudo mount /dev/sda1 /mnt/usb
тут создаем файл для ssh
sudo touch /mnt/usb/ssh
После этого выключаем малинку, вынимаем SD карту и включаемся!
Все чудесным образом грузится
Делаем второй раздел и шифруем его
Если вам второй раздел не нужен, то и не делайте его! Мне он нужен, чтобы хранить там все данные и вдруг не забить весь диск ими. Так же я буду его шифровать — потому что там будет личная информация, бекапы, пароли и пр.
Опять грузимся с SD. Как говорится операционна система Linux эта файлы — и нам надо всего лишь скопировать все файлы с основного раздела чтобы сделать копию или перенести на новый диск всю ОС!
делаю нужные папки
sudo mkdir /mnt/nvme
sudo mkdir /home/pi/backup/
у меня нужный раздел определился как sda2 монтирую его
sudo mount /dev/sda2 /mnt/nvme
и копирую все файлы
sudo cp -rp /mnt/nvme/* /home/pi/backup/
sudo umount /dev/sda2
ВАЖНО: Копировать надо не просто а с сохоранением всех прав и атрибутов, пожтому в команде p
Смотрю что у нас есть по дискам
sudo fdisk -lu
Информация по NVMe
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors Disk model: Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xcf443634 Device Boot Start End Sectors Size Id Type /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA) /dev/sda2 532480 500118191 499585712 238.2G 83 Linux
Первый раздел не трогаем, а вот sda2 удаляем и на нем будем делать два раздела!
Запускаем fdisk
sudo fdisk /dev/sda
Странная штуковина но её нельзя использовать командами, только интерактивны режим
чтобы удалить второй раздел нажимаем с enter каждый раз
d
2
w
enter
Запускаем
sudo fdisk /dev/sda
чтобы создать новый второй раздел, надо знать где кончается первый это видно в sudo fdisk -lu обычно fdisk сам должен это понять, но вот у меня нет. Добавлем к этой цифре один и 532480 будет началом второго раздела, а 64013096 концом это означает что размер этого раздела будет окло 30GB
n
p
2
532480
64013096
сомртрим
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors Disk model: Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xcf443634 Device Boot Start End Sectors Size Id Type /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA) /dev/sda2 532480 64013096 63480617 30.3G 83 Linux Filesystem/RAID signature on partition 2 will be wiped.
И делаем третий раздел, тут также по цифрам, конец только не указываем использум все что есть
n
p
3
64013097
enter
Чтобы применить иззименения надо еще
w
Делаем фйловую систему
sudo mkfs -t ext4 /dev/sda2
надо также сразу сделать файловую систему на третем разделе, а то малинка псле загрузки постарается расшириться и занять её тоже(как мне кажется)
sudo mkfs -t ext4 /dev/sda3
Монотирую
sudo mount /dev/sda2 /mnt/nvme
и копирую все файлы обратно
sudo cp -rp /home/pi/backup/* /mnt/nvme/
Выключаю, вынимаю SD карту, включаю и теперь два раздела!
Безопасное хранение данных
Можно зашифровать весь диск, но тогда надо вводить на загрузке всегда пароль. Неудобно — так что я буду шифровать только один раздел. Это позволить защитить данные на нем от прямого чтения — если нет шифрования в любой момент можно подключить диск к другому пк и прочитать все данные. Тут тоже надо будет вводит пароль, но в момент его подключения, а не на загрузке.
Обновляемся если не обновлялись
sudo apt update
sudo apt full-upgrade
Устанавливаю то что нужно для шифрования
sudo apt-get install cryptsetup
sudo modprobe dm-crypt sha256 aes
Делаю шифро раздел, тут надо будет придумать пароль
sudo cryptsetup --verify-passphrase luksFormat /dev/sda3 -c aes -s 256 -h sha256
Инициализирую шифро раздел, тут надо будет ввести пароль
sudo cryptsetup luksOpen /dev/sda3 mYdata
И создаю файловую систему, но не просто так а сразу с файловой таблицей. А то если просто создавать, она будет сосздана при певром монтирование — в случае с шифро разделом это создает большую непонятную нагрузку на систему, так что сразу пусть делает!
sudo mkfs -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/mYdata
И монтирую
sudo mkdir /mnt/nvme
sudo mount /dev/mapper/mYdata /mnt/nvme
Шифрование конечно нагружает процессор и скорость записи падает.
Я замераял скрость создания файла
sudo dd if=/dev/zero of=test.file count=10000 bs=1048576
Скорости были от 200 до 70 мб в секунду, мне эти результаты не понятны…
Источник бесперебойного питания для Raspberry Pi
У меня было X725 Power Management Board вы эту плату не берите, производитель уже продает новую модель x728 — она должна быть лучше, даже если половина заявленных функций наней работает то она точно уже лучше чем x725. Подробно тут X725 Power Management Board так себе шильд под аккумуляторы 18650 для Raspberry Pi!
На Raspberry Pi надо включить I2C все делают через меню, я сделаю через консоль.
Надо отредактировать файл
sudo vi /boot/config.txt
раскоментить строки
dtparam=i2c_arm=on dtparam=i2s=on
А так же в файл
sudo vi /etc/modules
добавить
i2c-dev i2c-bcm2835
И устанавливаем
sudo apt-get install -y python-smbus i2c-tools
Теперь по инструкциям производителя www.suptronics.com/miniPCkits/x725-software.html ставим
wget https://raw.githubusercontent.com/suptronics/x750_x725-script/master/x750.sh
sudo bash x750.sh
printf "%s\n" "alias x750off='sudo x750shutdown.sh'" >> ~/.bashrc
sudo reboot
Он устанавливает скрипты
sudo python /home/pi/x750ups.py
этот показывает напряжение и процент зарядки, результат выводит постоянно в консоль
****************** Voltage: 4.22V Battery: 104% ****************** ****************** Voltage: 4.22V Battery: 104% ******************
А это команда жестко выключает малинку и x725
x750off
из консоли срабатывает из скриптов нет, но можно вот так выключить
sudo /usr/local/bin/x750shutdown.sh
мне нужно просто один раз получает значение напряжения, так что я убираю все лишнее создаю срипт
sudo vi /home/pi/x725bv.py
с кодом
#!/usr/bin/env python import struct import smbus import sys import time def readVoltage(bus): address = 0x36 read = bus.read_word_data(address, 2) swapped = struct.unpack("<H", struct.pack(">H", read))[0] voltage = swapped * 1.25 /1000/16 return voltage bus = smbus.SMBus(1) # 0 = /dev/i2c-0 (port I2C0), 1 = /dev/i2c-1 (port I2C1) while True: print ("{0}".format(readVoltage(bus))) exit()
И баш срикпт, который будет выключать все когда напряжение батарей станет меньше 3,5 это около двух часов работы малинки под нагрузкой
vi /home/pi/batteryoff.sh
с кодом
#!/bin/bash a=`sudo python /home/pi/x725bv.py` compare=`echo "$a>3.5" | bc` if [ $compare -eq 0 ] then sudo /usr/local/bin/x750shutdown.sh fi
Это будет жесткое октлючение… не самый удачный авриант… с кнопки x725 по другому отключает, по хорошему!
Чтобы он запускался сам раз в минуту добавляем в
sudo crontab -e
строку
* * * * * sh /home/pi/batteryoff.sh
Статический IP
в файле раскоменчиваем строки
sudo vi /etc/dhcpcd.conf
и пишем свое, свободный IP вашей подсети(не из DHCP диапазона), и роутер и DNS
interface eth0 static ip_address=192.168.1.11/24 static routers=192.168.1.1 static domain_name_servers=8.8.8.8
Подключаемся к Wi-Fi
Разблокируем Wi-Fi
sudo rfkill unblock 0
Посмотрим сети
sudo iwlist wlan0 scan
Добавляем в файл
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
вот это со своим именем сети и паролем
network={ ssid="ITCOOKY_CEO_B" psk="passwrod" }
Перезапускаем Wi-Fi
wpa_cli -i wlan0 reconfigure
И секундч через 20, видим подключение
ifconfig
Подключаемся часы ds3231
Добавдляе в
sudo vi /boot/config.txt
строку
dtoverlay=i2c-rtc,ds3231
Удалеям ненастоящие часы
sudo apt-get purge fake-hwclock
Конфигурируем время
sudo dpkg-reconfigure tzdata
Перезагружаюсь
Смотрю какое сейчас время на часах
sudo hwclock -r
Та можно записать в часы системное время
sudo hwclock -w
Чтобы система брала время из часов на загрузке добавляю в
sudo vi /etc/rc.local
перед exit 0 добавить
/sbin/hwclock -s
это должно писать из RTC время в систему на загрузке
Проверяю, отключаю синхронизацию времени
sudo systemctl disable systemd-timesyncd
Выключаю малинку, и включаю, время актуальное сработало!
включаю обратно синхранизацию времени, для ней как я понимаю нужен интернет
sudo systemctl enable systemd-timesyncd
Ну вот и все, получилось длинно, а ведь еще будет система мониторинга статуса сервера с информрованием… потом…
UPD: Программное отключение Raspberry Pi и X725 Power Management Board
Проблема, с X725 Power Management Board идет срикпт который отключает её саму, но не Raspberry Pi!
После устноавки сриптом от производителя он появляется тут /usr/local/bin/x750shutdown.sh он посылает 1 на 18 пин и X725 выключается, обрывая питание Raspberry Pi, что не очень хорошо… что очень плохо!
Второй скрипт /etc/x750pwr.sh слушает нажатие кнопки на пин 4, и посылает на пин 17 сигнал 1 — так что когда кнопка нажимается достаточно долго, запускает отключение Raspberry Pi, а x725 отключается когда пропадает сигнал на 17 что значит что малинка выключалась — это супер правильное выключение! Проблема в том что нельзя послать на пин 4 сигнал 1 с другого пина малинки чтобы запустить это отключение программно(малинка отключает на X725 нет)… надо полностью как-то нажать кнопку, это можно сделать транзистором!
Беру транзистор 2N3904 подсоединяю по схеме
В транзисторах путаюсь так что смотрите как на картинке. Красный провод от транзистора подпаиваю к красному на кнопке, у самой кнопки а не как на схеме.
На малинке транзистор подключен к пин 27 и земле, на схеме эти пины перекинуты на X725.
И надо нажимать кнопку всего от 3 до 6 секунд, если нажимать 8 должно жестко выключится. Поэтому делаем скрипт
sudo vi bshut.sh
с кодом
#!/bin/bash shdown=27 echo "$shdown" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$shdown/direction echo "1" > /sys/class/gpio/gpio$shdown/value shtdownstart=$(date +%s%N | cut -b1-13) while true; do if [ $(($(date +%s%N | cut -b1-13)-$shtdownstart)) -gt 600 ]; then exit fi done
Запускаем
sudo bash ./bshut.sh
И сработывает нормальное выключение как с кнопки!
Добавить комментарий