目前vmware下的junos虽然很稳定,组播也搞定了,但是由于不支持vlan-tagging,以致做个大点的试验,起个7台虚拟机,硬盘空间 就占的太大了(因为我的是从8.3升级到8.5的,搞完了就1.6G的vmdk了),但实际上用df -hl查看vmdk实际上也就用了300M不到的 空间,有没有好的方法可以搞定呢?
经过周末的探索想到如下几种方法: 1.直接安装freebsd6.1+JunOS8.5,但是如果不注意/var 的分区必须在ad0s1f的话,很容易安装失败;(安装后约900M,还是看起 来不爽,值得优化) 2.利用JunOS自带的备份功能,用已经装好的junos8.5带一块空的vmdk盘启动,并用request system snapshot partition命令进行备份 ,但是做完了发现一个问题,启动时找不到ad1这块盘,因为junos默认只有一块硬盘且备份后硬盘的启动分区表指定到了ad1,但是 备份后我们的磁盘是直接挂到主盘位置,我们需要的是从ad0启动,而不是备份时的ad1了,尝试磁盘挂到ide0的slave位,VM无法启动 不了;在单用户模式下虽然能手动挂接,但是太不方便;经过分析后发现junos在备份时篡改了/etc/fstab文件,导致默认从ad1启动 ,用vi改回去;启动是没有问题,但是死活停留在了单用户模式,一看log说找不到swap分区,在/dev/下看的确就没有ad0s1b这个分 区,晕死,重新做request system snapshot partition发现JunOS压根就没有分swap区,本来想用指定一块slice的方法来做,但 是做完了junos就600M了,效果不理想; 3.突然想到前段时间给sun设备换硬盘并做磁盘镜像的经历了,于是经过琢磨和试验后顺利搞定,方法如下:(经过试验镜像后JunOS 总共250M左右,如果备份前删掉jbundle就才150M了,实际上仅需要备份root区和/var区,var有最重要的preinstall_boot_loader.conf)
1.用qemu-img create -f vmdk junos.vmdk 3G创建一块新的盘 2.挂接freebsd启动,利用freebsd对相应的vmdk盘进行分区(当然可以直接在JunOS单用户模式下来做,但是考虑到方便性, 还是 推荐用freebsd分区): 2.1.首先用configure中的fdisk,按A使用整块磁盘,按W存盘,并退出重启; 2.2.重启后继续用configure中的label,利用C创建如下分区: ad0s1a / 1024M ad0s1b swap 512M ad0s1d /tmp 512M ad0s1e /config 32M ad0s1f /var 利用剩余的空间约970M 3.利用已经安装junos8.5的vmdk设为主盘,将刚刚格式化的新的vmdk作为从盘,启动 在10秒倒计时的时候按下空格(space)键,在ok模式输入boot -s 然后在#后输入 fsck -p mount -u / mount -a swapon -a adjkerntz -i 4.建立新硬盘分区的挂载点(mount point) mkdir /backup mkdir /backup/root mkdir /backup/var 5.挂接新的磁盘并用dump命令进行磁盘镜像: mount /dev/ad1s1a /backup/root mount /dev/ad1s1e /backup/var ( dump -0f - / ) | ( cd /backup/root ; restore -rf - ) ( dump -0f - /var ) | ( cd /backup/var ; restore -rf - ) umount /backup/root umount /backup/var tunefs -n enable /dev/ad1s1a tunefs -n enable /dev/ad1s1e tunefs -n enable /dev/ad1s1f tunefs -n enable /dev/ad1s1d sync;sync;sync;sync;sync;sync; 6.重新使用新的vmdk启动,你会发现250M左右的junos便能顺利运行了,哈哈哈哈 这下大家就不用再担心用VMware时起10台junos光vmdk就会占掉20G了,你可以用U盘装着到处跑了
题外话:推荐有条件的还是买个pc来做olive,稳定!而且现在运气好的话还能掏到ATM的pci网卡,加上驱动olive下也可以认,拿个 尾纤环一下就是当年JNCIE lab的东东了,但是现在像我这种天天外面晃的人,还是期待着高人编个虚拟的 atm网卡或者希望哪位大牛把vm的网卡部分重新编译一下支持vlan,这样olive就真的爽了,期待中。。。。
昨天又试验了一下,用安装好的JUNOS8.5带一块空的vmdk启动,直接敲request system snapshot partition,但是这种方法junos只默认复制root和/config区的内容,还需要手动挂接ad1s1f区,并拷贝/var/tmp/preinstall_boot_loader.conf到ad1s1f的对应位置,并利用旧JunOS8.5中/etc/fstab覆盖到ad1s1a区对应位置的fstab文件;然后umount分区,并halt虚拟机,重新用新的vmdk启动就好了,方法是比第三种简单,但问题在于由于缺乏swap分区,导致你分配了多少内存给qemu就会全部当作swap分区用了,你想我的本本才2G内存,一共能起几台?推荐喜欢动手的朋友还是用方法3;
不过我一直在想JUNOS为什么不分Swap区呢? 想想如果在真实设备上如果利用swap分区的话,一来硬盘读写速度不可能有内存快,更没有ECC校验之类的功能,二来如果让一个硬盘的分区马不停蹄的读写2年估计也离挂掉不远了,(毕竟硬盘是不可能达到电信级产品,又不是闪存卡)请大家试想一下如果硬盘挂掉的时候,RIB信息还有部分在硬盘上,会是怎样个情形;而真实设备大部分会在启动之后加载kernel到内存后,脱离硬盘而独立运行,而硬盘只是作为log或其他与核心进程无关操作的载体,而且由于硬盘问题导致整机挂死在别的厂商是有血的教训的,所以我想这也许就是request system snapshot partition时偏偏不分SWAP区的原因吧:)仅供猜想;
讨论地址;http://netemu.cn/bbs/thread-7598-1-1.html |