Прос­нись, самурай, вре­мя делать бэкапы баз дан­ных! Но что­бы не разорить­ся на плат­ных сер­висах, я покажу, как прев­ратить Raspberry Pi Zero W за условные $10 в лич­ную бэкап‑машину, которая будет заливать фай­лы в бес­плат­ный Google Drive.

Вот что нам сегод­ня понадо­бит­ся:

  • Raspberry Pi Zero W (при­дет­ся купить);
  • ка­бель micro USB (у тебя он уже валя­ется где‑то);
  • порт USB, выда­ющий минимум 1 А (в любом ком­пе такой есть, да и кир­пичик‑заряд­ка от ста­рого телефо­на у тебя тоже где‑то валя­ется);
  • кар­точка microSD (опять же, при­берись на пол­ках, там валя­ется минимум 4 Гбай­та памяти).

Идея в том, что­бы один раз пот­ратить­ся на малин­ку и получить пол­ностью авто­ном­ный девайс, который мож­но вру­бить куда угод­но — и он будет делать что‑нибудь полез­ное. Нап­ример, бэкапы базы дан­ных.

 

Готовим Raspberry Pi

Сна­чала ска­чай прог­рамму Etcher и образ Raspberry Pi OS lite без рабоче­го сто­ла. Рабочие сто­лы?! Там, куда мы нап­равля­емся, не нуж­ны рабочие сто­лы!

info

Я все это запус­каю на macOS, но дей­ствия, опи­сан­ные в этом руководс­тве, при­мени­мы и на дру­гих опе­раци­онных сис­темах.

Вставь microSD-кар­точку в компь­ютер, запус­ти Etcher и залей ска­чан­ный образ Raspberry Pi OS на кар­точку.

Дос­тань кар­точку и вставь обратно. Она дол­жна появить­ся дис­ком под име­нем boot.

Вот так выглядит этот самый «Linux»
Вот так выг­лядит этот самый «Linux»

Пе­ред тем как запихи­вать кар­точку в малину, нам нуж­но нем­ного нас­тро­ить опе­раци­онку. Давай нас­тро­им под­клю­чение к бес­про­вод­ному интерне­ту.

Фай­лы обя­затель­но редак­тируй какой‑нибудь тул­зой типа nano или vim, что­бы не накося­чить с тек­сто­вой кодиров­кой условным встро­енным в ОС блок­нотом. Соз­дай файл с наз­вани­ем wpa_supplicant.conf пря­мо в кор­не кар­точки. Содер­жание это­го фай­ла дол­жно быть сле­дующим.

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="мой_вайфай"
scan_ssid=1
psk="пароль_от_вайфая"
key_mgmt=WPA-PSK
}

Ко­неч­но, замени мой_вайфай и пароль_от_вайфая на наз­вание и пароль от сво­ей сети WiFi. Нас­коль­ко я понял, эта вер­сия малины работа­ет толь­ко с бес­про­вод­ными сетями 2,4 ГГц.

Да­лее вклю­чи SSH на малине, так как управлять мы ей будем имен­но по SSH. Соз­дай пус­той файл в кор­не кар­точки с име­нем ssh. Можешь исполь­зовать коман­ду $ touch ssh.

Вот и все! Малина нас­тро­ена. Вставь кар­точку в малину и под­клю­чи ее к питанию! Убе­дись, что питание ты под­клю­чаешь в разъ­ем с помет­кой PWR. Пер­вый запуск малины зай­мет при­мер­но 90 секунд, ей нуж­но про­вес­ти пер­воначаль­ную нас­трой­ку.

 

Подключаемся к малине

Те­перь тебе нуж­но узнать IP-адрес малины. Можешь вос­поль­зовать­ся бес­плат­ной прог­раммой LanScan на macOS или любым ана­логом типа nmap на дру­гих плат­формах. Най­ди адрес с име­нем девай­са типа raspberry pi.

Те­перь ты можешь под­клю­чить­ся пря­мо к малине! И все по воз­духу! Под­клю­чись к поль­зовате­лю pi со стан­дар­тным паролем raspberry. Можешь вос­поль­зовать­ся коман­дой $ ssh pi@{IP_малины}.

Для безопас­ности поменяй стан­дар­тный пароль коман­дой $ sudo raspi-config. Пос­ле переза­пус­ти малину коман­дой $ sudo shutdown -r now.

В прин­ципе, можешь не вык­лючать вход на малину по паролю, если малина никог­да не будет дос­тупна из интерне­та. Но если хочешь на 100 % обе­зопа­сить свои бэкапы, то вклю­чи вход по SSH толь­ко по клю­чам, соз­дав файл ~/.ssh/authorized_keys на малине с SSH-клю­чом, а пос­ле перезаг­рузи малину.

Ну и не забудь выс­тавить PasswordAuthentication no в фай­ле нас­трой­ки SSH — /etc/ssh/ssh_config!

Те­перь ты офи­циаль­но в малине. Вре­мя писать скрип­ты бэкапа!

 

