Я пытался сделать резервную копию всего диска моего компьютера в облачном хранилище Google, люди в основном говорили мне, что это бессмысленно, и, обдумывая все это, я решил просто делать документы и рабочий стол, и моей целью было использовать облачный SDK Google, поскольку я Я новичок в этом, и мне нравится вызов. Итак, я набираю:
gsutil -m rsync -n -J -C -e -r -u -U C:\Users\~~~~\Documents gs://~~~~-pc/documents
Когда я отправляю это, я получаю это сообщение:
Обнаружено исключение без повторной попытки при отображении файла://C:\Users~~~~~\Documents: [WinError 3] Система не может найти указанный путь: 'C:\Users\~~~~~\Documents\~ ~~~~~~~~ Файлы\2015 NEGOTIATIONIS\2105 ФАЙЛ ПЕРЕГОВОРОВ - ГЛАВНАЯ\Реализация\Временные передачи и постоянная принудительная перегруппировка сил\Временные передачи и постоянная принудительная перегруппировка сил ОКОНЧАТЕЛЬНЫЙ 3 октября 2014.docx' CommandException: поймано исключение без повторной попытки - прерывание rsync
Пожалуйста помоги!!!
Примечание: "~" означает цензуру.
Редактировать: я сделал отладку, и я не знаю, что это значит, вот вывод, который не показывает мои личные данные:
Caught non-retryable exception while listing file://C:\Users\~~~~\Documents: [WinError 3] The system cannot find the path specified: 'C:\\Users\\~~~~\\Documents\\~~~~ Files\\2015 NEGOTIATIONIS\\2105 NEGOTIATIONS FILE - MAIN\\Implementation\\Temporary Transfers and Permanet Involuntary Force Rearragement\\Temporary Transfers and Permanent Involuntary Force Rearrangement FINAL October 3 2014.docx'
Traceback (most recent call last):
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\commands\rsync.py", line 653, in _ListUrlRootFunc
out_file)
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\commands\rsync.py", line 903, in _BatchSort
current_chunk = sorted(islice(in_iter, buffer_size))
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\commands\rsync.py", line 734, in _FieldedListingIterator
for blr in iterator:
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\wildcard_iterator.py", line 701, in IterObjects
bucket_listing_fields=bucket_listing_fields):
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\wildcard_iterator.py", line 721, in IterAll
bucket_listing_fields=bucket_listing_fields):
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\wildcard_iterator.py", line 611, in __iter__
blr_object = _GetFileObject(filepath) if include_size else None
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\wildcard_iterator.py", line 531, in _GetFileObject
return apitools_messages.Object(size=os.path.getsize(filepath))
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\lib\genericpath.py", line 50, in getsize
return os.stat(filename).st_size
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\\Users\\~~~~\\Documents\\~~~~ Files\\2015 NEGOTIATIONIS\\2105 NEGOTIATIONS FILE - MAIN\\Implementation\\Temporary Transfers and Permanet Involuntary Force Rearragement\\Temporary Transfers and Permanent Involuntary Force Rearrangement FINAL October 3 2014.docx'
DEBUG: Exception stack trace:
Traceback (most recent call last):
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\__main__.py", line 634, in _RunNamedCommandAndHandleExceptions
user_project=user_project)
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\command_runner.py", line 411, in RunNamedCommand
return_code = command_inst.RunCommand()
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\commands\rsync.py", line 1657, in RunCommand
diff_iterator = _DiffIterator(self, src_url, dst_url)
File "C:\Users\~~~~\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gslib\commands\rsync.py", line 999, in __init__
raise CommandException('Caught non-retryable exception - aborting rsync')
gslib.exception.CommandException: CommandException: Caught non-retryable exception - aborting rsync
Убедитесь, что вы прочитали все предостережения здесь: cloud.google.com/storage/docs/gsutil/commands/rsync
Ваша проблема вызвана MAX_PATH. По умолчанию 260 символов.
Способ 1 — указать пути UNC
Префикс пути с "\\?\"
. Это изменяет максимальное количество имен путей до 32 767 символов.
\\?\C:\Users\~~~~\Documents
Способ 2 — изменить реестр Windows
Для решения вашей проблемы требуется редактирование реестра для поддержки более длинных путей до 32 767 символов.
Измените этот раздел реестра:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
Type: REG_DWORD
Value: 1
Прочтите этот документ для получения дополнительной информации:
Я присоединюсь к голосу тех, кто предостерег вас от использования этого подхода. Как вы видели, ваш подход проблематичен, и есть риск, что вы будете думать, что сделали резервную копию файла, но это не так. Существует множество проверенных решений для резервного копирования (некоторые из которых используют Google Cloud Storage), которые вам подойдут. Тем не менее, если вы привержены этому подходу, проблема заключается в некоторой комбинации различий между файловыми системами Windows и Linux. Пробелы в именах часто проблематичны. Вы можете попробовать флаг
rsync
--protect-args
.