今天在ARM-SERVER上启动虚拟机发现总是mount不上根目录,报告错误为
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... done.
mount: mounting /dev/vda on /root failed: Invalid argument
Begin: Running /scripts/local-bottom ... done.
done.
Begin: Running /scripts/init-bottom ... mount: mounting /dev on /root/dev failed: No such file or directory
done.
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.
虚拟机配置如下
....
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/home/liufeng/vm/disk/ubuntu-core-14.04.1-core-arm64.img'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='virtio-mmio'/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/mnt/data.qcow2'/>
<target dev='vdb' bus='virtio'/>
<alias name='virtio-disk1'/>
<address type='virtio-mmio'/>
</disk>
....
其实是虚拟机的一个问题,将加入的空闲磁盘识别为vda了,本来应该将ubuntu-core-14.04.1-core-arm64.img识别为vda,结果被识别为vdb了(可以在(initramfs)下面mount /dev/vdb 看到)
解决问题思路如下
1. 找到vdb的UUID
(initramfs) blkid /dev/vdb
/dev/vdb: UUID="004802c8-b09c-4bf6-b2d9-6722bfcd851b" TYPE="ext4"
2. 修改虚拟机启动参数,用UUID就和识别的盘符没有关系了,使用UUID永远是唯一的,vda也好,vdb也罢,都没有关系
<os>
<type arch='aarch64' machine='virt'>hvm</type>
<kernel>/home/liufeng/vm/disk/vmlinuz-3.13.0-57-generic</kernel>
<initrd>/home/liufeng/vm/disk/initrd.img-3.13.0-57-generic</initrd>
<cmdline>console=ttyAMA0 root=UUID=004802c8-b09c-4bf6-b2d9-6722bfcd851b</cmdline>
<boot dev='hd'/>
</os>
3. 启动虚拟机,OK,注意这里新的磁盘变成了/dev/vda,后面别mount错了
虚拟机里面执行:
root@localhost:~# mkfs.ext2 /dev/vda
root@localhost:~# mount /dev/vda /mnt/