
我遇到以下問題:我們有一個專用(裸機)硬體伺服器(Debian 10),我們無法直接對其進行實體存取。現在我想將該伺服器上的所有資料和應用程式傳輸到虛擬機器並在 KVM 主機上運行。
為什麼我不直接在虛擬機器中安裝應用程式?這個應用程式的安裝(Perl 的東西和 Apache Web 伺服器,在同一台伺服器上運行大約 10 年)是如此複雜,以至於你寧願破壞一些東西。所以沒人敢這麼做。但現在我們必須採取行動,因此我們需要某種明智的解決方法。
dd
我曾想過關閉所有 Perl 和 Apache 服務並透過網路傳輸硬碟- 但問題是目標 KVM 主機的空間比sda
裸機伺服器的空間小(最終它使用的空間比裸機伺服器的空間少)可用,sda
只是尺寸過大)。
第二種選擇是在 KVM 上安裝具有完全相同版本號的相同軟體包(根據dpkg --list
),禁用裸機伺服器上的所有服務(以保持資料一致),然後將/etc
、以及/var/
其他/usr
重要的內容放在將裸機伺服器打包成tarball,然後將其解壓縮到KVM 上。當然我也可以透過rsync來做到這一點,但原理或多或少是相同的。
您對最後一個想法有何看法?
你還有其他建議嗎?
您將如何進行這樣的任務?
答案1
作為安克斯讓我這樣做,我會回答我自己的問題:)我的解決方案並不那麼複雜安克斯的,但我還是想跟你分享。
我實際上所做的是,我首先檢查兩個檔案系統上的索引節點和區塊大小,以確保它們彼此相同(使用tune2fs
)。
然後我關閉了所有服務,除了像 SSHd 這樣的存在性服務。
完成此操作後,我決定使用apt-clone
而不是將套件和二進位檔案從一台電腦複製到另一台電腦:
# on the physical machine:
apt-get install apt-clone
apt-clone clone packages
# on the virtual machine:
apt-get install apt-clone
apt-clone clone packages.apt-clone.tar.gz
# check on the VM:
vimdiff <(dpkg --list) physical_mchine_packages.txt
接下來,我使用 同步資料rsync
。我同步的目錄:
/root
/etc
(我排除了諸如hostname
、fstab
、/default/grub
以及/network/interfaces
許多與 kernel/initram/lvm 相關的其他目錄的文件)/usr
(不是萬能的,取決於你使用的軟體)/var
(不是萬能的,取決於你使用的軟體)
最後一步是檢查舊實體機的主機名稱或 IP 位址是否已放入某些設定檔中:
find . ! \( -path "*proc*" -o -path "*sys*" -o -path "*var/mail*" -o -path "*var/spool/mqueue*" -o -path "*var/log*" \) -type f -exec grep -iH -- "x.x.x.x" {} \;
就這樣。 Everythink 現在可以在虛擬機器中運作。我希望我能幫助任何人:)
答案2
(這個答案討論了區塊設備級或者,如果您想在遷移到虛擬時保持分區和啟動管理器配置完整,這是最合適的)
你所描述的問題在實際上並不一定會出現。我偶然最近避免了這個:
但問題是目標KVM主機的空間小於裸機伺服器的sda空間
在一個檔案中建立、循環掛載和編輯分割區是完全有效的。疏比主機檔案系統大(甚至大得多)的檔案 - 只要您不執行任何實際將資料寫入檔案中跳過區域的操作。
我所做的大概是fstrim / && systemctl stop appserver && mount -o remount,ro / && sync && dd bs=64k if=/dev/nvme0n1 | ssh vmhost dd bs=64k conv=sparse of=..
。然後在虛擬機器主機上,losetup
我使圖像可供使用fdisk
並resize2fs
更改其(虛擬)大小。由於圖像的大部分末端已經只包含零,因此我對它的操作並沒有增加它的實際大小太多。
這種最簡單方法的最壞情況空間需求將是舊伺服器資料內容的 3 倍。一次複製稀疏映像,一次調整大小(即將其所有內容移動到開頭,而不在末尾打新孔),然後再次將原始磁碟映像轉換為格式(或移動隨後的文件)基於映像到其自己的邏輯卷)由虛擬機器管理使用。
需要注意的一些事項:
- 您執行此操作的方式應取決於計劃虛擬化的軟體/設定(例如,如果您目前的系統透過 EFI 啟動,但您的虛擬化不喜歡這樣做,那麼執行此操作有何意義?磁碟複製當你無論如何都必須重做引導程式相關的東西?
- fstrim(尤其是與損壞的 SSD 或 RAID 結合使用時)可能會造成資料遺失的危險。如果您不確定您的設定是否安全,請執行以下操作寫出一個僅包含空位元組的大文件另一種選擇 - 我們只關心未使用的區域是否可偵測(被清除),而不關心磁碟是否感知。
- 只需將 root 唯讀即可完成工作,但會得到結果就好像伺服器在虛擬機器上重新啟動之前就崩潰了一樣。如果您在停止應用程式後複製映像,這可能是夠好了:畢竟您希望您的伺服器可以從崩潰中繼續。