如果 DRA 存储桶的内容不可用,gsutil 命令会发生什么情况?
What will happen with a gsutil command if a DRA bucket's contents are unavailable?
我经常使用 DRA (Durable Reduced Availability) bucket and I perform the gsutil rsync 命令 upload/download 文件 to/from 存储桶。
由于文件) 可能不可用(因为 DRA),当遇到这种情况时 gsutil rsync
会话期间究竟会发生什么?
gsutil
是否会等到不可用的文件变得可用并完成任务,从而始终从存储桶中下载所有内容?
- 或者
gsutil
是否会在退出时出现关于某个文件不可用的警告,如果是这样的话,到底使用了什么输出(以便我可以编写脚本来查找此类消息)?
- 在发现文件不可用的会话中,return 命令的
gsutil
代码是什么?
我需要 100% 确定我从存储桶中下载了所有内容,我猜在下载数百 GB 的数据时很难跟踪。如果 gsutil rsync
在没有下载不可用文件的情况下完成,是否可以构造一个命令来重试不可用文件,直到所有此类文件都已成功下载?
我对一个项目做了一些测试,但无法gsutil
抛出任何错误。 Afaik,gsutil 在目录级别运行,它不是在寻找特定文件。
当您 运行 时,例如 $ gsutil rsync local_dir gs://bucket
,gsutil 不需要任何特定文件,它只会获取您在 "local_dir" 中的任何内容并将其上传到 gs://bucket , 所以 :
gsutil 不会等待,它会完成。
您不会收到任何错误 - 我收到的唯一错误是本地目录或存储桶完全丢失。
如果,假设文件在 local_dir
上丢失,但它在存储桶中可用,然后你 运行 $ gsutil rsync -r local_dir gs://bucket
,那么什么都没有将在桶中改变。使用“-d”选项,文件将在存储桶端被删除。
作为建议,您可以每天或晚上几次向 运行 gstuil 命令添加一个 crontab
条目。
另一种方法是创建一个简单的脚本并将其添加到您的 crontab 中,每隔一小时左右 运行。这将检查您的文件是否存在,如果存在,它将 运行 gsutil 命令:
#!/bin/bash
FILE=/home/user/test.txt
if [ -f $FILE ];
then
echo "file exists..or something"
else
gsutil rsync /home/user gs://bucket
fi
更新:
我想这可能是您所需要的。在 ~/ 你应该有一个 .boto 文件。
~$ more .boto | grep max
# num_retries = <integer value>
# max_retry_delay = <integer value>
取消注释这些行并添加您的号码。默认为 6 次重试,因此您可以执行 24 次重试之类的操作,并在两者之间放置 3600 次。这在理论上应该始终保持循环。
希望这对您有所帮助!
- 如果您的文件超过可恢复阈值(从 4.7 开始,这是 8MB),任何可用性问题都将根据
num_retries
和 max_retry_delay
配置变量以指数退避重试。如果文件小于阈值,则不会重试(这将在 4.8 中改进,因此小文件也可以重试)。
- 如果任何文件未能成功传输,gsutil 将停止并根据遇到的失败输出异常。如果您使用的是
gsutil -m rsync
或 gsutil rsync -C
,gsutil 将在出现错误时继续,最后,您将收到带有消息 'N file(s)/object(s) could not be copied/removed' 的 CommandException
- 如果重试次数已用尽and/or发生#2 中描述的任一失败情况,退出代码将为非零。
为了确保从存储桶中下载所有文件,您可以简单地重新运行 gsutil rsync
,直到获得非零退出代码。
请注意 gsutil rsync
依赖于列出对象。 Google Cloud Storage 中的列表是最终一致的。因此,如果您将文件上传到存储桶,然后立即 运行 gsutil rsync
,您可能会错过新上传的文件,但 gsutil rsync
的下一个 运行 应该选择它们向上。
我经常使用 DRA (Durable Reduced Availability) bucket and I perform the gsutil rsync 命令 upload/download 文件 to/from 存储桶。
由于文件) 可能不可用(因为 DRA),当遇到这种情况时 gsutil rsync
会话期间究竟会发生什么?
gsutil
是否会等到不可用的文件变得可用并完成任务,从而始终从存储桶中下载所有内容?- 或者
gsutil
是否会在退出时出现关于某个文件不可用的警告,如果是这样的话,到底使用了什么输出(以便我可以编写脚本来查找此类消息)? - 在发现文件不可用的会话中,return 命令的
gsutil
代码是什么?
我需要 100% 确定我从存储桶中下载了所有内容,我猜在下载数百 GB 的数据时很难跟踪。如果 gsutil rsync
在没有下载不可用文件的情况下完成,是否可以构造一个命令来重试不可用文件,直到所有此类文件都已成功下载?
我对一个项目做了一些测试,但无法gsutil
抛出任何错误。 Afaik,gsutil 在目录级别运行,它不是在寻找特定文件。
当您 运行 时,例如 $ gsutil rsync local_dir gs://bucket
,gsutil 不需要任何特定文件,它只会获取您在 "local_dir" 中的任何内容并将其上传到 gs://bucket , 所以 :
gsutil 不会等待,它会完成。
您不会收到任何错误 - 我收到的唯一错误是本地目录或存储桶完全丢失。
如果,假设文件在
local_dir
上丢失,但它在存储桶中可用,然后你 运行$ gsutil rsync -r local_dir gs://bucket
,那么什么都没有将在桶中改变。使用“-d”选项,文件将在存储桶端被删除。
作为建议,您可以每天或晚上几次向 运行 gstuil 命令添加一个 crontab
条目。
另一种方法是创建一个简单的脚本并将其添加到您的 crontab 中,每隔一小时左右 运行。这将检查您的文件是否存在,如果存在,它将 运行 gsutil 命令:
#!/bin/bash
FILE=/home/user/test.txt
if [ -f $FILE ];
then
echo "file exists..or something"
else
gsutil rsync /home/user gs://bucket
fi
更新:
我想这可能是您所需要的。在 ~/ 你应该有一个 .boto 文件。
~$ more .boto | grep max
# num_retries = <integer value>
# max_retry_delay = <integer value>
取消注释这些行并添加您的号码。默认为 6 次重试,因此您可以执行 24 次重试之类的操作,并在两者之间放置 3600 次。这在理论上应该始终保持循环。
希望这对您有所帮助!
- 如果您的文件超过可恢复阈值(从 4.7 开始,这是 8MB),任何可用性问题都将根据
num_retries
和max_retry_delay
配置变量以指数退避重试。如果文件小于阈值,则不会重试(这将在 4.8 中改进,因此小文件也可以重试)。 - 如果任何文件未能成功传输,gsutil 将停止并根据遇到的失败输出异常。如果您使用的是
gsutil -m rsync
或gsutil rsync -C
,gsutil 将在出现错误时继续,最后,您将收到带有消息 'N file(s)/object(s) could not be copied/removed' 的 CommandException
- 如果重试次数已用尽and/or发生#2 中描述的任一失败情况,退出代码将为非零。
为了确保从存储桶中下载所有文件,您可以简单地重新运行 gsutil rsync
,直到获得非零退出代码。
请注意 gsutil rsync
依赖于列出对象。 Google Cloud Storage 中的列表是最终一致的。因此,如果您将文件上传到存储桶,然后立即 运行 gsutil rsync
,您可能会错过新上传的文件,但 gsutil rsync
的下一个 运行 应该选择它们向上。