我正在 Debian 机器上运行 Samba 服务器。效果很好;Windows 可以很好地读写它,但有一个问题。
我通过 Samba 共享的文件夹 (/var/samba) 存储在我的主驱动器上,这是一个旧的 40GB IDE 驱动器。该文件夹内有指向我系统上其他文件夹的符号链接,其中 2 个实际上位于我的 1TB SATA 驱动器上。
在 Windows 中,我将 Samba 共享映射到驱动器号,它显示仅剩余 9GB(这是服务器根驱动器(40GB 驱动器)上剩余的空间)。
我可以告诉 Samba 报告剩余的可用空间量不同吗?我试图将 Windows 备份放入符号链接到 1TB 驱动器的文件夹之一(是的,该驱动器上还有足够的剩余空间),但 Windows 不允许我这样做,因为它认为没有足够的可用空间。
我真的不知道除了假装之外你还能做些什么。
从链接文章复制。
在 smb.conf 中,将 dfree 命令设置为脚本。该参数需要一个命令,该命令将返回块总数,后跟可用块数。samba 文档建议如下:
[global]
dfree command = /usr/local/bin/dfree
Run Code Online (Sandbox Code Playgroud)
脚本 /usr/local/bin/dfree
#!/bin/sh
df $1 | tail -1 | awk '{print $2" "$4}'
Run Code Online (Sandbox Code Playgroud)
以下内容是直接从https://web.archive.org/web/20150410132141/http://www.subvs.co.uk/faking_available_disk_space_samba获取的完整快照,它是原始网页中过去存在的内容的副本未来互联网访问者的地址。https://m.xkcd.com/979/确实如此。
我在一台即将崩溃的交换服务器上运行 exmerge,而我能找到的唯一放置导出的 pst 文件的地方是一台工作不足的旧 ubuntu 服务器。它有所需的可用空间,因此只需对 smb.conf 进行一些更改即可。第一次运行很好,但过了一会儿我想再次运行它。如果与导出的邮箱匹配的 pst 文件已经存在,Exmerge 会进行某种同步,因此当它说需要 60G 时,实际上并没有,因为 59G 已经存在。
当然,除非有足够的空间用于完全导出,否则它会拒绝运行(除非有一个我不知道的“强制”开关?)。samba 出现了,还有一些实际上不是为这项工作而设计但运行完美的东西:dfree 命令。这会让你欺骗连接的机器,让它们相信你拥有你想要的任何磁盘空间。
该参数需要一个命令,该命令将返回块总数,后跟可用块数。samba 文档建议如下:
#!/bin/sh
df $1 | tail -1 | awk '{print $2" "$4}'
Run Code Online (Sandbox Code Playgroud)
然后在你的 smb.conf 中:
[global]
dfree command = /usr/local/bin/dfree
Run Code Online (Sandbox Code Playgroud)
当然,现在您可以选择如何伪造 samba 报告的可用磁盘空间,您可以使该命令仅使用您想要的数字来 cat 一个文本文件,或者更简单,只需使其看起来像一个 migic 磁盘,使用相同数量的总空间和可用空间:
#!/bin/sh
df $1 | tail -1 | awk '{print $2" "$2}'
Run Code Online (Sandbox Code Playgroud)
通过巧妙地更改命令,它报告的可用空间与总空间相同。就这样离开可能不是一个好主意,但它确实可以在紧要关头有所帮助!