研究了下 eXR 的 file system, 记录下权当了解下系统的内部情况。
本文的演示事例使用的硬件 A9K-RSP5-SE 和 eXR 742 作为案例,使用的硬件不同,升级方式不同,磁盘的大小和分区是略微存在出入的。
如果你需要一个干净的,完全纯净的分区请采用以下方式升级或安装系统:
-
USB/PXE
-
正常 install command 升级,升级完成后 re-image 所有的板卡 (re-image 的操作,类似于 PXE 安装)
eXR 系统简介 #
[host:~]$ virsh list --all
Id Name State
----------------------------------------------------
2 sysadmin running
3 default-sdr--1 running
关于不同 VM 之间如何访问可以参考另一篇文章。
Host VM 的文件系统 #
A9K-RSP5-SE 在官网的介绍中说有两块 128G 的 SSD + 一个 8G 内置 USB,我们可以通过 fdisk 或者 lsblk 查看这两块硬盘和相关的分区(sda/sdb)以及内置 USB (sdc):
[host:~]$ fdisk -l | grep "/dev/sd"
Disk /dev/sda: 119.2 GiB, 128034086400 bytes, 250066575 sectors
/dev/sda1 40 3906247 1.9G Microsoft basic data
/dev/sda2 3906248 35156247 14.9G Microsoft basic data
/dev/sda3 35156248 249910159 102.4G Microsoft basic data
/dev/sda4 249910160 250066535 76.4M EFI System
Disk /dev/sdb: 119.2 GiB, 128034086400 bytes, 250066575 sectors
Disk /dev/sdc: 7.5 GiB, 8019509248 bytes, 15663104 sectors
/dev/sdc1 15314 7672313 3828500 83 Linux
/dev/sdc2 7672314 9203713 765700 83 Linux
/dev/sdc3 9203714 15329313 3062800 83 Linux
[host:~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
|-sda1 8:1 0 1.9G 0 part
|-sda2 8:2 0 14.9G 0 part
|-sda3 8:3 0 102.4G 0 part
| |-panini_vol_grp-host_lv0 253:4 0 1000M 0 lvm /
| |-panini_vol_grp-host_data_scratch_lv0 253:5 0 3.9G 0 lvm /misc/scratch
| |-panini_vol_grp-host_data_log_lv0 253:6 0 3.9G 0 lvm /var/log
| |-panini_vol_grp-host_data_config_lv0 253:7 0 1000M 0 lvm /misc/config
| |-panini_vol_grp-calvados_lv0 253:8 0 2.5G 0 lvm
| |-panini_vol_grp-calvados_data_lv0 253:9 0 6.9G 0 lvm
| `-panini_vol_grp-xr_lv0 253:10 0 3.9G 0 lvm
`-sda4 8:4 0 76.4M 0 part
sdb 8:16 0 119.2G 0 disk
|-pci_disk1-ssd_disk1_hostos 253:0 0 18.8G 0 lvm /misc/disk1
|-pci_disk1-ssd_disk1_calvados_1 253:1 0 31.3G 0 lvm
|-pci_disk1-ssd_disk1_xr_1 253:2 0 22.5G 0 lvm
|-pci_disk1-app_lv0 253:3 0 19.5G 0 lvm
`-pci_disk1-xr_data_lv0 253:11 0 6.9G 0 lvm
sdc 8:32 0 7.5G 0 disk
|-sdc1 8:33 0 3.7G 0 part
|-sdc2 8:34 0 747.8M 0 part
`-sdc3 8:35 0 2.9G 0 part
sda 被创建了 3 个分区, 其中 sda3 被拿来创建逻辑卷 (panini_vol_grp);sdb 完整的被拿来创建了逻辑卷 pci_disk1,如下命令可以显示逻辑卷已经被使用了多少, 还有多少空余。
[host:~]$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 panini_vol_grp lvm2 a-- 102.40g 79.45g
/dev/sdb pci_disk1 lvm2 a-- 119.24g 20.35g
那接下来使用 df -h + lsblk 来对照看下 host vm 是如何挂载和使用这些逻辑卷的:
除此之外还有一些 size 为 20G 的硬盘,查了下资料, 这些属于 linux 中一种虚拟内存文件系统;指的是由内核产生但是不存在硬盘上, 存在于内存中的文件系统。 (tmpfs)
其大小一般是内存的一半,RSP5-SE 内存大小是 40G,所以这个地方挂载的大小为 20G。
Sysadmin VM 的文件系统 #
sysadmin/xr vm 是通过 kvm 虚拟 run 在 host 主机中的虚拟机。
如果需要查看这两个虚拟机的配置信息,可以使用 ps -aux | grep qemu 查看(比如 host 主机为每个 vm 分配了多少内存)。
或者使用标准的 virsh 命令 dump 所有的配置,这里我做了过滤,只展示了一些磁盘的映射
[host:~]$ virsh list --all
Id Name State
----------------------------------------------------
2 sysadmin running
3 default-sdr--1 running
[host:~]$ virsh dumpxml 2 | grep -E 'source|target'
<resource>
</resource>
<source dev='/dev/panini_vol_grp/calvados_lv0'/>
<target dev='vda' bus='virtio'/>
<source dev='/dev/sda2'/>
<target dev='vdb' bus='virtio'/>
<source dev='/dev/panini_vol_grp/calvados_data_lv0'/>
<target dev='vdc' bus='virtio'/>
<source dev='/dev/pci_disk1/ssd_disk1_calvados_1'/>
<target dev='vdd' bus='virtio'/>
<source dev='/dev/sdc2'/>
<target dev='vde' bus='virtio'/>
<source dev='/dev/sdc3'/>
<target dev='vdf' bus='virtio'/>
<source mode='bind' host='127.0.0.1' service='49998'/>
<target port='0'/>
<source mode='bind' host='127.0.0.1' service='49999'/>
<target port='1'/>
<source mode='bind' host='127.0.0.1' service='49998'/>
<target type='serial' port='0'/>
于是,我们就得到了这样的一个表格:
vda | /dev/panini_vol_grp/calvados_lv0 | 2.5G |
vdb | /dev/sda2 | 14.9G |
vdc | /dev/panini_vol_grp/calvados_data_lv0 | 6.9G |
vdd | /dev/pci_disk1/ssd_disk1_calvados_1 | 31.3G |
vde | /dev/sdc2 | 747.8M |
vdf | /dev/sdc3 | 2.9G |
然后让我们回到 sysadmin vm, sysadmin vm 使用这 6 块存储空间,在此基础上又进行了分区;每一块都有不同的用途,关于每个分区的用途可以参考之前的文章
[sysadmin-vm:0_RSP1:~]$lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 2.5G 0 disk
`-vda1 252:1 0 2.5G 0 part /
vdb 252:16 0 14.9G 0 disk
`-vdb1 252:17 0 14.9G 0 part /install_repo
vdc 252:32 0 6.9G 0 disk
|-vdc1 252:33 0 2G 0 part /var/log
|-vdc2 252:34 0 1000M 0 part /misc/config
`-vdc3 252:35 0 3.9G 0 part /misc/scratch
vdd 252:48 0 31.3G 0 disk /misc/disk1
vde 252:64 0 747.8M 0 disk /eusba
vdf 252:80 0 2.9G 0 disk /eusbb
[sysadmin-vm:0_RSP1:~]$
[sysadmin-vm:0_RSP1:~]$
[sysadmin-vm:0_RSP1:~]$df -h | grep -Ev "none|tmpfs|run"
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 2.4G 1.2G 1.1G 53% /
/dev/vdd 31G 5.0G 25G 17% /misc/disk1
/dev/vdc1 1.9G 40M 1.8G 3% /var/log
/dev/vdc2 969M 4.1M 899M 1% /misc/config
/dev/vdc3 3.8G 9.5M 3.6G 1% /misc/scratch
/dev/ram7 15M 15M 0 100% /mnt/ram7
/dev/vde 736M 9.9M 689M 2% /eusba
/dev/vdf 3.0G 1.7G 1.4G 56% /eusbb
/dev/vdb1 15G 1.3G 13G 9% /install_repo
sysadmin-vm:0_RSP1# show media
Fri Jul 7 15:00:03.571 UTC+00:00
---------------------------------------------------------------------
Partition Size Used Percent Avail
---------------------------------------------------------------------
rootfs: 2.4G 1.2G 53% 1.1G
harddisk: 31G 5.0G 17% 25G
log: 1.9G 41M 3% 1.8G
config: 969M 4.1M 1% 899M
disk0: 3.8G 9.5M 1% 3.6G
a9ksys: 736M 9.9M 2% 689M
harddiskb: 3.0G 1.7G 56% 1.4G
install: 15G 1.3G 9% 13G
install:/tmp 31G 5.0G 17% 25G
install:/cache 31G 5.0G 17% 25G
rootfs:/install/tmp 31G 5.0G 17% 25G
---------------------------------------------------------------------
rootfs: = root file system (read-only)
log: = system log files (read-only)
config: = configuration storage (read-only)
install: = install repository (read-only)
a9ksys: = ASR9K system storage (read-only)
XR VM 的文件系统 #
同理我们可以得到虚拟卷与 XR VM 中磁盘的映射关系:
[host:~]$ virsh list --all
Id Name State
----------------------------------------------------
2 sysadmin running
3 default-sdr--1 running
[host:~]$ virsh dumpxml 3 | grep -E 'source|target'
<resource>
</resource>
<source dev='/dev/panini_vol_grp/xr_lv0'/>
<target dev='vda' bus='virtio'/>
<source dev='/dev/pci_disk1/xr_data_lv0'/>
<target dev='vdb' bus='virtio'/>
<source dev='/dev/pci_disk1/ssd_disk1_xr_1'/>
<target dev='vdd' bus='virtio'/>
<source file='/usr/local/calvados/vm_manager/vmm_default-sdr--1.cfg'/>
<target dev='vdg' bus='virtio'/>
<source dev='/dev/eusb1'/>
<target dev='vdh' bus='virtio'/>
<source dev='/dev/pci_disk1/app_lv0'/>
<target dev='vdi' bus='virtio'/>
<source>
</source>
<source>
</source>
<source>
</source>
<source>
</source>
这里不确定为什么 xr vm 内部的磁盘名会与 host 主机中的配置文件没一一对应,但是根据 size,我们可以大致的推断出如下的表格:
vda | /dev/panini_vol_grp/xr_lv0 | 3.9G |
vdb | /dev/pci_disk1/xr_data_lv0 | 6.9G |
vdc | /dev/pci_disk1/ssd_disk1_xr_1 | 22.5G |
vdd | /dev/sdc1 | 3.7G |
vde | /dev/pci_disk1/app_lv0 | 19.5G |
[xr-vm_node0_RSP1_CPU0:~]$lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 3.9G 0 disk
`-vda1 252:1 0 3.9G 0 part /
vdb 252:16 0 6.9G 0 disk
|-vdb1 252:17 0 2G 0 part /var/log
|-vdb2 252:18 0 1000M 0 part /misc/config
`-vdb3 252:19 0 3.9G 0 part /misc/scratch
vdc 252:32 0 22.5G 0 disk /misc/disk1
vdd 252:48 0 3.7G 0 disk /eusb
vde 252:64 0 19.5G 0 disk /misc/app_host
vdf 252:80 0 8K 0 disk
RP/0/RSP1/CPU0:ASR-9904-B#show media
Fri Jul 7 15:15:46.988 UTC
Media Info for Location: node0_RSP1_CPU0
Partition Size Used Percent Avail
--------------------------------------------------------------------
rootfs: 3.8G 2.1G 58% 1.6G
harddisk: 23G 456M 3% 21G
log: 1.9G 72M 4% 1.8G
config: 969M 3.0M 1% 900M
disk0: 3.8G 11M 1% 3.6G
harddiska: 3.6G 7.4M 1% 3.5G
apphost: 20G 539M 3% 18G
Notes #
如果我们使用 install 命令进行软件升级,系统的分区会是怎么样呢?
这里用板卡的作为事例,如下板卡显示的 boot 的分区为 xr_lv298.
我们去板卡的 host vm 下看下分区情况:
[host:~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 29.8G 0 disk
|-sda1 8:1 0 1.1G 0 part
|-sda2 8:2 0 5G 0 part
|-sda3 8:3 0 23.7G 0 part
| |-panini_vol_grp-host_data_scratch_lv0 253:0 0 2G 0 lvm /misc/scratch
| |-panini_vol_grp-host_data_log_lv0 253:1 0 500M 0 lvm /var/log
| |-panini_vol_grp-host_data_config_lv0 253:2 0 100M 0 lvm /misc/config
| |-panini_vol_grp-calvados_data_lv0 253:3 0 2G 0 lvm
| |-panini_vol_grp-xr_data_lv0 253:4 0 2G 0 lvm
| |-panini_vol_grp-host_lv291 253:5 0 1000M 0 lvm
| |-panini_vol_grp-calvados_lv292 253:6 0 2.5G 0 lvm
| |-panini_vol_grp-xr_lv293 253:7 0 3.9G 0 lvm
| |-panini_vol_grp-xr_lv298 253:8 0 3.9G 0 lvm
| |-panini_vol_grp-host_lv298 253:9 0 1000M 0 lvm /
| `-panini_vol_grp-calvados_lv298 253:10 0 2.5G 0 lvm
`-sda4 8:4 0 76.3M 0 part
[host:~]$
[host:~]$
[host:~]$
[host:~]$ lsblk | grep xr_lv
| |-panini_vol_grp-xr_lv293 253:7 0 3.9G 0 lvm
| |-panini_vol_grp-xr_lv298 253:8 0 3.9G 0 lvm
能看到,除了 xr_lv298 以外,我们还有一个 xr_lv293 的分区, 那这个 xr_lv293 就是我们升级前创建的系统分区;
即使我们使用 install remove inactive 命令, 该分区也不会被删除。如果想删除磁盘上不用的分区,可以 re-image 这块板卡,及从引擎引导一个最新的系统,覆盖之前所有的分区, 命令:
sysadmin-vm:0_RSP1# hw-module location 0/1 bootmedia network