Мне нужно выполнить gsutil rsync
из хранилища облачного хранилища Google в локальный каталог, который может быть прерван / не выполнен из-за плохого соединения. Поэтому я проверил, что произойдет, если я просто попытаюсь снова выполнить rsyn c и продолжить с того места, где остановился, и выдает ошибку, удаляющую файл .gstmp
, оставленный первым прерванным rsyn c.
Допустим, у меня есть корзина с этими файлами:
test1.txt
test2.txt
test3.txt
И я запускаю команду gsutil rsyn c:
user@machine:~/$ gsutil rsync -C -d -r gs://bucket_name ~/tmp/
, которую я прерываю во время копирование test2.txt. Это оставит test2.txt_.gstmp
в целевом каталоге. Теперь, когда я снова делаю тот же rsyn c, это происходит:
user@machine:~/$ gsutil rsync -C -d -r gs://bucket_name ~/tmp/
Building synchronization state...
Starting synchronization...
Copying gs://bucket_name/test3.txt...
Removing file:///home/user/tmp/test2.txt_.gstmp
OSError: No such file or directory.
Таким образом, он определяет, где он был прерван в последний раз, но также помечает файл .gstmp
для удаления, что очень хорошо. , Но когда он на самом деле пытается удалить его, он как-то уже исчез, и я получаю OSError
(как будто он пытается удалить его дважды). Теперь, если я снова запускаю ту же команду, все работает нормально, потому что файла .gstmp
больше нет.
Кто-нибудь знает, что может вызвать это и как этого избежать?
РЕДАКТИРОВАТЬ:
Похоже, что это происходит, потому что gsutil очищает файлы .gstmp независимо от того, поэтому, если файл .gstmp также является частью создаваемого состояния синхронизации, он пытается удалить это дважды (сначала как часть очистки, а затем снова как часть синхронизации), что вызывает ошибку OSError. Мое текущее исправление заключается в добавлении игнорирующего регулярного выражения в команду rsyn c:
gsutil rsync -C -d -r -x ".*gstmp$" gs://bucket_name ~/tmp/
Теперь он игнорирует .gstmp в процессе rsyn c, но все равно удаляет его как часть очистки