使用 Azure CLI 管理 Azure 文件共享

Azure 文件是 Microsoft 推出的易于使用的云文件系统。 可以在 Windows、Linux 和 macOS 中装载 Azure 文件共享。 本文介绍通过 Azure CLI 来使用 Azure 文件共享的基本知识。 了解如何:

  • 创建资源组和存储帐户
  • 创建 Azure 文件共享
  • 创建目录
  • 上传文件
  • 下载文件
  • 创建和使用共享快照

如果没有 Azure 订阅,可在开始前创建一个 1 元人民币试用帐户

如果决定在本地安装并使用 Azure CLI,则必须运行 Azure CLI 2.0.4 或更高版本才能执行本文中的步骤。 若要查找 Azure CLI 版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0

默认情况下,Azure CLI 命令返回 JavaScript 对象表示法 (JSON)。 JSON 是通过 REST API 发送和接收消息的标准方式。 为了便于处理 JSON 响应,本文中的某些示例使用基于 Azure CLI 命令的 query 参数。 该参数使用 JMESPath 查询语言来分析 JSON。 若要详细了解如何按照 JMESPath 查询语言的规范来使用 Azure CLI 命令的结果,请参阅 JMESPath tutorial(JMESPath 教程)。

创建资源组

资源组是在其中部署和管理 Azure 资源的逻辑容器。 如果还没有 Azure 资源组,可以使用 az group create 命令创建一个。

以下示例在“中国东部”位置创建名为 myResourceGroup 的资源组:

az group create --name myResourceGroup --location chinaeast

创建存储帐户

存储帐户是一个存储共享池,在其中可以部署 Azure 文件共享或其他存储资源,例如 Blob 或队列。 一个存储帐户可以包含无数个文件共享。 一个共享可以存储无数个文件,直到达到存储帐户的容量限制为止。

以下示例使用 az storage account create 命令创建名为 mystorageaccount<随机数字> 的存储帐户,然后将该存储帐户的名称置于 $STORAGEACCT 变量中。 存储帐户名称必须唯一。 使用 $RANDOM 将一个数字追加到存储帐户名称末尾即可使之变得唯一。

STORAGEACCT=$(az storage account create \
    --resource-group "myResourceGroup" \
    --name "mystorageacct$RANDOM" \
    --location chinaeast \
    --sku Standard_LRS \
    --query "name" | tr -d '"')

获取存储帐户密钥

存储帐户密钥控制对存储帐户中资源的访问。 这些密钥是在创建存储帐户时自动创建的。 可以使用 az storage account keys list 命令获取存储帐户的存储帐户密钥:

STORAGEKEY=$(az storage account keys list \
    --resource-group "myResourceGroup" \
    --account-name $STORAGEACCT \
    --query "[0].value" | tr -d '"')

创建 Azure 文件共享

现在可以创建第一个 Azure 文件共享了。 请使用 az storage share create 命令创建文件共享。 以下示例创建名为 myshare 的 Azure 文件共享:

az storage share create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" 

Important

共享名称只能包含小写字母、数字和单个连字符(但不能以连字符开头)。 有关如何命名文件共享和文件的完整详细信息,请参阅 Naming and referencing shares, directories, files, and metadata(命名和引用共享、目录、文件和元数据)。

使用 Azure 文件共享的内容

创建 Azure 文件共享以后,即可使用 SMB 在 WindowsLinuxmacOS 上装载该文件共享。 也可通过 Azure CLI 使用 Azure 文件共享。 使用 Azure CLI(而不是使用 SMB 来装载文件共享)的优势在于,所有通过 Azure CLI 发出的请求都是通过文件 REST API 发出的。 可以通过文件 REST API 创建、修改和删除以下位置的文件共享中的文件和目录:

  • Bash Azure Cloud Shell(不能通过 SMB 来装载文件共享)
  • 无法装载 SMB 共享的客户端,例如未将端口 445 解除阻止的本地客户端
  • 某个解决方案(例如 Azure Functions)中的无服务器方案

创建目录

若要在 Azure 文件共享的根目录中创建名为 myDirectory 的新目录,请使用 az storage directory create 命令:

az storage directory create \
   --account-name $STORAGEACCT \
   --account-key $STORAGEKEY \
   --share-name "myshare" \
   --name "myDirectory" 

上传文件

若要演示如何使用 az storage file upload 命令来上传文件,请首先在 Cloud Shell 暂存驱动器上创建要上传的文件。 以下示例创建并上传该文件:

date > ~/clouddrive/SampleUpload.txt

