Я всегда задавался вопросом, почему rsync
пытается передать файл в удаленное местоположение, где у него есть разрешения на чтение / выполнение для целевого каталога, но нет прав на запись для создания фактического файла назначения. Это может быть смоделировано даже локально, когда вы пытаетесь скопировать файл как обычный пользователь в / , rsync
передаст весь файл (также довольно долго для больших файлов) и, наконец, завершится неудачно с
rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)
Таким образом, кажется, что он уже не работает при запуске при попытке создать временный файл ( точка- файл ) во время передачи. Почему он не замечает этого и прерывает работу раньше, вместо того, чтобы пытаться скопировать весь файл без каких-либо разрешений на запись?
И куда он копирует файл, если не может создать временный файл? Я не вижу увеличения памяти процессов rsync, а также нет соответствующего файла в / tmp . Похоже, что он напрямую отбрасывает данные в месте назначения, но продолжает передачу.
источник
--inplace
этом передает весь файл, пока не заметит отсутствие разрешений на запись.--inplace
очень полезно, когда у вас есть права на запись в файл, но не на директорию с содержимым.Это, кажется, недостаток текущего протокола rsync, как объяснено в трекере ошибок . Протокол rsync не может заранее определить, есть ли у него разрешения на запись для цели. Вместо этого он просто отправляет и проверяет успех или неудачу впоследствии.
источник
Rsync создает временный файл в той же папке, что и целевой файл, поэтому в этом случае вам необходимо скопировать некоторые файлы
/
, поскольку вы не запускали его как root и, как правило,/
были доступны для записи только пользователю root, поэтому он не работает.Чтобы узнать, какие файлы копируются, передайте параметр
-v
источник
rsync
создает свои временные файлы в той же папке, что и целевой каталог. Но даже если он не может создать эти временные файлы, он все равно начинает передачу и впоследствии терпит неудачу вместо проверки в самом начале, имеет ли он все необходимые разрешения на запись. Я хочу знать, почему он так себя ведет.