当时因为Quantum 还有很多BUG 网络服务仍使用nova-network
 
整体规划
 
各个主机都要有不同的主机名,openstack使用hostname区别内部的各个主机。
 
三台主机:
control.test.com     控制节点
compute-01.test.com             计算节点
compute-02.test.com             计算节点
 
主机ip地址:

Control.test.com:

eth0: 192.168.3.164 /24(公网)      eht1:  192.168.4.164/24(私网)
compute-01.test.com:
eth0: 192.168.3.165/24(公网)     eth1:   192.168.4.165/24(私网)
compute-02.test.com:
eth0: 192.168.3.166/24(公网)     eth1:   192.168.4.166/24(私网)
       ………….
 
计算节点 保留eth1网口给虚拟机用

其中 192.168.3.0/24 作为物理机IP段(可认为是公网IP,)

192.168. 4.0/24 作为物理机服务之间的通讯

192.168.3.168---192.168.3.190 作为虚拟机 Floating_ip 段(分配给虚拟机,从外部可以直接访问的,可以认为是公网IP地址)

虚拟机网段规划:
本次采用的是vlan模式,并且是多nova-network服务模式
虚拟机内整体网段:
10.100.0.0/24 , 再在此段上划分出vlan段
划分的三个vlan段:
10.100.0.0/24   vlan_id 2
 
虚拟机迁移:
配置nfs ,来做迁移

由于程序中会对共享目录中的uid进行操作,所以需要nfs server 和client端的uid是一致的,至少必须不同主机之间nova用户的uid是一致的,libvirt-bin用户也要一致

所以用存储服务器(192.168.3.166) 作为nfs server

别的计算节点 作为 client端

两个计算节点之间测试迁移
 
虚拟机挂载额外磁盘:
openstack使用LVM来划分磁盘,利用tgt + open_iscsi来实现局域网内磁盘设备的利用

现在我们提供磁盘的主机是存储服务器(192.168.3.166),同时也是一个nfs server节点。

当要给虚拟机划分磁盘时,首先利用lvm在ubuntu2划分指定大小的一块磁盘,然后利用tgt 服务,把磁盘声明出去,运行目标虚拟机的物理主机会去找到这个盘,并登陆使用,分配给其上的虚拟机使用。
 
目前Folsom进入ubuntu 12.04的官方的源,不过需要你手工添加。

 

  1. cat <<EOF >>/etc/apt/sources.list 
  2. deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-proposed/folsom main 
  3. deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main 
  4. EOF 
运行下面命令

 

  1. apt-get install ubuntu-cloud-keyring 
  2. apt-get update 
Hostname设置

 

  1. cat /etc/hostname  
  2. control 
  3.  
  4. cat /etc/hosts 
  5. 127.0.0.1      localhost 
  6. 192.168.4.165     compute-01.test.com compute-01 
  7. 192.168.4.166     compute-02.test.com compute-02 
  8.  
  9. hostname 
  10. control 
  11.  
  12. hostname -f 
  13. control.test.com 
 
网络
直接设置 /etc/network/interface

 

  1. auto lo 
  2. iface lo inet loopback 
  3.  
  4. auto eth0 
  5. iface eth0 inet static 
  6. address 192.168.3.164  
  7. netmask 255.255.255.0 
  8. gateway 192.168.3.1 
  9.  
  10. auto eth1 
  11. iface eth1 inet static 
  12. address 192.168.4.164 
  13. netmask 255.255.255.0 
重启服务
  1. /etc/init.d/networking restart 
设置IP转发

 

  1. sed -i -r 's/^\s*#(net\.ipv4\.ip_forward=1.*)/\1/' /etc/sysctl.conf 
  2. sysctl   -p 
一、安装控制节点
安装 NTP服务
编辑 /etc/ntp.conf ,在 server ntp.ubuntu.com 下添加两行

 

  1. server ntp.ubuntu.com 
  2. server 127.127.1.0 
  3. fudge 127.127.1.0 stratum 10 
或者直接运行下面命令
  1. sed -i 's/server ntp.ubuntu.com/server ntp.ubuntu.com\nserver 127.127.1.0\nfudge 127.127.1.0 stratum 10/g' /etc/ntp.conf 
重启NTP服务
 
  1. service ntp restart
安装mysql
 
  1. apt-get -y install mysql-server python-mysqldb 
安装时输入mysql的root用户密码:root-pass
 
设置监听Ip
  1. sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 
重启服务
  1. service mysql restart
