▍ Samba¶
Вводная информация¶
Переменные | Значения |
---|---|
Samba сервер | srv-nas 192.168.0.10 |
zpool | Z2TB |
dataset | Z2TB/foto примонтирован в /z/foto |
Установка и настройка Samba сервера¶
В данном примере настроем самбу с поддержкой теневых копий и наш сервер будет автоматически отображаться в файловых менеджерах как на стороне linux, так и windows клиентах.
Установка сервера:
Конфиг:
[global]
interfaces = lo 192.168.0.0/24
bind interfaces only = yes
workgroup = WORKGROUP
dns proxy = no
dos charset = cp866
unix charset = UTF8
log file = /var/log/samba/%m.log
max log size = 1000
netbios name = srv-nas
server string = NAS
client min protocol = SMB3
client max protocol = SMB3
server role = standalone server
server services = +smb -s3fs
dcerpc endpoint servers = +winreg +srvsvc
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
pam password change = yes
map to guest = Bad Password
usershare allow guests = yes
name resolve order = lmhosts bcast host wins
security = user
guest account = nobody
usershare max shares = 100
usershare owner only = yes
force create mode = 0070
force directory mode = 0070
keepalive = 0
load printers = no
printing = bsd
printcap name = /dev/null
#
vfs objects = acl_xattr
map acl inherit = yes
[foto]
path = /z/foto
valid users = daffin
browsable = yes
writable = yes
printable = no
read only = no
guest ok = no
public = no
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = no
store dos attributes = yes
map hidden = no
map system = no
map archive = no
map readonly = no
vfs objects = shadow_copy2
shadow:basedir = /z/foto
shadow:snapdir = .zfs/snapshot
shadow:format = GMT-%Y.%m.%d_%H.%M.%S
shadow:sort = desc
shadow:localtime = yes
Добавляем пользователя, который сможет подключиться к шаре:
Посмотреть добавленного пользователя:
┌─( [email protected] ) - ( 29 files, ) - ( ~ )
└─> sudo pdbedit -L
daffin:1000:daffin
Проверяем корректность конфига /etc/samba/smb.conf
Если всё нормально, то рестартим сервер:
Настройка теневых копий¶
Для их настройки необходимо включить просмотр списка снапшотов в виде файлов:
, т.к. по умолчанию настройка выключена:
┌─( [email protected] ) - ( 29 files, ) - ( ~ )
└─> zpool get listsnapshots
NAME PROPERTY VALUE SOURCE
Z2TB listsnapshots off default
теперь увидеть наши снапшоты можем командой:
┌─( [email protected] ) - ( 29 files, ) - ( ~ )
└─> ls -l /z/foto/.zfs/snapshot/
total 0
drwxrwxrwx 2 root root 2 авг 10 12:53 ./
drwxrwxrwx 1 root root 0 авг 9 12:02 ../
drwxrwxrwx 1 root root 0 авг 10 12:55 GMT-2023.08.10_12.49.49/
drwxrwxrwx 1 root root 0 авг 10 12:55 GMT-2023.08.10_12.50.41/
drwxrwxrwx 1 root root 0 авг 10 12:55 GMT-2023.08.10_12.53.57/
Скрипт создания снапшотов¶
#!/bin/bash
zpool="$1"
prefix="GMT-"
# Количество копий выше которых будут удаляться старые снапшоты
retention=60
if [ -z "$1" ]
then
echo "Укажите датасет для создания снапшота"
exit 1;
fi
# Полные пути до утилит для запуске скрипта из cron
date=/usr/bin/date
grep=/usr/bin/grep
sed=/usr/bin/sed
sort=/usr/bin/sort
xargs=/usr/bin/xargs
zfs=/usr/bin/zfs
today="$prefix`date +%Y.%m.%d_%H.%M.%S`"
snap_today="$zpool@$today"
snap_old=`$zfs list -t snapshot -o name | $grep "$zpool@$prefix*" | $sort -r | $sed 1,${retention}d | $xargs -n 1`
log=/var/log/zfssnap
#### Добавляем дату запуска скрипта в лог
echo >> $log
$date >> $log
echo >> $log
####
echo "Делаем снапшот: $snap_today" >> $log
$zfs snapshot -r $snap_today >> $log 2>&1
echo >> $log
# Удаляем снапшоты старше, чем значение, присвоенное в $retention
echo "Пробуем удалить старые снапшоты..." >> $log
if [ -n "$snap_old" ]
then
echo "Удаляем следующие снапшоты:" >> $log
echo "$snap_old" >> $log
$zfs list -t snapshot -o name | $grep "$zpool@$prefix*" | $sort -r | $sed 1,${retention}d | $xargs -n 1 $zfs destroy -r >> $log 2>&1
else
echo "Пока нет снапшотов для удаления." >> $log
fi
echo "**********" >> $log
exit 0
делаем его исполняемым:
и добавляем в cron
в данном примере скрипт будет запускаться два раза в день в 12 и в 18 часов.На стороне самба сервера отображение теневых копий отвечает следующая часть из приведённого ранее конфига:
...
[foto]
...
vfs objects = shadow_copy2
shadow:basedir = /z/foto
shadow:snapdir = .zfs/snapshot
shadow:format = GMT-%Y.%m.%d_%H.%M.%S
shadow:sort = desc
shadow:localtime = yes
...
Настройка Avahi¶
Теперь чтобы наши шары были видны у linux клиентах необходимо на стороне сервера установить сервисы обнаружения, в частности Avahi:
Список доступных серверов samba:
┌─( [email protected] ) - ( 107 files, 1,6M ) - ( ~ )
└─> sudo avahi-browse -r _smb._tcp
+ eth0 IPv4 SRV-NAS Служба сети Microsoft local
+ eth0 IPv6 SRV-NAS Служба сети Microsoft local
= eth0 IPv4 SRV-NAS Служба сети Microsoft local
hostname = [srv-nas.local]
address = [192.168.0.10]
port = [445]
txt = []
= eth0 IPv6 SRV-NAS Служба сети Microsoft local
hostname = [srv-nas.local]
address = [fe80::2726:1cff:feb7:3ceb]
port = [445]
txt = []
Настройка WSDD¶
Для windows клиентов необходимо установить wsdd (Web Service Discovery host daemon)
По умолчанию служба работает на всех интерфейсах и протоколах, если мы хотим изменить данное поведение, то следует добавить необходимые опции в файл /etc/default/wsdd, в нем находится единственная допустимая опция:
WSDD_PARAMS=""
Так, например, если мы хотим ограничить работу службы только интерфейсом enp3s0 и протоколом IPv4, то добавим:
WSDD_PARAMS="--interface enp3s0 --ipv4only"
Рестартим службу
Для нормальной работы службы вам также нужно разрешить в брандмауэре входящие соединения для UDP 3702 и TCP 5357.
Со стороны Windows делать ничего не нужно, Samba сервера автоматически появятся в сетевом окружении.