Содержание

Net.Storage over Яндекс.Диск

Установка ВМ на сервере

Почему виртуальная машина?
Для удобства администрирования и локализации потенциальных точек отказа удалённое хранилище предлагается реализовывать в виртуальной машине, запущенной на домашнем сервере.

Тип виртуализации и сеть
На сервере настроена виртуализация на основе kvm, сетевое взаимодействие происходит через мост. Таким образом, запущенная виртуальная машина будет находиться в адресном пространстве домашней локальной сети 192.168.73.xx.

Доступ к хранилищу
Доступ к каталогу с удалённым хранилищем (ya.storage) предлагается организовать через его экспорт средствами NFS-сервера виртуальной машины и монтированием его в хост-системе домашнего сервера.

Установка виртуальной машины

  1. Скачать установочный образ системы, Debian Stable.
  2. Установить ОС в виртуальной машине, например, с помощью virt-manager'а.

Общая настройка ВМ

Монтирование Яндекс.Диска

Только SystemD

Bash wrapper и SystemD

Объединение каталогов (AUFS)

Замечание: все изменения в файлах davfs2 производит локально т.е., изменения файла на удалённом хранилище происходят следующем образом:

  1. в кеш davfs2 /var/cache/davfs2 загружается весь изменяемый файл;
  2. изменения файла сохраняются в локальной кешированной версии;
  3. изменённая версия файла загружается на сервер.

Вывод: создание криптоконтейнеров, контейнеров с ФС на базе WebDAV и davfs2 не целесообразно т.к., для внесения каждого изменения необходимо перекачать весь контейнер.

Только SystemD

Bash wrapper и SystemD

Шифрование данных

Экспорт данных через NFS

Проблема. Точка монтирования EncFS не может быть экспортирована средствами NFS.
Решение.

  1. Экспортируем точки монтирования EncFS в иные каталоги средствами SSHFS. Каталоги SSHFS можно экспортировать через NFS.:
    1. настройка доступа по SSH c авторизацией по ключу (от рута виртуальной машины до root@netstorage);
    2. монтирование точек EncFS (запуск на файловом сервере):
      mkdir /mnt/yandex/yandex.disk 
      sshfs root@127.0.0.1:/mnt/yandex.disk /mnt/yandex.disk
    3. автоматизировать процесс можно, написав юнит systemd.
      vim /etc/systemd/system/mnt-yandex.cloud
      [Unit]
      Description=Enable EncFS for /mnt/yandex.disk
      Requires = var-webdav-yandex.disk.encfs.service
      After    = var-webdav-yandex.disk.encfs.service
      
      [Service]
      Environment=RootDir=root@127.0.0.1:/var/webdav/yandex.disk.encfs/yandex.cloud
      Environment=MountPoint=/mnt/yandex.cloud
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/bin/sh -c "sshfs $RootDir $MountPoint
      ExecStop=/bin/fusermount -u $MountPoint
      
      [Install]
      WantedBy=multi-user.target
  2. Установка nfs-сервера:
    apt-get install nfs-kernel-server
  3. Настройка nfs-сервера в виртуальной машине для экспорта каталогов SSHFS:
    vim /etc/exports
    /mnt/yandex.disk /mnt/yandex.cloud  192.168.73.0/24(rw,no_root_squash,async,fsid=0,no_subtree_check) 
    /mnt/yandex.backup 192.168.73.1(rw,no_root_squash,async,fsid=0,no_subtree_check) 
  4. Рестарт nfs-сервера:
    systemctl restart nfs-kernel-server
  5. Монтирование каталога на клиентах из локальной сети можно командой:
    mount -t nfs netstorage:/mnt/yandex.cloud /mnt/yandex.cloud/
  6. Для удобства монтирования можно занести опции в /etc/fstab:
    netstorage:/mnt/yandex.cloud  /mnt/yandex.cloud  nfs user,noauto,rw,async,soft 0 0

По мотивам статей с debianzilla.com и хабра.