创建数据库

 

  1. mysql -uroot -proot-pass <<EOF 
  2. CREATE DATABASE nova; 
  3. GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova-pass'; 
  4. CREATE DATABASE glance; 
  5. GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance-pass'; 
  6. CREATE DATABASE keystone; 
  7. GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIED BY ' keystone-pass'; 
  8. CREATE DATABASE cinder; 
  9. GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%'IDENTIFIED BY 'cinder-pass'; 
  10. FLUSH PRIVILEGES; 
  11. EOF 
安装RabbitMQ
 
  1. apt-get -y install rabbitmq-server 
把默认密码 guest,改成rabbit-pass
  1. rabbitmqctl change_password guest rabbit-pass 
 
注意:如果hostname 和 hosts文件中主机名不相同服务无法启动
 
安装keystone
keystone 认证服务:openstack中各个组件之间传递消息,或者用户对虚拟机的管理都要通过keystone认证,以保证某个请求是合法的
 
  1. apt-get install keystone python-keystone python-keystoneclient 
 
默认keystone使用sqlite ,改为mysql, 删除原来的数据库文件
 
  1. rm /var/lib/keystone/keystone.db 
 

配置 /etc/keystone/keystone.conf

 

  1. [DEFAULT] 
  2. admin_token = 012345SECRET99TOKEN012345 
  3. bind_host = 0.0.0.0 
  4. public_port = 5000 
  5. admin_port = 35357 
  6. compute_port = 8774 
  7. verbose = True 
  8. debug = True 
  9. log_file = keystone.log 
  10. log_dir = /var/log/keystone 
  11. log_config = /etc/keystone/logging.conf 
  12. [sql] 
  13. connection = mysql://keystone:keystone-pass@192.168.4.64:3306/keystone 
  14. idle_timeout = 200 
 
重启服务和初始化数据库
 
  1. service keystone restart 
  2. keystone-manage db_sync 
 
查看数据库中是否创建了这些表,版本不一样可能表也不一样
 

 
配置tenant,user 和 role
tenant : 租户,代替了原本的project的概念,一个tenant 应该是一个整个的工程,在这个tenant里面可以创建user, 可以给这个user 配置role , 然后这个user 可以在这个 tenant 里面创建虚拟机,配置安全组等
创建tenant
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 tenant-create --name openstackDemo --description "Default Tenant" --enabled true 
 

在这个tenant里创建用户 adminUser

  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   user-create --tenant_id b5815b046cfe47bb891a7b64119e7f80 --name adminUser --pass secretword --enabled true 
 

 
创建默认角色 admin 和memberRole
 
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 role-create --name admin 
 


  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 role-create --name memberRole 
 

 
给 openstackDemo tenant 里的adminUser 赋予admin 权限
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 user-role-add --user_id a4c2d43f80a549a19864c89d759bb3fe   --tenant_id b5815b046cfe47bb891a7b64119e7f80 --role_id  e3d9d157cc95410ea45d23bbbc2e5c10 
这个命令没有输出,如果有多个tenant 的话要赋予权限给相应
 
创建一个Service tenant , 这个tenant里包括所有的服务用户
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 tenant-create --name service --description "Service Tenant" --enabled true 
 

 
在service tenant里 创建 glance service 用户
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 user-create --tenant_id eb7e0c10a99446cfa14c244374549e9d --name glance --pass glance --enabled true 
 

把 admin 角色赋予glance 服务用户
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 user-role-add --user_id 46b2667a7807483d983e0b4037a1623b --tenant_id eb7e0c10a99446cfa14c244374549e9d --role_id e3d9d157cc95410ea45d23bbbc2e5c10 
这个命令没有输出
 
在service tenant 里创建nova service 用户
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   user-create --tenant_id eb7e0c10a99446cfa14c244374549e9d --name nova --pass nova --enabled true 
 

给nova服务用户赋予 admin 角色
 
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   user-role-add --user_id 54b3776a8707834d983e0b4037b1345c    --tenant_id eb7e0c10a99446cfa14c244374549e9d --role_id e3d9d157cc95410ea45d23bbbc2e5c10 
 
