Time Machine: бекапим OS X Lion на Ubuntu 12.04 LTS сервер




Если кто не знает, Time Machine — это такой замечательный бэкап-сервис из коробки для Apple OS X, тут и тут можно почитать поподробнее. Если у вас есть мак, и вы не пользуетесь «машиной времени», то это совершенно напрасно. Time Machine делает постоянные дифференциальные бэкапы, поэтому она удобна даже в случае прекрасной жизни ваших HDD / SSD. Можно в любой момент открутить назад историю и восстановить случайно удаленный файл, или, что еще важнее, предыдущую версию измененного файла.

Предполагается, что пользователи будут использовать либо обычный жесткий диск, либо специальный сетевой девайс Time Capsule. Традиционный внешний жесткий диск — решение для очень организованных людей, которые регулярно (хотя бы ежедневно) будут его подключать для автоматического бэкапа, иначе польза от тайм машины будет весьма ограничена (хотя прошлогодний бэкап все же лучше, чем совсем ничего). С тайм-капсулой будет гораздо удобнее и надежнее. Кроме функции бэкапа, она может выполнять еще и функцию сетевой шары, раздачи Wi-Fi (фактически Time Capsule — это Wi-Fi роутер с HDD). Но устройство стоит денег, и оно не такое универсальное. Мне захотелось прикрутить на свой сервер работающий на Ubuntu возможность делать бэкапы тайм-машиной. И это не так сложно, о чем и будет эта заметка.



Итак у нас Ubuntu 12.04 LTS. Необходимая нам функциональность находится в пакете netatalk, это опенсорсная реализация протокола AppleTalk, также нам понадобится поставить пакет avahi-daemon для реализации zeroconf инфраструктуры в нашей сети, в данном случае это имитация любимого яблочной техникой Bonjour.

avahi-daemon можно поставить сразу:
sudo aptitude install avahi-daemon


