如何从 Linux 客户端查看 CIFS 共享上的磁盘配额使用情况?

如何从 Linux 客户端查看 CIFS 共享上的磁盘配额使用情况?

我有几个 Linux 客户端在运行 Windows Server 2012 的远程计算机上安装共享。相关行如下/etc/fstab所示:

//server.address.com/share /media/share cifs rw,user,noauto,_netdev,soft,cred=/etc/samba/cred/share 0 0

如果我用来df查询可用空间量,我会得到:

~$ df -kh /media/share
Filesystem                 Type  Size  Used Avail Use% Mounted on
//server.address.com/share cifs  1.8T  1.1T  803G  57% /media/share

我使用以下方法获得基本相同的使用情况统计数据stat -f

~$ stat -f /media/share
  File: "/media/share"
    ID: 0        Namelen: 4096    Type: cifs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 483183820  Free: 210294051  Available: 210294051
Inodes: Total: 0          Free: 0

这里,4096 * 210294051 / 2^30 = 802.2GB 可用。但是我知道事实上共享几乎已完全填满 - 从 Windows 客户端我看到使用了 1.79/1.80T。

我怀疑这种差异可能与这个问题根据该讨论主题(始于 2012 年),CIFS 内核客户端不支持报告配额使用情况。我还没有发现有关该主题的任何新信息(我的客户端运行 Ubuntu 14.04、内核 v3.13.0-46-generic、mount.cifs v6.0)。

我尝试使用该nounix标志进行安装,但仍然得到不正确的使用情况统计数据:

~$ df -kh /media/share
Filesystem                 Type  Size  Used Avail Use% Mounted on
//server.address.com/share cifs  1.8T  1.1T  803G  57% /media/share

~$ stat -f /media/share
  File: "/media/share"
    ID: 0        Namelen: 4096    Type: cifs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 483183820  Free: 210294040  Available: 210294040
Inodes: Total: 0          Free: 0

我也尝试过使用quota,但这可能只适用于 NFS 挂载,因为它没有为我的 CIFS 共享打印任何内容:

~$ quota -v
~$

答案1

如果您没有为 SMB 协议版本指定挂载选项,则将使用默认值 1.0。只有 SMB 协议版本 2.0 及更高版本支持报告配额。fstab 中的 SMB 版本指定如下:

man mount.cifs
...
OPTIONS 
...

     vers=
           SMB protocol version. Allowed values are:

           ·   1.0 - The classic CIFS/SMBv1 protocol. This is the default.

           ·   2.0 - The SMBv2.002 protocol. This was initially introduced in Windows Vista Service Pack 1, and Windows Server 2008.
               Note that the initial release version of Windows Vista spoke a slightly different dialect (2.000) that is not
               supported.

           ·   2.1 - The SMBv2.1 protocol that was introduced in Microsoft Windows 7 and Windows Server 2008R2.

           ·   3.0 - The SMBv3.0 protocol that was introduced in Microsoft Windows 8 and Windows Server 2012.

           Note too that while this option governs the protocol version used, not all features of each version are available.

因此,只需在示例中添加 vers=2.0 或更高版本即可df正确报告配额:

//server.address.com/share /media/share cifs rw,user,noauto,_netdev,soft,cred=/etc/samba/cred/share,vers=2.0 0 0

答案2

您可以使用下面的用户空间工具来查询配额信息。

https://github.com/kenneth-dsouza/smb2quota

# smb2quota.py /test
 Amount Used | Quota Limit | Warning Level | Percent Used | Status       | SID 
 70.0 kiB    | 16.0 EiB    | 16.0 EiB      | N/A          | Ok           | S-1-5-32-544
 480.0 MiB   | 500.0 MiB   | 450.0 MiB     | 96.0         | Warning      | S-1-5-21-3363399803-746912020-2622272238-1001
 4.0 MiB     | 16.0 EiB    | 16.0 EiB      | N/A          | Ok           | S-1-5-18

请注意:

内核对 smb2quota 的支持需要 CIFS_QUERY_INFO IOCTL,该 IOCTL 最初在 4.20 内核中引入,并且仅适用于使用 SMB2 或更高版本的挂载点(请参阅 mount.cifs(8) vers 选项)

相关内容