在service tenant 里创建ec2 服务用户
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0    user-create --tenant_id eb7e0c10a99446cfa14c244374549e9d --name   ec2 --pass ec2 --enabled true 
给ec2服务用户赋予admin角色
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   user-role-add --user_id 32e7668b8707834d983e0b4037b1345c   --tenant_id eb7e0c10a99446cfa14c244374549e9d --role_id e3d9d157cc95410ea45d23bbbc2e5c10 
 
 
keystone 上定义service 端点: endpoint 
endpoint上定义了openstack 各个服务的 API endpoint (入口)
定义方式有两种,
1,使用模板文件:
/etc/keystone/default_catalog.templates
2. 使用数据库作为后端
我们使用数据库的方式配置endpoint
修改 /etc/keystone/keystone.conf 的 [catalog] 默认使用数据库
 

如果使用模板文件,则修改为:
 

 
创建keystone 服务 和 服务端点(service endpoints)
创建identity服务
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 service-create --name=keystone --type=identity --description="Keystone Identity Service" 
 

 


  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   endpoint-create --region RegionOne --service_id=15c11a23667e427e91bc31335b45f4bd  --publicurl=http://192.168.4.164:5000/v2.0 --internalurl=http://192.168.4.164:5000/v2.0 --adminurl=http://192.168.4.164:35357/v2.0 
 

 
创建compute 服务 ,需要为endpoint制定一个tenant
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 service-create --name=nova --type=compute --description="Nova Compute Service" 
 

 

  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 endpoint-create --region RegionOne --service_id=abc0f03c02904c24abdcc3b7910e2eed --publicurl='http://192.168.4.164:8774/v2/%(tenant_id)s' --internalurl='http://192.168.4.164:8774/v2/%(tenant_id)s' --adminurl='http://192.168.4.164:8774/v2/%(tenant_id)s' 

 

 

定义volume service ,也需要制定 tenant

 

  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 service-create  --name=volume  --type=volume  --description="Nova Volume Service" 
 

  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 endpoint-create --region RegionOne --service_id=1ff4ece13c3e48d8a6461faebd9cd38f --publicurl='http://192.168.4.164:8776/v1/%(tenant_id)s' --internalurl='http://192.168.4.164:8776/v1/%(tenant_id)s' --adminurl='http://192.168.4.164:8776/v1/%(tenant_id)s'  
 

 
定义 p_w_picpath 服务
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 service-create --name=glance --type=p_w_picpath --description="Glance Image Service" 
 

  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 endpoint-create --region RegionOne --service_id=7d5258c490144c8c92505267785327c1 --publicurl=http://192.168.4.165:9292/v1 --internalurl=http://192.168.4.165:9292/v1 --adminurl=http://192.168.4.165:9292/v1 
 
注意:如果glance服务从控制节点分开,命令中端口是9292的IP都要改成glance服务器的IP
 

 
定义EC2服务
  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0   service-create --name=ec2 --type=ec2  --description="EC2 Compatibility Layer" 
 


  1. keystone --token 012345SECRET99TOKEN012345 --endpoint http://192.168.4.164:35357/v2.0 endpoint-create --region RegionOne --service_id=181cdad1d1264387bcc411e1c6a6a5fd --publicurl=http://192.168.4.164:8773/services/Cloud --internalurl=http://192.168.4.164:8773/services/Cloud --adminurl=http://192.168.4.164:8773/services/Admin 
 

 
验证认证服务的正确性

 

  1. sudo apt-get install curl openssl 
  2. curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "adminUser", "password": "secretword"}}}' -H "Content-type:application/json" http://192.168.4.164:35357/v2.0/tokens | python -mjson.tool 
 
 
安装glance服务
 
在存储节点安装镜像服务器 (不一定要安装在控制节点,可以单独拿出一台物理主机部署glance)如果分开的话要先安装计算节点服务(sudo apt-get install nova-compute nova-network nova-api novnc)或先创建计算节点中所用到的账户,因为nova会使用到计算节点的账户
  1. apt-get -y install glance glance-api python-glanceclient glance-common 
注意:如果glance服务和控制节点分开,必须在glance服务器安装python-keystone模块,否则glance服务无法启动
删掉默认的数据库,因为后面要配置mysql数据库
  1. sudo rm /var/lib/glance/glance.sqlite 
 
配置
编辑/etc/glance/glance-api.conf 和 /etc/glance/glance-registry.conf

 

  1. sql_connection = mysql://glance:glance-pass@192.168.4.164/glance 
  2. auth_host = 192.168.4.164 
  3. admin_tenant_name = service 
  4. admin_user = glance 
  5. admin_password = glance-pass 
 
编辑 /etc/glance/glance-api.conf

 

  1. #notifier_strategy = noop 
  2. notifier_strategy = rabbit 
  3.  
  4. #rabbit_password = guest 
  5. rabbitrabbit_password = rabbit-pass 
 