C netatalk чуть сложнее, на момент написания заметки уже вышла релизная версия 2.2.2 с кучей новых фиксов (см. http://netatalk.sourceforge.net), а в репах убунты все еще была версия полугодовалой давности 2.2.1. Я захотел поставить версию новее. Это можно сделать сборкой из исходников, но в тот момент можно было сделать и по-другому. На launchpad уже появился готовенький пакет 2.2.2, так что качаем его и ставим.

wget http://launchpadlibrarian.net/103717335/netatalk_2.2.2-1_amd64.deb
sudo dpkg -i netatalk_2.2.2-1_amd64.deb


Далее необходимо сконфигурировать сервисы.

Создаем файл afpd.service, который описывает конкретные сервисы раздаваемые по AppleTalk Filing Protocol демоном afpd:

sudo nano /etc/avahi/services/afpd.service


со следующим содержимым:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
<name replace-wildcards="yes">%h</name>

<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>

<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>

</service-group>


Здесь можно изменить имя сервиса и иконку удаленного компьютера, которые отображаются в Finder на маке, за них отвечают строки

<name replace-wildcards="yes">%h</name>
, где %h — имя компьютера (host);
<txt-record>model=Xserve</txt-record>
, где вместо Xserve можно поставить: Macmini, iMac, MacPro, Xserve, MacBook, MacBookPro, MacBookAir.

Далее конфигурируем netatalk. Конфиг в /etc/default/netatalk можно не менять, все должно работать и так. А вот /etc/netatalk/AppleVolumes.default нужно изменить.

sudo nano /etc/netatalk/AppleVolumes.default


Переходим в конец файла (Ctrl + V бегать по страницам быстрее).

Добавляем строчку:
/data/backups/TimeMachine "TimeMachine" cnidscheme:dbd options:tm,upriv,usedots allow:alex


, где /data/backups/TimeMachine — путь к каталогу, в котором будут храниться бекапы;
«TimeMachine» — имя расшаренного ресурса.
В options должно быть tm — ресурс для тайм-машины.
allow:alex — пользователь, имеющий доступ к каталогу. Он (в данном случае alex) должен быть на вашем сервере (я еще для удобства сделал так, чтобы пользователь на убунте и на маке имел одно имя), создать пользователя можно с помощью команды useradd.

Можно добавить еще разделяемую шару, например:

/data/common "Common" cnidscheme:dbd options:usedots,upriv dperm:0776 fperm:0666 allow:@shares


Тут в опциях уже не надо указывать tm.
Здесь dperm:0777 fperm:0666 — права на создаваемые каталоги и файлы,
allow:@shares — доступ только пользователям входящим в группу shares (создать группу можно с помощью groupadd, а добавить пользователя в существующую группу usermod -a -G groupname username)

Права и группа — для того, чтобы данной шарой можно было удобно пользоваться несколькими людьми. Для этого людям создаются учетки, и им добавляется группа shares. К сожалению, я не нашел возможности сделать как в самбе, чтобы новые файлы создавались от имени группы, поэтому пришлось дать полные права для others, иначе файлы, созданные одним человеком не могли бы редактироваться другими.

Рестартуем сервис:

sudo service netatalk restart


Перезапуск avahi

sudo service avahi-daemon restart


Вот в общем и все.

PS
Хотя нет, без напильника не обошлось. Т.е. сразу нифига не заработало, симптом такой: в файндере пробуем подключиться к шаре, а он говорит, что там ничего и нет, куда подключаться? Оказалось, что afpd не стартанул толком.

cat /var/log/syslog


давал следующее:

May 12 03:13:26 mini-server afpd[13367]: ===============================================================
May 12 03:13:26 mini-server afpd[13367]: INTERNAL ERROR: Signal 11 in pid 13367 (2.2.2)
May 12 03:13:26 mini-server afpd[13367]: ===============================================================
May 12 03:13:26 mini-server afpd[13367]: BACKTRACE: 3 stack frames:
May 12 03:13:26 mini-server afpd[13367]:  #0 /usr/sbin/afpd(netatalk_panic+0x1c) [0x7fd5ac5e6b0c]
May 12 03:13:26 mini-server afpd[13367]:  #1 /usr/sbin/afpd(+0x53c0c) [0x7fd5ac5e6c0c]
May 12 03:13:26 mini-server afpd[13367]:  #2 /lib/x86_64-linux-gnu/libc.so.6(+0x364c0) [0x7fd5aaf444c0]


Гугление проблемы дало вариант решения. Открываем /etc/netatalk/afpd.conf:

sudo nano /etc/netatalk/afpd.conf


и меняем самую последнюю строчку на
- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2_passwd.so -nosavepassword


Проблема оказалась в библиотеке uams_dhx2.so, которая не дружит с Lion, помогла замена на uams_dhx2_passwd.so.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 33

    0
    видно что писал пользователь не очень знаком с linux, почему мы должны ставить еще avahi-daemon? Для чего? Netatalk справляеться со всема задачами самостоятельно, почему использовать разные инструменты когда есть швейцарский нож?
      +7
      > почему мы должны ставить еще avahi-daemon? Для чего?

      для bonjour
        0
        ладно напишу по другому, вам известно что avahi-daemon для роботы TimeMachine не обязателен?
          +5
          известно (где-то написано иначе?)

          bonjour для удобства обнаружения сервисов предоставляемых netatalk (в данном примере tm и общая шара для всех пользователей)
      +2
      >>жесткий диск (который придется целиком отдать под тайм-машину)
      Это не так. Тайммашина сидит в своей отдельной папке. Можно даже к нескольким компам подключать и каждый будет бекапить независимо.
        +1
        исправил
        +2
        интересно, чем не понравилась сия заметка, что минусы ставят даже в карму? Не то чтобы меня это так сильно волновало, но лучше написать, что конкретно не нравиться.
          +1
          Не скажу за всю Одессу, но, пожалуйста, перепишите с использованием тэга
          <source lang="xml">
          
          и так далее, будет намного приятнее читать.
            –12
            Бакапать мак на убунту, это попирать святое! И со стороны маководов и со стороны убунтоводов.
              +7
              со стороны безмозглых фанатиков если только. люблю и мак и убунту, и человек 5 моих знакомых тоже, каждая ось как инструмент удобна для своих целей, почему не использовать обе?
            0
            «Тайммашина сидит в своей отдельной папке. Можно даже к нескольким компам подключать и каждый будет бекапить независимо.»

            А восстанавливаться они будут так же независимо? Или же Один сможет фостановиться из архива другого? ИМХО в корп среде, нужно додумать. Для дома — да, круто. Для корп среды моим решение был FreeNAS + ZFS.
              0
              Логично, что любой мак может востановится с любого бакапа, иначе зачем они вообще нужны.
                0
                Было бы интересно почитать как вы сделали разделение пользователей и файлов.
                Пользователи должны видеть только свои файлы и иметь возможность защитить их паролем.
                  0
                  FreeNas — позволяет работать с ZFS(FreeNas мне показался удобным). Для каждого желающего бэкапиться создается пользователь/пароль в системе(FreeNAS, так же можно подружить с LDAP), так же создается ZFS-dataset (что то вроде раздела), после этого опять же для каждого настраивается afp шара. Как то так. Пользователю либо говориться его личный пароль к хранилищу бэкапа, либо он использует LDAP авторизацию.

                  Для того что бы afp шарка мапилась каждый раз у пользователя, я также через LauchD запускаю скриптик, который мапит шарку.
                0
                В wget и dpkg разные имена пакетов (2.2.2 vs. 2.2.1).
                  +1
                  спасибо, исправил
                    0
                    я так понимаю данный путь воспроизводим на wifi роутерах…

                    ГДе то видел заметку Time Machine можно хранить на SAMBA шаре…

                    просто практическая ценность Time Machine (подключил диск и можно использовать)

                    Если сам Контейнер находится на файлов системе, которая маком не читается по умолчанию, выглядит крайне сомнительный бэкап.
                      0
                      Может и на самбе, но тогда неудобства с тем, что шару надо ручками подключать.
                      Использование bonjour позволяет макоси увидеть своего родного парня и автоматически все подхватить
                        0
                        с самбой не так просто, TM даже не увидит smb ресурс
                        нужно «сказать» на маке в терминале
                        defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

                        потом захочет ли она туда делать бэкап без бубна, и как будет дальше все работать?

                        через netatalk оно точно работает, я пользовался больше года. Проблема была только при обновлении на мака с SL на Lion, тайм-машина в 10.7 хотела протокол AFP v3.3, я сейчас уже не помню детали, вроде частично решилось указанием TMShowUnsupportedNetworkVolumes 1, и далее выходом netatalk 2.2 где была поддержка AFP v3.3.

                    0
                    Делал все как прописано, в итоге мой мак при попытке монтирования выдал:
                    «Возникла проблема при подключении к серверу «Arthemide.local».

                    Версия сервера, к которому Вы пытаетесь подключиться, не поддерживается. Обратитесь к системному администратору за помощью.»
                      0
                      Извиняюсь за свой невнимательность. Неправильно задал библиотеку в afpd.conf
                      +2
                      netatalk с версии 2.2 самостоятельно регистрирует свои шары для avahi с помощью dbus и нет необходимости создавать /etc/avahi/services/afpd.service
                        0
                        А не было проблем с Avahi и .local?
                          0
                          у меня не было
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            А причем тут Ununtu? Настроить netatalk можно на любом Линуксе. Более того, похожий пост я уже читал, когда искал информацию по afp.
                              0
                              > А причем тут Ununtu?
                              может потому, что в данной заметке пошаговая инструкция с особенностями именно для актуальной версии Убунты?

                              netatalk можно поставить много на чем, не только линуксах
                              netatalk.sourceforge.net/2.2/htmldocs/installation.html#id2519024
                                0
                                Разве что особенностям пакетного менеджера aptitude, но это какое-то нубство.
                                  0
                                  особенности получения актуальных версий пакетов, конкретные пути конфигурации, старт/останов сервиса, решение проблем

                                  если бы читали заметку, то вопросов бы не было.
                              0
                              Может кому будет интересно, статья как всё это дело организовать в виртуальной машине с Debian и не требующее много ресурсов:
                              www.smallnetbuilder.com/nas/nas-howto/31609-how-to-make-a-windows-time-machine-server-part-1

                              С тех пор, как в Лёве прикрыли лавочку с бекапами на расшаренную виндовую папку, у меня именно так всё и настроенно.
                                0
                                Спасибо, статья полезная.
                                  0
                                  > добавить пользователя в существующую группу usermod -a -G groupname username)
                                  Так проще:
                                  adduser USER GROUP
                                    0
                                    Пишу из 2019 года.
                                    Для того, чтобы запустить Time Machine бэкапиться на Ubuntu 16.04 помогла вот эта инструкция (я так понимаю сделана на основе этого поста, но с изменениями). Единственный нюанс — пришлось потом вручную создать папку /home/timemachine и дать ей права на запись, а то не работало. В итоге бэкап прошел успешно.
                                    Это я так, если кто-то вдруг будет тоже как я гуглить и пытаться запустить бэкап на Linux. Пригодится.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое