你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

与 Azure IoT Edge for Linux on Windows 共享 Windows 文件夹

适用于:IoT Edge 1.5 复选标记IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是早期版本,请参阅更新 IoT Edge

适用于 Windows(EFLOW)虚拟机的 Azure IoT Edge for Linux 与 Windows 主机 OS 隔离,虚拟机无法访问主机文件系统。 默认情况下,EFLOW 虚拟机有自己的文件系统,无法访问主计算机上的文件夹或文件。 使用 EFLOW 文件和文件夹共享机制,可以使用 CBL-Mariner Linux EFLOW VM 共享 Windows 文件和文件夹。

本文介绍如何在 Windows 主机 OS 和 EFLOW 虚拟机之间共享文件夹。

先决条件

  • Azure IoT Edge for Linux on Windows 1.4.4 LTS 更新或更高版本。 有关 EFLOW 发行说明的详细信息,请参阅 EFLOW 版本
  • 具有 x64 或 x86 处理器的计算机。
  • Windows 10 或 11(21H2)或更高版本,并已应用 2022 年 11 月更新。

如果尚未准备好 EFLOW 设备,请在继续本指南之前创建一个。 请按照使用对称密钥创建和预配 IoT Edge for Linux on Windows 设备中的步骤来安装、部署和预配 EFLOW。

工作原理

Windows 上的 Azure IoT Edge for Linux 使用 virtiofs 技术进行文件和文件夹共享。 Virtiofs 是一个共享文件系统,允许虚拟机在主机 OS 上使用目录树。 与其他方法不同,它专为本地文件系统语义和性能而设计。 Virtiofs 不是重新用于虚拟化的网络文件系统。 它使用虚拟机和虚拟机监控程序的区域来避免网络文件系统的开销。

使用 Virtio-FS 技术与 EFLOW 虚拟机共享的 Windows 文件夹的屏幕截图。

只能将 Windows 文件夹共享到 EFLOW Linux VM,而不是另一种方式。 为了安全性,设置文件夹共享时,需要提供 根文件夹,并且所有共享文件夹都必须在该 根文件夹下。

在添加或删除共享文件夹之前,请查看以下四个概念:

  • 根文件夹:Windows 文件夹,它是与 EFLOW VM 共享的子文件夹的根路径。 根文件夹本身不共享。 仅共享根文件夹下的子文件夹。
  • 共享文件夹:与 EFLOW VM 共享的 根文件夹 下的 Windows 文件夹。 此文件夹中的所有内容都与 EFLOW VM 共享。
  • 装载点:显示 Windows 文件夹内容的 EFLOW VM 中的路径。
  • 装载选项:只读或读写访问权限。 此设置控制 EFLOW VM 中装载的文件夹的文件访问。

添加共享文件夹

这些步骤演示了示例 EFLOW PowerShell 命令,用于与 EFLOW 虚拟机共享一个或多个 Windows 主机 OS 文件夹。

注意

