加入收藏 设为首页 联系站长
首页 | 虚拟动态 | Cisco模拟 | Juniper仿真 | 虚拟机 | 网络仿真 | 软件路由 | 技术专题 | 相关软件 | 交流论坛
>首页 -> Juniper仿真

TOP

彻底解决JunOS安装后过大的问题!优化后junos vmdk约250M
[ 录入者:admin | 时间:2008-04-11 06:46:28 | 作者: | 来源: | 浏览:1443次 ]

目前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
[上一篇]Patch for MultiCast in Olive wi.. [下一篇]vmware
※相关文章
 

评论

称  呼:
内  容:

相关栏目

最新文章

热门文章

推荐文章

赞助商链接