我可以让硬盘访问速度更慢或者更少吗?

我可以让硬盘访问速度更慢或者更少吗?

这是一个奇怪的问题。我想将一些大文件从一个硬盘复制到同一台机器上的另一个硬盘上(在 Linux 上从命令行)。

问题是这会让一切都变得很慢。

不过我不在乎,只要复制速度慢一点,硬盘占用少一点就行。让机器慢慢来……

有没有办法让复制速度变慢,但机器上的资源却更加可用?

答案1

要运行具有较低调度优先级的命令,使用较少的资源,您可以使用 很好的命令

语法是:

nice [OPTION] [COMMAND [ARG]...] 

其中,niceness 的范围从-20(最有利的调度)到19 (最不利的调度),使用以下参数:

-n, --adjustment=N
    add integer N to the niceness (default 10) 

您可以使用 nice 命令以特定优先级启动进程,而不是以默认优先级启动程序。例如,test.pl以“nice”值10 而不是默认值启动0 (这是一个连字符而不是减号):

$ nice -10 perl test.pl

这将使得该perl进程从内核获得更少的调度片段,从而获取更少的资源,并为其他进程留下更多的资源。

有关详细信息,请参阅 Linux 生态系统中优先级和 nice 值的简要指南


至于 I/O 调度,nice也有影响。维基百科 完全公平排队 发表了这样的言论:

使用 nice(1) 也会稍微修改 I/O 优先级

有关详细信息,请参阅文章 Linux I/O 调度程序

您还可以使用以下方式直接设置进程的 I/O 优先级 ionice(1)

ionice - 设置或获取进程 I/O 调度类和优先级

I/O 调度和优先级可以进行大幅修改,最高可达最低:

Idle
    A program running with idle I/O priority will only get disk
    time when no other program has asked for disk I/O for a
    defined grace period. The impact of an idle I/O process on
    normal system activity should be zero. This scheduling class
    does not take a priority argument. Presently, this scheduling
    class is permitted for an ordinary user (since kernel
    2.6.25).

答案2

磁盘驱动器是中断驱动的,只会处理数据。

所以你的问题的答案是你不能减慢复制速度。

如果您在复制时确实需要更多资源,那么请将源驱动器和目标驱动器都替换为快速 SSD 驱动器。这将解决您的问题。

我每月或每季度将 200 GB 的数据从一台计算机复制到另一台计算机。两台计算机都配有快速的 SSD 驱动器。

在(接近)一小时的复制过程中,两台机器都没有(实际的)减速。

我遇到了您提到的硬盘速度慢(XP 时代)的资源问题,当时的解决方案是在不需要机器时进行大量复制。

答案3

不过我不在乎,只要复制速度慢一点,硬盘占用少一点就行。让机器慢慢来……

手动解决方案是使用 来限制传输pv。对于单个文件,基本命令可以是这样的:

pv -L 10M /source/file > /destination/file

请注意,这个简单的命令不会保留属性(如cp -pGNUcp -a会保留)并且无法复制文件层次结构。因此,对于任何要求更高的操作,请使用。利用您可以像这样tar通过管道传输的事实:tartar

(cd /source && tar -c dirA/ dirB/ file1 file2) | (cd /destination && tar -x)

就像cp -R。它对复制到多个目的地或通过 SSH、netcat任何管道。为了解决您的问题,我们在spv之间放置了:tar

(cd /source && tar -c dirA/ dirB/ file1 file2) | pv -L 10M | (cd /destination && tar -x)

您可以使用tar -c *(但请记住*匹配非点文件);您可以使用一些高级选项tar。不要使用压缩,您想限制未压缩的流。

现在到了最好的部分:使用pv -R(调用除外)您可以更改正在运行的设置pv。这样您可以随时调整油门;您只需要知道限制的 PID pv。使用pidof pv查找 PID;或者首先修改主命令,因此中间部分是:

… | pv -P /dev/tty -L 10M | …

pv会将其 PID 打印到终端。请参阅man 1 pv了解详情。

假设 PID 为 2276。要更改油门,请运行pv -R 2276 -L 100M(或100K,或1G)。调整它,找到最适合您的设置。随时更改。

此答案可以与nice+ionice想法。我相信renice(不相信nice)并且ionice -p会允许您重新调整已经运行的进程。

相关内容