![如何克隆 GCP VM 实例启动盘、读取/写入并重新连接它](https://linux22.com/image/742951/%E5%A6%82%E4%BD%95%E5%85%8B%E9%9A%86%20GCP%20VM%20%E5%AE%9E%E4%BE%8B%E5%90%AF%E5%8A%A8%E7%9B%98%E3%80%81%E8%AF%BB%E5%8F%96%2F%E5%86%99%E5%85%A5%E5%B9%B6%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%E5%AE%83.png)
虽然我确信整个操作可以完成,但请参阅拆卸并重新安装部件例如,可能无法仅通过一次操作就完成这一操作。
这里的用例是,RHEL 映像启动到紧急模式并且根访问权限被禁用,或者某些其他问题导致您现在无法进入机器,但通过对文件系统进行操作可以解决这个问题(例如,编辑 fstab)。
答案1
假设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
,对其进行读写挂载、写入、卸载以及可选地将其分离
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"