我在使用 tar 时遇到了问题。我正在打包大约 120GB 的小文件,我感觉遇到了瓶颈。
我的系统有 3 个硬盘,一个用于系统 (sda),一个用于文件 (sdb),一个用于 tar 文件 (sdc)。系统专用于备份,因此它不执行任何其他操作。
当 tar 运行时,我可以看到源硬盘写入非常频繁。我的问题是为什么?(参见 sdb)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
sdb 461.00 11304.00 3776.00 11304 3776
sdc 0.00 0.00 0.00 0 0
一开始我以为是 atime 选项的问题,访问文件的系统需要更新 inode。所以我在 fstab 中禁用了该选项。
mount:
/dev/sdb1 on /disk1 type ext4 (rw,noatime)
/dev/sdc1 on /disk2 type ext4 (rw)
但问题并没有消失。根据 dstat,tar 仍然阻塞:(参见 csw)
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
4 1 85 11 0 0|6301k 4434k| 0 0 | 0 0 | 387 1317
0 0 68 31 0 0| 28k 44M| 66B 834B| 0 0 | 223 233
0 0 75 25 0 0| 0 408k| 66B 370B| 0 0 | 102 53
0 0 75 25 0 0| 0 516k| 126B 396B| 0 0 | 122 66
0 0 70 30 0 0| 0 1496k| 66B 354B| 0 0 | 154 109
0 0 77 22 0 0|4096B 1484k| 66B 354B| 0 0 | 155 79
0 0 77 23 0 0| 40k 552k| 336B 370B| 0 0 | 78 133
0 1 72 27 0 0| 40k 640k| 66B 370B| 0 0 | 164 126
0 0 75 25 0 0| 16k 580k| 66B 370B| 0 0 | 131 65
0 0 75 25 0 0| 0 316k| 66B 370B| 0 0 | 81 53
1 0 73 26 0 0| 132k 676k| 366B 396B| 0 0 | 162 143
0 0 76 23 0 0| 108k 608k| 66B 370B| 0 0 | 197 217
0 0 71 28 0 0| 112k 592k| 66B 370B| 0 0 | 178 155
0 0 67 33 0 0| 0 328k| 66B 370B| 0 0 | 81 73
8 1 63 28 0 0|5308k 4096B| 66B 354B| 0 0 | 705 2600
15 2 62 21 0 1|9452k 0 | 66B 370B| 0 0 |1158 4343
17 2 61 20 0 0| 11M 0 | 66B 354B| 0 0 |1256 5027
10 1 66 24 0 0|5272k 1308k| 66B 354B| 0 0 | 786 2804
14 2 63 20 0 1|9980k 0 | 66B 370B| 0 0 |1257 4766
15 3 61 21 0 1| 10M 12k| 66B 354B| 0 0 |1179 468
我使用的确切命令是:
tar -c /disk1/files 2>/dev/null | pigz -p 8 > /disk2/file.tar.gz
高清硬盘可以轻松以 100Mb/s 的速度读取/写入,但速度仍然非常慢。
Top shows:
Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.6%us, 0.8%sy, 0.0%ni, 84.9%id, 10.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 7985320k total, 7784168k used, 201152k free, 3311500k buffers
Swap: 23393276k total, 0k used, 23393276k free, 3753780k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19179 johan 20 0 150m 6136 536 S 42 0.1 19:57.48 pigz
19178 johan 20 0 19772 1312 1024 D 4 0.0 2:25.52 tar
47 root 20 0 0 0 0 S 2 0.0 2:07.03 kswapd0
19317 johan 20 0 93336 1668 732 S 2 0.0 0:00.30 sshd
1 root 20 0 23764 1780 1104 S 0 0.0 0:01.55 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
我该怎么做才能加快这个速度?