运行下面命令
 
  1. cat <<EOF >>/etc/glance/glance-api.conf 
  2. flavor = keystone+cachemanagement 
  3. EOF 
  4.  
  5. cat <<EOF >>/etc/glance/glance-registry.conf 
  6. flavor = keystone 
  7. EOF 
 
重启服务
  1. service glance-api restart && service glance-registry restart   
在ubuntu12.04 glance 数据表是在 version control 之下的,运行下面的步骤
如果glance服务和控制机分开的话要安装python-mysqldb

 

  1. glance-manage version_control 0 
  2. glance-manage db_sync 
  3. sudo service glance-registry restart 
 
验证glance
 
  1. glance --version 
 
 
获取测试镜像

 

  1. mkdir /tmp/p_w_picpaths 
  2. cd /tmp/p_w_picpaths/ 
  3.  
  4. wget http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz
  5. tar -zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz

注意:上传镜像时,如果glance服务从控制节点分开,下面命令中的IP:127.0.0.1都要改成keystone服务器的IP(内网ip)
 
上传kernel
  1. glance --os_username=adminUser --os_password=secretword --os_tenant=openstackDemo --os_auth_url=http://127.0.0.1:5000/v2.0 add name="tty-linux-kernel" disk_format=aki container_format=aki < ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz 
 

上传initrd
  1. glance --os_username=adminUser --os_password=secretword --os_tenant=openstackDemo --os_auth_url=http://127.0.0.1:5000/v2.0 add name="tty-linux-ramdisk" disk_format=ari container_format=ari < ttylinux-uec-amd64-12.1_2.6.35-22_1-loader 
 

上传镜像
  1. glance --os_username=adminUser --os_password=secretword --os_tenant=openstackDemo --os_auth_url=http://127.0.0.1:5000/v2.0 add name="tty-linux" disk_format=ami container_format=ami kernel_id=599907ff-296d-4042-a671-d015e34317d2 ramdisk_id=7d9f0378-1640-4e43-8959-701f248d999d < ttylinux-uec-amd64-12.1_2.6.35-22_1.img 
 


  1. glance --os_username=adminUser --os_password=secretword --os_tenant=openstackDemo --os_auth_url=http://127.0.0.1:5000/v2.0  index 
 

 

上面的例子使用 --os_username, --os_password, --os_tenant, --os_auth_url ,也可以使用 OS_*环境变量

例如: vi openrc

 

  1. export OS_USERNAME=adminUser 
  2. export OS_TENANT_NAME=openstackDemo 
  3. export OS_PASSWORD=secretword 
  4. export OS_AUTH_URL=http://192.168.4.164:5000/v2.0/ 
  5. export OS_REGION_NAME=RegionOne 
 
安装nova服务

 

  1. apt-get -y install nova-api nova-cert nova-common nova-scheduler python-nova python-novaclient nova-consoleauth novnc nova-novncproxy 
 
配置
编辑 /etc/nova/api-paste.ini

 

  1. auth_host = 192.168.4.164 
  2. auth_port = 35357 
  3. auth_protocol = http 
  4. admin_tenant_name = service 
  5. admin_user = nova 
  6. admin_password = nova 
 
