Когда резервная копия перемещает файлы с одного сервера на другой, результаты 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
флаг.