Linux 与 Windows 复制性能

Linux 与 Windows 复制性能

我正在尝试将文件从旧 NAS 复制到新 NAS(我说“新”,但新 NAS 已有大约 8 年历史,旧 NAS 大约有 12 年历史)。由于两者都有 RAID 磁盘,因此无法物理删除它们。旧的 NAS 运行的是 EMC 提供的某种嵌入式 Busybox Linux。较新的刚刚重建,并且正在运行最新版本的 Debian。待复制的总大小约为 8TB。此外,旧 NAS 上除网络之外唯一的外部连接是 USB 2.0 连接器,我什至不确定操作系统是否支持它们,因此复制到外部磁盘然后移动到新 NAS 同样是不可行的。 t 一个选项。

无论如何,使用rsyncorrcp使我的复制速度约为 20MB/秒。我scp的速度低于 10MB/秒。我还尝试使用管道将输出tar从一台主机传输到另一台主机ssh,但性能非常糟糕。然而,当我在 Windows 机器上安装两个共享并将文件从一个共享复制到另一个共享时,我能够达到大约 60MB/秒。所有速度均使用 iotop 和/或 iostat 确定;我不是基于 Windows 速度。

为什么 Linux 到 Linux 的复制速度如此之慢,我可以做些什么来提高 Windows 的速度吗?

ETA:这是输出ip a(接口 3 已断开):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 10:6f:3f:17:0f:cb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.227/24 brd 192.168.1.255 scope global dynamic enp3s0
       valid_lft 57093sec preferred_lft 57093sec
3: enp4s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 10:6f:3f:17:0f:ca brd ff:ff:ff:ff:ff:ff

ETA2:输出ethtool对我来说看起来不错:

# ethtool enp3s0
Settings for enp3s0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

答案1

您是否尝试过将新 NAS 的 SMB 共享挂载到旧 NAS 上,而不是使用 scp,然后通过 rsync 将数据复制到挂载点?

答案2

在 1Gbps 有线网络上,理论的最大速度 = 1000 mbps / 每字节 8 位 = 125 MB/秒。现实世界中,我曾经拥有过的最大复制速度是每个 Windows 弹出窗口约 112 MB/秒,这是从 Linux 服务器(运行 samba 服务器)复制到 Windows 7/10 电脑。

您有 8 TB => 8,000,000 MB / 112 MB/s = 71,428 秒 = 超过 19 小时,可以实现零问题的持续传输。

当我这样做时,scp我通常会看到 80-90 MB/秒,而不是 112 MB/秒,这要归功于 SSH 的开销。

为什么 Linux 到 Linux 的复制速度如此之慢,我可以做些什么来提高 Windows 的速度吗?

我报告的 112 MB/秒复制速度是从 Linux 下载到 Windows(读取)以及从 Windows 上传到 Linux(写入)。我的 Linux 服务器(工作中)有 512GB RAM,并且具有磁盘缓存,这将主要防止等待磁盘提供数据,特别是在写入系统时,数据通过网络传输并在写入磁盘之前存储在 RAM 中。硬盘的典型实际读取速度通常为 80 MB/秒或更高,因此它们通常不会有太大影响,特别是如果它是多个 RAID,但如果它是单个硬盘,那么这可能是您读取数据的瓶颈。

我正在尝试将文件从旧 NAS 复制到其他

我有使用 Synology NAS 的经验,在相同的网络和位置上,我看到 112 MB/秒的副本,如所解释的;有时我的 NAS 的速度接近 100 MB/秒,有时在几分钟内移动单个约 10GB 文件的速度仅为 50 MB/秒。 NAS 内部可以有各种设置,降低网络传输速度,以维持带宽,期望多个用户连接从中读取/写入。

您在 2 个 NAS 之间复制的 8TB 数据不是单个文件,因此处理数百万个独立文件会产生一些开销,这是没有办法解决的,除非您在本地将数据块压缩成 100+GB 的 tar 文件并传输然后,这些人会在目标 nas 上进行解压工作。

为什么是Linux到Linux的拷贝

你真的不是在做linux到linux,你是在做nas到nas,随便什么操作系统每个 NAS 上的操作系统以及它如何配置来进行网络连接以及它可以读取/写入其中的存储类型(磁盘)的性能。

根据我对 1gbps 有线网络上 112 MB/秒的描述,我可以看到 Linux 到 Linux 服务器(不是 NAS)之间的传输速度相同;如果scp这样做,那么 SSH 开销就是导致减少到约 80MB/秒的原因。当您开始复制数千个小文件(小于 10MB)时,您可能会产生大量开销和速度损失,因为操作系统从任何存储上的文件系统读取该数据,然后再次在另一个系统上将其全部写入到它的存储。 具有足够 RAM 的良好 NAS 可以缓冲通过网络传入 RAM 中的数据,此时它将是它可以对其磁盘执行的持续写入速度,我认为这些广告中的数字通常被夸大了,并且几乎总是依赖于最大写入速度。安装到 NAS 中的磁盘数量(作为 RAID-0),因此它们可以公布尽可能高的读/写数量。

作为健全性检查,传输单个 ~2GB 文件和单个 ~30GB 文件,并查看这些最大传输速度是多少,以及它们是否在您的网络上持续存在。

答案3

rsync 和 scp 都会对通过线路发送的数据进行加密。正如您所观察到的,在旧硬件上,我发现这会将速度限制为大约 20MB/s。

尝试使用未加密的副本,例如:

  • 在一端运行 rsync 服务器并使用 rsync:// 协议
  • 在两侧使用 netcat (或 nc)(未经测试,可能是错误的语法):
    • 来源:tar cf - ... | nc host port
    • 目的地:nc -l port | tar xf -

相关内容