
簡介這套工具集由VMware官方提供是適用于Ubuntu及其他Linux發(fā)行版的VMware Tools 10.3.2安裝包構(gòu)建編號9925305面向在VMware Workstation/ESXi等平臺使用虛擬機的運維人員與開發(fā)者。安裝后可顯著提升虛擬硬件性能、圖形顯示、鼠標切換與文件共享體驗尤其適合需要改善虛擬機卡頓、分辨率異常或無法拖放文件的場景同時可解決時鐘漂移與電源聯(lián)動問題。壓縮包約52.92MB內(nèi)含1491個文件以.o目標文件、.so動態(tài)庫、.properties配置、.symvers符號表及shell腳本為主并包含vmware-tools-distrib目錄與vmware-install-tools.pl安裝腳本整體結(jié)構(gòu)完整便于直接部署。目前已有1433人學習下載。借助該工具包用戶可完成內(nèi)核模塊加載、3D圖形加速、共享剪貼板、拖放傳輸及電源聯(lián)動等配置讓Ubuntu虛擬機獲得接近物理主機的操作體驗。1. 先搞清楚手里這個 tar 包到底是什么1.1 VMware Tools 10.3.2 解決了什么問題拿到VMwareTools-10.3.2-9925305.tar這個名字第一反應(yīng)是這不就是一個壓縮包嗎解壓然后就裝唄。很多人會直接tar -zxvf結(jié)果報錯然后開始懷疑人生。這個文件其實是在 vSphere 或 Workstation 里給 Linux 虛擬機安裝 VMware Tools 用的標準安裝包里面的核心是vmware-tools-distrib目錄裝著安裝腳本、內(nèi)核模塊源碼、驅(qū)動二進制、以及一系列輔助工具。10.3.2 這個版本發(fā)布于 2020 年左右對應(yīng)的是當時主流 ESXi 6.7/7.0 和 Workstation/Player 15.x。如果你手頭還有跑著老系統(tǒng)的虛擬機比如 CentOS 7、Ubuntu 18.04、Debian 9這個版本裝上去完全沒問題。VMware Tools 干了什么表面看是讓虛擬機支持剪貼板互通、鼠標無縫進出、窗口分辨率自適應(yīng)、拖拽文件深層看是安裝了一套虛擬化驅(qū)動包括網(wǎng)絡(luò)、顯示、鼠標、內(nèi)存管理模塊這些模塊直接決定了虛擬機在宿主上的運行效率和穩(wěn)定性。很多人覺得裝不裝無所謂直到發(fā)現(xiàn)拷貝大文件速度上不去、屏幕分辨率固定 800x600、vCenter 里看不到 IP 地址和資源狀態(tài)才意識到這東西還真不能少。1.2 為什么官方 Linux 版要打包成 tarWindows 版的 VMware Tools 是一個.exe安裝程序雙擊就完事。Linux 世界不太一樣發(fā)行版太多依賴庫、內(nèi)核版本、包管理器千差萬別官方直接給你一個通用的 tar 包讓你到目標機器上去編譯、去適配。這個 tar 包沒有用 gzip 二次壓縮后綴就是.tar說明它只是歸檔不是壓縮包所以內(nèi)部文件結(jié)構(gòu)是完整的權(quán)限也保留了。因此解壓時必須保證當前用戶有權(quán)限寫入目標目錄并且不會丟失可執(zhí)行權(quán)限。我一般習慣用 root 執(zhí)行或者 sudo 解壓到/tmp或者/root。還有一個容易被忽略的點tar 包里的安裝腳本vmware-install.pl是 Perl 腳本依賴 Perl 解釋器和一堆編譯工具如果系統(tǒng)是精簡安裝沒有裝perl、gcc、make、linux-headers就算解壓成功安裝也會卡在半路。這不是 tar 的鍋但很多人會誤以為是解壓或安裝包壞了其實宿主環(huán)境沒準備好。2. 解壓 VMwareTools 之前這些 tar 命令容易踩坑2.1 看到 .tar 就加 -z這是最常見的翻車現(xiàn)場很多人在解壓時會順手打出tar -zxvf VMwareTools-10.3.2-9925305.tar結(jié)果終端直接輸出gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now這個報錯的含義很簡單你告訴 tar 這是一個 gzip 壓縮文件先解壓再解開歸檔但文件本身只是普通歸檔沒有經(jīng)過 gzip 壓縮gzip 程序讀到的頭不對于是罷工。正確的命令是tar -xvf VMwareTools-10.3.2-9925305.tar-z參數(shù)對應(yīng) gzip 壓縮-j對應(yīng) bzip2-J對應(yīng) xz。文件后綴名就是最直觀的信號.tar用-xvf.tar.gz或.tgz用-zxvf.tar.xz用-Jxvf。我見過不少同事在批量安裝時因為圖省事統(tǒng)一復(fù)制一條帶-z的命令結(jié)果在.tar文件上反復(fù)翻車。2.2 解壓前先看看包里面有什么拿到一個來路不明或者不熟悉的 tar 包最穩(wěn)妥的操作不是直接解壓而是先列出內(nèi)容清單tar -tf VMwareTools-10.3.2-9925305.tar-t是 list 模式只查看歸檔里的文件名和目錄結(jié)構(gòu)不會真正釋放文件。這樣你能立刻確認是不是你要的那個安裝包、頂層目錄叫什么、體積大概多大。尤其是接手別人的服務(wù)器不確定這個包是不是帶惡意腳本先看內(nèi)容再決定解不解壓是個好習慣。VMware 官方包頂層目錄通常是vmware-tools-distrib/如果看到的是一個完全陌生的頂層目錄你就要警惕了。如果想解壓到指定目錄用-C參數(shù)tar -xvf VMwareTools-10.3.2-9925305.tar -C /tmp/這樣會把vmware-tools-distrib解壓到/tmp/vmware-tools-distrib而不是在當前目錄里完全鋪開。安裝完再清理也方便。2.3 理解 tar -zcvf、-zxvf、-tf 和管道玩法熱詞里出現(xiàn)了tar -zcvf和tar -zxvf這兩個是平時最常用的。-c是創(chuàng)建歸檔-v是顯示過程-f指定歸檔文件名。組合起來tar -zcvf backup.tar.gz /home/user/data/意思是把/home/user/data/目錄打成backup.tar.gz先歸檔再用 gzip 壓縮。-x是展開-z先解壓再還原。而tar -tf只是查看不落地。還有一個容易被忽略的組合tar -xvf archive.tar -C /path和tar -cvf archive.tar file1 file2之間的靈活搭配。熱詞里還有tar|xargs常用于批量解壓多個包后對文件做后續(xù)處理ls *.tar | xargs -I {} tar -xf {}你也可以在解壓后直接管道處理比如把解壓日志通過grep過濾掉無用的權(quán)限告警。這個后面會專門講。3. 從 tar 包到能用的 VMware Tools完整安裝鏈路3.1 掛載 Tools 鏡像把 tar 包弄進虛擬機在虛擬機管理界面里右鍵虛擬機選擇Install VMware Tools或者 Guest - Install/Upgrade VMware Tools這個操作會在虛擬光驅(qū)里掛載一個linux.iso或類似鏡像。然后進到系統(tǒng)里mount /dev/cdrom /mnt cp /mnt/VMwareTools-10.3.2-9925305.tar /tmp/如果提示mount: no medium found說明鏡像沒有掛載成功去 VM 設(shè)置里確認 CD/DVD 設(shè)備狀態(tài)或者執(zhí)行mount /dev/sr0 /mnt。有些系統(tǒng)把光驅(qū)識別成/dev/sr0而不一定是/dev/cdrom可以lsblk看一下。很多教程會建議直接在/mnt下解壓但我建議先復(fù)制到/tmp。因為安裝過程中會去讀解壓出來的文件如果光驅(qū)偶爾出現(xiàn) I/O 問題安裝會中斷復(fù)制到本地磁盤更穩(wěn)。復(fù)制完記得umount /mnt把光驅(qū)釋放掉否則虛擬機的 CD/DVD 一直被占用。3.2 解壓和安裝腳本的兩種姿勢進入/tmp后tar -xvf VMwareTools-10.3.2-9925305.tar cd vmware-tools-distrib/ ./vmware-install.pl腳本會逐個問你安裝路徑、是否啟用某些特性一路回車就按默認來。如果不想交互式回答可以加-d./vmware-install.pl -d-d是 default 模式所有選項都用默認值。批量部署時非常有用。安裝過程會先編譯內(nèi)核模塊再安裝 vmware-tools-services、vmware-tools-daemon、vmware-toolbox-cmd 等組件。整個過程耗時取決于系統(tǒng)性能和是否有編譯緩存一般三到五分鐘。成功后腳本會提示Enjoy your vmware-tools這時最好reboot一次確保模塊正確加載。不要偷懶不重啟內(nèi)核模塊加載順序這個東西靠服務(wù) restart 有時候會漏。3.3 安裝依賴與內(nèi)核模塊編譯的細節(jié)這條鏈路最容易卡住的是編譯內(nèi)核模塊。vmware-install.pl 會把幾個內(nèi)核模塊——vmxnet3、vmw_balloon、vmw_vmci 等——針對當前運行的內(nèi)核重新編譯所以系統(tǒng)里必須存在gcc make perl linux-headers-$(uname -r)CentOS 系執(zhí)行yum install -y gcc make perl kernel-develUbuntu/Debian 系執(zhí)行apt-get install -y gcc make perl linux-headers-$(uname -r)有個坑值得單獨提如果你升級過內(nèi)核重啟進了新內(nèi)核那/lib/modules/$(uname -r)/build指向的頭文件目錄必須和當前內(nèi)核完全匹配。很多人的機器只裝了老版本的 kernel-devel新內(nèi)核編譯時提示找不到build目錄。解決辦法就是先確認當前內(nèi)核版本再裝對應(yīng)版本的 headers再重新跑安裝腳本。如果不想重新跑整個安裝可以只執(zhí)行vmware-config-tools.pl重新配置并編譯模塊。4. 安裝過程中最常見的報錯與排查鏈路4.1 一次真實的編譯失敗排查我之前幫一臺 CentOS 7.6 虛擬機裝 Tools執(zhí)行./vmware-install.pl -d之后屏幕滾了幾行長日志最后報Failed to compile module vmw_balloon!粗看像是內(nèi)核模塊源碼有問題但 VMware 官方包一般不會犯這種低級錯誤。我先把日志里的錯誤行抓出來tail -100 /tmp/vmware-root/vmware-install*.log看到關(guān)鍵提示gcc: error: unrecognized command-line option ‘-fno-stack-protector-strong’。這個選項太新了系統(tǒng)自帶的 GCC 4.8 不認識。根本原因是 GCC 版本太老而模塊源碼用了新版編譯選項。解決辦法不是手動改源碼而是把 GCC 升級到高版本或者用 devtoolset 套裝切換到新版 gcc。那次我裝了devtoolset-8然后用高版本 gcc 重新執(zhí)行vmware-config-tools.pl問題消失。這類問題給你的啟發(fā)是遇到編譯報錯先看日志日志里往往直接寫了根因。別盲目搜網(wǎng)上復(fù)制粘貼的解決方案很多方案針對的是完全不同的內(nèi)核版本。4.2 幾個高頻報錯的定位路徑報錯信息根因解決辦法gzip: stdin: not in gzip format用-z解普通.tar包把-z去掉The path is not valid默認安裝路徑下已有殘留或權(quán)限不足清理舊版本換 root 執(zhí)行Please re-run this program as root當前用戶沒有 root 權(quán)限sudo 運行Your kernel was built with gcc version X, but you are using gcc version Y內(nèi)核編譯工具鏈和當前 gcc 不一致安裝匹配版本的 gcc 或用 CC 指定searching for a valid kernel header path... not found缺少 linux-headers安裝對應(yīng)版本 kernel-devel/headersUnable to restart vmware-tools-services服務(wù)腳本權(quán)限或 systemd 單元沖突查看服務(wù)狀態(tài)systemctl status vmware-tools注意第 1 個報錯和第 5 個報錯在不同階段出現(xiàn)但都常見。第 5 個報錯很多人以為是 tar 包解壓不完整其實根本原因是uname -r對應(yīng)的 headers 沒裝。用ls /usr/src/kernels/看看到底有哪些內(nèi)核源碼然后對比一下當前uname -r一目了然。4.3 日志文件和清理殘留VMware Tools 安裝日志默認寫在/tmp/vmware-root/里面有vmware-install*.log和vmware-modconfig*.log。排查問題第一件事就是看這些日志別靠猜。日志里會明確記錄每一步執(zhí)行結(jié)果包括 kernel header 探測、gcc 版本、編譯命令和失敗行。另外失敗的安裝會在系統(tǒng)里留下半成品。比如/usr/lib/vmware-tools、/etc/vmware-tools、/etc/init.d/vmware-tools等。重新安裝之前最好先把舊的卸載干凈vmware-install.pl -u如果卸載腳本也因為依賴問題跑不動可以直接刪除關(guān)鍵目錄和/etc/vmware-tools下的配置文件再重新解壓安裝。但這種方式要謹慎別刪了系統(tǒng)自帶的庫。老手一般會先把/etc/vmware-tools備份再動手清理。5. VMware Tools 裝完后怎么確認它真的在工作5.1 常用驗證命令清單安裝完并重啟后先跑幾個命令確認狀態(tài)vmware-toolbox-cmd -v vmware-toolbox-cmd stat speed vmware-toolbox-cmd stat hosttime第一個命令輸出版本號比如10.3.2.9925305 (build-9925305)第二個命令查看虛擬網(wǎng)卡速度第三個命令和宿主機時間同步。如果第一個命令提示找不到多半是沒裝vmware-toolbox或者安裝時選擇了不裝該組件。還可以看看內(nèi)核模塊是否加載lsmod | grep vmw正常情況下能看到vmw_balloon、vmw_vmci、vmxnet3之類的模塊。記住如果你用的是較新內(nèi)核官方老版本 Tools 的模塊可能在新內(nèi)核里已經(jīng)合并加載情況可能不太一樣。此時用vmware-toolbox-cmd -v依然是最直接的驗證方式。5.2 剪貼板、拖拽和分辨率自適應(yīng)的設(shè)置很多用戶裝完 Tools 發(fā)現(xiàn)剪貼板還是不互通原因在于虛擬機設(shè)置里沒開啟對應(yīng)能力。在 Workstation 里VM Settings Options Guest Isolation要勾選 Enable copy and paste 和 Enable drag and drop。在 vCenter 里類似的 Guest Operating System Mismatch 或 Isolation 設(shè)置也要打開。Tools 只是提供了底層接口配置不打開就不會生效。分辨率自適應(yīng)這塊裝了 Tools 后宿主機窗口變化虛擬機分辨率應(yīng)能自動匹配。如果不行檢查/etc/vmware-tools下的配置或者手動執(zhí)行vmware-resolution-set 1920 10805.3 老機器和老版本的取舍要不要換 open-vm-tools聊完 10.3.2 的安裝得認真說一句大實話如果你用的 Linux 發(fā)行版是 CentOS 7、Ubuntu 16.04、Debian 8官方倉庫里已經(jīng)有open-vm-tools大概率不需要再手動解壓這個 tar 包。open-vm-tools 是 VMware Tools 的開源版本由 VMware 維護直接通過系統(tǒng)包管理器安裝和系統(tǒng)的整合度更好也不用手動編譯內(nèi)核模塊。yum install -y open-vm-tools # 或 apt-get install -y open-vm-tools為什么還要保留這份 10.3.2 的 tar 包因為有些等保要求、離線環(huán)境、特殊定制的舊內(nèi)核必須使用官方閉源或者特定版本驅(qū)動的環(huán)境里tar 包安裝依然是兜底方案。兩種方式不要混裝先卸載其中一個再裝另一個否則vmware-toolbox-cmd和vmtoolsd的服務(wù)會互相沖突。我個人經(jīng)驗是能用 open-vm-tools 就用 open-vm-toolstar 包只留給特殊場景。6. 順手把 tar 命令這幾招也記牢6.1 壓縮、解壓、排除、提取單文件因為這篇文章標題就是 tar 包熱詞里也全是 tar 相關(guān)我順手把平時最高頻的幾個場景過一遍。創(chuàng)建 tar.gztar -zcvf project_backup.tar.gz /home/project/解壓到指定目錄tar -zxvf project_backup.tar.gz -C /tmp/restore/排除不需要的目錄比如 node_modules 和 .gittar -zcvf project_backup.tar.gz /home/project/ \ --exclude/home/project/node_modules \ --exclude/home/project/.git--exclude可以寫在 create 和 x 兩個模式中。解壓時排除特定文件用法類似tar -zxvf project_backup.tar.gz --exclude*.log -C /tmp/restore/只提取包里的單個文件tar -zxvf project_backup.tar.gz home/project/README.md注意這個路徑必須和壓縮包里的路徑一致必要的時候先tar -tf看路徑結(jié)構(gòu)。6.2 tar 配合 xargs 批量操作熱詞里有個tar|xargs實際場景非常常見你有一堆 tar 包想逐個解壓后進入解壓目錄執(zhí)行某條命令。比如ls *.tar | xargs -I {} tar -xf {}更復(fù)雜的批量處理比如解壓所有 tar.gz 后刪除解壓目錄里的.class文件ls *.tar.gz | xargs -I {} sh -c tar -zxf {} find . -name *.class -deletexargs 的-I指定占位符這樣每次替換成實際文件名。要注意的是文件名如果帶空格最好用-print0配合xargs -0否則會按空格切分。不過.tar包一般名字比較干凈這個坑遇到再說。6.3 關(guān)于 tar 包安全性的幾個提醒最后提醒三件事。一不要盲目解壓來路不明的 tar 包。tar 包里的文件如果帶著../../tmp/xxx這種路徑解壓時會寫入你意想不到的位置這就是所謂的 tar 路徑穿越。解壓前先用tar -tf看一下是否有異常路徑。為了避免這類問題也可以加參數(shù)tar -xzf archive.tar.gz --no-same-owner --no-same-permissions在共享環(huán)境中這能避免把別人包里的屬主和權(quán)限直接覆蓋到你的系統(tǒng)。二解壓時盡量使用-C指定目錄而不是在當前目錄直接鋪開。這樣清理時直接刪目錄就行不會污染你的工作目錄。我見過有人tar -xvf解壓后當前目錄多出幾十個文件追悔莫及。三tar 包不是越新越好。VMware Tools 這種純 tar 歸檔20 MB 可能就是完整版但如果一個號稱是VMware Tools的 tar 包體積只有幾十 KB那你應(yīng)該警惕它是不是偽裝成安裝包的腳本。用tar -tf看目錄結(jié)構(gòu)、用file命令看文件類型兩步就能篩掉大部分異常。拿這個 10.3.2 的包多折騰幾次tar 命令基本就熟了大半。我自己踩過的最大教訓就是別看見.tar就加z也別在自己不熟悉的系統(tǒng)上一路回車裝完就跑安裝日志和版本驗證這兩步永遠省不得。本文還有配套的精品資源點擊獲取