Networking

Samba 報告可用空間不足

  • September 30, 2020

在我的 NAS 出現一些問題後,我切換到了 Debian/Lenny。我已經設法安裝和配置了我需要的大部分軟體,但是我在使用 Samba 時遇到了障礙。我可以訪問共享並讀取所有文件,但如果我嘗試發送任何內容,它會告訴我空間不足。

我使用的是 Windows,所以我打開了命令提示符並執行

> dir \\MyNAS.home\Public  
1 File(s)     44,814,336 bytes  
12 Dir(s)  507, 998, 060, 544 bytes free

報告的可用空間是正確的(~500GB),那麼問題是什麼?以下是我的 smb.conf:

[global]
 workgroup = MEDUS
 realm = WORKGROUP
 netbios name = MyNAS
 map to guest = bad user
 server string = My Book Network Storage
 load printers = no
 printing = bsd
 printcap name = /dev/null
 disable spoolss = yes
 log file = /var/log/samba/log.smbd
 max log size = 50
 dead time = 15
 security = share
 auth methods = guest, sam_ignoredomain, winbind:ntdomain
 encrypt passwords = yes
 passdb backend = smbpasswd:/opt/etc/samba/smbpasswd  
 create mask = 0664
 directory mask = 0775
 local master = no
 domain master = no
 preferred master = no
 socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536
 min receivefile size = 128k
 use sendfile = yes
 dns proxy = no
 idmap uid = 10000-65000
 idmap gid = 10000-65000
 don't descend = /proc, /dev, /etc
 admin users =
 null passwords = yes
 guest account = nobody
 unix extensions = no 

[Public]
 path=/shares/internal/PUBLIC
 guest ok = yes
 read only = no
 dfree cache time = 10
 dfree command = /opt/etc/samba/dfree

我自己添加的dfree command參數,試圖解決問題(這不起作用)。但是,我懷疑 NAS 無論如何都在報告正確的磁碟空間,這從我上面使用的命令的結果可以明顯看出。

我也嘗試過使用該block size命令,但無濟於事。我能夠在共享上創建一個空文本文件,然後我反复編輯並保存了該文件——它在 130 字節左右停止。

有誰知道問題可能是什麼?

在瀏覽了我的 smb.conf 文件並註釋掉幾乎所有內容後,我發現問題是由配置設置引起的min receivefile size

此選項在處理 SMBwriteX 呼叫時更改 smbd(8) 的行為。在非簽名 SMB/CIFS 連接上大於此值的任何傳入 SMBwriteX 呼叫都不會以正常方式處理,而是將傳遞給任何底層核心 recvfile 或 splice 系統呼叫(如果沒有這樣的呼叫,Samba 將在使用者中模擬空間)。這允許零拷貝直接從網路套接字緩衝區寫入文件系統緩衝區記憶體(如果可用)。它可能會提高性能,但建議進行使用者測試。如果設置為零,Samba 以正常方式處理 SMBwriteX 呼叫。要啟用 POSIX 大型寫入支持(SMB/CIFS 寫入高達 16Mb),此選項必須為非零。最大值為 128k。大於 128k 的值將被靜默設置為 128k。

在 conf 文件中註釋掉這一行解決了這個問題,我猜這就是當您使用其他人推薦的配置設置時會發生的情況。無論如何,我不確定我是否完全理解此設置的作用。

是否啟用配額?檢查:

sudo quotacheck -avugm

嘗試禁用它:

sudo quotaoff -fvpa

引用自:https://unix.stackexchange.com/questions/10736