You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux Mint 18通过SAMBA共享向Windows10复制文件速度极慢求助

这种慢得离谱的传输速度确实让人头疼——毕竟以太网正常情况下怎么也得有几十MB/s的水平,20GB文件跑4小时完全不正常。咱们一步步排查解决:

第一步:检查USB硬盘的挂载参数(fstab)

外接硬盘的挂载配置直接影响读写性能,你先核对下fstab里的挂载行,比如常见的ext4挂载应该优化成这样:

/dev/sdb1 /mnt/usb ext4 defaults,noatime,nodiratime,async 0 2
  • 绝对要避免用sync参数,这个会强制每一次写入都同步到磁盘,速度直接暴跌。默认的defaults已经包含async,但如果手动加了sync一定要删掉。
  • 添加noatimenodiratime,禁止系统记录文件/目录的访问时间,减少不必要的磁盘写入操作。
  • 如果是SSD可以加discard开启TRIM,机械硬盘这个参数用处不大,但也可以加上试试。

修改完fstab后,重新挂载硬盘生效:

sudo umount /mnt/usb && sudo mount /mnt/usb
第二步:优化Samba配置(smb.conf)

打开Samba主配置文件/etc/samba/smb.conf,在全局配置里添加以下优化参数(如果你的共享段有冲突设置,优先以共享段为准),然后重启服务:

[global]
    # 优化TCP传输,减少延迟波动
    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
    # 启用RAW读写,大幅提升大文件传输效率
    read raw = yes
    write raw = yes
    # 设置最大传输单元,适配大文件传输
    max xmit = 65535
    # 自动释放闲置连接,减少资源占用
    dead time = 15
    # 启用内核sendfile机制,减少用户态/内核态切换开销
    use sendfile = yes
    min receivefile size = 16384
    # 配置异步IO大小,提升读写吞吐量
    aio read size = 16384
    aio write size = 16384

重启Samba服务使设置生效:

sudo systemctl restart smbd nmbd
第三步:排查网络硬件与参数

虽然是以太网连接,但硬件或网络参数也可能拖后腿:

  • 确认千兆链路:在Linux上用ethtool eth0(替换成你的实际网卡名,比如enp0s3)查看Speed,确保是1000Mb/s;Windows上右键以太网→属性→配置→高级→链接速度和双工,手动设置为“1.0Gbps全双工”(自动模式偶尔会协商失败)。
  • 扩大TCP缓冲区:编辑/etc/sysctl.conf,添加以下内容:
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    
    执行sudo sysctl -p让设置立即生效,更大的缓冲区能提升大文件传输的稳定性和速度。
第四步:测试本地硬盘性能

先排除硬盘本身的问题,测试外接硬盘的本地读写速度:

  • 写入测试(生成1GB临时文件,避开缓存干扰):
    sudo dd if=/dev/zero of=/mnt/usb/test_large_file bs=1G count=1 oflag=direct
    
  • 读取测试:
    sudo dd if=/mnt/usb/test_large_file of=/dev/null bs=1G count=1 iflag=direct
    

正常的USB3.0机械硬盘读写速度至少在50MB/s以上,如果本地速度就低于这个,得检查:USB接口是不是2.0(用lsusb看设备是否显示SuperSpeed)、硬盘是否有坏道、换个USB端口试试。

第五步:调整Linux IO调度器

对于外接机械硬盘,默认的CFQ调度器性能一般,换成deadline或noop能提升读写效率:

  • 临时生效(重启后失效):
    echo deadline | sudo tee /sys/block/sdb/queue/scheduler
    
    sdb是你的外接硬盘设备名,用lsblk可以查看)
  • 永久生效:编辑/etc/default/grub,找到GRUB_CMDLINE_LINUX_DEFAULT,添加elevator=deadline,比如:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"
    
    然后更新grub并重启:
    sudo update-grub
    sudo reboot
    

按这些步骤调整完后,再测试复制速度,应该能回到正常的以太网传输水平。

内容的提问来源于stack exchange,提问作者MusikPolice

火山引擎 最新活动