如何通过 Nautilus 调试缓慢的 Samba 共享?

如何通过 Nautilus 调试缓慢的 Samba 共享?

我有 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 库中一定存在另一个未识别的瓶颈。

相关内容