@@ -471,7 +471,9 @@ config=eni.parse_deb_config('/etc/network/interfaces.d/50-cloud-init.cfg')
471471
472472如果是按照旧虚拟机创建新的快照镜像,然后使用这个镜像创建新的虚拟机,有可能会在同一块网卡上出现新旧两个ip,这是因为虚拟机在启动过程中,会先读取原网络配置配置ip,然后才会运行 cloud-init 进行新ip的配置,而新ip的配置是使用 ` ifup ` 这个命令![ ] ( http://image.iswbm.com/Fp1TeHSiIMIQoZygbW9VSfAagB_d )
473473
474- 使用这种方式并不会将第一次配置的旧ip给清除掉。![ ] ( http://image.iswbm.com/Fh-5SQ8qYjhJEKovI6LmIpabSy2c )
474+ 使用这种方式并不会将第一次配置的旧ip给清除掉。
475+
476+ ![ ] ( http://image.iswbm.com/Fh-5SQ8qYjhJEKovI6LmIpabSy2c )
475477
476478这个问题,目前我只在CentOS6 中遇到过。可以通过修改代码让其先 ` ifdown ` 再 ` ifup ` 就可以解决这个问题。![ ] ( http://image.iswbm.com/20190430231812.png )
477479
@@ -606,9 +608,81 @@ runcmd:
606608
607609但这仅仅只是写入,若要执行这些命令,还需要你在 /etc/cloud/cloud.cfg 中配置 ` scripts_user ` ,这样 cloud-init 才会去执行它。
608610
611+ ## 8.6.5 如何读取修改缓存数据
612+
613+ 当虚拟机启动时,cloudinit 会将 configdrive 里的数据读取并缓存,缓存文件是一个被序列化的二进制文件,名字固定为 ` obj.pkl ` 。
614+
615+ 序列化的函数存在于 stages.py 文件
616+
617+ - ` _pkl_store() ` :序列化
618+ - ` _pkl_load() ` :反序列化
619+
620+ ![ ] ( http://image.iswbm.com/20200807135831.png )
621+
622+ 读取演示
623+
624+ ```
625+ >>> from cloudinit import stages;
626+ >>> file=stages._pkl_load("/var/lib/cloud/instances/1242171a-bf72-4a3a-acb0-9e5393e97865/obj.pkl")
627+ >>> file.network_json
628+ >>> file.metadata
629+ ```
630+
631+ 写入演示
632+
633+ ```
634+ >>> file.metadata["vhost_queues"]=1
635+ >>> stages._pkl_store(file, "/home/obj.pkl")
636+ True
637+ ```
638+
639+
640+
641+ ## 8.6.16 如何判断是新虚拟机
642+
643+ 在 stages.py 下有一个函数 ` is_new_instance() `
644+
645+ ![ ] ( http://image.iswbm.com/20200807161244.png )
646+
647+ 其中 ` previous ` 和 ` nw_timestramp ` 都是从 ` /var/lib/cloud/instances/[instance_uud]/ ` 目录下直接读取的,导致旧虚拟机的信息。
648+
649+ 而在 ` /var/lib/cloud/instance ` 目录下的信息,都是从 ` /dev/sr0 ` 从读取的最新信息。
650+
651+ 通过二者对比,就可以知道该虚拟机是否是一台新的虚拟机。
652+
653+
654+
655+ ## 8.6.17 CentOS 6.x 如何更改网卡名
656+
657+ 参考文章:[ Changing the ethX to Ethernet Device Mapping in EL6] ( https://www.alteeve.com/w/Changing_the_ethX_to_Ethernet_Device_Mapping_in_EL6 )
658+
659+ 关闭network
660+
661+ ``` shell
662+ $ /etc/init.d/network stop
663+ ```
664+
665+ 修改ifcfg 文件里的 device 和 hwaddr
666+
667+ ``` shell
668+ $ vim /etc/sysconfig/network-scripts/ifcfg-eth*
669+ ```
670+
671+ 修改 udev 网卡规则文件
672+
673+ ``` shell
674+ vim /etc/udev/rules.d/70-persistent-net.rules
675+ ```
676+
677+ 重新加载 udev,启动 network
678+
679+ ``` shell
680+ $ start_udev && /etc/init.d/network start
681+ ```
682+
609683
610684
611- ## 8.6.15 相关命令
685+ ## 8.6.18 相关命令
612686
613687``` shell
614688# 查看机器里有哪几张网卡
0 commit comments