Лучший способ смонтировать удаленную папку

40

У меня есть два RasberryPi под управлением Debian Wheezy, и я хотел бы смонтировать папку с компьютера A на компьютер B.

Каков наилучший (как в наиболее эффективный) способ сделать это?

Я могу сделать это через SMB, но это для Windows, я думаю, что должен быть лучший способ поделиться через Linux.

cjburkha
источник

Ответы:

31

Вы можете использовать множество вещей, среди которых, популярные варианты:

  • NFS
  • Самба / CIFS
  • SSHFS

По простоте настройки я думаю, что они должны быть расположены в таком порядке (верх: самый простой)

SSHFS

Через FUSE вы можете монтировать удаленные файловые системы через ssh. Я не буду рассказывать, как, как Кристофер уже очень хорошо объяснил это. Просто отметьте, что для автоматического монтирования файла потребуется немного больше работы .

самба

Это позволит вам использовать машины Windows и Unix для доступа к удаленной папке. Если это не имеет большого значения для вас, то вы, вероятно, не выиграете от этого. Однако его легко смонтировать при инициализации (просто введите соответствующие значения /etc/fstab, в том числе username=<your-samba-username>,password=<your-samba-password>в столбце параметров.

NFS

Это позволит вам проходить аутентификацию только через IP (без имени пользователя = быстрее, только для использования в вашей не враждебной локальной сети) или через билеты Kerberos (слишком болезненно только для двух Raspberry; но полезно в корпоративной среде).

Поскольку он поддерживает режим ядра, он будет работать быстрее, чем sshfs. Кроме того, поскольку шифрование не выполняется, оно будет иметь лучшую пропускную способность, а в случае крошечного Raspberry ARM это может иметь значение.

Кроме того, это не так больно, просто вы доверяете своей сети. У вас также есть поддержка автоматического монтирования /etc/fstab, и вам не нужно помещать конфиденциальные данные (например, имена пользователей или пароли), и если у вас есть синхронизированные имена пользователей (то же самое /etc/passwdи /etc/groupфайлы), вы можете использовать обычный набор разрешений POSIX ( chown, chgrpи chmod).

ssice
источник
Я использую свой Pi в качестве NFS-сервера с дисками, на которых в основном находятся мои фильмы и другие носители (т.е. не критичные для системы, не «/ home /» или что-то подобное). NFS позволяет мне смотреть фильм без необходимости сначала копировать его на локальный диск, но при записи файлов на диск NFS я предпочитаю использовать rsync. Поэтому я смонтировал свои диски NFS только для чтения и записывал файлы по SSH (с помощью rsync). Это также останавливает меня от случайного ринсинга на смонтированный диск NFS (что очень неэффективно).
zrajm
@zrajm как тебе смонтировать диски на пи?
FutuToad
arisu:/mnt/ytra /mnt/ytra nfs soft,ro,intr 0 2
zrajm
Samba может ввести в заблуждение некоторые приложения Unix, особенно в отношении разрешений или того stat(), что возвращает, например, вещей, которые полагаются на nlinkсчет, о котором CIFS не имеет никакого понятия. SSHFS меня не особенно впечатлило, так как он запускал переключатели контекста на файловом сервере очень высоко и не поддерживал необходимую блокировку, требуемую внутренними программами. Итак, NFS ...
до
38

SSHFS замечательный. Он может монтировать удаленные каталоги в локальный каталог с помощью FUSE . Команды ниже используют, #чтобы указать, что команда была выполнена как root, а $указывает на выполнение от имени обычного пользователя. Поскольку требуется программное обеспечение FUSE, сначала убедитесь, что оно доступно и работает.

Одна из lsmodи grep команд, ниже, можно выявить , если загружен и готов к использованию программного обеспечения. Результат от любой команды указывает, что fuseдоступно.

# lsmod | grep fuse
$ grep -i fuse /lib/modules/$(uname -r)/modules.builtin

Если по какой-либо из команд ничего не получилось, попробуйте загрузить модуль ядра без перезагрузки modprobeи повторите проверку.

# modprobe fuse
# lsmod fuse

Если загрузка модуля не удалась, установите программное обеспечение с помощью apt-get.

# apt-get install fuse

Проверьте еще раз после установки.

# modprobe fuse
# lsmod fuse

FUSE должен быть установлен и запущен перед продолжением.


Проверьте разрешения /dev/fuse. Разрешения должны предоставлять вашей учетной записи обычного пользователя права на чтение и запись. Пропустите эту часть, если вы определили, что ваша учетная запись обычного пользователя уже имеет права на чтение и запись /dev/fuse.

# ls -l /dev/fuse

Вывод может быть что-то вроде одного из следующих.

crw-rw-rw- 1 root root (all users can read/write)
crw------- 1 root fuse (only root can read/write)
crw-rw---- 1 root fuse (root and members of fuse group can read/write)

В 2013 году мой Debian создан /dev/fuseс 0600разрешениями, владельцем root, владельцем группы fuse. Мне нужно было разрешить группе предохранителей использовать устройство и добавить свою учетную запись обычного пользователя в группу, как показано ниже.

# usermod -aG fuse $your_regular_user_account
# chmod 0660 /dev/fuse

Если требуется новое членство в группе, выйдите из системы и снова войдите в нее, чтобы стать участником группы.


Далее устанавливаем sshс обеих сторон следующим образом.

# apt-get install ssh

Этот ответ был написан для Debian, но на Ubuntu 18.x , по крайней мере, openssh-client, fuse, и несколько других пакетов являются частью Ubuntu sshfsпакета. Программное sshfsобеспечение требуется на стороне клиента, но при желании его можно установить с обеих сторон. Существует одна из зависимостей пакета fuse, но установщик пропускает уже установленное программное обеспечение.

# Ubuntu 18.x: 
# apt-get install sshfs

С fuseи при sshналичии, а также с разрешением на использование устройства /dev/fuseсоздайте точку монтирования для удаленной файловой системы; и смонтировать эту удаленную файловую систему локально следующим образом.

# mkdir /mnt/$directory_name
# chown $your_user:$group /mnt/$directory_name/
$ sshfs $remote_username@$remote_server_name: /mnt/$directory_name/

Чтобы смонтировать каталог, отличный от home, укажите его после двоеточия.

$ sshfs $remote_username@$remote_server_name:/remote/directory /mnt/$directory_name

Чтобы демонтировать, используйте fusermount.

fusermount -u /mnt/$directory_name

Если у вас есть компьютер с Windows, он также может использовать SSHFS с win-sshfs . Это программное обеспечение будет «сопоставлять диск» с SSHFS, чтобы у вас была буква диска Windows, содержащая удаленный каталог.

Кристофер
источник
1
Вы можете значительно повысить скорость работы SSHFS, используя дополнительные параметры. См. Эту статью для получения дополнительной информации и сравнений скорости с NFS: admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS
blendenzo
Эй, я пытался использовать твои инструкции (приспосабливаясь к yum install fuse-sshfs.x86_64), но когда я modprobe fuseэто сделал, это не создало группу предохранителей для меня. Поэтому, когда я это сделал usermod -a -G fuse [your-user], я получил usermod: group 'fuse' does not exist. Вы можете помочь? спасибо заранее
amphibient
lsmod | grep fuseвозвращает результат, и у меня есть /dev/fuse, м, который принадлежит root. так ты говоришь, что я в порядке без группы?
amphibient
да, яcrw-rw-rw-. 1 root root 10, 229 Nov 21 15:32 /dev/fuse
amphibient
После # apt-get install fuse-utils sshfs я получаю сообщение "Невозможно найти пакет fuse-utils". Есть идеи почему? (Ubuntu 18.04.01)
Kvothe
7

В Linux вы бы выбрали NFS (также ознакомьтесь со статьей об этом в archwiki, в которой также может содержаться информация для вашего дистрибутива). Он имеет более продвинутые функции, чем самба. Если вам нужно заблокировать (то есть одновременный доступ) файлы, вы должны рассмотреть lockd также, потому что nfs не имеет состояния. Однако это сложнее настроить, чем кого-то. Я бы посоветовал попробовать samba и nfs, чтобы увидеть, какой из них подходит вам.

Silverrocker
источник
1

В прошлом я использовал сетевой диск SFTP и ExpanDrive, и я могу сказать, что sshfs превосходит оба без вопросов.

возвышенный
источник