az storage file upload \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --source "~/clouddrive/SampleUpload.txt" \
    --path "myDirectory/SampleUpload.txt"

如果在本地运行 Azure CLI,请将 ~/clouddrive 替换为计算机上的现有路径。

上传文件以后,即可使用 az storage file list 命令,确保文件已上传到 Azure 文件共享:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory" \
    --output table

下载文件

可以使用 az storage file download 命令下载已上传到 PowerShell 暂存驱动器的文件的副本:

# Delete an existing file by the same name as SampleDownload.txt, if it exists, because you've run this example before
rm -rf ~/clouddrive/SampleDownload.txt

az storage file download \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt" \
    --dest "~/clouddrive/SampleDownload.txt"

复制文件

一项常见的任务是将文件从一个文件共享复制到另一个文件共享,或者将文件在文件共享和 Azure Blob 存储容器之间来回复制。 为了演示此功能,请创建一个新的共享。 请使用 az storage file copy 命令将上传的文件复制到该新共享:

az storage share create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare2"

az storage directory create \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare2" \
    --name "myDirectory2"

az storage file copy start \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --source-share "myshare" \
    --source-path "myDirectory/SampleUpload.txt" \
    --destination-share "myshare2" \
    --destination-path "myDirectory2/SampleCopy.txt"

现在,如果列出新共享中的文件,则应看到已复制的文件:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare2" \
    --output table

虽然 az storage file copy start 命令可以方便地用于 Azure 文件共享和 Azure Blob 存储容器之间的文件移动,但我们仍建议你使用 AzCopy 进行较大型 (就要移动的文件的数量或大小而言)的移动。详细了解 Linux 版 AzCopyWindows 版 AzCopy。 AzCopy 必须安装在本地。 AzCopy 在 Cloud Shell 中不可用。

创建和修改共享快照

可以通过 Azure 文件共享执行的另一项有用的任务是创建共享快照。 快照保存 Azure 文件共享在某个时间点的副本。 共享快照类似于你可能已经熟悉的某些操作系统技术:

可以使用 az storage share snapshot 命令创建共享快照:

SNAPSHOT=$(az storage share snapshot \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" \
    --query "snapshot" | tr -d '"')

浏览共享快照内容

可以浏览共享快照的内容,只需将变量 $SNAPSHOT 中捕获的共享快照的时间戳传递给 az storage file list 命令即可:

az storage file list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --snapshot $SNAPSHOT \
    --output table

列出共享快照

若要查看为共享生成的快照的列表,请使用以下命令:

az storage share list \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --include-snapshot \
    --query "[? name=='myshare' && snapshot!=null]" | tr -d '"'

从共享快照还原

可以使用此前用过的 az storage file copy start 命令还原某个文件。 首先,请删除已上传的 SampleUpload.txt 文件,这样才能将其从快照还原:

# Delete SampleUpload.txt
az storage file delete \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --share-name "myshare" \
    --path "myDirectory/SampleUpload.txt"

# Build the source URI for a snapshot restore
URI=$(az storage account show \
    --resource-group "myResourceGroup" \
    --name $STORAGEACCT \
    --query "primaryEndpoints.file" | tr -d '"')

URI=$URI"myshare/myDirectory/SampleUpload.txt?sharesnapshot="$SNAPSHOT

# Restore SampleUpload.txt from the share snapshot
az storage file copy start \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --source-uri $URI \
    --destination-share "myshare" \
    --destination-path "myDirectory/SampleUpload.txt"

删除共享快照

可以使用 az storage share delete 命令删除共享快照。 所使用的变量包含对 --snapshot 参数的 $SNAPSHOT 引用:

az storage share delete \
    --account-name $STORAGEACCT \
    --account-key $STORAGEKEY \
    --name "myshare" \
    --snapshot $SNAPSHOT

清理资源

完成后,可以使用 az group delete 命令删除资源组和所有相关的资源:

az group delete --name "myResourceGroup"

也可逐一删除资源。

  • 若要删除为本文创建的 Azure 文件共享,请执行以下命令:

    az storage share delete \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "myshare" \
        --delete-snapshots include
    
    az storage share delete \
        --account-name $STORAGEACCT \
        --account-key $STORAGEKEY \
        --name "myshare2" \
        --delete-snapshots include
    
  • 若要删除存储帐户本身,请执行以下命令 (这会隐式删除已创建的 Azure 文件共享,以及任何其他可能已创建的存储资源,例如 Azure Blob 存储容器):

    az storage account delete \
        --resource-group "myResourceGroup" \
        --name $STORAGEACCT \
        --yes
    

后续步骤