В этой статье мы рассмотрим, как в Linux смонтировать общую сетевую папку, расположенную на хосте Windows. В Windows для доступа к общим сетевым папкам используется протокол SMB (Server Message Block), который ранее назывался CIFS (Сommon Internet File System). В Linux для доступа к сетевым папкам Windows по протоколу SMB можно использовать клиент cifs-utils или Samba.
- Смонтировать сетевую папку в Linux с помощью cifs-util
- Автоматическое монтирование сетевой папки в Linux
- Linux: подключиться к сетевой папке с помощью клиента samba
Содержание:
Совет. Для доступа к сетевым папкам по SMB/CIFS используется порт TCP/445. Для разрешения имени используются порты UDP 137, 138 и TCP 139. Если эти порты закрыты, вы сможете подключиться к сетевой папке Windows только по IP адресу.
Смонтировать сетевую папку в Linux с помощью cifs-util
Вы можете смонтировать сетевую папку, находящуюся на Windows хосте, с помощью утилит из пакета cifs-util. Для установки пакета выполните команду:
- В Ubuntu/Debian:
$ sudo apt-get install cifs-utils
- В CentOS/Oracle/RHEL:
$ sudo dnf install cifs-utils
Создайте точку монтирования:
$ sudo mkdir /mnt/share
Теперь вы можете смонтировать сетевую папку с компьютера Windows под пользователем User03с помощью команды:
$ sudo mount.cifs //192.168.31.33/backup /mnt/share -o user=User03
Укажите пароль пользователя Windows для подключения к сетевой папке.
При подключении сетевой SMB папки можно задать дополнительные параметры:
$ sudo mount -t cifs -o username=User03,password=PasswOrd1,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share
- //192.168.31.33/backup – сетевая папка Windows
- /mnt/share – точка монтирования
- -t cifs – указать файловую систему для монтирования
- -o опции монтирования (эту опцию можно использовать только с правами root, поэтому в команде используется sudo)
- username=User03,password=PasswOrd1 – имя и пароль пользователя Windows, у которого есть права доступа к сетевой папке. Можно указать имя пользователя guest, если разрешен анонимный доступ к сетевой папке
- iocharset=utf8 – включить поддержку кодировки UTF8 для отображения имен файлов
- uid=1000 – использовать этого пользователя Linux в качестве владельца файлов в папке
По умолчанию шары Windows монтируются в Linux с полными правами (0755). Если вы хотите изменить права по-умолчанию при монтировании, добавьте в команду опции:
dir_mode=0755,file_mode=0755
Если вы хотите использовать имя компьютера при подключении сетевого каталога Windows, добавьте в файл /etc/hosts строку:
IP_АДРЕС ИМЯ_КОМПЬЮТЕРА
Чтобы не указывать учетные данные пользователя Windows в команде монтирования сетевой папки, их можно сохранить в файле.
Например:
$ mcedit ~/.windowscredentials
Добавьте в файл:
username=User03 password=PasswOrd1
Для подключения к папке под анонимным пользователем:
username=guest password=
Если нужно указать учетную запись пользователя из определенного домена Active Directory, добавьте в файл третью строку:
domain = vmblog.ru
Измените права на файл:
$ chmod 600 ~/.windowscredentials
Теперь при подключении сетевой папки вместо явного указания имени пользователя и пароля можно указать путь к файлу:
$ sudo mount -t cifs -o credentials=/home/sysops/.windowscredentials,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share
Отмонтировать сетевую SMB папку:
$ sudo umount /mnt/share
Автоматическое монтирование сетевой папки в Linux
Можно настроить автоматическое монтирование сетевой папки Windows через /etc/fstab.
$ sudo mcedit /etc/fstab
Добавьте в файл следующую строку подключения SMB каталога:
//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev 0 0
- rw – смонтировать SBM папку на чтение и запись
- nofail – продолжить загрузку ОС если не удается смонтировать файловую систему
- _netdev – указывает что подключается файловая система по сети. Linux не будет монтировать такие файловые системы пока на хосте не будет инициализирована сеть.
Вы можете указать версию протокола SMB, которую нужно использовать для подключения (версия SMB 1.0 считается небезопасной и отключена по-умолчанию в современных версиях Windows). Добавьте в конец строки с настройками подключения параметр vers=3.0
.
//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev,vers=3.0 0 0
Если на стороне хоста Windows используется несовместимая (старая версия) SMB, при подключении появится ошибка:
mount error(112): Host is downилиmount error(95): Operation not supported
Чтобы сразу смонтировать сетевую папку, выполните:
$ mount -a
Linux: подключиться к сетевой папке с помощью клиента samba
Установите в Linux клиент samba:
- В Ubuntu/Debian:
$ sudo apt-get install smbclient
- В CentOS/Oracle/RHEL:
# dnf install smbclient
Для вывода всех SMB ресурсов в локальной сети:
$ smbtree -N
Вывести список доступных SMB папок на удаленном хосте Windows:
smbclient -L //192.168.31.33 -N
Если в Windows запрещен анонимный доступ, появится ошибка:
session setup failed: NT_STATUS_ACCESS_DENIED
В этом случае нужно указать учетную запись пользователя Windows, которую нужно использовать для подключения:
smbclient -L //192.168.31.33 -U User03
Если нужно использовать учетную запись пользователя домена, добавьте опцию –W:
smbclient -L //192.168.31.33 -U User03 –W Domain
Для интерактивного подключения к сетевой папке Windows используется команда:
smbclient //192.168.31.33/backup -U User03 -W Domain
или
smbclient //192.168.31.33/backup -U User03
Для анонимного доступа:
smbclient //192.168.31.33/backup -U Everyone
После успешного входа появится приглашение:
smb: \>
Вывести список файлов в сетевой папке:
dir
Скачать файл из сетевой папки Windows:
get remotefile.txt /home/sysops/localfile.txt
Сохранить локальный файл из Linux в SMB каталог:
put /home/sysops/localfile.txt remotefile.txt
Можно последовательно выполнить несколько команд smbclient:
$ smbclient //192.168.31.33/backup -U User03 -c "cd MyFolder; get arcive.zip /mnt/backup/archive.zip"
Полный список команд в smbclient можно вывести с помощью команды help. Команды smbclient схожи с командами ftp клиента.
При использовании команды smbclient может появиться ошибка:
Unable to initialize messaging contextsmbclient: Can't load /etc/samba/smb.conf - run testparm to debug it.
Чтобы исправить ошибку, создайте файл /etc/samba/smb.conf.
Если на хосте Windows отключен протокол SMB 1.0, то при подключении с помощью smbclient появится ошибка:
Reconnecting with SMB1 for workgroup listing. protocol negotiation failed: NT_STATUS_CONNECTION_RESET Unable to connect with SMB1 -- no workgroup available.
Поддержку сетевых дисков Windows в Linux обеспечивает пакет cifs-utils. Если он у вас еще не установлен, в командной строке от имени суперпользователя введите
apt-get install cifs-utils
Эта команда проверит, установлен ли указанный пакет и, если нет, установит его.
Создайте в /mnt (или любом другом месте) папку, в которую мы будем подключать сетевой диск Windows:
mkdir /mnt/winshare
И наконец само подключение сетевой папки Windows в Linux выполняется с помощью команды mount.cifs
mount.cifs //SERVER_IP/SHARE_NAME /mnt/winshare -o username=WIN_USER_NAME,password=WIN_USER_PASSWORD
Такая команда выполнит присоединение к фаловой системе Linux сетевого диска Windows с именем SHARE_NAME, расположенного на сервере с IP-адресом SERVER_IP от имени WIN_USER_NAME с паролем WIN_USER_PASSWORD. Следует понимать, что на стороне Windows уже логичным образом указанная папка должна быть расшарена и права на доступ к ней должны принадлежать указанному пользователю.
В большинстве случаев этого достаточно, если вы работаете от лица суперпользователя. Если же вы от лица суперпользователя производите только подключение сетевой папки Windows, а работать с ней планируете от лица обычного, непривелегированного пользователя, то в качестве опции команде mount.cifs необходимо передать значения UID и GID этого пользователя, иначе, скорее всего, вам не будут доступны операции редактирования файлов и каталогов. Получить UID и GID пользователя можно командой:
grep MY_USER_NAME /etc/passwd
Подставив вместо MY_USER_NAME имя пользователя, под которым вы работаете в Linux, вы получите примерно следующую строчку:
MY_USER_NAME:x:1000:1000:user,,,:/home/user:/bin/bash
где 3-е и 4-е поле как раз указывают на UID и GID пользователя MY_USER_NAME. Теперь просто подставим полученные значения в качестве дополнительных аргументов команды mount.cifs:
mount.cifs //SERVER_IP/SHARE_NAME /mnt/winshare -o username=WIN_USER_NAME,password=WIN_USER_PASSWORD,uid=1000,gid=1000
где uid=1000,gid=1000 — uid и gid, полученные из примера выше.
Напротив, если сетевой диск публичен, и для доступа к нему не нужен ни логин ни пароль, в опциях вместо имени пользователя и его пароля необходимо указать, что доступ является гостевым:
mount.cifs //SERVER_IP/SHARE_NAME /mnt/winshare -o guest
И наконец, чтобы в Linux автоматически подключать сетевую папку после перезагрузки, вносим соответствующую информацию в /etc/fstab (дописываем в конец файла):
//SERVER_IP/SHARE_NAME /MOUNT_POINT_PATH cifs ALL_OPTIONS 0 0
Т.е. должно получиться что-то вроде
//192.168.0.1/share /mnt/winshare cifs user=WIN_USER_NAME,password=WIN_USER_PASSWORD,uid=1000,gid=1000 0 0
Вы скажите, что это плохо — хранить пароль в открытом виде в файле, доступном для чтения всем, и будете правы. К счастью, разработчики об это позаботились. Создаем файл с помощью редактора, например, nano:
nano /etc/credentials #имя файла может быть любым
такого содержания:
username=WIN_USER_NAME
password=WIN_USER_PASSWORD
domail=WIN_WORKGROUP
Делаем его доступным для чтения и записи только для пользователя root:
chmod 600 /etc/credentials #указывайте файл, который создавали вы
и вместо всей обвязки из имен и паролей просто пишем в опциях credentials=/etc/credentials (или тот файл, который вы создали). Эта опция работает как при ручном монтировании сетевого диска Windows
mount.cifs //SERVER_IP/SHARE_NAME /mnt/winshare -o credentials=/etc/credentials,uid=1000,gid=1000
так и автоматическом, при внесении записи в /etc/fstab (из примера выше):
//192.168.0.1/share /mnt/winshare cifs credentials=/etc/credentials,uid=1000,gid=1000 0 0
Примечание. Если вы используете дистрибутив, основанный на SystemD (Debian версии 8 и выше, Ubuntu версии 15.04 и выше, Fedora, ArchLinux…), применение файла /etc/fstab для автоматического монтирования файловых систем является нежелательным, так как SystemD использует несколько другой механизм для монтирования файловых систем, хотя он и обратно совместим с /etc/fstab. Узнать, как можно использовать возможности SystemD для монтирования файловых систем можно в статье SystemD Automount
Для того чтобы примонтировать сетевой диск samba необходимо отредактировать файл /etc/fstab
//192.168.0.76/obmen /media/obmen cifs _netdev,noauto,users,user=human,password=04-fadetoblack,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
//192.168.0.76/obmen- место шары в сети.
готово.
После перезагрузки должен монтироваться по клику на папку
Команда mount в Linux или все о монтировании разделов, дисков, образов ISO и SMB ресурсов.
Если Вам нужно подключить/примонтировать жесткий диск с файловой системой NTFS или ext2, ext3 к компьютеру на базе операционной системы Linux, то Вы читаете правильную статью.
Зачем делать это руками, если современные desktop-системы Линукс делают автоматически?
Есть отдельные случаи когда система Linux не может автоматически примонтировать/подключить диск в силу каких-то логических сбоев диска, вирусов, которыми заражены NTFS/FAT разделах или из-за еще чего-то аномального. Для этого настоящие системные администраторы делают это руками. И делают это командой mount.
Команда mount в линуксе является очень гибким инструментом в руках системного администратора. С помощью команды mount можно подключить сетевой диск, раздел жесткого диска или USB-накопитель.
Данная статья не является полным, исчерпывающим описанием команды mount (полное описание команды mount можно найти выполнив в консоли команду man mount), но стремиться к этому. Статья по описанию команды mount постоянно дорабатывается и видоизменяется. Все пожелания по статье можете оставлять в комментариях.
Устройства, которые в данный момент подключены к компьютеру, можно посмотреть набрав в консоли:
# sudo fdisk -l
Эта команда показывает все устройства, которые подключенны. Они могут быть не примонтированы, но подключены. На экране Вы увидите примерно это:
Диск /dev/sda: 40.0 ГБ, 40020664320 байт
255 heads, 63 sectors/track, 4865 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x815aa99a
Устр-во | Загр | Начало | Конец | Блоки | Id | Система |
/dev/sda1* | 1 | 1824 | 14651248+ | 83 | Linux | |
/dev/sda2 | 4742 | 4865 | 996030 | 82 | Linux | своп / Solaris |
/dev/sda3 | 1825 | 4741 | 23430802+ | 83 | Linux |
Пункты таблицы разделов расположены не в дисковом порядке
Диск /dev/sdb: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x973248ad
Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 * 1 9729 78148161 83 Linux
Диск /dev/sdc: 1027 МБ, 1027604480 байт
32 heads, 62 sectors/track, 1011 cylinders
Units = цилиндры of 1984 * 512 = 1015808 bytes
Disk identifier: 0x6f20736b
Из листинга выше видно, что к операционной системе подключено:
- два жестких диска: /dev/sda — операционная система и /dev/sdb — «файловая помойка»
- сменный USB-носитель: /dev/sdc
Просмотр примонтированых устройств осуществляется командой:
# sudo mount
После этого на экране можно увидеть:
/dev/sda1 on / type reiserfs (rw,relatime,notail) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
/proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,nosuid,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
lrm on /lib/modules/2.6.27-14-generic/volatile type tmpfs (rw,mode=755)
/dev/sda3 on /home type ext3 (rw,relatime)
securityfs on /sys/kernel/security type securityfs (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/user/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=user)
/dev/sdc on /media/USBFlash type vfat (rw,nosuid,nodev,uhelper=hal, shortname=mixed,uid=1000,utf8, umask=077,flush)
- в первой строке сообщается, что в качестве корневой ФС выступает файловая система reiserfs с параметрами монтирования: доступ на чтение и запись (rw)
- /dev/sda3 — это раздел диска /home
- /dev/sdc — это примонтированное сменное USB-устройство
Этого же результата можно достигнуть посмотрев содержимое файла /etc/mtab (в некоторых системах Linux файл называется /etc/mnt/tab)
# cat /etc/mtab
Монтирование разделов жесткого диска
Наверх
Из приведенного примера видно, что жесткий диск /dev/sdb подключен, но не примонтирован. Примонтируем раздел жесткого диска /dev/sdb1 к диску /dev/sda. Точку монтирования выберем, к примеру — /home/user/Видео. Точку монтирования можно взять любую.
# sudo mount /dev/sdb1 /home/user/Видео
где user — это название Вашего имени пользователя.
Все очень просто, сначала пишется команда mount, потом пишется то, что нужно присоединять (цифра показывает номер раздела, у нас он всего один), а потом куда присоединять. Почти всегда этого достаточно. Диск, командой mount, монтируется в указанную папку. В некоторых случаях, когда имеются логические ошибки на разделах подключаемого жесткого диска, нужно дополнительно указать тип файловой системы. В данном случае у нас ext3.
# sudo mount -t ext3 /dev/sdb1 /home/user/Видео
Так же этот параметр может принимать значения:
- -t ntfsили -t ntfs-3g
- -t vfat
- -t iso9660
Соответственно для NTFS, FAT и CD-дисков файловых систем. Последний нужен только для подключения CD/DVD-ROM устройств и образа диска .iso.
Чтобы вручную задать параметры доступа к примонтированному разделу следует указать параметр:
- -o rw
- -o ro
Первый разрешает чтение и запись, второй только чтение. Ну например, так:
# sudo mount -t ext3 -o rw /dev/sdb1 /home/user/Видео
Дополнительные параметры, которые помогают в некоторых случаях:
# sudo mount -t ext3 -o rw,iocharset=utf8,codepage=866 /dev/sdb1 /home/user/Видео
Первый явно задает кодировку системной локали, в нашем случае это utf8 (для разных дистрибутивов она своя, но чаще utf8), а другая добавляет поддержку русского языка.
Если все же жесткий диск отказывается монтироваться в операционной системе Linux, то можно примонтировать его вручную. Параметр -o force позволяет принудительно монтировать разделы жесткого диска в линуксе. Ну, к примеру, так:
# sudo mount -t ext3 -o force /dev/sdb1 /home/user/Видео
У меня, к примеру, раздел жесткого диска не хотел монтироваться после подключения к Windows-машине, которая была заражена вирусами. Так получилось, что вирус кинул autorun.exe в корень моего раздела и Linux из-за этого не хотел монтировать этот раздел. Данный выше параметр команды mount помог примонтировать инфицированный раздел. После чего вирус успешно был удален вручную.
Есть в Linux уникальная возможность указать зеркало папки, которое получает все права и доступные над папкой действия. Допустим, раздел /dev/sdb1 применяется еще и для хранения документов. Зеркалим его в /home/user/Документы:
# sudo mount —bind /home/user/Видео /home/user/Документы
Действие команды mount —bind напоминает DOS-овский subst.
Посмотреть полную информацию(доступный объем диска, свободное место) о примонтированных устройствах можно командой:
# df -h
Отмонтироватние устройства производится командой:
# sudo umount /dev/sdb1
или
# sudo umount /home/user/Видео
Монтирование дисков CD/DVD-ROM
Наверх
Если Вам нужно примонтировать CD/DVD-ROM, то монтирование CD/DVD-ROM осуществляется точно так же, той же командой mount, которая были приведены выше:
# sudo mount -t iso9660 -o ro /dev/cdrom /cd
Только при монтировании CD-ROM нужно указать тип файловой системы iso9660.
Монтирование образов диска ISO
Наверх
Если Вы хотите примонтировать образ диска ISO, то это тоже достаточно просто сделать командой mount:
# sudo mount -t iso9660 -o loop /home/file.iso /home/iso
Где /home/file.iso — путь и имя файла ISO
/home/iso — точка монтирования
Добавился только параметр -o loop, который указывает, что используется файл .iso.
Монтирование сетевых дисков SMB
Наверх
В некоторых случаях необходимо примонтировать удаленный сетевой диск. В некоторых дистрибутивах Linux, он так же монтируется автоматически (например в Ubuntu) при открытии его по сети. Можно примонтировать его вручную командой mount через консоль. Можно сделать ярлык и поместив его на рабочем столе активировать его когда нужен удаленный доступ к сетевому ресурсу. Ну или мало еще для чего.
# sudo mount -t smbfs -o username=vasja,password=pupkin //pupkin_v/Video /home/user/video
Где username=vasja,password=pupkin — это имя и пароль доступа к удаленному сетевому ресурсу, а //pupkin_v/Video — имя сетевого ресурса, /home/user/video — точка монтирования
Графические инструменты монтирования в Linux
Наверх
Есть альтернатива — графические инструменты монтирования в Linux. На просторах Internet`a можно найти много графических инструментов монтирования в Linux, но самым, наверное, продвинутым можно назвать — Mount Manager (Mount Manager — графический инструмент монтирования). Это продукт некоммерческой организации ViaLinx. Интерфейс программы простой, но функционал потрясает своей мощью, она может совершать абсолютно все действия, которые описаны в этой статье. Скачать программу можно с
официального сайта
или в репозиториях вашего дистрибутива (в Ubuntu этот менеджер есть).
В сети 2 машины. Одна из них винда с папкой shared-folder доступной по сети, вторая — Debian 10. Задача: расшарить на unix указанный каталог, сделав из него сетевой диск. Рассмотрим 3 способа:
- Монтирование сетевого диска из командной строки
- Монтирование сетевого диска указанного в /etc/fstab
- Монтирование сетевого диска из systemd
Все операции выполняем под root. В первую очередь в Linix создадим каталог куда будем монтировать /mnt/shared-folder и установим необходимые пакеты
mkdir /mnt/shared-folder apt install cifs-utils -y
Создадим файлик с паролем и логином к сетевому ресурсу и поставим на него нужные права от чужих глаз
echo -e "username=youusername\npassword=12345" > /etc/samba/passwd chmod 0600 /etc/samba/passwd
Монтирование сетевого диска из командной строки
mount -t cifs //192.168.56.1/share-folder /mnt/share-folder -o noexec,noperm,iocharset=utf8,credentials=/etc/samba/passwd mount && df umount /mnt/share-folder
Смонтировали — посмотрели что смонтировали — размонтировали
Монтирование сетевого диска указанного в /etc/fstab
В данном случае после ребута наш сетевой диск будет монтирован автоматически. Открываем /etc/fstab
nano /etc/fstab
Добавляем строку
//192.168.56.1/share-folder /mnt/share-folder cifs noexec,noperm,iocharset=utf8,credentials=/etc/samba/passwd 0 0
Монтируем — смотрим — размонтируем:
mount /mnt/share-folder mount && df umount /mnt/share-folder
Ребут сервера: reboot
Смотрим: mount && df
Смонтировано. Пока оставим смонтированным и перейдем к следующему способу.
Монтирование сетевого диска из systemd
Посмотрим на этот файлик в каталоге /run/systemd/generator/
cat /run/systemd/generator/mnt-share\\x2dfolder.mount
Этот юнит нам автоматически сгенерировал systemd-fstab-generator из указанного нами в /etc/fstab
# Automatically generated by systemd-fstab-generator [Unit] SourcePath=/etc/fstab Documentation=man:fstab(5) man:systemd-fstab-generator(8) Before=remote-fs.target [Mount] What=//192.168.56.1/share-folder Where=/mnt/share-folder Type=cifs Options=noexec,noperm,iocharset=utf8,credentials=/etc/samba/passwd
Копируем его:
cp "/run/systemd/generator/mnt-share\x2dfolder.mount" "/lib/systemd/system/mnt-share\x2dfolder.mount"
Обратите внимание, что переименовывать юнит файл нельзя, генератор нам добавил хренов бекслеш и закодировал дефис в имени, что вызовет неказистость в будущих командах systemctl, но ничего не поделать. Единственный выход — использовать другое имя для каталога монтирования /mnt/share-folder Поэтому в командах либо заключаем имя в кавычки, либо беслешим бекслеш как тут:
cp /run/systemd/generator/mnt-share\\x2dfolder.mount /lib/systemd/system/mnt-share\\x2dfolder.mount
Открываем юнит и редактируем:
nano /lib/systemd/system/mnt-share\\x2dfolder.mount
Это нужно добавить внизу:
[Install] WantedBy=remote-fs.target
А это права:
chmod 0600 /lib/systemd/system/mnt-share\\x2dfolder.mount
Не забываем размонтировать диск и отредактировать fstab убрав строку монтирования
umount /mnt/share-folder nano /etc/fstab
Перезагружаем конфиги systemctl
systemctl daemon-reload
Готово, управляем сетевым диском из systemd
systemctl status mnt-share\\x2dfolder.mount systemctl is-enabled mnt-share\\x2dfolder.mount systemctl enable mnt-share\\x2dfolder.mount systemctl start mnt-share\\x2dfolder.mount systemctl stop mnt-share\\x2dfolder.mount systemctl disable mnt-share\\x2dfolder.mount
- Посмотрели статус
- Проверили включена ли автозагрузка(монтирование при загрузке)
- Включили автозагрузку(монтирование при загрузке)
- Смонтировали сетевой диск
- Размонтировали сетевой диск
- Отключили автозагрузку(монтирование при загрузке)
Монтирование SMB не что иное как подключение сетевой папки WIndows в Linux. SMB (Server Message Block) — сетевой протокол удаленного доступа к сетевым ресурсам (файлы, папки, принтеры и т.п.). В первой версии протокола был известен также как CIFS (Common Internet File System). Протоком SMB повсеместно используется во всех ОС Microsoft Windows.
В современных дистрибутивах Linux уже можно совершенной спокойно путешествовать по сетевым дискам. Но куда удобнее если смонтировать сетевой диск сразу в папку, да еще и на рабочем столе, красота. Я создал папку с общим доступом на сервере Hyper-V, её и буду монтировать. Монтирование SMB буду делать под специально заведенным пользователем, дабы не светить пароль админа.
Монтируемая папка
Монтируемая директория доступна только администраторам и пользователю smb (создан специально для монтирования). Сделать общую папку на сервере Windows можно двумя способами: 1 — через свойства папки; 2 — через Powershell. Через свойства папки проще и быстрее как для новичка.
Но в моем случае с сервером HyperV 2019 сработал только второй способ, через Powershell.
New-SmbShare -Name "smb_mount" -Path "F:\smb_mount" -FullAccess "Administrator", "smb"
Данной командой я сделал общей папку расположенную по пути F:\smb_mount и присвоил ей имя smb_mount. Права на доступ к папке выдал пользователю Administrator и smb.
Общая папка у меня доступна по пути \\hvs19\smb_mount, но монтировать я буду ее по ip адресу. Принципиального вопроса как монтировать нет, просто не всегда есть возможность использовать имя.
С монтируемой папкой закончили, создадим папку куда будем монтировать. Я создал папку в /opt и назвал её F (по имени диска где лежит монтируемая папка) для удобства.
Установим набор утилит для монтирования SMB
Для Ubuntu (и прочих Debian`ов)
sudo apt-get install cifs-utils
Для Centos 8 (и прочих RPM дистрибутивов на YUM)
sudo yum install cifs-utils
Монтирование SMB
Все необходимые папки мы создали, теперь приступим к монтированию файловой системы.
sudo mount -t cifs -o username=smb,password=пароль //192.168.1.110/smb_mount /opt/F
Пройдемся по параметрам:
- -t cifs — тип файловой системы cifs (полностью совместим с SMB)
- username — пользователь у которого есть доступ к монтируемой папке (на сетевом диске). Если разрешено, можно использовать гостя, без пароля. В таком случае указываем username=guest
- password — пароль от учетной записи этого пользователя
- //192.168.1.110/smb_mount — общая папка на сервере которую монтируем
- /opt/F — папка куда монтируем.
Посмотрим что все получилось, проверим свободное место в сетевой папке
Можно использовать дополнительные возможности при монтировании, используя ключи после параметра -o. Вот некоторые из них
- rw — запись и чтение
- ro — только чтение
- iocharset=utf8 — в данной кодировке будет выводится информация;
- codepage=cp866 — кодировка используемая на сервере с общей папкой. Обычно Windows устанавливает кодировку cp866.
- vers=3.0 — принудительно указать версию подключения SMB протокола. Для безопасного подключения используйте последнюю версию.
Используя команду mount мы монтируем папку в ручном режиме и после перезагрузки монтирования не произойдет. Для автоматического монтирования папки читаем следующий раздел.
Автоматическое монтирование SMB
Для постоянного монтирования папке при старте системы необходимо внести изменения в файл /etc/fstab. При монтировании сетевого диска с SMB используется пароль. Для большей сохранности не будем указывать его в файле fstab, а сохраним в директории root.
Создадим файл с учетными данными
Добавим в файл строки: имя пользователя, пароль, домен (если используется). У меня домена нет, поэтому добавлю только имя и пароль
username=smb password=пароль domain=mydomain
Откроем файл /etc/fstab для редактирования
Добавим новую строку в конец файла
//192.168.1.110/smb_mount /opt/F cifs user,rw,credentials=/root/.cifsmnt 0 0
Сохраним файл и перезагрузим компьютер. После этого сетевая папка будет монтироваться автоматически.
Разберем указанные параметры
- //192.168.1.110 — ip адрес сервера где находится сетевая папка
- /smb_mount — сетевая папка на указанном выше сервере
- /opt/F — папка на локальном компьютере куда будем монтировать сетевую папку
- cifs — тип монтируемой файловой системы
- user — разрешение монтировать для любого пользователя
- rw — разрешения на чтение/запись на диск при монтировании
- credentials — путь к файлу с данными учетной записи используемых для подключения по SMB
- 0 — не использовать дамп
- 0 — не проверять файловую систему при старте программой fsck
Права на папки и файлы
Примонтированный диск по умолчанию монтируется от root и разрешает запись на диск только под ним. Рассмотрим опции позволяющие изменить доступ на примонтированные папки и файлы. Также рассмотрим настройки по смене владельца смонтированной папки.
- uid — задает владельца каталога. Узнать uid пользователей можно в файле /etc/passwd
- gid — задает группу владельца каталога. Узнать gid групп можно в файле /etc/passwd
- file_mode=0777 — права на доступ к файлам. 0777 — разрешено запись/чтение всем.
- dir_mode=0777 — права на доступ к папкам. 0777 — разрешено запись/чтение всем.
Пример записи в файле /etc/fstab монтирования от моего пользователя (не root) с полным доступом ко всем файлам и папкам
//192.168.1.110/smb_mount /opt/F cifs user,rw,credentials=/root/.cifsmnt,file_mode=0777,dir_mode=0777,uid=1000,gid=1000 0 0
Размонтирование SMB
Размонтировать сетевую папку SMB можно используя команду umount
В параметрах команды umount указываем директорию куда была смонтирована сетевая папка. В моем случае это /opt/F
Если смонтированная файловая система сейчас занята, появится сообщение umount: target is busy . В таком случае размонтировать получиться с ключом -l
Решение проблем монтирования
Если по какой либо причине после ваших попыток папка все же не монтируется, необходимо смотреть системный журнал.
grep "cifs" /var/log/syslog
В системном журнале будет указана причина ошибки монтирования. Как пример не верный логин/пароль, не установленные утилиты cifs и т.п.