编辑文件 /etc/nova/nova.conf  

 

  1. [DEFAULT] 
  2. logdir=/var/log/nova 
  3. state_path=/var/lib/nova 
  4. lock_path=/run/lock/nova 
  5. verbose=False 
  6. api_paste_config=/etc/nova/api-paste.ini 
  7. scheduler_driver=nova.scheduler.simple.SimpleScheduler 
  8. s3_host=192.168.4.164 
  9. ec2_host=192.168.4.164 
  10. ec2_dmz_host=192.168.4.164 
  11. rabbit_host=192.168.4.164 
  12. rabbitrabbit_password=rabbit-pass 
  13. cc_host=192.168.4.164 
  14. nova_url=http://192.168.4.164:8774/v1.1/ 
  15. sql_connection=mysql://nova:nova-pass@192.168.4.164/nova 
  16. ec2_url=http://192.168.4.164:8773/services/Cloud 
  17. root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf 
  18.   
  19. # Auth 
  20. use_deprecated_auth=false 
  21. auth_strategy=keystone 
  22. keystone_ec2_url=http://192.168.4.164:5000/v2.0/ec2tokens 
  23. # Imaging service 
  24. glance_api_servers=192.168.4.165:9292 
  25. p_w_picpath_service=nova.p_w_picpath.glance.GlanceImageService 
  26.   
  27. # Vnc configuration 
  28. novnc_enabled=true 
  29. novncproxy_base_url=http://0.0.0.0:6080/vnc_auto.html 
  30. novncproxy_port=6080 
  31. vncserver_proxyclient_address=0.0.0.0 
  32. vncserver_listen=0.0.0.0 
  33.   
  34. # Network settings 
  35. #network_api_class=nova.network.quantumv2.api.API 
  36. #quantum_url=http://192.168.4.164:9696 
  37. #quantum_auth_strategy=keystone 
  38. #quantum_admin_tenant_name=service 
  39. #quantumquantum_admin_username=quantum 
  40. #quantum_admin_password
  41. #quantum_admin_auth_url=http://192.168.4.164:35357/v2.0 
  42. #libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver 
  43. #linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver 
  44. #firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver 
  45.   
  46. ###### NETWORK 
  47. #network_manager=nova.network.manager.FlatDHCPManager 
  48. network_manager=nova.network.manager.VlanManager 
  49. force_dhcp_release=True 
  50. dhcpbridge_flagfile=/etc/nova/nova.conf 
  51. dhcpbridge=/usr/bin/nova-dhcpbridge 
  52. firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver 
  53. public_inter> 
  54. flat_inter> 
  55. vlan_inter> 
  56. flat_network_bridge=br100 
  57. fixed_range=10.100.0.0/24 
  58. multi_host=true 
  59.   
  60. # Compute # 
  61. #compute_driver=libvirt.LibvirtDriver 
  62.   
  63. ###### COMPUTE 
  64. libvirt_type=kvm 
  65. connection_type=libvirt 
  66. instanceinstance_name_template=instance-%08x 
  67. api_paste_config=/etc/nova/api-paste.ini 
  68. allow_resize_to_same_host=True 
  69. libvirt_use_virtio_for_bridges=true 
  70. start_guests_on_host_boot=true 
  71. resume_guests_state_on_host_boot=true 
  72.   
  73. # Cinder # 
  74. volume_api_class=nova.volume.cinder.API 
  75. osapi_volume_listen_port=5900 
 
创建nova数据表
 
  1. nova-manage db sync 
重启服务

 

  1. service nova-api restart 
  2. service nova-cert restart 
  3. service nova-consoleauth restart 
  4. service nova-scheduler restart 
  5. service nova-novncproxy restart 
 
 
安装cinder服务
在存储节点安装cinder服务

 

  1. apt-get install -y cinder-api cinder-scheduler cinder-volume  open-iscsi tgt python-cinderclient 
 
硬盘专门一个分区给volume使用

 

  1. pvcreate /dev/sda5 
  2. vgcreate cinder-volumes /dev/sda5 
 

编辑 /etc/cinder/cinder.conf ,直接运行下面命令就可以

  1. [DEFAULT] 
  2. rootwrap_config = /etc/cinder/rootwrap.conf 
  3. sql_connection = mysql://cinder:cinder-pass@192.168.4.164:3306/cinder 
  4. api_paste_confg = /etc/cinder/api-paste.ini 
  5. iscsi_helper = ietadm 
  6. volume_group = cinder-volumes 
  7. volumevolume_name_template = volume-%s 
  8. rabbitrabbit_password = rabbit-pass 
  9. logdir = /var/log/cinder 
  10. verbose = False 
  11. auth_strategy = keystone 
 

编辑 /etc/cinder/api-paste.ini

 

  1.  admin_tenant_name = service 
  2. admin_user = cinder 
  3. admin_password = cinder 
 
同步数据库
 
  1. cinder-manage db sync 
 
重启服务

 

  1. service cinder-api restart 
  2. service cinder-scheduler restart 
  3. service cinder-volume restart 
 
nova 命令创建额外存储

volume-attach       Attach a volume to a server.

    volume-create       Add a new volume.
    volume-delete       Remove a volume.
    volume-detach       Detach a volume from a server.
    volume-list         List all the volumes.
    volume-show         Show details about a volume.
创建
 

显示volume
 

显示虚拟机
 

挂载
 

显示volume
 

挂好的显示 in-use
卸载
 

显示volume
 

 

 
进入虚拟机就会看到 /dev/下面多了个磁盘文件
 

Ubuntu12.04 OpenStack Folsom 安装(VLAN模式)之二