所以我非常困惑为什么我的 samba 文件传输如此之慢以至于无法使用。一开始似乎很快,然后变得卡住或极其缓慢,以至于必须重置。过去,使用一个 RaspberryPi 的类似方法对我有用。
对于设置,我至少有两个 RaspberryPi,可以说rasp1
和rasp2
。然后rasp1
坐骑drive1
再rasp2
坐骑drive2
。这些驱动器是通过 ntfs 或 ext4 格式化的 USB 驱动器,容量范围为 2 到 6 TB。因此,实际上 RaspberryPi 拥有一个或多个通过 USB 安装的驱动器mount /<device>/<identifier> <target_directory>
。然后 samba 配置为将驱动器公开到网络:
[storage]
path = <path_to_directory_containg_mountpoints>
public = no
browseable = yes
writeable yes
create mask = 0777
directory mask = 0777
valid user = <list of valid users>
并通过 启动sudo /etc/init.d/samba start
。我确实有一个类似的配置,rasp2
以便两者rasp1
都rasp2
可以将 USB 驱动器暴露给网络,并且客户端可以安装到它们。整个原理可以与 RaspberryPi 的自制 NAS 和外部 USB 驱动器进行比较。
现在对客户来说:客户只需安装他感兴趣的驱动器,在我们的案例中,drive1
并分别drive2
通过sudo mount -t cifs //<RaspberryPi_IP>/storage/<mountpoint_for_drive1> <target_directory> -o user=<user_from_list_of_valid_users>,gid=<local_usergroup>,sid=<local_user>
每个驱动器。它们都在本地网络中。
这种方法的主要问题是通过客户端挂载点drive1
到客户端的文件传输速率drive2
非常糟糕。当我实例化文件传输进度时,mv -vi "drive1/file1" "drive2/"
进度rsync -a --info=progress2 --remove-source-files "drive1/file1" "drive2/"
取决于文件的大小。如果文件很小并且低于~1.8M,则可以像我期望的那样轻松传输文件。但是,如果文件较大,则似乎什么也没有发生。iotop
显示了初始数据传输峰值smbd
,我猜挂载然后停止到 0%,并在另一个此类峰值发生之前保持很长一段时间。因此从技术上讲,即使这些峰值只有几分钟的时间,文件也会被传输。
我认为可能是这样的:现在,对于小包来说,首先对网络进行更多推测并不是问题:如果我执行 64 字节 ping,我会从 RaspberryPi 到客户端或从客户端得到一个恒定的 ~0.3ms ping。树莓派。当我尝试了一些方法时,似乎重新启动(sudo reboot
RaspberryPi,然后重新安装并重新启动 samba)可以解决一定量 IO 操作或几分钟的问题,具体取决于其中一个操作停止之前的并发 IO 操作量。也许这也与Resource temporarily unavailable
我多次遇到的错误有关,这是我在此设置中遇到的另一个问题。有时,挂载点需要很长时间才能列出它们(不是特别是通过命令mount
),但是当我进入多个驱动器挂载到的目录时。我认为这些驱动器会进入睡眠状态(有时我什至认为如果我对它们运行查询,它们就会进入睡眠状态,例如find . -type f [...]
),所以我禁用了它们的待机状态,sudo /usr/bin/sdparm --clear=STANDBY /<device>/<identifier>
但是到目前为止,这还没有给我带来预期的结果。我认为罪魁祸首的另一个问题是文件系统错误。由于我杀死了多个 rsync 和 mv 实例,这些实例太慢,我可能会过早终止其中一个实例。所以我分别运行sudo fsck /<device>/<identifier>
ext4和sudo ntfsfix
ntfs。其中一个驱动器实际上有问题,但即使在修复后问题仍然存在(列出安装驱动器的目录很慢,数据传输很慢)fsck
。htop
有时会显示 RaspberryPi 的一个核心在几秒钟内使用 100%,直到既没有也iotop
没有htop
显示任何预期响应。
RaspberryPI OS is: Linux raspberrypi 4.14.34-v7+ #1110 SMP <time> armv7l GNU/linux
Client can be windows or linux
Samba on RaspberryPi is: ( `samba --version` ) Version 4.5.12-Debian
长话短说:
使用 samba 挂载驱动器的 RaspberryPi 移动文件(读取)的速度非常慢。
通过 ls 显示挂载点需要很长时间,有时甚至以 终止
Resource temporarily unavailable
。(也许是一个单独的问题)驱动器在执行 IO 操作时进入睡眠状态