Зависимости бэкап-скрипта

Скрипт будет край­не прос­тым. Будем исполь­зовать тул­зу mongodump, что­бы заб­рать всю информа­цию из базы дан­ных в одну папоч­ку, а потом тул­зу drive, что­бы залить всю пре­лесть на Google Drive. Про­ще пареной репы!

За­пус­ти сле­дующие коман­ды на малине для уста­нов­ки drive.

$ wget https://github.com/odeke-em/drive/releases/download/v0.3.9/drive_armv6
$ sudo mv drive_armv6 /usr/bin/gdrive
$ sudo chmod +x /usr/bin/gdrive

За­меть, что мы уста­нав­лива­ем тул­зу имен­но для архи­тек­туры ARMv6. Теперь можешь написать $ gdrive version на малине, что­бы убе­дить­ся, что все сра­бота­ло.

Те­перь тебе нуж­но нас­тро­ить drive, что­бы он смог работать с опре­делен­ной пап­кой. Соз­дай пап­ку для бэкапов коман­дой $ mkdir ~/backups и пос­ле запус­ти коман­ду $ gdrive init ~/backups, что­бы зас­тавить drive син­хро­низи­ровать эту пап­ку. Скрипт выдаст тебе ссыл­ку, нуж­но будет авто­ризо­вать­ся в сер­висе через бра­узер (уже на сво­ем ком­пе, отку­да под­клю­чал­ся к малине).

Мо­жешь про­верить нас­трой­ку, про­писав коман­ду $ cat ~/.gd/credentials.json. Дол­жно выдать твои клю­чи авто­риза­ции.

info

Ес­ли ты исполь­зуешь какую‑то дру­гую базу дан­ных, а не Mongo, то про­игно­рируй все до сек­ции «Заг­ружа­ем дамп базы дан­ных в обла­ко». Прос­то убе­дись, что у тебя есть коман­да, которая поз­воля­ет тебе заг­ружать все дан­ные любимой базы дан­ных в опре­делен­ную пап­ку на малине. Эту пап­ку мы и будем заг­ружать в обла­ко.

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

Но и тут у нас будут неболь­шие проб­лемы из‑за огра­ничен­ности выб­ранно­го железа. На Raspberry Pi Zero далеко не уехать — про­цес­сор в нашей малине 32-бит­ный, а пос­ледняя Mongo запус­кает­ся лишь на 64-бит­ных сис­темах. Что же делать?

Пос­тупим очень хит­ро: за неиме­нием луч­шего решения вос­поль­зуем­ся прос­тым кос­тылем. Мы зас­тавим наш сер­вер, на котором уже уста­нов­лена Mongo, собирать дамп базы дан­ных — а потом будем его заг­ружать к себе в Google Drive.

По­чему бы нам прос­то тог­да не запус­кать все на сер­вере, раз уж на то пош­ло? Да потому что малина — это кибер­панк, который мы зас­лужили, а бэкапы всег­да дол­жны быть внеш­ними.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


5 комментариев

  1. Аватар

    jjjj

    23.01.2021 в 20:34

    а зачем какой-то ethcer? dd уже не катируется? а зачем еще и lanscan какой-то, если можно банально посмотреть выдачу адресов на роутере? а почему надо сначала создавать файл authorized_keys, перезагружать и только потом править конфик чтоб отключить парольный вход, который по факту до след перезагрузки не будет отключен? зачем вообще перезагружать если можно просто демона перезапустить? а почему ключ сразу не скопировать программой ssh-copy-id?

    • Аватар

      Andrey_Vladimirovich

      01.02.2021 в 10:25

      Там ещё много зачем, как и почему. Например, у меня данных в моей папке на компе в сжатом виде около 50 ГБт. Как я их буду закидывать через Интернет? К тому же каждый месяц производится полная копия, значит в год полных копий будет на 600 ГБт плюс ещё создаются каждый день инкрементные. Кто выдаёт на халяву такое хранилище? Ответ прост, никто.

  2. Аватар

    Роман

    13.02.2021 в 07:59

    Ну как учебное пособие для совсем новичков может и сойдёт. Но огрехов много как уже написали.
    И даже несмотря на много где не простых *nix-way решений, а каких то дополнительных тулз, главный что флэшка имеет ограниченный ресурс записи.
    Так что задумка может и хороша, но только как учебный материал, потому что бесполезна.

    Но автор хорошо пишет, легко, вполне пошагово. Наверняка такой материал тоже нужен.

  3. Аватар

    Smart_Fox

    15.03.2021 в 12:46

  4. Аватар

    shion

    27.03.2021 в 21:30

    имхо, более интересный вариант сделать из малины NAS (например, OpenMediaVault, есть образ), а в малину как вариант через юсб3 подключить 1 или 2 винта 2.5″ (я не тестировал, но думаю что подтянуться)
    но цена будет конечно выше, думаю итоговый комплект будет примерно равна soho или полупрофессиональному NAS

Оставить мнение