Выполняет ли rsync команды через SSH на удаленном компьютере или использует только протокол SFTP?

Просто FWIW, gzip может быть доступен случайным образом, если был создан предыдущий индексный файл...

Я разработал инструмент командной строки, который может быстро и (почти -)произвольно обращаться к gzip, если указан индекс (если он не предоставлен, он создается автоматически):

https://github.com/circulosmeos/gztool

gztoolможно использовать для доступа к фрагментам исходного файла gzip, если эти фрагменты извлекаются в определенных точках байтов, на которые индекс указывает (-1 байт, чтобы быть уверенным, потому что gzip — это поток битов, а не байтов ), а лучше после них.

Например, , если начинается индексная точка,(gztool -ll index.gziпредоставляет эти данные )в сжатом -байте 1508611 файла gzip, и после этого нам нужен 1M сжатых байтов:

$ curl -r 1508610-2508611 https://example.com/db/backups/db.sql.gz > chunk.gz
  • Обратите внимание, что chunk.gzбудет занимать на диске только размер фрагмента!
  • Также обратите внимание, что это не действительный файл gzip, так как он неполный.
  • Также учтите, что мы получили из нужного индекса -позицию точки -минус 1 байт.

Теперь полный индекс (ранее только -после создания :, например, с помощью gztool -i *.gzдля создания индексов для всех ваших уже сжатых файлов или gztool -c *для сжатия и создания индекса )должен также быть извлечены. Обратите внимание, что индексы составляют ~0,3% от размера gzip (или намного меньше, если gztoolсжимает сами данные ).

$ curl https://example.com/db/backups/db.sql.gzi -o chunk.gzi

Теперь извлечение можно выполнить с помощью gztool . Должен быть известен соответствующий несжатый байт (или переданный байт )из сжатых -1508610, но индекс может показать эту информацию с помощью gztool -ll. См. примеры здесь . Предположим, что это байт 9009009. Или несжатый байт, который нам нужен, просто передается соответствующей первой индексной точке, содержащейся в chunk.gz. Давайте снова предположим, что этот байт также будет 9009009 для этого случая.

$ gztool -n 1508610 -b 9009009 chunk.gz > extracted_chunk.sql

gztoolпрекратит извлечение данных, когда закончится файл chunk.gz.

Возможно, это сложно, но будет работать без изменения метода сжатия или уже сжатых файлов. Но для них необходимо создать индексы.


ПРИМЕЧАНИЯ:Другой способ выполнить извлечение без использования параметра -n— заполнить gzip-файл разреженными нулями :это делается для примера с командой ddперед сначала curlдля извлечения файла chunk.gz, поэтому:

$ dd if=/dev/zero of=chunk.gz seek=1508609 bs=1 count=0
$ curl -r 1508610-2508611 https://example.com/db/backups/db.sql.gz >> chunk.gz
$ curl https://example.com/db/backups/db.sql.gzi -o chunk.gzi

Таким образом, первые 1508609 байт файла являются нулями, но они не занимают места на диске . Без seekв команде ddвсе нули записываются на диск, что будет справедливо и для gzip, но таким образом мы не занимаем лишнее место на диске. Тогда команде gztool не нужен параметр -n. Обнуление данных не требуется, потому что, поскольку индекс существует, gztoolбудет использовать его для перехода к точке индекса непосредственно перед несжатой позицией 9009009 байт, поэтому все предыдущие данные просто игнорируются:

$ gztool -b 9009009 chunk.gz > extracted_chunk.sql

0
19.11.2020, 01:34
1 ответ

Да, это должно быть на удаленном конце. Со страницы man:

It is famous for its delta-transfer algorithm, which reduces the amount of data sent over the network by sending only the differences between the source files and the existing files in the destination.

Неужели это так сложно проверить?

1
18.03.2021, 22:48

Теги

Похожие вопросы