我有 Fedora 23,Gnome 3 和 Nautilus 3.18.5-1.fc23。使用 Nautilus 时,SMB 速度出现问题。速度大约为 4.4MB/s,而使用其他任何方法(例如从终端使用 smbclient),我从 Samba 服务器获得 11MB/s。有没有办法调试这个问题。我在一些论坛上看到,也许 Nautilus 没有rsize
通过安装驱动器正确设置。我对此不太确定。我没有找到已安装的驱动器lsblk
。根据一些论坛的说法,网络驱动器被安装到/run
一个gvfs
文件夹中。我可以确认这一点,我得到了以下路径:
/run/user/1000/gvfs/smb-share:server=odroid-server,share=asmedia-hdd
我得到mount | grep gvfs
了以下信息:
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
我没有找到检查这个rsize
东西的方法。它可能不会解决我的问题,我不确定。我想通过驱动器关闭的另一个功能是 relatime。至少在服务器上将其设置为 noatime。
有没有办法在 Nautilus 配置中执行此操作(我知道在 fstab 中可以执行此操作)?还有其他方法可以调试此 SMB 速度慢的问题吗?
答案1
根据论坛的说法,问题出在 gvfs 和 cifs 上,效果要好得多。我不熟悉这些术语,但我可以确认这一点。通过手动安装驱动器:
mount -t cifs -o username=root,password=xxxxx //192.168.0.186/asmedia-hdd /media/asmedia-hdd
我可以在 Nautilus 中达到 10MB/s。唯一的问题是我没有网络发现,并且无法从 nautilus 卸载驱动器。所以我认为这不是一个真正的解决方案。
有没有办法强制 Nautilus 使用 cifs 而不是 gvfs?
下一个
我找到了一个配置文件,它看起来非常相关:
/usr/share/gvfs/mounts/smb.mount
[Mount]
Type=smb-share
Exec=/usr/libexec/gvfsd-smb
AutoMount=false
Scheme=smb
我猜 gvfs 不是一种分区类型,它也使用 cifs。所以我想我可以在这里以某种方式设置 cifs 缓冲区大小。我还没能找到如何做到这一点。
根据 wiki,gvfs 是一个虚拟文件系统,因此它可以位于 cifs 之上,所以我是对的。
下一个
我找到了这个答案:https://unix.stackexchange.com/a/44318/126217通过尝试从终端安装 gvfs。据此,export $(dbus-launch)
在使用任何 gvfs 命令之前,这很重要。我确认,我无法从终端使用 gvfs 命令,并且我只收到有关该问题的模糊错误消息。
我能够使用 gvfs 手动安装驱动器:
gvfs-mount smb://WORKGROUP\;[email protected]/asmedia-hdd
我能够列出已安装的驱动器
gvfs-mount -l
Drive(0): KINGSTON SV300S37A120G
Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Drive(1): ST31000528AS
Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Volume(0): data
Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Volume(1): system
Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Volume(2): Rendszer számára fenntartott
Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Drive(2): TSSTcorp CDDVDW SH-222AB
Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
Mount(0): asmedia-hdd on 192.168.0.186 -> smb://WORKGROUP;[email protected]/asmedia-hdd/
Type: GDaemonMount
关于这些已安装驱动器的配置仍然没有太多信息。Nautilus 没有显示已安装的驱动器。这很有趣,因为当我在终端中使用 mount 命令时,已安装的驱动器出现在 nautilus 中。
我在这里找到了挂载点:
cd ~/.gvfs/smb-share\:domain\=WORKGROUP\,server\=192.168.0.186\,share\=asmedia-hdd\,user\=root/
我能够从 gvfs 挂载的驱动器 cp 一个 mkv 文件,并且我使用
watch -- du -h test.mkv
测量传输速度,结果约为 4.3MB/s。我使用相同的技术测量使用 smbclient 命令时的 cp 速度。因此,我能够重现 Nautilus 在后台执行的操作。现在我唯一需要做的就是添加一个选项来更改 cifs 缓冲区大小(如果可能的话)。
结论:
我最终将以下内容添加到 fstab:
//192.168.0.186/asmedia-hdd /media/asmedia-hdd cifs rw,workgroup=WORKGROUP,username=root,password=xxxxx,noauto,users,iocharset=utf8 0 0
并使用
chmod 4755 /usr/sbin/mount.cifs
因为 nautilus 写道,只有 root 可以挂载驱动器,而不是显示 root 密码提示。
我不喜欢这个解决方案,因为 nautilus 无法通过这种方式发现网络驱动器。另一个问题是我必须授予所有用户安装此驱动器的权限,并且必须提供 smb 密码,因为我也没有提示。下载速度还可以,上传速度也一样。上传时我从 nautilus 获得了错误的速度和文件大小报告,它一开始写入 120MB/s,然后不断下降。通过使用 gvfs 安装的驱动器检查文件大小,我设法获得了有关实际速度的信息。大约是 10MB/s。
我尝试使用 gvfs 来解决这个问题。如果我成功了,我会发布答案,但在此之前,我会使用这个 cifs mounted 解决方法。
下一頁 ~ 2016
在此处添加了错误报告:https://bugzilla.gnome.org/show_bug.cgi?id=762384也许他们有答案。
下一頁 ~ 2017
根据 Gnome 开发人员的说法,这是一个 Samba 错误。他们可能会编写补丁,但不能保证。Samba 开发人员不关心在过去的3年里(2014-17),我甚至不确定该项目是否得到维护。
笔记:
我通过 wifi 连接测量了 10MB/s。当我尝试调试它时,我使用相同的 Odroid XU4 通过以太网进行了一些测量。(GVFS 使用 libsmbclient,因此它执行的操作类似于调用smbget
。)
使用 nautilus 复制(18-19MB/s)
# mount with nautilus on GUI
# copy with nautilus on GUI
使用 smbget 默认块大小 (23-24MB/s) 进行复制
# mount with nautilus on GUI
smbget -u root -w WORKGROUP smb://192.168.0.186/asmedia-hdd/testfile
使用 smbget 16K(1-64K)块大小进行复制(38-57MB/s)
# mount with nautilus on GUI
smbget -u root -w WORKGROUP smb://192.168.0.186/asmedia-hdd/testfile --blocksize=16777216
使用 CIFS 挂载进行复制(70-90MB/s)
# mount in fstab
//192.168.0.186/asmedia-hdd /media/asmedia-hdd cifs rw,workgroup=WORKGROUP,username=root,password=...,noauto,users,iocharset=utf8 0 0
# copy with nautilus on GUI
因此,一个明显的瓶颈是 GVFS 中的块大小太小,但速度最高可达 1k 块大小左右,最多达到 CIFS 速度的 63%,因此 smb 库中一定存在另一个未识别的瓶颈。