虛擬機器提供許多優勢,如靈活性、合理利用資源和在隔離環境中運行。在虛擬環境中的一個常見任務是在虛擬機器和主機之間複製文件。閱讀以了解如何從主機複製文件到虛擬機器,如何從虛擬機器傳輸文件到主機,以及如何在虛擬機器之間複製文件。
我們環境的組成部分
讓我們首先來看一下術語:
- A host is a physical machine on which a hypervisor is installed.
- A hypervisor is virtualization software to run virtual machines on the host. There are two types of hypervisors:
- 類型1:使用ESXi服務器,即主機機器
- 類型2:使用VMware Workstation,在這種情況下,Windows和Linux可以是主機機器的操作系統
在這個教程中,用於解釋如何從虛擬機器傳輸文件到主機的環境由以下組件組成:
- ESXi主機1:192.168.101.201
- ESXi主機2:192.168.101.202
- Ubuntu Linux機器:192.168.101.210
- 安裝了VMware Workstation的Windows主機
- 網絡:192.168.101.0/24
- ESXi虛擬機和VMware Workstation虛擬機連接到同一個網絡
我們使用以下技術在虛擬機器和主機之間複製文件:
- 共享文件夾
- 共享剪貼板和拖放
- USB存儲設備
- PowerCLI
- SSH和SCP
- NFS共享
- 在VMware Web界面中下載/上傳文件
- ISO文件
使用共享文件夾將VM文件傳輸到主機
共享文件夾是VMware Workstation中的一個方便功能,可在安裝了VMware Workstation的Windows或Linux物理主機和在VMware Workstation上運行的VM之間傳輸文件。對於macOS,VMware Fusion是VMware Workstation的等效版本,支持類似的功能。
現在讓我們逐步介紹如何使用VMware共享文件夾從VM傳輸文件到主機,以及反之。
注意:要使此功能生效,必須在VM上安裝VMware Tools。在主機和VM之間,通過VMware Tools進行交互而不使用網絡,可以傳輸數據。
- 選擇要配置VMware文件共享的VM。我們選擇了我們的一個Windows VM。
- 在VMware Workstation GUI中,單擊VM >設置(編輯虛擬機器設置)。
- 在虛擬機器設置窗口中,選擇選項標籤,然後單擊共享文件夾。在文件夾共享 部分,選擇始終啟用。可選地,您可以選擇該核取框,在Windows客戶端將共享文件夾映射為網絡驅動器,以提供更多便利。
- 單擊添加以選擇要用作共享文件夾的文件夾。
- 請輸入要在主機上共享的文件夾路徑,或點擊 瀏覽 選擇所需的文件夾。我們選擇 C:\temp\share-VM
輸入共享文件夾的名稱,例如,share-VM
點擊 下一步。
- 選擇 啟用此共享。如果您希望虛擬機器以僅讀模式訪問共享文件夾,請選擇 唯讀 复選框。點擊 完成。
- 新共享文件夾現在顯示在選項標籤中的虛擬機設置視窗的共享文件夾列表中。如果相應的文件名旁邊的复选框被選中,則共享文件夾已啟用。
單擊確定保存設置。
- 打開用於通過共享文件夾功能與Windows VM共享文件夾的用戶界面。
- 在我的電腦(此PC)或Windows资源管理器中,單擊網絡(我的網絡位置)以查看網絡中可用的計算機。
- 選擇共享文件夾配置的計算機名vmware-host。此名稱默認設置並映射到您的物理機器(主機)與共享文件夾。
- 點擊共享文件夾 並選擇所需的共享文件夾(在我們的示例中為share-VM)。在我們的情況下,共享文件夾的完整路徑為
\\vmware-host\Shared Folders\share-VM\
您可以從主機到虛擬機器以及從虛擬機器到主機進行文件的複製。在我們的示例中,我們使用VMware Workstation中的VMware文件共享,將Test01.txt從Windows主機複製到Windows客戶機。
對於Linux客戶機,您可以使用以下命令掛載所有VMware共享文件夾:
- 在Linux內核版本低於4.0的系統中:
mount -t vmhgfs .host:/ /home/user1/shares
- 在Linux內核版本為4.0或更新的系統中:
/usr/bin/vmhgfs-fuse .host:/ /home/user1/shares -o subtype=vmhgfs-fuse,allow_other
如果您希望在虛擬機器重新啟動後保持共享文件夾的掛載,請在/etc/fstab中添加帶有註釋和配置的適當行,例如:
# VMware共享文件夾用於在VMWare客戶機和主機之間傳輸文件
.host:/ /mnt/hgfs/ fuse.vmhgfs-fuse defaults,allow_other,uid=1000 0 0
在我們進入下一節之前,請注意,共享文件夾功能僅在 VMware Workstation(和 VMware Fusion 在 macOS 上)中可用,並且不適用於在 ESXi 主機上運行的虛擬機器。對於 ESXi 主機,您可以手動共享文件夾,並使用網絡在 Windows 機器之間複製文件。要將文件從虛擬機器複製到 ESXi 主機,您應該使用其他工具或將從手動共享文件夾複製文件的方法之一與下面解釋的方法相結合。
有其他方法可以在 Windows 10 和 Windows Server 2019 中共享文件夾。您也可以了解更多關於 SMB 文件共享協議的信息。
如果您有具有管理權限的 Windows 帳戶並且安全策略允許訪問預設情況下提供的隱藏管理共享,則可以使用以下共享路徑訪問 Windows 機器的本地磁碟上的文件:
\\IP-Address\c$
其中:
IP-Address是遠程 Windows 機器的 IP 地址或主機名稱。
C$ is the needed disk drive letter on a remote Windows machine which is a hidden system share.
使用共享剪貼板從主機傳送文件到虛擬機器
共享剪贴板是一项功能,允许您从安装有 VMware Workstation 的主机机器上复制和粘贴文本和整个文件等内容到虚拟机器。该过程类似于在 Windows 或 Linux 中使用 GUI 在不同应用程序窗口之间复制粘贴内容的过程。
完整功能范围可在 VMware Workstation 中使用,它允许您从主机向虚拟机器传输文件,也允许从虚拟机器向主机传输文件。您可以使用拖放文件作为复制粘贴的替代方法。
VMware Workstation 中的共享剪贴板
让我们来看看如何使用共享剪贴板和拖放将文件传输到 VMware Workstation 虚拟机器。在我们的示例中,VMware Workstation 安装在 Windows 主机上。
- 在列出 VM 的左窗格中选择您的 VM。
- 点击 编辑虚拟机器设置 (VM > 设置)。
- 選擇 選項 標籤並點擊 客戶 隔離。
選擇兩個核取方塊:
- 啟用拖放
- 啟用複製和貼上
點擊 確定 保存設置並關閉視窗。
在 VMware ESXi 中的共享剪貼簿
對於在 VMware ESXi 上運行的虛擬機器,您無法使用拖放或通過共享剪貼板在 ESXi 主機上的虛擬機器和任何其他機器之間複製任何文件。唯一的選擇是在運行在 ESXi 上的虛擬機器和您的本地機器(安裝有 VMware Workstation 或 VMware Remote Console 的機器)之間複製和貼上文本。基於安全原因,不支持文件的複製和貼上以及拖放。
然而,如果您無法複製配置文件,例如,您可以使用共享剪貼板複製文件的文本內容。在 ESXi 主機上執行以下操作以啟用共享剪貼板來複製和貼上文本數據:
- 必須在編輯 VM 配置時將 VM 關閉。如果 VM 正在運行,則關閉 VM。
- 打開VM 設置。您可以使用 VMware 主機客戶端和 VMware vSphere 客戶端。選擇一個 VM,點擊編輯 VM 設置並選擇VM 選項標籤。
展開高級設置部分並點擊編輯配置。
- 您需要將三個配置參數添加到 VM 配置中(寫入 VM 配置 VMX 文件)。點擊添加參數。
- 添加這三個參數:
isolation.tools.copy.disable FALSE
isolation.tools.paste.disable FALSE
isolation.tools.setGUIOptions.enable TRUE
- 點擊確定並保存設置。
或者,您可以手動編輯位於ESXi數據存儲上的VM目錄中的VMX文件以編輯VM配置。
- 本地或通過SSH登錄ESXi shell。
- 轉到VM目錄(存儲在數據存儲上的VM文件所在的目錄)。在我們的情況下,我們轉到這個目錄:
cd /vmfs/volumes/datastore10a/Windows-VM/
- 編輯VMX配置文件。在我們的情況下,文件是Windows-VM.vmx
vi Windows-VM.vmx
- 將上面顯示的三個參數添加到此配置文件的末尾。
- 保存更改並關閉文件(退出文本編輯器)。
現在我們可以使用 VMware 遠端控制台和 VMware Workstation 來連接虛擬機器,從而在本機和運行在 ESXi 主機上的遠端 VM 之間複製和粘貼文本。
使用 USB 存儲設備
VMware ESXi 和 VMware Workstation 支持 USB 通過功能,允許您將 USB 設備插入主機並將此 USB 設備連接到在此主機上運行的虛擬機器。您可以依次將 USB 存儲設備連接到主機和虛擬機器,以在這些機器之間雙向複製文件。
注意: 必須在 VM 客戶操作系統(OS)上安裝 VMware Tools 才能使用 USB 通過功能。
在 VMware Workstation VM 和主機之間複製文件
執行以下操作,在安裝在 Windows 和 Linux 主機上的 VMware Workstation 中從 VM 複製文件到主機(界面統一):
- 啟動虛擬機器。
- 將 USB 存儲設備(例如 USB 硬盤驅動器或 USB 閃存驅動器)插入作為主機機器的物理計算機。
- 偵測到新 USB 裝置視窗在 VMware Workstation 中開啟。選擇您想連接 USB 裝置的位置:
- 連接到主機
- 連接到虛擬機
讓我們選擇第二個選項,並將我們的 USB 隨身碟連接到虛擬機。在此示例中,我們正在運行 Windows VM。如果在 VMware Workstation 上運行多個 VM,您必須從列表中選擇所需的 VM。USB 裝置一次只能連接到一個 VM。按 確定 繼續。
如果您的 USB 儲存裝置已經插入到安裝 VMware Workstation 的物理主機機器的 USB 埠中,則不會自動顯示帶有 USB 通過選項的彈出視窗。您可以在菜單中將 USB 裝置連接到 VM(從主機斷開連接):
前往 VM > 可移動裝置 > 您的 USB 儲存裝置名稱 > 連接(從主機斷開連接)。
在我們的示例中,USB 隨身碟名稱是 Kingston DataTraveler 2.0。
- 現在,我們可以在“我的電腦”(Windows資源管理器)的磁盤驅動器列表中看到USB隨身碟已連接到Windows 7虛擬機器上。檢查USB存儲設備:
- 右鍵單擊我的電腦並點擊管理。
- 轉到計算機管理 > 設備管理器和計算機管理 > 磁碟管理,然後在適當的捷徑中右鍵單擊。
如果沒有自動分配驅動器字母,請在磁碟管理捷徑中手動分配字母。
Linux客戶端的工作流程是相同的。在某些Linux發行版中,您可能需要在Linux操作系統中手動掛載已連接的USB存儲設備,如隨身碟。
- 一旦USB存儲設備已掛載到VM並被客戶端OS識別,則從VM複製所需文件到USB存儲設備。現在,也可以將文件從USB存儲設備複製到VM。
- 將所有需要的文件從VM複製到USB閃存驅動器後,將USB閃存驅動器從VM中拔出,並將此USB設備連接到主機:
點擊VM>可移動設備>您的USB存儲設備名稱>斷開(連接到主機)。
- A USB storage device is now connected to a host machine (a Windows machine on which VMware Workstation is running in our case). We can transfer the files that were copied from the VM to the USB flash drive to your host machine.
從 VMware Workstation 通過 USB 通行模式到 ESXi VMs
您可以將 USB 隨身碟插入 ESXi 伺服器並插入您的本機 Windows 或 Linux 機器(已安裝 VMware Workstation 或 VMware Remote Console (VMRC))以遠程管理 ESXi 主機的機器,以將此 USB 隨身碟連接到 ESXi VM。在第一種情況下,使用主機連接的 USB 通行模式,在第二種情況下,使用客戶端連接的 USB 通行模式。
讓我們將插入本地物理 Windows 10 機器的 USB 隨身碟連接到在 ESXi 主機 v7.0 上運行的 Windows XP VM(使用客戶端連接的 USB 通行功能)。 VMware Workstation 安裝在我們的物理 Windows 機器上,並通過網絡(192.168.101.0/24)連接到 ESXi 主機。
要做到這一點:
- A VM must be powered off to edit the VM settings.
- 確保 VM 的虛擬硬件清單中存在 USB 控制器。您可以在 VMware Host Client 中檢查 VM 配置。選擇您的 VM(在我們的情況下是 Windows-VM),點擊 編輯設置,並選擇 虛擬硬件 選項卡。
- 讓我們回到安裝在我們本地(實體)Windows 10 機器上的 VMware Workstation。在 VMware Workstation 中點擊檔案 > 連線到伺服器以連接到遠端的 ESXi 主機。
- 輸入 ESXi 伺服器的名稱或 IP 位址、使用者名稱和密碼。點擊連線。
- 在 VMware Workstation 的左側窗格中展開 ESXi 主機,這裡會顯示遠端主機、這些主機上的遠端 VM 和本地 VMware Workstation VM。
- 選擇在遠端 ESXi 主機上運行的 VM。我們選擇在192.168.101.201上運行的Windows-VM。之後,我們可以看到所選 VM 的用戶界面。
- 點擊 VM > 可移動裝置 > 您的USB儲存裝置名稱 > 連接(從主機斷開連接)。
請注意,我們選擇的是連接到我們的物理 Windows 機器上的 USB 裝置,該機器安裝了 VMware Workstation。這個 USB 裝置不是連接到我們遠程連接的物理 ESXi 主機上的裝置。
- 現在我們可以看到我們的 USB 隨身碟連接到運行在遠程 ESXi 主機上的 Windows XP VM: 開始 > CMD > compmgmt.msc > 設備管理員。
- 將連接的 USB 隨身碟分配一個磁碟驅動器字母,如果尚未分配驅動器字母。在虛擬機和 USB 隨身碟之間複製所需的文件。您可以將文件從虛擬機傳輸到虛擬機,也可以從虛擬機傳輸到虛擬機。
- 複製文件後,您可以從虛擬機中斷連接 USB 儲存裝置,並將此裝置重新連接到本地物理 Windows 10 機器上,該機器上正在運行 VMware Workstation。在 VMware Workstation GUI 中,點擊 VM > 可移動裝置 > 您的 USB 儲存裝置名稱 > 斷開連接(連接到主機)。
在 ESXi 上連接 USB 隨身碟
在某些情況下,此方法非常有用,例如,如果您需要在 ESXi 主機上更新網絡驅動程序,而無法使用網絡。將 USB 閃存驅動器連接到 ESXi 比連接到運行 VMware Workstation 的主機機器更為複雜。
ESXi 關於支援可以掛載到 ESXi 的檔案系統有一些限制。不支援具有 FAT32 和 NTFS 檔案系統的 USB 隨身碟或 USB 硬碟。因此,我們需要在我們的 USB 隨身碟上建立一個分割區,並使用 VFAT 格式化此分割區(在 Windows 中被識別為 FAT12)。VFAT 有一些限制,例如最大分割區大小和最大檔案大小。因此,此方法不適用於大檔案,例如大於 4 GB 的虛擬磁碟或 ISO 影像。但是,這些限制足以傳輸配置檔案、驅動程式等。
在 USB 隨身碟上建立分割區
首先,讓我們在我們的 USB 隨身碟上建立一個新的分割區,並在 VFAT 中格式化此分割區。我們可以通過將插入 ESXi 伺服器的 USB 隨身碟附加到一個 VM(使用主機連接的 USB 通過功能)來執行此操作。或者,我們可以將 USB 隨身碟插入一台物理的 Windows 或 Linux 機器。
在此示例中,我們使用 Windows 7 機器為 ESXi 準備 USB 隨身碟。Windows Server 2008R2、Windows 10 和其他更新的 Windows 版本的命令相同。
- 為了確保 USB 隨身碟連接到您的 Windows 機器,右鍵點擊我的電腦或這台電腦(或者從 CMD 中運行diskmgmt.msc)以打開磁碟管理。
- 打開 Windows 命令行:
開始>執行>cmd
- 在命令行中键入
diskpart
然后按 Enter 键。你會看到一個 diskpart 提示:
Diskpart
- 列出連接到您的 Windows 機器的磁盤:
list disk
在輸出列表中找到您的 USB 隨身碟並記住磁盤號。在我們的案例中,Disk 1 是我們的 USB 隨身碟的磁盤號(見下面的截圖)。
- 通過定義您從上述命令輸出中獲得的適當磁盤號來選擇您的 USB 隨身碟(在我們的案例中為磁盤 1)。
select disk 1
- 選擇的 USB 隨身碟上的分割列表:
列出分割
我們的 USB 隨身碟上有一個分割 (分割 1) (見下面的截圖)。在 USB 隨身碟上有一個分割是最常見的情況。
接下來,我們需要刪除 USB 隨身碟上的分割。
重要: USB 隨身碟上的所有數據將被刪除。您可以在進入下一步之前從隨身碟上複製數據。
- 選擇要刪除的 USB 隨身碟上的分割:
選擇分割 1
- 運行命令以刪除所選分割:
刪除分割
- 選擇一個磁碟,這是您的 USB 隨身碟:
select disk 1
- 使用 VFAT 檔案系統創建一個新的分割區。在這個示例中,我們在 USB 隨身碟上創建一個 4GB 的分割區。請注意,您無法將大於 4GB 的檔案存儲在 VFAT 上。請注意,VFAT 只支持 8.3 檔名格式。
create partition primary size=4000 id=6
- 以符合 ESXi 的兼容性格式化所創建的分割區:
format fs=fat quick
- 退出 diskpart 實用程式(運行 exit 命令)。
A USB flash drive is ready to be recognized by ESXi and copy files. After some additional ESXi configuration steps, you can attach a USB flash drive to a VM and copy the needed file(s) to the USB flash drive.
假設我們需要複製一個帶有驅動程式的 ZIP 壓縮檔。在我們的示例中,我們已將 net-tulip.zip 複製到 USB 隨身碟上。接下來,我們需要在 ESXi 伺服器上插入的 USB 隨身碟的分割區上掛載 ESXi 命令列。
配置 ESXi 主機以使用 USB 隨身碟
我們需要從USB隨身碟將帶有驅動程序的ZIP存檔複製到ESXi資料存儲中,然後將VM配置文件從ESXi資料存儲複製到USB隨身碟。在我們的例子中,文件名是net-tulip.zip。在ESXi主機上執行以下操作,將文件從USB隨身碟傳輸到VMware ESXi,以及反向操作:
- 配置在命令行界面中進行。因此,您必須在ESXi主機上啟用SSH訪問。
- 要在DCUI中啟用遠程SSH訪問,請轉到故障排除選項 > 啟用SSH。
- 要在VMware Host Client中啟用ESXi上的遠程SSH訪問和SSH服務器,請轉到主機 > 管理,然後選擇服務選項卡。右鍵單擊TSM-SSH,然後單擊啟動以啟動服務。您可以永久啟用此服務。
- 通過SSH連接到ESXi主機以使用命令行。您可以使用您喜歡的SSH客戶端。
- 停止USB仲裁器服務:
/etc/init.d/usbarbitrator stop
USB仲裁器會自動啟用ESXi主機上的USB通過功能(您只需要在適當VM的VM設置中選擇一個USB閃存驅動器以使用此功能)。
- 如果您想要在ESXi重新啟動後永久禁用USB仲裁器服務,您可以使用以下命令:
chkconfig usbarbitrator off
要啟用USB仲裁器服務,請使用相應的命令:
/etc/init.d/usbarbitrator start
chkconfig usbarbitrator on
- 以下是檢查ESXi主機連接的USB設備的可選命令:
lsusb
esxcli storage core device list | grep -i usb
esxcli storage filesystem list
您可以查看/var/log/usb.log來檢查USB設備的狀態。
- 在停止USB仲裁器服務後,您可能需要斷開並重新連接USB存儲設備。
- 列出塊磁盤設備以查找/識別已連接的USB隨身碟(或USB HDD)。
ls -ltrh /vmfs/devices/disks/
我們的USB隨身碟是mpx.vmhba32:C0:T0:L0:(參見下面的截圖)。
因此,完整的磁盤地址/位置是:
/dev/disks/mpx.vmhba32:C0:T0:L0:
- 檢查USB設備的分區號,以確保您已識別正確的磁碟設備:
ls /dev/disks/mpx.vmhba32:C0:T0:L0:*
根據輸出,考慮到我們的情況中的分區號,完整的設備ID是:
/dev/disks/mpx.vmhba32:C0:T0:L0:1
- 定位USB隨身碟的根文件夾,以定義複製文件的來源/目的地路徑。運行以下命令並按Tab鍵以查看卷目錄中的可用項目。ESXi文件系統的/volumes/目錄是掛載有文件系統的分區的目錄。
ls -al /vmfs/volumes/ [按 Tab 鍵]
USB隨身碟上的卷稱為NO NAME
- 檢查 USB 閃存驅動器根目錄的內容
ls -al /vmfs/volumes/NO\ NAME/
我們的 ZIP 檔案存在於 USB 閃存驅動器卷中。
- 我們已在 ESXi 資料存放區(datastore10a)上建立了 install 文件夾,使用以下命令:
cd /vmfs/volumes/datastore10a
mkdir install
在下面的截圖中,您還可以看到我們稍後將從 ESXi 資料存放區複製到 USB 閃存驅動器的 VM 配置文件的目錄。
- 將ZIP存檔從USB隨身碟複製到我們的ESXi主機上的install資料夾(位於datastore10a上)。
cp /vmfs/volumes/NO\ NAME/net-tulip.zip /vmfs/volumes/datastore10a/install/
- 檢查檔案是否已複製:
ls -al /vmfs/volumes/datastore10a/install/
檔案已成功複製。
同樣地,您可以從ESXi將檔案複製到USB隨身碟,然後從此USB隨身碟將所需的檔案複製到虛擬機或另一台機器。
- 檢查虛擬機資料夾的內容:
ls -al /vmfs/volumes/datastore10a/Windows-VM/
- 將Windows-VM.vmx配置檔從ESXi資料存儲複製到USB隨身碟:
cp /vmfs/volumes/datastore10a/Windows-VM/Windows-VM.vmx /vmfs/volumes/NO\ NAME/
- 檢查文件是否已複製到 USB 隨身碟:
ls -al /vmfs/volumes/NO\ NAME/
在完成在 ESXi 主機上複製文件後,您可以將 USB 隨身碟退出,並在 ESXi 主機上啟動 USB 仲裁器服務。然後,您可以插入 USB 隨身碟並使用主機連接的 USB 通過功能將 USB 隨身碟附加到虛擬機。
閱讀有關 ESXi 的 USB 通過 以及將插入 ESXi 主機的 USB 存儲設備連接到存放在 ESXi 主機上的 VM 的更多信息。
使用 PowerCLI 來將文件傳輸到 VMware VMs
從 VM 傳輸文件到主機的另一種方法是使用 PowerCLI 命令(cmdlets)。必須在 VM 內的客戶操作系統中安裝 VMware Tools。這些 PowerShell cmdlets 使用 VMware Tools 將文件從/到存放在 ESXi 主機上的 VM 進行複製。因此,如果在源/目標 ESXi 主機上的 VM 內運行命令,則不需要網絡。
要在 VM 之間複製文件,可以使用 Copy-VMGuestFile cmdlet 和 vSphere PowerCLI 中的其他 cmdlets。
- 連接到一個 ESXi 主機或 vCenter Server。在這個示例中,我們連接到一個 ESXi 主機。
Connect-VIServer 192.168.101.201
- 為了避免證書警告,執行以下命令:
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
Copy-VMGuestFile(從本地> ESXi VM)
使用以下命令將文件從本地機器(PowerCLI正在運行的機器)複製到 ESXi 主機上的遠程 VM:
Copy-VMGuestFile -Source "c:\temp\test.txt" -LocalToGuest -VM Windows-VM -Destination "c:\temp-VM" -GuestUser user1 -GuestPassword Password
其中:
c:\temp\test.txt is the source file that we want to copy from the local machine
-LocalToGuest是方向(從本地機器到在 ESXi 上運行的目標 VM 上的 guest OS)
-VM Windows-VM是目標 VM 名稱的定義
c:\temp-VM is the destination folder on the destination VM (where we want to store a file copy)
user1 是目的虛擬機器(VM)上的訪客作業系統(OS)中的使用者名稱。此使用者必須可以存取所定義的目的地資料夾。
密碼 是此使用者的密碼。
我們忽略有關 VMware Tools 版本的警告,並檢查我們的 text.txt 檔案是否已複製。
我們可以看到我們的 test.txt 檔案,其大小為 29 個位元組,已成功複製到在 ESXi 主機上運行的 Windows XP VM 中。
Copy-VMGuestFile(ESXi VM > 本機)
現在,讓我們將一個檔案從 VM 的訪客 OS 複製到執行命令的機器的本機目錄:
Copy-VMGuestFile -Source "c:\temp-VM\test2.txt" -GuestToLocal -Destination "c:\temp" -VM Windows-VM -GuestUser user1 -GuestPassword Password
其中:
-Source “c:\temp-VM\test2.txt” 是在運行 ESXi 的 VM 上源檔案的路徑
-GuestToLocal 是方向(從 ESXi VM 的訪客 OS 到執行命令的本機機器)
“c:\temp” 是本機機器上目的地資料夾的路徑
user1 是目的虛擬機器上的訪客作業系統中的使用者名稱。此使用者必須可以存取所定義的目的地資料夾。
密碼 是訪客 OS 中此使用者的密碼
您可以看到使用 Copy-VMGuestFile cmdlet 的範例命令:
get-help Copy-VMGuestFile -examples
使用 Copy-DatastoreItem
PowerShell cmdlet Copy-DatastoreItem 用於將文件從/復制到 ESXi datastore。 有2種方法可以使用此 cmdlet 將文件復制到 VMware ESXi datastore:
- 如果在 VM 內部的 Windows 客戶端上安裝了 PowerCLI,則可以運行命令將文件直接從 ESXi datastore 復制到 VM,反之亦然。
- 如果無法在位於 ESXi 主機上的虛擬機器上安裝 PowerCLI,則可以從本地 Windows 機器上運行 PowerCLI 命令,在 ESXi datastore 上將文件從 ESXi datastore 復制到本地機器,然後使用 Copy-VMGuestFile 命令將這些文件從本地機器復制到 VM 以及 Copy-VMGuestFile。
您必須連接到 ESXi 伺服器或 vCenter 伺服器。 您可以使用以下命令執行此操作:
ViConnect <server_name_or_IP>
我們直接連接到 ESXi 主機。
讓我們將 VM 配置文件從數據存儲庫復制到當前 Windows 機器(我們在其中運行這些命令的機器 – 它也可以是位於 ESXi 主機上的 VM):
- 獲取有關數據存儲庫的信息:
Get-Datastore "datastore10a"
- 獲取 ESXi datastore 對象:
$datastore = Get-Datastore "datastore10a"
- 建立一個新的 PowerShell 驅動器,命名為 ds:,將其對應到 $datastore:
New-PSDrive -Location $datastore -Name ds -PSProvider VimDatastore -Root "\"
- 將您的數據存儲設置為當前位置:
Set-Location ds:\
- 要列出所選目錄中的文件和目錄,請使用以下命令:
Get-ChildItem
- 您可以將 VM 目錄設置為新位置。在我們的情況下,此目錄為 Windows-VM
Set-Location "Windows-VM"
-
Copy-DatastoreItem -Item ds:\Windows-VM\Windows-VM.vmx -Destination c:\temp
Where:
ds:\Windows-VM\Windows-VM.vmx 是要複製的檔案的路徑,而 ds:\ 是已定義的資料存放區的快捷方式(本例中是 datstore10a)。
- 如果您已連接到 vCenter(而不是像我們在此範例中所做的那樣連接到特定的 ESXi 主機),您可以使用以下命令,並定義在 vCenter 數據中心中的一個資料存放區,從 ESXi 資料存放區複製檔案到本地機器上的文件夾:
Copy-DatastoreItem vmstore:\Datacenter1\datastore10a\Windows-VM\Windows-VM.vmx c:\temp\
-
複製-數據存儲項目 -項目 c:\temp\darwin.iso -目標 ds:\install\
我們將darwin.iso(這是帶有macOS的VMware工具映像)從Windows機器複製到ESXi數據存儲的安裝目錄。
- 如果您連接到vCenter,您可以使用此命令將文件從本地Windows機器複製到遠程ESXi主機上的數據存儲:
複製-數據存儲項目 c:\temp\darwin.iso -目標 vmstore:\Datacenter1\datastore10a\install\
您可以使用這些PowerCLI命令和創建PowerShell腳本來從VM傳送文件到主機,反之亦然。
在VMware Workstation中從VM複製文件到主機的命令
如果您在Windows或Linux主机上使用VMware Workstation(一种类型2的hypervisor),或者在macOS上使用VMware Fusion,您也可以使用命令行界面从VM复制文件到主机,反之亦然。您可以使用vmrun命令行工具来操作虚拟机。命令的语法对于Windows、Linux和macOS(VMware Fusion)是相同的。在本教程中,我们使用的是在Windows 10上的VMware Workstation 15。
- 进入VMware Workstation目录:
cd "C:\Program Files (x86)\VMware\VMware Workstation\"
- 使用以下命令将文件从VM内的guest OS复制到本地Windows主机:
CopyFileFromHostToGuest <vmx文件路径> <guest内路径> <主机上路径>
在我们的情况下,确切的命令是:
vmrun copyFileFromGuestToHost d:\virtual\WinServer2019\WinServer2019.vmx "c:\temp\test.txt" "c:\temp\copied\"
-
在哪裡:
d:\virtual\WinServer2019\WinServer2019.vmx 是從中複製文件的虛擬機器的虛擬磁碟。
c:\temp\test.txt 是存儲在虛擬機器的虛擬磁碟上的文件;這是一個我們複製的文件。
c:\temp\copied\ 是在主機機器上存儲文件副本的目錄。
確保在設置路徑時使用反斜杠 \ 字符。 我們從虛擬機器複製了一個文本文件 test.txt 到主機上。
或者,您可以通過在命令中定義憑據來運行命令:
vmrun -T ws -gu Administrator -gp Password000 copyFileFromGuestToHost d:\virtual\WinServer2019\WinServer2019.vmx "c:\temp\test.txt" "c:\temp\copied\"
使用以下命令来将文件从主机机器复制到VM(反向操作):
CopyFileFromHostToGuest <vmx 文件路径> <主机路径> <虚拟机路径>
在这个例子中,我们的特定命令是:
vmrun copyFileFromHostToGuest d:\virtual\WinServer2019\WinServer2019.vmx "c:\temp\test3.txt" "c:\temp\test3-copy.txt"
如何使用 SSH 和 SCP 传输文件
SSH(Secure Shell)是一种常见的用于安全管理远程主机的协议,依赖于加密。SCP 是一种依赖于 SSH 的协议,用于在网络上安全地复制文件。您可以使用 SCP 从虚拟机传输文件到主机,特别是如果 Linux 在虚拟机上运行。在 Linux 机器和 ESXi 上启用 SCP 和 SSH 服务器只需几个步骤。
如何在 ESXi 中启用 SSH 服务器
必须在 ESXi 主机上启用 SSH 服务器服务,以使用此方法并将文件传输到 VMware ESXi 和从 ESXi 中传输文件。
- 要在 VMware Host Client 中启用 SSH 服务器,请转到 主机 > 管理 > 服务 并启动 TSM-SSH 服务。
-
- 進入導覽窗格中的網絡,選擇防火牆規則選項卡,並選擇SSH 客戶端。
- 點擊操作> 啟用以啟用防火牆規則。
- 要檢查主機之間的SSH連接,您可以在ESXi主機上運行以下命令:
nc -z 192.168.101.202 22
其中:
192.168.101.202是遠程主機的IP地址。
22是SSH連接的端口號(22是默認端口號)。
通過SCP在網絡上複製文件的scp命令的通用語法:
scp [OPTION] [user]@[SRC_HOST]:path_to_file1 [user]@[DEST_HOST]:path_to_file2
[user]@[SRC_HOST]:path_to_file1 – 源文件
[user]@[DEST_HOST]:path_to_file2 – 目標文件
-P 指定 SSH 連接的埠號(如果埠號不是 22,請使用此標誌)。
以下,我們解釋實際示例。
如何通過 SCP 將本地文件複製到遠程機器
要通過 SCP 將本地文件複製到遠程機器,請使用如下命令:
scp file.txt remote_username@remote_host_ip:/remote/directory
從 Linux
讓我們將 LinuxDir.txt 文件從本地 Ubuntu Linux 機器(也可以是虛擬機)複製到一台 ESXi 主機上,通過網絡使用 SCP。遠程 ESXi 主機上的目的地位置是 datastore10a 數據存儲的 install 目錄。遠程 ESXi 主機的 IP 地址為 192.168.101.201。
在我們的情況下,從本地 Linux 機器複製文件到遠程 ESXi 主機的命令是:
scp LinuxDir.txt [email protected]:/vmfs/volumes/datastore10a/install/
您可以使用新文件名將複製的文件存儲在目的地機器上:
scp LinuxDir.txt [email protected]:/vmfs/volumes/datastore10a/install/LinuxDir-copy.txt
使用 -r 標誌來複製包含所有文件的目錄:
scp -r /local/directory [email protected]:/remote/directory
從ESXi
您可以在ESXi主機上使用scp命令。命令行中的scp語法對於Linux和ESXi是相同的。遠程機器上必須配置SSH服務器。
讓我們登錄到ESXi主機(192.168.101.201)並將包含所有文件的install目錄複製到遠程Linux機器(192.168.101.210)上
scp -r /vmfs/volumes/datastore10a/install/ [email protected]:/home/user1/
如果SSH服務器監聽的端口不是22,請使用-P參數;例如,如果SSH端口號是8022,則命令為:
scp -P 8022 -r /vmfs/volumes/datastore10a/install/ [email protected]:/home/user1/
如何通過SCP從遠程機器複製文件到本地機器
SCP對於從遠程機器到本地機器的文件複製很方便,這也允許您將文件從虛擬機傳輸到主機。下面我們將解釋如何在Linux和ESXi中運行相應的命令。
將文件複製到本地Linux機器
我們將使用SCP將文件從遠程ESXi主機複製到當前Linux機器。為此,使用以下命令:
scp remote_username@remote_ip_address:/remote/file.txt /local/directory
讓我們從遠端的ESXi伺服器將darwin.iso檔案複製到Linux機器上指定的家目錄:
scp [email protected]:/vmfs/volumes/datastore10a/install/winPreVista.iso /home/user1/
將檔案複製到本地ESXi主機
如果我們登入到一個ESXi主機,我們可以執行以下命令,從遠端的Linux機器將一個VM檔案複製到本地ESXi主機上的資料存儲中。讓我們透過網路使用SCP從Linux機器將VM_file.txt複製到ESXi資料存儲的目錄:
scp [email protected]:/home/user1/VM_file.txt /vmfs/volumes/datastore10a/install/
如何在兩個遠端機器之間複製檔案
有SCP命令可用於從一個遠端機器複製檔案到另一個遠端機器,有時透過當前本地機器複製資料,有時則不需要。命令語法如下:
scp [email protected]://directory/file.txt [email protected]://directory/
使用以上命令可直接從一個遠端主機直接將資料傳送到另一個遠端主機(而不經過當前本地機器)。如果要將流量路由通過您正在運行命令的本地機器,請使用-3標誌。
注意:如果兩個遠端主機上的憑證相同,請使用此命令。
在本地Linux機器上運行的命令示例,從遠端ESXi主機(192.168.101.202)複製檔案(vim.v00)到本地ESXi主機(192.168.101.201):
scp [email protected]://vmfs/volumes/BOOTBANK1/vim.v00 [email protected]://vmfs/volumes/datastore10a/install/
如果您看到主機密鑰驗證失敗錯誤,這意味著其中一個主機上沒有存儲主機密鑰。如果錯誤是由於在遠程伺服器上更改主機密鑰而引起的,請刪除存儲在 ~/.ssh/known_hosts 中當前遠程主機的舊主機密鑰
刪除舊主機密鑰的命令是:
ssh-keygen -R 主機名稱或IP地址
例如,在 192.168.101.202 上執行該命令以刪除遠程主機 192.168.101.201 的舊主機密鑰:
ssh-keygen -R 192.168.101.201
在命令中使用-3以通過本地機器複製文件的示例:
scp -3 [email protected]://vmfs/volumes/BOOTBANK1/vim.v00 [email protected]://vmfs/volumes/datastore10a/install/
此目的的替代命令是:
scp -o "ForwardAgent yes" [email protected]://vmfs/volumes/BOOTBANK1/vim.v00 [email protected]://vmfs/volumes/datastore10a/install/
如何通過SCP從Windows複製文件
您也可以在Windows中將文件複製到虛擬機器或ESXi主機。為此,您需要使用SCP客戶端,如WinSCP,它是一個用戶友好且方便的圖形界面。您可以免費下載WinSCP。
- 執行 WinSCP。
- 選擇一個協議,例如,SFTP。
- 輸入遠端主機的主機名稱和端口號碼,例如 ESXi 主機或 Linux 機器。
- 輸入遠端機器的使用者名稱和密碼。
- 點擊 登錄。
在此示例中,我們正在連接到遠端 ESXi 主機。
- A notification message is displayed:
繼續連接到未知的伺服器並將其主機金鑰添加到快取中?
點擊 是 以繼續。
- 一旦連接,您將看到帶有兩個面板的指揮官風格視窗。一個面板代表本地機器上的目錄,另一個面板代表遠端機器上的目錄。您可以通過在這兩個面板之間複製文件來在本地主機和遠端主機之間複製文件。
您可以使用WinSCP从连接的远程ESXi主机的数据存储中复制文件到远程Windows虚拟机或物理机,使用Windows机器上的SMB共享。
但是,您无法在WinSCP面板中输入直接共享路径(例如,\\192.168.101.117\c$)。您只能选择磁盘驱动器字母。要绕过此限制,请在Windows资源管理器中连接到文件共享并将此文件共享映射为网络驱动器。分配一个驱动器字母,例如,S:,如本示例中所做的,以连接到192.168.101.211上的共享文件夹。
现在,我们可以在WinSCP左窗格的下拉菜单中选择S:作为网络驱动器,选择远程ESXi服务器的数据存储中所需的文件或目录,并将文件复制到两个方向。
使用NFS共享
您可以使用NFS共享将文件从ESXi数据存储传输到VM,反之亦然。ESXi不支持SMB共享(适用于Windows的原生支持)。它支持NFS共享(适用于Linux的原生支持)并附加NFS共享作为数据存储。使用此功能,您可以使用以下方法之一在ESXi和Linux机器之间传输文件:
方法1:
- 在Linux VM上配置NFS服务器和NFS共享
- 将NFS共享附加为ESXi的数据存储
- 从VM复制文件到ESXi数据存储,反之亦然
方法2:
- 在物理Linux机器或NAS上配置NFS服务器
- 連接 NFS 共享作為 ESXi 的數據存儲
- 在 Linux VM 上連接 NFS 共享
- 從 Linux VM 複製文件到 NFS 共享,然後將這些文件複製到 ESXi 主機。從 ESXi 主機複製文件到 NFS 共享,並將這些文件從 NFS 共享複製到 Linux VM。
閱讀 NFS vs SMB 比較,以了解更多關於這些文件共享協議的信息。
在 Linux 上配置 NFS 共享
我們在本教程中使用 Linux Ubuntu 20.04。我們作為常規用戶登錄到 Linux,需要時使用 sudo 獲取 root 權限運行命令。執行以下步驟安裝 NFS 服務器並配置 NFS 共享。
- 更新 Linux 中的存儲庫樹:
sudo apt-get update
- 在 Linux 上安裝 NFS 服務器軟件包:
sudo apt-get install nfs-kernel-server -y
- 創建一個目錄(導出目錄),它將在 NFS 服務器上共享:
sudo mkdir -p /srv/nfs/share1/
-
sudo chown -R nobody:nogroup /srv/nfs/share1/
sudo chmod 0777 /srv/nfs/share1/
The nobody 是一個虛擬使用者,用來代表具有最少權限且無殼訪問權限的使用者。 nogroup 群組的目的與 nobody 使用者類似。
- 配置 exports 文件以分享所創建的目錄。
sudo nano /etc/exports
或
sudo vim /etc/exports
-
/srv/nfs/share1/ 客戶端IP(rw,sync,no_subtree_check)
在我們的情況下,允許 ESXi 主機 IP 地址的行是:
/srv/nfs/share1/ 192.168.101.201(rw,sync,no_subtree_check)
您可以通過添加以下行來允許子網中所有主機的訪問:
/srv/nfs/share1/ 192.168.101.0/24(rw,sync,no_subtree_check)
您可以添加下一行以允許其他主機(IP 地址)的訪問。
保存更改並退出文本編輯器。
- 要檢查數據是否寫入文件,您可以使用以下命令:
cat /etc/exports
- 使用以下命令應用新配置:
sudo exportfs -a
- 確保具有NFS伺服器的Linux機器上的防火牆允許訪問。您可以使用如下命令授予對特定IP地址的訪問權限:
sudo ufw allow from IP to any port nfs
在我們的情況下:
sudo ufw allow from 192.168.101.201 to any port nfs
允許來自整個子網的主機訪問:
sudo ufw allow from SUBNET to any port nfs
在我們的情況下,命令將是:
sudo ufw allow from 192.168.101.0/24 to any port nfs
- 您可以使用以下命令檢查防火牆狀態:
sudo ufw status
- 重新啟動NFS伺服器以使配置更改生效:
sudo systemctl restart nfs-kernel-server
- NFS共享已在Linux中配置完成。
- 將檔案從 Linux 機器的任何目錄複製到通過 NFS 共享的目錄。我們將 VM_file.txt 複製到我們的 NFS 共享,然後檢查該目錄的內容:
cp VM_file.txt /srv/nfs/share1/
ls -al /srv/nfs/share1/
在 ESXi 中掛載 NFS 資料存儲
在配置 NFS 共享後,您需要在 ESXi 中添加 NFS 資料存儲。在本例中,我們使用 VMware Host Client 來執行此操作。
進入存儲 > 資料存儲,然後點擊新資料存儲。
開啟新資料存儲精靈。
- 選擇掛載 NFS 資料存儲。點擊下一步繼續。
- 提供NFS掛載詳細資訊:
- 名稱:NFS-share(顯示為資料存儲名稱的名稱)
- NFS伺服器:192.168.101.210
- NFS共享:/srv/nfs/share1/
- NFS版本:NFS4<>/li
NFS4的使用者名稱和密碼是可選的。我們將這兩個字段保留為空。
- 準備完成。檢查您的配置,如果一切正確,點擊完成。
從VM複製文件到主機
NFS資料存儲成功掛載。您可以在儲存> 資料存儲中檢查。
現在,我們可以將存儲在NFS共享上的VM中的文件複製到本地ESXi資料存儲(從VM到主機的文件傳輸)。
- 點擊資料存儲瀏覽器。
- 選擇您在資料存儲瀏覽器中的 NFS datastore(在我們的情況下是 NFS-share)。在 NFS datastore 中瀏覽所需的檔案。選擇所需的檔案,然後點擊 複製。
- 選擇目的地。選擇目標 datastore 中您想要存儲複製檔案的所需位置(在我們的情況下是 datastore10b)。點擊 複製。
或者,您可以在 ESXi 伺服器的命令行中複製所需的檔案:
cp /vmfs/volumes/NFS-share/VM_file.txt /vmfs/volumes/datastore10b/VM_file-copy.txt
使用 VMware Web 介面下載/上傳檔案
您可以使用 VMware 主机客户端或 VMware vSphere Client 上载/下载文件到/从 ESXi 数据存储中。 Web 接口可从安装了 Web 浏览器且与 ESXi 主机连接的任何物理或虚拟机器上访问。 因此,如果客户操作系统具有 GUI,则可以直接从 VM 打开此 Web 接口,或者使用任何本地机器作为中间机器,以在 VM 和主机之间传输文件。
有一种替代但更复杂的方法可将文件传输到 VMware ESXi 从 VM:
- 将 VM 的虚拟磁盘下载到本地机器或另一台机器。
- 从此 VM 虚拟磁盘(.vmdk 和 –flat.vmdk)中提取所需文件到本地机器。 或者,如果安装了 VMware Workstation,您还可以将虚拟磁盘挂载到虚拟驱动器。
- 使用上述方法之一(在 VMware 主机客户端、vSphere Client 或 SCP 客户端等)将提取的文件或从挂载的虚拟磁盘上传到 ESXi 主机的数据存储中。
阅读有关如何从 VMDK 虚拟磁盘中提取文件的详细博客文章。
使用ISO檔案將資料傳輸至VM
如果VM的網路連接不可用,您可以使用ISO映像檔案將文件傳輸到VMware VM:
- 使用Ultra ISO等軟體在Windows上創建ISO映像。
- 在本地機器或其他機器上將所需的文件寫入ISO映像。您可以從ESXi複製文件並將其寫入ISO映像。
- 使用VM的虛擬CD/DVD驅動器將ISO映像文件掛載到VM(您可以直接從本地機器掛載ISO文件,或在上傳ISO文件到ESXi數據存儲之前執行此操作)。使用VMware Host Client、VMware vSphere Client、VMware Workstation或VMware Remote Console將ISO文件掛載到ESXi VM。
此方法不能用於將文件從VM傳輸到主機,因為VM在只讀模式下使用虛擬CD/DVD磁盤。
結論
有多種方法可以從主機複製文件到虛擬機,反之亦然。其中一些方法需要網路連接,而有些方法即使網路不可用也能工作。您可以使用適合您場景的方法,並結合這些方法。記得備份您的VM以避免數據丟失。使用NAKIVO Backup and Replication,您可以保護VMware vSphere中的VM,並直接從VM備份恢復單個文件。
Source:
https://www.nakivo.com/blog/3-simple-ways-to-transfer-files-from-a-vm-to-a-host/