Jurik-Phys.Net

~ Простота и ясность ~

Инструменты пользователя

Инструменты сайта


Боковая панель

Категории

Контакты

Поддержать проект


itechnology:linux:net.hdd_over_ya.disk

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

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

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

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

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

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

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

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

  • установка Midnight Commander'а:
    apt-get install mc
  • установка vim'а:
    apt-get install vim
  • сменить редактор по-умолчанию на vim (выбрать vim.basic):
    update-alternatives --config editor
  • пакет для работы с WebDAV:
    apt-get install davfs2
  • NetworkManager (необходим для корректного монтирования хранилища при загрузке системы)
    apt-get install network-manager
    systemctl enable NetworkManager-wait-online.service
  • установка пакета encfs для шифрования пользовательских данных
    apt-get install encfs

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

  • создание 10-ти каталогов для точек монтирования yandex.disk'ов:
    mkdir -p /var/webdav/yandex.disk.{00001..10}
  • в раздел Credential Line файла /etc/davfs2/secrets добавить данные от учётных записей Яндекс.Дисков в формате:
    /var/webdav/yandex.disk.0000X yandex_login password
  • для проверки работоспособности WebDAV можно примонтировать хранилище вручную:
    mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk.00001
  • перейдя в смонтированный каталог можно оставить в нём «метку» в виде пустого файла:
    touch "$(basename `pwd`)"

Только SystemD

  • для монтирования хранилищ при загрузке системы необходимо написать systemd-юниты:
    vim /etc/systemd/system/var-webdav-yandex.disk.0000X
    [Unit]
    Description = Mount Yandex.Disk.0000X
    Requires = NetworkManager-wait-online.service
    After    = NetworkManager-wait-online.service
     
    [Mount]
    What=https://webdav.yandex.ru
    Where=/var/webdav/yandex.disk.0000X
    Type=davfs
    Options=user,rw
    
    [Install]
    WantedBy=multi-user.target
  • включение написанных systemd-юнитов:
    systemctl enable var-webdav-yandex.disk.0000X

Bash wrapper и SystemD

  • Монтирование davfs:
    vim /etc/davfs2/mount-yandex.disks.sh
    #!/bin/bash
    mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk.00001
    mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk.00002
    mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk.00003
  • Размонтирование davfs:
    vim /etc/davfs2/umount-yandex.disks.sh
    #!/bin/bash
    fusermount -u /var/webdav/yandex.disk.00001
    fusermount -u /var/webdav/yandex.disk.00002
    fusermount -u /var/webdav/yandex.disk.00003
  • Создание сервис-юнита:
    vim /etc/systemd/system/var-webdav-yandex.disks.service
    [Unit]
    Description=Mount yandex disks.
    Requires = NetworkManager-wait-online.service
    After    = NetworkManager-wait-online.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/etc/davfs2/mount-yandex.disks.sh
    ExecStop=/etc/davfs2/umount-yandex.disks.sh
    
    [Install]
    WantedBy = multi-user.target
  • Включение сервис-юнита:
    systemctl enable var-webdav-yandex.disks.service

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

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

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

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

  • Создание объединённой точки монтирования:
    mkdir /var/webdav/yandex.disk.union
  • Тестирование работоспособности объединения:
    mount -t aufs -o br:/var/webdav/yandex.disk.00001=rw:/var/webdav/yandex.disk.00002=rw,create=mfs,sum none /var/webdav/yandex.disk.union

    Здесь:

    • br: ветка1=rw: ветка2=rw:… — список т.н. веток, т. е. смонтированных разделов, которые будут объединены в один;
    • create=mfs — параметр, указывающий на то, что для записи будет выбираться та ветка, которая имеет больше свободного места. Без указания этого параметра «слойка» из разделов не будет работать так, как задумано;
    • sum — указывает, что в утилитах типа df будет выводиться суммарный размер разделов и свободного места на них для объединённого раздела.

