如何通过 Nautilus 调试慢速 samba 共享?

inf*_*rno 6 samba mount speed nautilus cifs

我有带有 Gnome 3 和 Nautilus 3.18.5-1.fc23 的 Fedora 23。我在使用 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
Run Code Online (Sandbox Code Playgroud)

通过mount | grep gvfs我得到了以下内容:

gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
Run Code Online (Sandbox Code Playgroud)

我没有找到检查这个rsize东西的方法。它可能无法解决我的问题,我不确定。我想通过驱动器关闭的另一件事是 relatime。至少它在服务器上设置为 noatime。

有没有办法在 Nautilus 配置中做到这一点(我知道在 fstab 中是可能的)?有没有另一种方法可以以某种方式调试这个缓慢的 SMB 速度问题?

inf*_*rno 6

根据论坛,问题出在 gvfs 和 cifs 上,效果要好得多。我不熟悉这些术语,但我可以确认这一点。通过手动安装驱动器:

mount -t cifs -o username=root,password=xxxxx //192.168.0.186/asmedia-hdd /media/asmedia-hdd
Run Code Online (Sandbox Code Playgroud)

我可以在 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
Run Code Online (Sandbox Code Playgroud)

我猜 gvfs 不是分区类型,它也是使用 cifs 的东西。所以我想我可以在这里以某种方式设置 cifs 缓冲区大小。我还无法找到如何做到这一点。

根据 wiki,gvfs 是一个虚拟文件系统,因此它可以位于 cifs 之上,所以我是对的。

下一个

我通过尝试从终端挂载 gvfs找到了这个答案:https : //unix.stackexchange.com/a/44318/126217。根据它,export $(dbus-launch)在使用任何 gvfs 命令之前,这是很重要的。我确认,我无法从终端使用 gvfs 命令,并且我只收到有关该问题的模糊错误消息。

我能够使用 gvfs 手动安装驱动器:

gvfs-mount smb://WORKGROUP\;root@192.168.0.186/asmedia-hdd
Run Code Online (Sandbox Code Playgroud)

我能够列出已安装的驱动器

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;root@192.168.0.186/asmedia-hdd/
      Type: GDaemonMount
Run Code Online (Sandbox Code Playgroud)

关于这些已安装驱动器的配置的信息仍然不多。Nautilus 没有显示安装的驱动器。这很有趣,因为当我在终端中使用 mount 命令时,安装的驱动器出现在 nautilus 中。

我在这里找到了挂载点:

cd ~/.gvfs/smb-share\:domain\=WORKGROUP\,server\=192.168.0.186\,share\=asmedia-hdd\,user\=root/
Run Code Online (Sandbox Code Playgroud)

我能够从 gvfs 安装的驱动器 cp 一个 mkv 文件,我使用

watch -- du -h test.mkv
Run Code Online (Sandbox Code Playgroud)

测量传输速度,大约是 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
Run Code Online (Sandbox Code Playgroud)

并使用

chmod 4755 /usr/sbin/mount.cifs
Run Code Online (Sandbox Code Playgroud)

因为 nautilus 写道,只有 root 可以挂载驱动器,而不是显示 root 密码提示。

我不喜欢这个解决方案,因为 nautilus 不会以这种方式发现网络驱动器。另一个问题是我必须授予所有用户安装此驱动器的权限,并且我必须提供 smb 密码,因为我也没有提示。下载速度还可以,我上传也一样。通过上传,我从 nautilus 得到了错误的速度和文件大小报告,它在开始时写入 120MB/s,不断下降。通过使用 gvfs 安装驱动器检查文件大小,我设法获得了有关实际速度的信息。大约是 10MB/s。

我尝试用 gvfs 解决这个问题。如果我设法这样做,我会发布一个答案,但在此之前我将使用此 cifs 安装的解决方法。

下一个 ~ 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
Run Code Online (Sandbox Code Playgroud)

使用 smbget 默认块大小复制(23-24MB/s)

# mount with nautilus on GUI
smbget -u root -w WORKGROUP smb://192.168.0.186/asmedia-hdd/testfile
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

所以一个明显的瓶颈是GVFS这里的块大小太小,但速度最高在1k块大小左右,最多达到CIFS速度的63%,所以smb lib中肯定还有另一个未识别的瓶颈。