На фото – металлический корпус для использования Raspberry Pi 3 с платой X820 V3.0. Плата позволяет подключать к Малинке 2.5” жесткий диск или SSD в разъем SATA. Я давно уже собрал Малинку в таком корпусе и решил использовать как Машину Времени для OS X.
Железо для Time Machine
- Raspberry Pi 3 B+ (можно и 2 B, если у вас такая завалялась)
- Micro SD карточка (рекомендую 16Гб, но можно и меньше)
- Micro SD Reader (для записи образа ОС для Raspberry Pi)
- металлический корпус(опционально, красиво ведь)*
- 2.5” SSD (можно и жесткий диск, я использовал SSD на 1Тб)*
- X820 V3.0*
- Ethernet-кабель **
* Можно использовать USB-диск вместо этих пунктов.
** Я не рекомендую WiFi, но можно и через него. Если у вас металлический корпус, то нужно использовать внешний свисток.
Установка и настройка Raspbian
ЗапишитеRaspbian Buster Liteна SD-карточку. Инструкции по записи образа есть на сайте Raspberry Pi. На Маке я также использую balenaEtcher, удобно записывать образы и не нужно предварительно их распаковывать. Далее нужно активировать SSH, в данном случае, достаточно создать пустой файл ssh и закинуть в корень на SD-карточку. Вставьте SD-карточку в Raspberry Pi, подключите Ethernet-кабель, кабель питания и включите Raspberry Pi.
Далее нужно настроить статический адрес, пропишите вручную на Raspberry Pi(если ваш маршрутизатор это поддерживает) или укажите в настройках на самом маршрутизаторе. Например, в MikroTik это делается путем выбора “Make Static”:
Залогиньтесь на Raspberry Pi по SSH (или используйте клавиатуру и монитор), смените пароль для пользователя pi (по умолчанию, логин pi, пароль raspberry), запустите raspi-config (настройте часовой пояс, hostname и т.д.):
1 | pi@raspberrypi ~ $ passwd |
2 | pi@raspberrypi ~ $ sudo raspi-config |
И обновите Raspbian:
1 | pi@raspberrypi ~ $ sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade –y && sudo apt autoremove -y |
После обновления желательно перезагрузиться:
1 | pi@raspberrypi ~ $ sudo reboot |
Настройка диска для Time Machine
Установите hfsutils и hfsprogs:
1 | pi@PiTime:~ $ sudo apt install hfsutils hfsprogs |
Отформатируйте диск в файловую систему hfsplus. Эта операция удалит все данные с диска!
1 | pi@PiTime:~ $ sudo mkfs.hfsplus /dev/sda2 - v TimeMachine |
Note: здесь предполагается, что ваш диск sda2, если к Raspberry не подключены другие диски, то так и будет. Если что, проверить можно командой lsblk:
Note: на скриншоте раздел уже примонтирован, у вас его еще не будет.
Создайте точку монтирования:
1 | pi@PiTime:~ $ sudo mkdir /media/tm && sudo chmod -R 777 /media/tm && sudo chown pi:pi /media/tm |
Определите UUID вашего диска (sda2):
1 | pi@PiTime:~ $ ls -lha /dev/disk/by-uuid | grep sda2 |
В моем случае это cf85c068-aabc-399a-8f7c-993fa788e8de
Отредактируйте fstab, чтобы иметь возможность монтировать диск:
1 | pi@PiTime:~ $ sudo nano /etc/fstab |
Добавьте следующую строку (заменив на тот UUID, который вы определили у себя)
1 | UUID=cf85c068-aabc-399a-8f7c-993fa788e8de /media/tm hfsplus force,rw,user,noauto 0 0 |
Должно получиться вот так:
Попробуйте примонтировать отформатированный раздел:
1 | pi@PiTime:~ $ sudo mount /media/tm |
Проверьте:
Note: у меня диск уже частично заполнен, у вас в столбце Use% будет 0%.
Note: диск не монтируется автоматически, т.к. автоматическое монтирование может быть не надежно. Монтирование будет настроено далее.
Установка Netatalk
Установите пакет:
1 | pi@PiTime:~ $ sudo apt install netatalk -y |
Проверьте, что он установился и все работает:
01 | pi@PiTime:~ $ netatalk -V |
02 | netatalk 3.1.12 - Netatalk AFP server service controller daemon |
04 | This program is free software; you can redistribute it and/or modify it under |
05 | the terms of the GNU General Public License as published by the Free Software |
06 | Foundation; either version 2 of the License, or (at your option) any later |
07 | version. Please see the file COPYING for further information and details. |
09 | netatalk has been compiled with support for these features: |
11 | Zeroconf support: Avahi |
12 | Spotlight support: Yes |
15 | cnid_metad: /usr/sbin/cnid_metad |
16 | tracker manager: /usr/bin/tracker daemon |
17 | dbus-daemon: /usr/bin/dbus-daemon |
18 | afp.conf: /etc/netatalk/afp.conf |
19 | dbus-session.conf: /etc/netatalk/dbus-session.conf |
20 | netatalk lock file : /var/lock/netatalk |
Настройка Netatalk
Отредактируйте nsswitch.conf:
1 | pi@PiTime:~ $ sudo nano /etc/nsswitch.conf |
Добавьте mdns4 и mdns в строку, которая начинается с hosts, должно получиться как-то так:
01 | pi@PiTime:~ $ cat /etc/nsswitch.conf |
13 | hosts: files mdns4_minimal [NOTFOUND= return ] dns mdns4 mdns |
И отредактируйте afp.conf:
1 | pi@PiTime:~ $ sudo nano /etc/netatalk/afp.conf |
Добавьте следующее:
2 | mimic model = TimeCapsule6,106 |
Должно получиться как-то так:
01 | pi@PiTime:~ $ cat /etc/netatalk/afp.conf |
03 | ; Netatalk 3.x configuration file |
07 | ; Global server settings |
08 | mimic model = TimeCapsule6,106 |
15 | ; basedir regex = /xxxx |
18 | ; path = /path/to/volume |
20 | ; [My Time Machine Volume] |
21 | ; path = /path/to/backup |
Note: все, что начинается с точки с запятой, – это комментарии, их можно даже удалить.
Запустите оба сервиса:
1 | pi@PiTime:~ $ sudo service avahi-daemon start |
2 | pi@PiTime:~ $ sudo service netatalk start |
Монтирование диска и запуск сервисов во время загрузки
Отредактируйте crontab:
1 | pi@PiTime:~ $ sudo crontab -e |
И добавьте строку:
1 | @reboot sleep 30 && mount /media/tm && sleep 10 && chown pi:pi /media/tm && service avahi-daemon start && service netatalk start |
Note: монтирование произойдет после 30-секундной паузы, это даст возможность жесткому диску запуститься, в случае с SSD sleep 30 можно убрать. && разделяют команды и предназначены для того, чтобы каждая следующая команда запускалась только после успешного выполнения предыдущей. Т.о. сервисы будут запущены только после успешного монтирования раздела.
Подключитесь к Time Machine
В Finder нажмите Command + K и в появившемся окне введите IP-адрес Raspberry Pi:
В качестве логина используйте pi и пароль, который ранее установили.
В системных параметрах откройте настройки Time Machine, вы дожны там увидеть новый сервер Time Machine:
Note: диск может отображаться как по IP-адресу, так и по hostname.local (c hostname, который вы указали для Raspberry в настройках).
Troubleshooting
Если OS X показывает ошибку, что раздел read only, проверьте, есть ли права на каталог у пользователя pi:
Если нет, смените владельца, запустите команду:
1 | pi@PiTime:~ $ sudo chown pi:pi /media/tm |
Или запустите проверку файловой системы HFS+ (если в выводе dmesg есть ошибки ФС):
1 | pi@PiTime:~ $ sudo umount /dev/sda2 |
2 | pi@PiTime:~ $ sudo fsck .hfsplus -f /dev/sda2 |
3 | pi@PiTime:~ $ sudo mount /dev/sda2 |
4 | pi@PiTime:~ $ sudo reboot |
Tips and tricks
Если вы используете Ethernet, то можете отключить WiFi добавив в файл /boot/config.txt следующую строку:
Если вы не используете протокол IPv6 (а в большинстве случаев это так), то отключите его добавлением в файл /etc/sysctl.conf следующих строк:
2 | net.ipv6.conf.all.disable_ipv6 = 1 |
После всех настроек Raspberry нужно перезагрузить.
При первом бекапе можно снять ограничение скорости следующей командой (запускается на OS X):
1 | sudo sysctl debug.lowpri_throttle_enabled=0 |
Заключение
Рецепт в целом годный и рабочий. Скорость бекапа проверял и по WiFi и по Ethernet. WiFi, конечно, сильно проигрывает. MBP закачивал первый бекап часов 10-12 (свыше 200Гб, шифрование бекапа Time Machine было включено). Возможно ускорить процесс можно используя подобный гигабитный Ethernet-адаптер, не пробовал (не хватило портов в маршрутизаторе). Адаптер очень классный, быстро определяется и гигабит выдает без проблем, рекомендую.
Отдельное спасибо автору этой заметки.
После того, как раздел дважды навернулся, отформатировал его в ext4, теперь всё работает стабильно.