我的虚拟机挂了!怎么把镜像里面的数据找回来?(2)

叁叁肆2018-11-06 14:50

此文已由作者刘超授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


(8) load kernel modules



(9) mount sda, sdb



(10) 将sdb作为root device



(11) 运行init



(12) 启动guestfsd



(13) 开通一个端口,C类库会通过RPC连接这个端口



3.3 Guestfish的有很多的命令


  • 添加一个drive


这个命令只有在run之前起作用


对应的API是guestfs_add_drive_opts


add-drive filename [readonly:true|false] [format:..] [iface:..] [name:..] [label:..] [protocol:..] [server:..]


guestfish -a trusty-server-cloudimg-amd64-disk1.img,这个Image是第一个drive


add-drive /home/openstack/images/ubuntutest.img format:qcow2,添加一个drive


运行run


查看所有的device: list-devices

查看所有的分区: list-partitions

查看所有的文件系统: list-filesystems



  • Mount文件系统


对应的API是guestfs_mount


mount /dev/sda1 /


文件系统操作


ls /

mkdir /mnt/sdb

mount /dev/sdb1 /mnt/sdb

ls /mnt/sdb

ls /mnt/sdb/home/openstack

cat /mnt/sdb/home/openstack/.bash_history


更多文件系统命令chown,chmod,cp等都支持



  • 对partition的操作


part-list /dev/sdb

part-get-bootable /dev/sdb 1


有个partition的命令包括:

part-add,part-del,part-disk,part-get-bootable,part-get-gpt-type,part-get-mbr-id,part-get-name,part-get-parttype,part-init,part-list,part-set-bootable,part-set-gpt-type,part-set-mbr-id,part-set-name,part-to-dev,part-to-partnum




  • 对LVM的操作,哈哈不用害怕LVM了,也不用复杂做这么多操作


guestfish -a trusty-server-cloudimg-amd64-disk1.img


add-drive ./centos-5.8.new.qcow2 format:qcow2


run


查看所有的PV: pvs-full


查看所有的VG: vgs-full


命令包含:lvcreate, lvcreate-free, lvm-canonical-lv-name, lvm-clear-filter, lvm-remove-all, lvm-set-filter, lvremove, lvrename, lvresize, lvresize-free, lvs, lvs-full, lvuuid, pvcreate, pvremove, pvresize, pvresize-size, pvs, pvs-full, pvuuid, vg-activate, vg-activate-all, vgchange-uuid, vgchange-uuid-all, vgcreate, vglvuuids, vgmeta, vgpvuuids, vgremove, vgrename, vgs, vgs-full, vgscan, vguuid



  • 下载和上传文件,直接文件就能拷贝出来


guestfish -a ubuntutest.img


run


list-filesystems


mount /dev/sda1 /


download /home/openstack/.bash_history testdownload


upload instance01.xml /home/openstack/testupload



3.4 在Libvirt里面,Virt也提供了相应命令系列


一个命令完成操作,无需启动交互命令行


  • Guestmount


创建一个本地文件夹


mkdir testguestmount


将image里面的/dev/sda1 mount到这个文件夹里面

guestmount -a ubuntutest.img -m /dev/sda1 testguestmount



结束编辑后

guestunmount testguestmount


  • virt-builder


可以快速的创建虚拟机镜像


update-guestfs-appliance


查看所有的镜像类型


virt-builder –list


创建一个Image


virt-builder fedora-20 -o myfedora.img --format qcow2 --size 20G 


设置root password, 放在文件里面


virt-builder fedora-20 --root-password file:/tmp/rootpw


设置hostname


virt-builder fedora-20 --hostname virt.example.com


安装软件


virt-builder fedora-20 –install “apache2“


第一次启动运行脚本


virt-builder fedora-20 --firstboot /tmp/yum-update.sh



virt-ls -a myfedora.img /root/



virt-cat -a myfedora.img /root/.bash_profile



virt-copy-in -a myfedora.img desktop.xml /root/


virt-copy-out -a myfedora.img /root/.bash_profile ./


virt-df -a myfedora.img



virt-list-filesystems -a myfedora.img

virt-list-partitions myfedora.img


免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击