Увеличение размера исходного файла во время rsync - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю резервную копию каталога с помощью rsync. Я посмотрел на размер каталога, прежде чем начал rsync с du -s, который сообщил о размере каталога ~ 1 ТБ.

Затем я запустил rsync и во время синхронизации посмотрел размер каталога резервного копирования, чтобы получить приблизительное время окончания. Когда резервная копия стала намного больше чем 1 ТБ, мне стало любопытно. Кажется, что размер многих файлов в исходном каталоге увеличивается. Я сделал du -s для файла в источнике до и после того, как процесс rsync скопировал этот файл:

## du on source file **before** it was rsynced
# du -s file.dat
2 file.dat

## du on source file **after** it was rsynced
# du -s file.dat
4096 file.dat 
```

Команда rsync:

rsync -av -s --relative --stats --human-readable --delete --log-file someDir/rsync.log sourceDir destinationDir/

Файловая система с обеих сторон (источник, место назначения) - BeeGFS 6.16 на RHEL 7.4, ядро ​​3.10.0-693

Есть идеи, что здесь происходит?

1 Ответ

0 голосов
/ 01 ноября 2018

file.dat возможно редкий файл. Используйте опцию --sparse:

   -S, --sparse
          Try  to  handle  sparse  files  efficiently so they take up less
          space on the destination.  Conflicts with --inplace because it’s
          not possible to overwrite data in a sparse fashion.

Википедия о редких файлах:

разреженный файл - это тип компьютерного файла, который пытается более эффективно использовать пространство файловой системы, когда сам файл частично пуст. Это достигается путем записи краткой информации (метаданных), представляющей пустые блоки на диск вместо фактического «пустого» пространства, которое составляет блок, используя меньше дискового пространства.

Разреженный файл может быть создан следующим образом:

$ dd if=/dev/zero of=file.dat bs=1 count=0 seek=1M

Теперь давайте рассмотрим и скопируем это:

$ ls -l file.dat
.... 1048576 Nov  1 20:59 file.dat
$ rsync file.dat file.dat.rs1
$ rsync --sparse file.dat file.dat.rs2
$ du -sh  file.dat*
0       file.dat
1.0M    file.dat.rs1
0       file.dat.rs2
...