我在网络中的另一台计算机上安装了 Ubuntu Server 16.04 和 Samba。Ubuntu 操作系统位于一个小型 SSD 上,我还有 2 个额外的硬盘安装在 /media/drive1 和 /media/drive2 上。
现在据我所知,我有两个选项可以使这些驱动器从我的 Windows PC 访问:
- 创建 2 个 Samba 共享,每个驱动器一个
- 创建 1 个 Samba 共享,包含完整的 /media/ 文件夹
目前我的目标是将数据从驱动器 1 复制到驱动器 2(因此在服务器本地),通过 Windows 桌面上的资源管理器即可完成。
如果我创建 2 个共享,每个驱动器一个,本地复制速度根本无法使用。速度范围在 20-50 KB/s 左右,偶尔会达到 1-1.5 MB/s,每隔 20 秒左右就会死机并停留在 0。
从我读到的内容来看,我现在认为这是因为文件首先被复制到我的 Windows 桌面,然后重新上传到服务器。我猜 2 个共享不再被解释为“本地”。为什么它完全停滞了,但我不明白。
如果我创建 1 个共享,其中包含整个 /media/ 目录,则在尝试将文件从驱动器 1 复制到驱动器 2 时,即使有足够的空间,也会遇到“磁盘空间不足”的问题。我一次可以复制 80 GB,但一次最多只能复制 80 GB。不过,以这种方式复制的速度是正常的,大约为 70-80 MB/s,有时会达到 90 MB/s 以上。
我现在发现,这种情况发生是因为 Samba 检查了您指向的目录(在本例中为 /media)的驱动器上的可用空间,而此文件夹位于小型 SSD 上。SSD 只有 80 GB 的可用空间,因此计算结果正确。
所以我想问题是,有什么方法可以解决这个问题,以便我可以同时拥有两个世界?我希望能够将服务器中的文件从一个磁盘复制到另一个磁盘,而不受这些限制,并且可以轻松地在我的桌面 Windows 资源管理器中完成。
附录:这是我在 smb.conf 中创建共享时使用的模板,身份验证和访问等均正常进行,没有问题。
[Drive1]
comment = Drive1
path = /media/drive1
browsable = yes
guest ok = no
valid users = @samba
read only = no
create mask = 0755
答案1
这将是一个令人讨厌的解决方法:创建文件 /usr/local/bin/dfree_Drive.sh
#!/bin/bash
df | egrep '/media/drive[0-9]+$' | awk '{total+=$2; avail+=$4; print $0} END{print total, avail}'
并使其可执行。然后在 Samba 配置的共享部分添加:
dfree command = /usr/local/bin/dfree_Drive.sh
这个解决方案很糟糕,因为它会向客户端谎报共享卷的容量。但据我所知,没有办法让 Samba 知道特定文件夹(而不是卷)的容量。