如果使用 Windows 10,请在新的 MSI 安装或更新后重新启动 Windows 主机 OS,然后再将 Windows 共享文件夹添加到 EFLOW VM。

  1. 创建新的根共享文件夹。 转到 文件资源管理器,选择 根文件夹的位置,并创建该文件夹。

    例如,在 C:\Shared 下创建名为 EFLOW-Shared根文件夹

    显示 EFLOW-Shared 文件夹的 C:\共享文件夹的屏幕截图。

  2. 根文件夹下创建一个或多个共享文件夹,以便与 EFLOW 虚拟机共享。

    例如,创建两个文件夹:一个名为 Read-Access 和一个名为 Read-Write-Access

    Windows 共享文件夹 Read-Access 和 Read-Write-Access 的屏幕截图。

  3. 在 Read-Access 共享文件夹中,创建一个示例文件,稍后会在 EFLOW 虚拟机中读取该文件。

    例如,使用文本编辑器在 Read-Access 文件夹中创建名为 Hello-World.txt 的文件,并将某些文本保存在文件中。

  4. 使用文本编辑器创建共享文件夹配置文件。 此文件包含有关要与 EFLOW VM 共享的文件夹的信息,包括装入点和选项。 有关 JSON 配置文件的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

    例如,在此方案中,共享在根文件夹下创建的两个共享文件夹

    • 读取访问共享文件夹装载在 EFLOW 虚拟机中的路径 /tmp/host-read-access 下,具有只读访问权限。
    • 读/写访问共享文件夹装载在 EFLOW 虚拟机中的路径 /tmp/host-read-write-access 下,具有读写访问权限。

    根文件夹EFLOW-Shared 中创建名为 sharedFolders.json 的 JSON 配置文件,其中包含以下内容:

    [
        {
            "sharedFolderRoot": "C:\\Shared\\EFLOW-Shared",
            "sharedFolders": [
                {   
                    "hostFolderPath": "Read-Access", 
                    "readOnly": true, 
                    "targetFolderOnGuest": "/tmp/host-read-access" 
                },
                {   
                    "hostFolderPath": "Read-Write-Access", 
                    "readOnly": false, 
                    "targetFolderOnGuest": "/tmp/host-read-write-access" 
                }
            ]
        }
    ]
    
  5. 通过选择“以管理员身份运行”打开提升的 PowerShell 会话。

  6. 使用前面创建的配置文件(sharedFolders.json)创建共享文件夹分配。

    Add-EflowVmSharedFolder -sharedFoldersJsonPath "C:\Shared\EFLOW-Shared\sharedFolders.json"
    
  7. cmdlet 完成后,EFLOW 虚拟机可以访问共享文件夹。 连接到 EFLOW 虚拟机并检查文件夹是否已正确共享。

  8. 转到 Read-Access 共享文件夹(装载在 /tmp/host-read-access 下),并检查 Hello-World.txt 文件的内容。

    注意

    默认情况下,所有共享文件夹都归 目录所有。 若要访问文件夹,请使用以下命令以 root sudo su 身份登录,或使用命令将文件夹所有权更改为 iotedge-userchown

    sudo su
    cd /tmp/host-read-access
    cat Hello-World.txt
    

如果一切成功,则会看到 EFLOW 虚拟机中 Hello-World.txt 文件的内容。 若要验证写入访问权限,请在 /tmp/host-read-write-access 中创建一个文件,然后在 Read-Write-Access Windows 主机文件夹中检查新文件的内容。

检查共享文件夹

以下步骤提供 EFLOW PowerShell 命令的示例,用于检查 Windows 与 EFLOW 虚拟机共享的文件夹和选项(访问权限和装载点)。

  1. 首先以管理员身份运行,打开提升的 PowerShell 会话。

  2. 列出根文件夹下 Windows 共享文件夹的信息。 例如,根据上一部分中的场景,我们可以列出 Read-Access 和 Read-Write-Access 共享文件夹的信息。

    Get-EflowVmSharedFolder -sharedfolderRoot "C:\Shared\EFLOW-Shared" -hostFolderPath @("Read-Access", "Read-Write-Access")
    

有关 Get-EflowVmSharedFolder cmdlet 的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

删除共享文件夹

以下步骤提供 EFLOW PowerShell 命令的示例,用于停止与 EFLOW 虚拟机共享 Windows 共享文件夹。

  1. 首先以管理员身份运行,打开提升的 PowerShell 会话。

  2. 停止与 EFLOW 虚拟机共享在根文件夹下名为 Read-Access 的文件夹。

    Remove-EflowVmSharedFolder -sharedfolderRoot "C:\Shared\EFLOW-Shared" -hostFolderPath "Read-Access"
    

有关 Remove-EflowVmSharedFolder cmdlet 的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

后续步骤

按照 适用于 Windows 上的 Azure IoT Edge for Linux 的常见问题和解决方法 中的步骤排查在 Windows 上为 Linux 设置 IoT Edge 时遇到的问题。