Taka sytuacja:
- trzy dyski - sda, sdb i sdc. Dysk sdc podłączony przez usb,
- poprzez rsync przegrywam dane z sdc na sda (rsync -v --progress --inplace /katalog1 /katalog2),
- obciążenie dysków mierzone dstatem wygląda tak:
undefine@uml:~$ dstat -d -D sda,sdb,sdc --disk-util --dsk/sda-----dsk/sdb-----dsk/sdc-- sda--sdb--sdc- read writ: read writ: read writ|util:util:util 24k 9574k:2962k 71k: 11M 201k|10.0:1.61:39.2 0 102M: 0 0 : 0 0 | 100: 0: 0 0 101M: 0 0 : 0 0 | 100: 0: 0 0 115M: 0 0 : 0 0 | 100: 0: 0 0 105M: 0 272k: 0 0 | 100:0.80: 0 0 107M: 0 0 : 0 12k| 100: 0:4.00 0 67M: 0 40k: 27M 0 |65.6: 0:28.4 0 4096B: 0 0 : 105M 0 |1.60: 0:95.2 0 0 : 0 0 : 109M 0 | 0: 0:95.2 0 12M: 188k 16k: 86M 0 |10.4:0.40:80.4 0 102M: 0 0 : 0 0 | 100: 0: 0 0 96M: 0 0 : 0 0 | 100: 0: 0 0 110M: 0 0 : 0 0 | 100: 0: 0 0 7276k: 0 0 : 100M 0 |1.20: 0:90.0 0 0 : 0 0 : 105M 0 | 0: 0:95.2 0 0 : 0 32k: 101M 12k| 0: 0:96.0 0 0 : 0 4096B: 103M 0 | 0: 0:98.4 0 0 : 0 0 : 105M 0 | 0: 0:98.0 0 0 : 0 28k: 108M 0 | 0:0.40:90.8 0 33M: 0 0 : 112M 0 |36.4: 0:95.6 0 101M: 0 0 : 106M 0 | 100: 0:94.8 0 95M: 0 4096B: 90M 0 | 100: 0:89.6 0 104M: 0 0 : 22M 0 | 100: 0:26.8 0 110M: 0 188k: 0 0 | 100: 0: 0 0 105M: 100k 0 : 0 0 | 100: 0: 0 0 112M: 0 0 : 0 0 | 100: 0: 0 0 96M: 0 0 : 0 0 | 100: 0: 0 0 100M: 0 0 : 0 12k| 100: 0:2.80 0 95M: 0 0 : 12M 0 |81.6: 0:14.0 0 0 : 0 0 : 108M 0 | 0: 0:94.8 0 0 : 0 0 : 106M 0 | 0: 0:96.8 0 33M: 0 0 : 57M 0 |32.4: 0:56.8 0 106M: 0 0 : 0 0 | 100: 0: 0 0 110M: 0 0 : 0 0 | 100: 0: 0 0 34M: 0 44k: 63M 0 |29.6: 0:63.2 0 0 : 20k 0 : 106M 0 | 0: 0:98.0 0 12k: 0 0 : 110M 0 |4.40: 0:98.8 0 4096B: 0 0 : 105M 12k|2.40: 0:94.0 0 0 : 0 0 : 108M 0 | 0: 0:98.4 0 0 : 0 0 : 102M 0 | 0: 0:93.6 0 37M: 0 44k: 53M 0 |39.2: 0:48.0 0 99M: 0 12k: 0 0 | 100: 0: 0 0 100M: 0 0 : 0 0 | 100: 0: 0
Czyli jak widać - system albo dane odczytuje albo zapisuje. Przez co operacja trwa dwa razy dłużej niż robiłby to równolegle.
Dlaczego tak się dzieje i co można z tym zrobić by zoptymalizować prędkość przegrywania?