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

Как эффективно поддерживать tar-архив моментальных снимков в актуальном состоянии?

У меня большой каталог файлов, и я хотел бы поддерживать единый сжатый tar-архив, который я могу серверить через http, содержащий все файлы, которые обновляются один раз в день.

Многие файлы не будут меняться изо дня в день, и я бы хотел, чтобы процессор не тратил много времени на сжатие одних и тех же файлов каждый день.

tar "не может обновлять сжатые архивы", поэтому tar uj не поможет.

Есть ли умный способ сделать это?

Эта идея была на форум совета конкурентов.

tar cf --newer YYYYMMDD

    To copy differences or only the files since the last tar date 
    here is the command.

    Let's say we did a tar on Feb 9th, 2009 as follows:
    (cd /mydata; tar cf - *) | tar xvf -

    Today is Feb 11th and we only want to copy the files that have changed 
    since Feb 9th, 2009. The command would be
    (cd /mydata; tar cf - --newer 20090209 * ) | tar xvf - 

Поскольку доступ к нему осуществляется через http, используйте PHP для генерации tar-файла на лету, используя что-то вроде этого:

<?php
    set_time_limit(1);
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: application/x-bzip2; charset=binary");
    header("Content-Disposition: attachment; filename=\"archive.tar.bz2\";" );
    passthru("tar cj --exclude-vcs /path/to/files",$err);
    if ($err) {
        error_log("exit value: $err");
    }
    exit;

Очевидно, это не поможет в случае, если этот файл будет много загружаться.