eCryptfs с dropbox: необходимо перемонтировать, чтобы синхронизированные изменения были видны
Я экспериментирую с использованием eCryptfs поверх dropbox, и у меня возникают некоторые проблемы.
Моя система GNU/Linux, а точнее openSUSE 12.2.
Моя настройка такова: я настроил два экземпляра VirtualBox, работающих под управлением openSUSE 12.2, давайте назовем их VM1 и VM2. Dropbox, как обычно, синхронизирует все в ~/Dropbox. Чтобы создать мою настройку eCryptfs, я делаю следующее на обеих виртуальных машинах:
mkdir -m 500 ~/ecryptfs_upper
mkdir -m 700 ~/Dropbox/ecryptfs_lower
sudo mount -t ecryptfs Dropbox/ecryptfs_lower/ ecryptfs_upper/
Я настраиваю eCryptfs с:
key type: passphrase
cipher: aes
key bytes: 16
plaintext passthrough: no
filename encryption: yes
Если я сейчас приступлю к созданию файла в ~/ecryptfs_upper на VM1, он также будет корректно отображаться на VM2. Однако, когда я затем изменяю этот файл на одной виртуальной машине, он иногда (часто, но не всегда по какой-то причине) не будет обновляться на другой виртуальной машине.
Если я проверяю базовые файлы в ~/Dropbox/ecryptfs_lower на двух виртуальных машинах, они идентичны (sha256sum выдает одинаковый хэш), поэтому dropbox правильно сумел их синхронизировать. Но соответствующие файлы в ~/ecryptfs_upper все еще разные! Я должен размонтировать, а затем снова смонтировать eCryptfs, чтобы изменения отображались правильно.
Кажется, проблема в том, что когда dropbox обновляет файл в нижнем каталоге eCryptfs, eCryptfs не замечает это изменение. Предположительно eCryptfs предполагает, что все изменения пройдут монтирование. Для большинства случаев использования это, очевидно, справедливое предположение, но при использовании eCryptfs для шифрования синхронизированного облачного хранилища, такого как dropbox, это, очевидно, большая проблема.
Я видел нескольких людей, выступающих за использование eCryptfs с dropbox, но я не видел, чтобы эта проблема упоминалась. Кто-нибудь знает о исправлении (например, способ отключения кэша, который eCryptfs использует), или о какой-то альтернативе eCryptfs, которая не страдает от этой проблемы?
3 ответа
Посмотрите на encfs как на альтернативу eCryptfs. Это не страдает от проблемы, которую вы описываете.
Вы наткнулись на недостаток дизайна в eCryptfs в Linux. Не существует механизма информирования eCryptfs о внесении изменений в нижний кеш страниц, поэтому он не знает, изменилась ли страница из-под него. Изменение нижних зашифрованных файлов на активном монтировании eCryptfs похоже на переворачивание битов на блочном устройстве во время монтирования EXT4. EXT4 имеет собственное представление о состоянии блочного устройства, поскольку предполагает, что это единственное, что мешает блочному устройству, и если это изменится из-под него, все может пойти довольно быстро на юг.
Это не решение, а обходной путь. Протестировано на Linux Mint 17 и работает отлично, но также должно работать на других дистрибутивах Linux.
#! / Bin / Баш экспорт PATH = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin" xhome = $ {HOME} # КАК # # Удалить предыдущую установку Dropbox - все каталоги (~/.dropbox, ~/.dropbox-dist, ~/Dropbox) и в командной строке введите: # # mkdir -p ${HOME}/.mount/dropbox # dd if=/dev/zero of=${HOME}/.mount/dropbox.img bs=4K count=2M # для 8 ГБ # mkfs.xfs ${HOME}/.mount/dropbox.img # для XFS, но вы можете использовать предпочитаемую FS, например. EXT4 # mkdir ${HOME}/bin # # Поместите этот скрипт в ${HOME}/bin # # chmod 0755 ${HOME}/bin/dropbox-mount.sh # # Добавьте в строку / etc / sudoers: # # YourUserName ALL=NOPASSWD: /bin/mount # # Запустите этот скрипт: ${HOME}/bin/dropbox-mount.sh # # chown ( id -u):( id -g) ${HOME}/.mount/dropbox # # Затем запустите Dropbox App и выберите $ {HOME} /. Mount / dropbox / в качестве базового каталога, # Dropbox автоматически создаст $ {HOME} /. Mount/dropbox/Dropbox. # # ВАЖНЫЙ # Отключить автозапуск Dropbox в настройках Dropbox. # Добавьте этот скрипт в автозапуск системы (Настройка-> Запуск приложений) xdropbox = "крепление / Dropbox" xdropbox_dir = "$ {xhome} / $ {xdropbox}" xdropbox_img = "$ {xhome} / $ {xdropbox}.img" if [`mount | grep -c "$ {xhome} / $ {xdropbox}" `-eq 0]; затем sudo mount -o loop ${xdropbox_img} ${xdropbox_dir} фи сон 10 && начало Dropbox &>/dev/null выход 0