Назад | Перейти на главную страницу

Очень разные результаты от df через несколько секунд

Когда резервная копия перемещает файлы с одного сервера на другой, результаты df меняются каждые несколько секунд невозможным образом. Исходный хост работает под управлением rsync. На целевом хосте каждые несколько секунд я запускаю следующую команду:

  echo `date` `df|grep md0`

Результаты ниже:

Sat Jun 29 23:57:12 CEST 2013 /dev/md0 4326425568 579316100  3527339636 15% /MD0
Sat Jun 29 23:57:14 CEST 2013 /dev/md0 4326425568 852513700  3254142036 21% /MD0
Sat Jun 29 23:57:15 CEST 2013 /dev/md0 4326425568 969970340  3136685396 24% /MD0
Sat Jun 29 23:57:17 CEST 2013 /dev/md0 4326425568 1255222180 2851433556 31% /MD0
Sat Jun 29 23:57:20 CEST 2013 /dev/md0 4326425568 1276006720 2830649016 32% /MD0
Sat Jun 29 23:57:24 CEST 2013 /dev/md0 4326425568 1355440016 2751215720 34% /MD0
Sat Jun 29 23:57:26 CEST 2013 /dev/md0 4326425568 1425090960 2681564776 35% /MD0
Sat Jun 29 23:57:27 CEST 2013 /dev/md0 4326425568 1474601872 2632053864 36% /MD0
Sat Jun 29 23:57:28 CEST 2013 /dev/md0 4326425568 1493627384 2613028352 37% /MD0
Sat Jun 29 23:57:32 CEST 2013 /dev/md0 4326425568 615934400  3490721336 15% /MD0
Sat Jun 29 23:57:33 CEST 2013 /dev/md0 4326425568 636071360  3470584376 16% /MD0

Как видите, я начинаю с 15% использования, а через 15 секунд - 37% (мне не нужно упоминать, что резервная копия не может скопировать такой огромный объем данных за такое короткое время). Примерно через 20 секунд цикл закрывается. Я снова примерно так же использую, как и раньше. Стоимость разумная, ок. Скопировано 35 Мб.

Может кто-нибудь объяснить мне, что происходит? Делает ли df только оценку использования вместо используемого значения?

Так как rsync копирует во временные файлы, а затем заменяет старый файл. Кроме того, rsync передает только различия, а не весь файл.

Поэтому, если у вас есть файл размером 20 ГБ, из которого 10 МБ было изменено, rsync сначала скопирует файл размером 20 ГБ в целевой системе во временный каталог, затем перенесет 10 МБ diff и применит его к копии. Наконец, он заменяет старый файл новым.

Это сделано для предотвращения повреждения файла в случае сбоя частичной передачи.

Чтобы избежать создания временных файлов и файлов обновлений на месте, используйте --inplace флаг.