У меня есть сервер Samba под управлением Ubuntu 16.04.1, обслуживающий некоторые подобъемы btrfs. Эти объемы имеют квоты btrfs, установленные в btrfs qgroup
.
Чтобы отразить квоту для клиентов, я хочу использовать обычай dfree command
.
Моя проблема в том, что Samba, кажется, никогда не вызывает my dfree command
, а просто показывает доступное свободное место в файловой системе btrfs.
username@NAS:~$ smbd --version
Version 4.3.11-Ubuntu
Мой smb.conf:
[global]
max log size = 1000
usershare allow guests = yes
dns proxy = no
pam password change = yes
workgroup = WORKGROUP
map to guest = bad user
obey pam restrictions = yes
server role = standalone server
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd program = /usr/bin/passwd %u
passdb backend = tdbsam
encrypt passwords = yes
server string = %h server (Samba, Ubuntu)
panic action = /usr/share/samba/panic-action %d
log file = /var/log/samba/log.%m
log level = 10
syslog = 0
dfree cache time = 0
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
[username_backup]
path = /backup_tank/username
browsable = yes
force group = username
directory mode = 750
force user = username
guest ok = no
valid users = username
create mode = 650
writable = yes
security = user
dfree command = /usr/local/bin/df_btrfs
usr / local / bin / df_btrfs (владелец root: root и 700 прав):
#!/bin/bash
STR=$(/bin/btrfs qgroup show -rF --raw /backup_tank/username/ | /usr/bin/tail -1)
SIZE=$(/usr/bin/expr `/bin/echo $STR | /usr/bin/cut -d \ -f 4` / 1024)
USED=$(/usr/bin/expr `/bin/echo $STR | /usr/bin/cut -d \ -f 2` / 1024)
AVAIL=$(/usr/bin/expr $SIZE - $USED)
/bin/echo $SIZE $AVAIL
Когда я запускаю этот скрипт (как root из-за команды btrfs), он дает мне правильные числа в формате, ожидаемом Samba:
username@NAS:~$ sudo /usr/local/bin/df_btrfs
734003200 196187016
То, что я пытался безуспешно (samba продолжает давать мне те же цифры, логи не показывать ошибку или признак запуска скрипта):
chmod 777 /usr/local/bin/df_btrfs
Заменить содержимое /usr/local/bin/df_btrfs
на:
#!/bin/bash
/bin/echo "734003200 196187016"
Заменить настройку dfree command
на
dfree command = 734003200 196187016
Заменить настройку dfree command
на несуществующий путь к файлу
dfree command = /usr/local/bin/df_btrfs_nonexistant
( все еще нет ошибок в журналах, хотя этот файл не существует)
dfree command
в [global]
Я перезапустил службу smbd между каждой попыткой, а затем даже сервером и клиентским компьютером.
Единственный знак dfree command
или /usr/local/bin/df_btrfs
в журналах smbd:
[2016/12/27 12:16:52.059912, 5, pid=23203, effective(0, 0), real(0, 0)] ../source3/param/loadparm.c:1325(free_param_opts)
doing parameter dfree command = /usr/local/bin/df_btrfs
doing parameter dfree cache time = 0
Можно найти описание здесь и опасное обходное решение: https://bugs.launchpad.net/ubuntu / + источник/самба / + ошибка/1310792