Skip to main content

eXR filesystem

·1115 words·6 mins
Rory
Author
Rory
Step by step the ladder is ascended

研究了下 eXR 的 file system, 记录下权当了解下系统的内部情况。

本文的演示事例使用的硬件 A9K-RSP5-SE 和 eXR 742 作为案例,使用的硬件不同,升级方式不同,磁盘的大小和分区是略微存在出入的。

如果你需要一个干净的,完全纯净的分区请采用以下方式升级或安装系统:

  • USB/PXE

  • 正常 install command 升级,升级完成后 re-image 所有的板卡 (re-image 的操作,类似于 PXE 安装)

eXR 系统简介
#

如上图,eXR 是在硬件的基础上有一个 host 系统, host 系统里再 run 两个 vm (XR VM 和 sysadmin VM)。

[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_lv02.5G
vdb/dev/sda214.9G
vdc/dev/panini_vol_grp/calvados_data_lv06.9G
vdd/dev/pci_disk1/ssd_disk1_calvados_131.3G
vde/dev/sdc2747.8M
vdf/dev/sdc32.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_lv03.9G
vdb/dev/pci_disk1/xr_data_lv06.9G
vdc/dev/pci_disk1/ssd_disk1_xr_122.5G
vdd/dev/sdc13.7G
vde/dev/pci_disk1/app_lv019.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

参考
#