Только SystemD

  • Монтирование общего хранилища при загрузке системы (systemd-юнит):
    vim /etc/systemd/system/var-webdav-yandex.disk.union.mount
    [Unit]
    Description=Union all WebDAV Yandex.Disks's
    Requires = var-webdav-yandex.disk.00001.mount \
               var-webdav-yandex.disk.00002.mount
    
    After    = var-webdav-yandex.disk.00001.mount \
               var-webdav-yandex.disk.00002.mount
    
    [Mount]
    What=none
    Where=/var/webdav/yandex.disk.union
    Type=aufs
    Options=br:/var/webdav/yandex.disk.00001=rw:/var/webdav/yandex.disk.00002=rw,create=mfs,sum
    
    [Install]
    WantedBy=multi-user.target
  • Включение сервис-юнита:
    systemctl enable var-webdav-yandex.disk.union.mount

Bash wrapper и SystemD

  • Объединение каталога:
    vim /etc/davfs2/union-yandex.disks.sh
    #!/bin/bash
    mount -t aufs -o br:/var/webdav/yandex.disk.00001=rw:\
    /var/webdav/yandex.disk.00002=rw:\
    /var/webdav/yandex.disk.00003=rw,\
    create=mfs,sum none /var/webdav/yandex.disk.union
  • Разъединение каталога:
    vim /etc/davfs2/disunion-yandex.disks.sh
    umount /var/webdav/yandex.disk.union
  • Создание сервис-юнита:
    vim /etc/systemd/system/var-webdav-yandex.disk.union.service
    Unit]
    Description=Union all WebDAV Yandex.Disk's
    Requires = var-webdav-yandex.disks.service
    After    = var-webdav-yandex.disks.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/etc/davfs2/union-yandex.disks.sh
    ExecStop=/etc/davfs2/disunion-yandex.disks.sh
    
    [Install]
    WantedBy=multi-user.target
  • Включение сервис-юнита:
    systemctl enable var-webdav-yandex.disk.union.service

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

  • рабочая точка обмена данных с облаком (каталог расшифрованных данных):
    mkdir /var/webdav/yandex.disk.encfs
  • каталог зашифрованных данных в облаке:
    mkdir /var/webdav/yandex.disk.union/yandex.disk.00000
  • каталог с паролем шифрования:
    mkdir /etc/encfs
  • пароль и права шифрования каталога данных:
    echo "crypto_password" > /etc/encfs/passwd
    chmod 600 /etc/encfs/passwd
  • первое монтирование зашифрованного хранилища; требуется установить параметры шифрования.
    ENCFS6_CONFIG=/etc/encfs/.encfs6.xml \
    encfs /var/webdav/yandex.disk.union/yandex.disk.00000 \
    /var/webdav/yandex.disk.encfs --extpass=" cat /etc/encfs/passwd"
  • рекомендованные параметры шифрования (задаются в режиме эксперта “x”):
    Алгоритм шифрования AES-256 (Длина ключа 256 бит);
    Размер блока файловой системы: 4096 байт;
    Блочный алгоритм шифрования: 1 (Block);
    Enable filename initialization vector chaining? – Yes;
    Enable per-file initialization vectors? – Yes;
    Enable filename to IV header chaining? – Yes;
    Enable block authentication code headers
    on every block in a file? – No (Для локальных разделов лучше включить);
    Добавлять случайные байты в каждый заголовок блока? – 8;
    Enable file-hole pass-through? – Yes.
  • размонтировать рабочий каталог (прекратить шифрование) можно командой:
    fusermount -u /var/webdav/yandex.disk.encfs
  • systemd юнит для автоматического включения шифрования при загрузке системы:
    vim /etc/systemd/system/mnt-yandex.disk.service
    [Unit]
    Description=Enabel EncFS for /mnt/yandex.disk
    Requires = var-webdav-yandex.disk.union.mount
    After    = var-webdav-yandex.disk.union.mount
    
    [Service]
    Environment=RootDir/var/webdav/yandex.disk.union/yandex.disk.00000
    Environment=MountPoint=/var/webdav/yandex.disk.encfs
    Environment=ENCFS6_CONFIG=/etc/encfs/.encfs6.xml
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/sh -c "cat /etc/encfs/passwd | encfs --stdinpass $RootDir $MountPoint
    ExecStop=/bin/fusermount -u $MountPoint
    
    [Install]
    WantedBy=multy-user.tagret
  • включение запуска юнита при загрузке системы:
    systemctl enable mnt-yandex.disk.service

Экспорт данных через 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 и хабра.

itechnology/linux/net.hdd_over_ya.disk.txt · Последние изменения: 2015/11/09 00:34 — jurik_phys