一台xen虚拟机,root密码忘记了,必须进入single模式修改root密码。步骤很熟练,xm shutdown domain && xm create -c domain——但是出问题了——没出现grub的启动界面,直接进入系统启动过程了!
无法从正常操作流程上搞定,那么换一个思路,直接操作镜像文件(谢天谢地,还好是虚拟机),采用loop方式挂载镜像,然后上去改文件好了~
方法如下:
mount -o loop,offset=32256 /xen/disk.img /mnt 然后看/mnt/下的grub.conf,timeout=0,修改成timeout=5,保存退出。umount /mnt后重新使用xm cre -c就可以看到grub界面了~~
现在解释一下这个offset=32256是怎么来的。因为如果不加这串会报出“mount: you must specify the filesystem type”错误。
1、先file确定img文件,如下:
bash[root@localhost xen]# file /xen/cvs_backup
/xen/cvs_backup: x86 boot sector;
partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors;
partition 2: ID=0x8e, starthead 0, startsector 208845, 62701695 sectors, code offset 0x48
可以看到这个镜像文件其实被格式化成了两个分区,其中第一个分区的起始块位置是63;
2、用fdisk确定具体的units,如下:
bash[root@localhost xen]# fdisk -lu /xen/cvs_backup
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.
Disk /xen/cvs_backup: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/xen/cvs_backup1 * 63 208844 104391 83 Linux
/xen/cvs_backup2 208845 62910539 31350847+ 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(3915, 254, 63)
可见每个块的大小是512字节。那么虚拟机镜像文件对应的真实起始字节位置就是63*512=32256了。