pve掛載NFS太慢,導致虛擬主機(vm)無法啟動
最近遇到pve重新啟動,所掛載的NFS連線太慢完成,導致pve找不到虛擬主機檔案,造成無法自動啟動錯誤。
解決方式就是讓pve的vm晚一點啟動,指令如下:(紅色為延遲多少秒vm才會開始啟動)
pvenode config set --startall-onboot-delay 60
最近遇到pve重新啟動,所掛載的NFS連線太慢完成,導致pve找不到虛擬主機檔案,造成無法自動啟動錯誤。
解決方式就是讓pve的vm晚一點啟動,指令如下:(紅色為延遲多少秒vm才會開始啟動)
pvenode config set --startall-onboot-delay 60
以資安角度, 24小時網路提供的服務, 風險極高. 若確認只在特定國家使用, 就可以使用MaxMind提供ip所在國家資訊, 限制其他國家ip連線,避免不必要的麻煩.
最近想用軟體防火牆來取代公司老舊的硬體防火牆, 我考察很久捨棄PFsense, 改用OPNsense. OPNSense提供簡單MaxMind整合, 可以讓我們進行ip國家使用限制, 非常方便.
我們得先到 https://www.maxmind.com/en/geolite2/signup 註冊帳號,
註冊完畢登入網站, 接下來產生license key
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en
產生完license key之後, 就可以下載ip國家資料, 可以參考一下OPNsense提供的方式
https://docs.opnsense.org/manual/how-tos/maxmind_geo_ip.html
防火牆就可以自己定義國別, 進行限制工作
esxi 7 之後, 原本可以加掛螃蟹卡方式就失效了, 還需要高人提出解法, intel倒是有熱心人提出解法.
所以一般主機若要使用esxi 7.0 , 只能購買較高級網卡,如intel, 或是usb網卡, 購買之後, 一樣要掛載坊間製作的驅動才有用.
先下載intel驅動程式 , 與最新版depot.zip 再修改以下指令製作(紅色部分須注意修改)
$EsxiDepot="VMware-ESXi-7.0U3f-20036589-depot.zip"
$EsxiProfile="ESXi-7.0U3f-20036589-standard"
$NewEsxiProfile="ESXi-7.0U3f-20036589-NUC"
#加上檔案名稱(從官網下載,需要登入,以及申請測試)
Add-EsxSoftwareDepot .\$EsxiDepot
#加上客製intel驅動程式
Add-EsxSoftwareDepot .\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip
# 可下指令 Get-EsxImageProfile 取得 profile name 以及 vendor name
New-EsxImageProfile -CloneProfile "$EsxiProfile" -name "$NewEsxiProfile" -Vendor "virten.net"
# "net-community"為額外下載intel驅動程式名稱
Add-EsxSoftwarePackage -ImageProfile "$NewEsxiProfile" -SoftwarePackage "net-community"
Export-ESXImageProfile -ImageProfile "$NewEsxiProfile" -ExportToISO -filepath "$NewEsxiProfile.iso"
不曉得原因為何? 我的pve server總是會有新建立vm的時候, 停都停不掉的問題
只好下指令停調
0. ps aux | grep "/usr/bin/kvm -id <VM ID>" kill -9 <ps id> 1. qm unlock <VM ID> 2. qm stop <VM ID>
在這虛擬化盛行的年代, 偏偏就有很多軟體開發商, 還在抗拒虛擬化, 害怕一旦虛擬化後,將更容易被盜用,造成損失.
他們的做法主要有二,
一是綁定usb key , 讓你虛擬化後,還是得依賴usb key;
另一是軟體自行偵測是否處在虛擬環境, 若是就拒絕運行,有些則是偵測後,最後還是綁定一台實體主機, 進行授權檢查.
其實在我看來, 他們就是打著反盜版侵權的旗幟, 實際上強力控制客戶.
以台灣最有名的ERP廠商為例子 , 朋友10年前購買workflow GP 3.1 , 當時並沒有告知會鎖定實體主機, 直到朋友公司因為主機老舊,需要重新安裝, 卻出現安裝到虛擬伺服器上, 無法使用的情形, 詢問後, 才知道必須另外在一台實體主機上安裝授權程式, 並且支付ERP廠商”產生“授權序號的費用, 才能使用.
ERP廠商說得好聽就是請記得購買維護, 這些都可以免費協助, 說難聽就是要綁架,要控制這家公司的, 強力取得維護.
其實老實說, 大部分的公司都願意購買維護, 大可不需要用這種手段, 讓IT難為.
萬一實體主機壞了, 系統就停擺, 要等他們處理, 但他們卻沒有想過, 萬一產品停產, 不再維護, 或公司倒了怎麼辦?
後來我跟朋友在一個場合遇到, 才聊到他的問題, 於是我就幫忙檢視一下, 朋友公司使用ESXi 6.5 , 真的無法運行, 仿間小技巧都無法騙過ERP軟體的偵測.
我左思右想,居然橫空出現一個想法, 2010那個年代, 大部分的IT只知道vmware出的虛擬伺服器, 因此我猜測ERP廠商大概也就只會偵測vmware, 並不會偵測qemu , promox ve.
嘿嘿, 於是我立馬安裝了promox ve這個虛擬伺服器系統, 再重建workflow erp系統, 果然成功了, erp軟體一點都沒發現身處虛擬環境, 運行正常.
後話, 我還是建議朋友購買維護, 畢竟他們的ERP專業很夠, 但系統建置這方面就小鼻子小眼睛, 就讓人非常不認同.
會用到這類軟體的公司, 營收都是億來億去, 豈會虛擬化後, 還複製到別處使用, 況且這樣的軟體,一般還要經過上課, 顧問輔導, 系統開帳才有辦法使用, 會願意這樣做的公司, 還會盜用?
系統移轉在驚喜中完成,有promox ve真好!又推坑一家公司了.
Ravada vdi 網站資源
1. 實體機(or lxc in pve)安裝ubuntu 18.04
CPU需支援虛擬功能 ,
若使用pve的 lxc , 該 lxc container需在options中要啟用nest指令, 並且需修改主機中該lxc container的設定
mkdir -p /dev/net vi /etc/pve/lxc/<lxc_id>.conf 增加 lxc.mount.entry = /dev/kvm dev/kvm none bind,create=file
lxc.cgroup.devices.allow: c 10:232 rwm
啟後,確認權限是否為666,若沒有就要到pve主機(非lxc) 改一下 chmod 666 /dev/kvm
ps. pve的lxc安裝ravada 後來測試還是失敗 (2020/05/04)
且該container確認安裝以下套件 sudo apt-get install virt-manager ssh-askpass-gnome --no-install-recommends sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
2 安裝mysql
sudo apt-get update sudo apt-get upgrade sudo apt-get install mysql-server sudo mysql_secure_installation sudo mysqladmin -u root -p create ravada sudo mysql -u root -p ravada -e "create user 'rvd_user'@'localhost' identified by 'Pword12345*'" sudo mysql -u root -p ravada -e "grant all on ravada.* to rvd_user@'localhost'"
3 查看mysql設定檔案,可視需要修改使用者密碼,但要搭配上一步驟一起修改
sudo vi /etc/ravada.conf db: user: rvd_user password: Pword12345*
4 安裝相關套件
sudo apt-get install perl libmojolicious-perl mysql-common libauthen-passphrase-perl \ libdbd-mysql-perl libdbi-perl libdbix-connector-perl libipc-run3-perl libnet-ldap-perl \ libproc-pid-file-perl libvirt-bin libsys-virt-perl libxml-libxml-perl libconfig-yaml-perl \ libmoose-perl libjson-xs-perl qemu-utils perlmagick libmoosex-types-netaddr-ip-perl \ libsys-statistics-linux-perl libio-interface-perl libiptables-chainmgr-perl libnet-dns-perl \ wget liblocale-maketext-lexicon-perl libmojolicious-plugin-i18n-perl libdbd-sqlite3-perl \ debconf adduser libdigest-sha-perl qemu-kvm libnet-ssh2-perl libfile-rsync-perl \ libdate-calc-perl libparallel-forkmanager-perl libssh2-1-dev libssh2-1 libdate-calc-perl \ zlib1g-dev libpcre3-dev zlib1g-dev libpcre3-dev make gcc gcc-4.8 \ libdatetime-perl libdatetime-locale-perl libdatetime-timezone-perl libparams-validationcompiler-perl libspecio-perl libio-stringy-perl libpbkdf2-tiny-perl \ libfile-sharedir-perl libclass-singleton-perl libsub-quote-perl libexception-class-perl libref-util-perl libclass-data-inheritable-perl libclass-inspector-perl net-tools
sudo reboot
底下0.10-1_all版本, 可至 http://infoteleco.upc.edu/img/debian/ 確認是否最新
wget http://infoteleco.upc.edu/img/debian/libmojolicious-plugin-renderfile-perl_0.10-1_all.deb sudo dpkg -i libmojolicious-plugin-renderfile-perl_0.10-1_all.deb
sudo perl -MCPAN -we 'install "Net::SSH2"'
5 安裝Ravada
以下ravada版本0.7.0 可上官網確認最新版 http://infoteleco.upc.edu/img/debian/
wget http://infoteleco.upc.edu/img/debian/ravada_0.7.0_ubuntu-18.04_all.deb sudo dpkg -i ravada_0.7.0_ubuntu-18.04_all.deb sudo apt-get update sudo apt-get -f install
6 設定啟動參數
sudo systemctl daemon-reload sudo systemctl enable rvd_back sudo systemctl enable rvd_front sudo systemctl start rvd_back sudo systemctl start rvd_front
7 設定qemu 壓縮
sudo vi /etc/libvirt/qemu.conf 加上以下參數 save_image_format = "bzip2"
8 重開機後,新增使用者,並且同意該使用者為管理員
sudo /usr/sbin/rvd_back --add-user <使用者>
9 使用瀏覽器連線登(上一個步驟新增的使用者登入)
10 登入ravada後, 安裝VM(win 10)
記得要先把win10 安裝檔案放到ravada主機上(/var/lib/libvirt/images), 然後執行以下指令刷新列表
sudo virsh pool-list
ps.安裝win 10會很痛苦, 滑鼠很慢,之後安裝驅動程式就正常了
11 win10安裝完畢,登入win10下載驅動程式並且安裝起來
安裝virtio驅動程式 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 執行qemu-ga-x64.msi (64-bit) or qemu-ga-x86.msi (32-bit)
安裝spice guest tools https://www.spice-space.org/download.html https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe
#安裝win10後關機, 編輯開機設定,讓vm的cpu與本機同步 virsh edit <vm name> 加上host-passthrough(直接使用原本的cpu), 以及核心數4(請依照實際cpu數修改) <cpu mode='host-passthrough'> <topology sockets='1' cores='4' threads='1'/> </cpu>
若是 linux,樹梅派,可安裝virt-viewer這套件, 安裝完畢可以執行remote-viewer進行連線 若是windows,請到此下載 https://virt-manager.org/download/
ps 目前不要嘗試docker, 若要嘗試,請切換branch到369_dockers, 但有一些perl 的bug,要自己修正才能執行,可是最後又會出現backend錯誤
備份
1. 請參考 https://kafeiou.pw/2020/03/25/2303/ 透過virsh方式備份xml 2. 備份 mysql mysqldump -u root -p ravada domains > domains.sql mysqldump -u root -p ravada networks > networks.sql
還原
1.將/var/lib/libvirt/images 同步到新的主機上 2.同步相關xml 3.資料庫還原
單一vdi還原
除了使用virsh還原外,還需以下指令, 然後再到網頁調整一下硬體設定
rvd_back --import-domain=<machine name>
最簡的的方式就是ssh登入到主機後, 將整個目錄備份到另一個掛載好的目錄
若需要備份的時候順便進行檔案瘦身(使用thin方式將用不到的資料剔除) , 可以透過以下指令達成
vmkfstools -i $Source/$VM/$VM.vmdk $Backup/$VM/$VM.vmdk -d thin
點選這裡可以下載做好的單一vm備份scripts , 只要編輯幾個變數就好了
若要做到窮人的自動備份, 可以參考 ghettoVCB ( https://github.com/lamw/ghettoVCB ) , 非常方便,還會寄發email報告備份結果.
ps . 為何我要手動備份, 因為小公司資源不足, 有時後vm的D槽掛載一個超大的資料目錄,但是我們只想備份c槽系統碟, 此時就可以針對c槽vmdk進行備份以及瘦身, 大資料的d槽部分, 就交給其他日常備份機制, 不需要整個vmdk備份起來.
咖啡偶最近進行一系列從esxi轉到pve的工作, 其中出現轉CentOS 5這種老舊vm失敗的狀況, 錯誤如下:
Unable to access resume device (LABEL=SWAP-hda3)
mount: could not find filesystem ‘/dev/root’
測試過很多方式, 例如改ide, sata, scsi 等方式都不行, 最後終於找到重建開機程序 initrd 的方式解決,
解決方式如下:
自從決定要捨棄vmware esxi 改用 proxmox ve之後 , 連帶思考 vmware converter 的替代方案,
剛好想起clonezilla 再生龍 , 使用後讓我很驚訝, 很棒的一個備份解決方案, 最重要是免費.
再生龍真的是台灣之光, 由台灣的國家高速網路與計算中心所開發.
我試用了兩個作法, 包括:
1. p2p 異機還原(筆電轉桌機)
我的筆電lenovo x230安裝win10, 再由再生龍備份到隨身硬碟, 然後再由隨身硬碟還原到桌機,
還原完畢之後,桌機的win10出現裝置重新設定的訊息,過一陣子再改一下網路設定就能正常使用了.
我想若原機備份還原, 應該就不會出現重新設定訊息,有點類似早期的norton ghost方式.
2. p2v 筆電轉virtualbox vm
筆電已安裝virtualbox , 然後新增一個win10 vm, 該vm含一個虛擬硬碟(還原用途),
vm啟動時, 使用再生龍開機, 掛載隨身硬碟(含x230的備份檔案), 再將隨身硬碟中的x230還原到vm的虛擬硬碟中,
還原成功後, 讓vm重新啟動, win10 一樣會出現裝這重新設定的訊息, 最後完成開機, 成功實現實體主機轉換成虛擬的作法.
再生龍開機後能提供很多功能, 也能連上網路, 掛載網路磁碟機, 再將網路備份的系統還原至新裝置, 非常方便, 剛好偶有一個512MB的隨身碟, 拿來再利用, 非常合適!