Google-Compute-Engine
如何複製 GCP 虛擬機實例啟動磁碟,對其進行讀/寫,然後重新附加它
儘管我確信可以完成整體操作,例如參見分離和重新連接部分,但可能無法僅將其作為一個操作來完成,比如說,操作。
這裡的案例是,一個 RHEL 映像啟動到緊急模式並且 root 訪問被禁用,或者其他一些問題導致您現在無法進入機器,但是通過文件系統上的操作可以解決這個問題(編輯例如 fstab)。
說
instance0
不會開機。我們需要第二個實例 (instance1
) 來附加和掛載instance0
. 假設兩個實例都在同一個區域(相應地修改),讓我們設置一些變數:project= #TODO fill zone= #TODO fill instance0= #TODO fill instance1= #TODO fill instance0_bootdisk=$(gcloud compute instances describe $instance0 --format "value(disks[0].deviceName)") instance0_bootdisk_snapshot=$instance0_bootdisk"-snapshot" instance0_bootdisk_clone=$instance0_bootdisk_snapshot"-disk" instance1_mntdev="/dev/sdb1" instance1_mntpath="/mnt/clone"
我們假設它
instance1
只有一個磁碟(引導磁碟),所以/dev/sdb1
可以工作(相應地修改)。為方便起見,發出:
gcloud config set project $project gcloud config set compute/zone $zone
為了讓程序繼續進行,讓我們停止
instance0
,創建其啟動磁碟的快照,分離啟動磁碟並從提到的快照創建一個新磁碟:gcloud compute instances stop $instance0 gcloud compute disks snapshot $instance0_bootdisk --snapshot-names $instance0_bootdisk_snapshot --zone $zone gcloud compute instances detach-disk $instance0 --device-name $instance0_bootdisk gcloud compute disks create $instance0_bootdisk_clone --source-snapshot $instance0_bootdisk_snapshot
現在,我們將新創建的磁碟作為數據磁碟附加到
instance1
, rw 掛載它,寫入它,解除安裝它,並可選擇分離它gcloud compute instances attach-disk $instance1 --disk $instance0_bootdisk_clone --device-name $instance0_bootdisk_clone gcloud compute ssh $instance1 --command "sudo mkdir -p $instance1_mntpath && sudo mount $instance1_mntdev $instance1_mntpath" gcloud compute ssh $instance1 -- sudo vi $instance1_mntpath/etc/fstab" #for example gcloud compute scp $instance1:/var/log/syslog . #for another example gcloud compute ssh $instance1 --command "sudo umount $instance1_mntpath" gcloud compute instances detach-disk $instance1 --device-name $instance0_bootdisk_clone #not mandatory
最後我們附上修改後的創建磁碟作為啟動盤,
instance0
希望作業系統能夠啟動。gcloud compute instances attach-disk $instance0 --disk $instance0_bootdisk_clone --device-name $instance0_bootdisk --boot gcloud compute instances start $instance0 #wait for completion gcloud compute ssh $instance0 --command "ps 1"