Почему мой rsync не позволяет размер блока> 128K?

Для ответа на конкретный вопрос с набором команд используйте:

kill `pidof <name>`

С тех пор pidof <name> дает Вам PID процесса, Вы пытаетесь уничтожить Вас, может использовать его с переключателями командной строки такой как -9 и т.д. также.

Протестированный с bash и tcsh.

15
15.06.2013, 10:56
2 ответа

Из источника:

int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;

sum->blength = read_int(f);
if (sum->blength < 0 || sum->blength > max_blength) {
    rprintf(FERROR, "Invalid block length %ld [%s]\n",
        (long)sum->blength, who_am_i());
    exit_cleanup(RERR_PROTOCOL);
}

Где:

#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)
#define MAX_BLOCK_SIZE ((int32)1 << 17)

Который является 536870912 (512M) и 131072 (128k) соответственно.


Изменение было внесено в версии v3.0.0 и поддержке OLD_ был добавлен в v3.0.3. (Ссылки объясняют часть объяснения позади изменений.)

  • [ПАТЧ] патч, чтобы попытаться заставить действительно большие файлы, которые будут обрабатываться без срывания в поиске хеш-таблицы стороны отправителя.

  • [ПАТЧ] Зафиксировал отправку больших файлов с более старыми rsync версиями путем обработки старого предела размера блока для протоколов <29.

13
27.01.2020, 19:50
  • 1
    Все еще, кажется, существует ошибка в 3.0.x в обработке размера блока под - пробный прогон. Команда без - пробный прогон может работать, но с ним все еще приводит к "Недопустимой длине блока NNN [отправитель]" сообщение. –  Paul Gear 06.07.2016, 08:09

Максимальный размер блока зависит от rsync версии протокола.

С версией протокола меньше чем 30 макс. было 1 << 29, т.е. 536 870 912 байтов (512M). Но с версией протокола 30 или выше, макс. 1 << 17, который является 128k байтами. Таким образом, необходимо будет использовать более старую версию, если Вы захотите большие размеры блока.

Источник: rsync.h

#define MAX_BLOCK_SIZE ((int32)1 << 17)

/* For compatibility with older rsyncs */
#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)

И: io.c

// ...
int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;
// ...
if (sum->blength < 0 || sum->blength > max_blength) {
  rprintf(FERROR, "Invalid block length %ld [%s]\n",
                  (long)sum->blength, who_am_i());
3
27.01.2020, 19:50

Теги

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