Если у Вас дома(или на работе) не один компьютер, то естественным желанием будет объединить их в сеть для использования совместных ресурсов на компьютерах. Ubuntu позволяет сделать это разными способами — SMB (Server Message Block) с использованием Samba (об этом способе напишу в следующий раз) и с использованием NFS (network file system). Если у вас в сети компьютеры работают под управлением разных операционных систем (Linux, Windows), то целесообразнее использовать Samba. Но если все компьютеры работают под Ubuntu, то имеет смысл поставить NFS
Преимущества NFS заключены в более равномерной загрузке сети, уменьшении нагрузки на процессор и отображении совместно используемых ресурсов как обыкновенных папок в системе.
Установка NFS на Ubuntu состоит из двух этапов: Установка NFS клиента и NFS сервера. Чтобы получить доступ к папкам на другом компьютере нужен клиент. Для предоставления доступа к папкам на своем компьютере нужен сервер. Итак, перейдем к настройке.
Конечно, в сети достаточно много информации по nfs, но приходится перелопачивать множество сайтов в поисках «подводных камней», поэтому я решил собрать свой опыт в данной статье.
Устанавливаем необходимые пакеты клиента (nfs-common) и сервера (nfs-kernel-server). В терминале выполняем следующую команду:
sudo apt-get install nfs-kernel-server nfs-common portmap
Настраиваем NFS-сервер.
Для примера мы предоставим общий доступ к папкам /common, /common1 и /common2, находящимся в домашней папке /user пользователя user, под чьим именем мы вошли в систему на компьютере с адресом 192.168.0.1.
Условия использования папок (для примера):
- /common — доступ на запись/чтение для всех компьютеров в локальной сети (из любой подсети);
- /common1 — доступ на чтение компьютеру с адресом 192.168.0.100, остальным доступ запрещен;
- /common2 — доступ на запись/чтение всем компьютерам с диапазона адресов 192.168.0.1 — 192.168.0.255 кроме компьютера с адресом 192.168.0.200.
Все данные о совместном использовании папок хранятся в файле /etc/exports. Выполняем в терминале команду:
sudo gedit /etc/exports
В появившемся редакторе записываем:
/home/user/common *(rw,async)
/home/user/common1 192.168.0.100(ro,async)
/home/user/common2 192.168.0.1/24(rw,sync) 192.168.0.200(noaccess)
Сохраняем файл.
Обратите внимание, что:
- записывается полный путь к папке для совместного использования от самого корня;
- пробелов между адресом компьютера и опциями монтирования нет!
Примечание на счет пробелов:
/home/user/common1 192.168.0.100(rw,async)
В этом случае доступ к папке /home/user/common1 получит компьютер с адресом 192.168.0.100 с правами на чтение/запись, остальные доступ не получат.
/home/user/common1 192.168.0.100 (rw,async)
В этом случае доступ к папке /home/user/common1 получит компьютер с адресом 192.168.0.100 с правами на чтение, остальные компьютеры получат доступ с правами на чтение/запись!
Доступные опции:
-
ro (rw) - Разрешает только запросы на чтение ( чтение/ запись).
-
subtree_check (no_subtree_check) - Если экспортируется подкаталог фаловой системы, но не вся файловая система, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Отключение проверки уменьшает безопасность, но увеличивает скорость передачи данных.
-
sync (async) - указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря информации.
-
wdelay (no_wdelay) - указывает серверу задерживать выполнение запросов на запись, если ожидается последующий запрос на запись, записывая данные более большими блоками. Это повышает производительность при отправке больших очередей команд на запись. no_wdelay указывает не откладывать выполнение команды на запись, что может быть полезно, если сервер получает большое количество команд не связанных друг с другом.
-
noaccess — запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
Перезапускаем nfs-kernel-server:
sudo /etc/init.d/nfs-kernel-server restart
в дальнейшем при изменении конфигурационного файла будет достаточно перечитать конфигурационный файл:
sudo exportfs -a
Настройка сервера закончена.
Настройка КЛИЕНТА
Установка и настройка NFS-клиента.
Установка (если мы не ставили сервер, в противном случае клиент уже установлен):
sudo apt-get install portmap nfs-common
Монтирование:
Для начала создадим папки, в которые будут монтироваться сетевые ресурсы. Пусть они в нашем примере монтируются в домашнюю папку пользователя user2, в которой мы создадим папки общих ресурсов: /net/disk1, /net/disk2, /net/disk3. Для этого в терминале выполним команды:
mkdir net
cd /net
mkdir disk1
mkdir disk2
mkdir disk3
То же самое можно сделать просто в Nautilus.
Монтирование сетевых ресурсов возможно сделать как автоматически, так и вручную.
Для ручного монтирования в терминале выполняем команды:
sudo mount -t nfs -o rw,hard,intr 192.168.0.1:/home/user/common ~/net/disk1
sudo mount -t nfs -o ro,soft,intr 192.168.0.1:/home/user/common1 ~/net/disk2
sudo mount -t nfs -o rw,soft,intr 192.168.0.1:/home/user/common2 ~/net/disk3
Примечание:Опция hard жестко привязывает папку на клиенте к серверу и если сервер отвалится, то может зависнуть и ваш компьютер. Опция soft, как понятно из её названия, не такая категоричная. Полный спискок опций Вы можете посмотреть по команде man nfs, набранной в терминале.
Данный способ не очень удобен, так как каждый раз после перезагрузки придется выполнять эти команды. Сделаем монтирование автоматическим.
Для автоматического монтирования редактируем файл /etc/fstab
sudo gedit /etc/fstab
В конец открытого файла добавляем наши данные
192.168.0.1:/home/user/common /home/user2/net/disk1 nfs defaults 0 0
192.168.0.1:/home/user/common1 /home/user2/net/disk2 nfs defaults 0 0
192.168.0.1:/home/user/common2 /home/user2/net/disk3 nfs defaults 0 0
Сохраняем файл.
Подробнее про опции монтирования можно прочитать тут http://rus-linux.net/lib.php?name=MyLDP/file-sys/fstab.html
Выполним монтирование дисков:
sudo mount -a
Теперь наши сетевые диски видны в проводнике как простые папки.