tar 读取时写入

tar 读取时写入

我在使用 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

我该怎么做才能加快这个速度?

相关内容