На фото – металлический корпус для использования 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 и т.д.):
pi@raspberrypi ~ $ passwd pi@raspberrypi ~ $ sudo raspi-config
И обновите Raspbian:
pi@raspberrypi ~ $ sudo apt update && sudo apt upgrade -y && sudo apt dist-upgrade –y && sudo apt autoremove -y
После обновления желательно перезагрузиться:
pi@raspberrypi ~ $ sudo reboot
Настройка диска для Time Machine
Установите hfsutils и hfsprogs:
pi@PiTime:~ $ sudo apt install hfsutils hfsprogs
Отформатируйте диск в файловую систему hfsplus. Эта операция удалит все данные с диска!
pi@PiTime:~ $ sudo mkfs.hfsplus /dev/sda2 -v TimeMachine
Note: здесь предполагается, что ваш диск sda2, если к Raspberry не подключены другие диски, то так и будет. Если что, проверить можно командой lsblk:
Note: на скриншоте раздел уже примонтирован, у вас его еще не будет.
Создайте точку монтирования:
pi@PiTime:~ $ sudo mkdir /media/tm && sudo chmod -R 777 /media/tm && sudo chown pi:pi /media/tm
Определите UUID вашего диска (sda2):
pi@PiTime:~ $ ls -lha /dev/disk/by-uuid | grep sda2
В моем случае это cf85c068-aabc-399a-8f7c-993fa788e8de
Отредактируйте fstab, чтобы иметь возможность монтировать диск:
pi@PiTime:~ $ sudo nano /etc/fstab
Добавьте следующую строку (заменив на тот UUID, который вы определили у себя)
UUID=cf85c068-aabc-399a-8f7c-993fa788e8de /media/tm hfsplus force,rw,user,noauto 0 0
Должно получиться вот так:
Попробуйте примонтировать отформатированный раздел:
pi@PiTime:~ $ sudo mount /media/tm
Проверьте:
Note: у меня диск уже частично заполнен, у вас в столбце Use% будет 0%.
Note: диск не монтируется автоматически, т.к. автоматическое монтирование может быть не надежно. Монтирование будет настроено далее.
Установка Netatalk
Установите пакет:
pi@PiTime:~ $ sudo apt install netatalk -y
Проверьте, что он установился и все работает:
pi@PiTime:~ $ netatalk -V netatalk 3.1.12 - Netatalk AFP server service controller daemon This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Please see the file COPYING for further information and details. netatalk has been compiled with support for these features: Zeroconf support: Avahi Spotlight support: Yes afpd: /usr/sbin/afpd cnid_metad: /usr/sbin/cnid_metad tracker manager: /usr/bin/tracker daemon dbus-daemon: /usr/bin/dbus-daemon afp.conf: /etc/netatalk/afp.conf dbus-session.conf: /etc/netatalk/dbus-session.conf netatalk lock file: /var/lock/netatalk
Настройка Netatalk
Отредактируйте nsswitch.conf:
pi@PiTime:~ $ sudo nano /etc/nsswitch.conf
Добавьте mdns4 и mdns в строку, которая начинается с hosts, должно получиться как-то так:
pi@PiTime:~ $ cat /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files group: files shadow: files gshadow: files hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
И отредактируйте afp.conf:
pi@PiTime:~ $ sudo nano /etc/netatalk/afp.conf
Добавьте следующее:
[Global] mimic model = TimeCapsule6,106 [Time Machine] path = /media/tm time machine = yes
Должно получиться как-то так:
pi@PiTime:~ $ cat /etc/netatalk/afp.conf ; ; Netatalk 3.x configuration file ; [Global] ; Global server settings mimic model = TimeCapsule6,106 [Time Machine] path = /media/tm time machine = yes ; [Homes] ; basedir regex = /xxxx ; [My AFP Volume] ; path = /path/to/volume ; [My Time Machine Volume] ; path = /path/to/backup ; time machine = yes
Note: все, что начинается с точки с запятой, – это комментарии, их можно даже удалить.
Запустите оба сервиса:
pi@PiTime:~ $ sudo service avahi-daemon start pi@PiTime:~ $ sudo service netatalk start
Монтирование диска и запуск сервисов во время загрузки
Отредактируйте crontab:
pi@PiTime:~ $ sudo crontab -e
И добавьте строку:
@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:
Если нет, смените владельца, запустите команду:
pi@PiTime:~ $ sudo chown pi:pi /media/tm
Или запустите проверку файловой системы HFS+ (если в выводе dmesg есть ошибки ФС):
pi@PiTime:~ $ sudo umount /dev/sda2 pi@PiTime:~ $ sudo fsck.hfsplus -f /dev/sda2 pi@PiTime:~ $ sudo mount /dev/sda2 pi@PiTime:~ $ sudo reboot
Tips and tricks
Если вы используете Ethernet, то можете отключить WiFi добавив в файл /boot/config.txt следующую строку:
dtoverlay=disable-wifi
Если вы не используете протокол IPv6 (а в большинстве случаев это так), то отключите его добавлением в файл /etc/sysctl.conf следующих строк:
# to disable IPv6 on all interfaces system wide net.ipv6.conf.all.disable_ipv6 = 1
После всех настроек Raspberry нужно перезагрузить.
При первом бекапе можно снять ограничение скорости следующей командой (запускается на OS X):
sudo sysctl debug.lowpri_throttle_enabled=0
Заключение
Рецепт в целом годный и рабочий. Скорость бекапа проверял и по WiFi и по Ethernet. WiFi, конечно, сильно проигрывает. MBP закачивал первый бекап часов 10-12 (свыше 200Гб, шифрование бекапа Time Machine было включено). Возможно ускорить процесс можно используя подобный гигабитный Ethernet-адаптер, не пробовал (не хватило портов в маршрутизаторе). Адаптер очень классный, быстро определяется и гигабит выдает без проблем, рекомендую.
Отдельное спасибо автору этой заметки.
После того, как раздел дважды навернулся, отформатировал его в ext4, теперь всё работает стабильно.