Почему виртуальная машина?
Для удобства администрирования и локализации потенциальных точек отказа удалённое хранилище предлагается реализовывать в виртуальной машине, запущенной на домашнем сервере.
Тип виртуализации и сеть
На сервере настроена виртуализация на основе kvm, сетевое взаимодействие происходит через мост. Таким образом, запущенная виртуальная машина будет находиться в адресном пространстве домашней локальной сети 192.168.73.xx.
Доступ к хранилищу
Доступ к каталогу с удалённым хранилищем (ya.storage) предлагается организовать через его экспорт средствами NFS-сервера виртуальной машины и монтированием его в хост-системе домашнего сервера.
Установка виртуальной машины
apt-get install mc
apt-get install vim
update-alternatives --config editor
apt-get install davfs2
apt-get install network-manager
systemctl enable NetworkManager-wait-online.service
apt-get install encfs
mkdir -p /var/webdav/yandex.disk.{00001..10}
/var/webdav/yandex.disk.0000X yandex_login password
mount -t davfs https://webdav.yandex.ru /var/webdav/yandex.disk.00001
touch "$(basename `pwd`)"
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
systemctl enable var-webdav-yandex.disk.0000X
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
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
Замечание: все изменения в файлах davfs2 производит локально т.е., изменения файла на удалённом хранилище происходят следующем образом:
Вывод: создание криптоконтейнеров, контейнеров с ФС на базе 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
Здесь:
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
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"
Алгоритм шифрования 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
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
Проблема. Точка монтирования EncFS не может быть экспортирована средствами NFS.
Решение.
mkdir /mnt/yandex/yandex.disk sshfs root@127.0.0.1:/mnt/yandex.disk /mnt/yandex.disk
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
apt-get install nfs-kernel-server
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)
systemctl restart nfs-kernel-server
mount -t nfs netstorage:/mnt/yandex.cloud /mnt/yandex.cloud/
netstorage:/mnt/yandex.cloud /mnt/yandex.cloud nfs user,noauto,rw,async,soft 0 0
По мотивам статей с debianzilla.com и хабра.