LVM源码分析1-概览

获取CentOS LVM源码

$ which lvmetad
/usr/sbin/lvmetad
$ rpm -qf /usr/sbin/lvmetad
lvm2-2.02.130-5.el7_2.5.x86_64

$ which lvmpolld
/usr/sbin/lvmpolld
$ rpm -qf /usr/sbin/lvmpolld
lvm2-2.02.130-5.el7_2.5.x86_64

$ cd ~/rpmbuild
$ yumdownloader --source lvm2
$ rpm -ivh lvm2-2.02.130-5.el7_2.5.src.rpm

$ rpmbuild -bp SPECS/lvm2.spec
$ mkdir -pv /opt/lvm2
$ cp BUILD/LVM2.2.02.130/ /opt/lvm2/ -rv

$ rpmbuild -ba SPECS/lvm2.spec
$ ls RPMS/x86_64/lvm* -l | awk '{print $9}'
RPMS/x86_64/lvm2-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-cluster-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-cluster-standalone-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-debuginfo-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-devel-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-libs-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-lockd-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-python-libs-2.02.130-5.el7.centos.5.x86_64.rpm
RPMS/x86_64/lvm2-sysvinit-2.02.130-5.el7.centos.5.x86_64.rpm	

获取LVM官方源码

$ mkdir -pv /opt/lvm2
$ cd /opt/lvm2
$ git clone git://git.fedorahosted.org/git/lvm2.git src
$ mkdir -v build target
	
$ yum install dlm-devel pkgconfig systemd-units device-mapper-persistent-data \
corosynclib-devel libblkid-devel
$ cd build
$ ../src/configure --prefix=/opt/lvm2/target/ --enable-applib --enable-cmdlib \
--enable-lvmetad --enable-lvmpolld --enable-cmirrord --enable-debug --enable-lockd-dlm \
--enable-pkgconfig --enable-write_install --enable-dmeventd --enable-nls
	
$ make
$ make install
	
$ export LD_LIBRARY_PATH=/opt/lvm2/target/lib/:$LD_LIBRARY_PATH
$ export PATH=/opt/lvm2/target/sbin:$PATH
$ ./tools/lvm help

查看目标文件

$ cd ../target
$ tree .
.
├── include
│   ├── libdevmapper.h
│   ├── lvm2app.h
│   └── lvm2cmd.h
├── lib
│   ├── device-mapper
│   │   ├── libdevmapper-event-lvm2mirror.so
│   │   ├── libdevmapper-event-lvm2raid.so
│   │   ├── libdevmapper-event-lvm2snapshot.so
│   │   └── libdevmapper-event-lvm2thin.so	│   ├── libdevmapper.so.1.02
│   ├── libdevmapper-event-lvm2.so.2.02
│   ├── libdevmapper-event.so.1.02
│   ├── libdevmapper.so.1.02
│   ├── liblvm2app.so.2.2
│   ├── liblvm2cmd.so.2.02
│   └── ...
├── sbin
│   ├── blkdeactivate   # 去激活块设备
│   ├── cmirrord        # 记录日志
│   ├── dmeventd        # 接收DM事件(比如说精简卷已满的事件)
│   ├── dmsetup         # 配置DM设备用户工具
│   ├── fsadm           # 调整文件系统大小
│   ├── lvm             # LVM命令的最终执行程序
│   ├── lvmconf         # 修改LVM配置
│   ├── lvmdump         # 导出当前LVM信息
│   ├── lvmetad         # 元数据缓存守护进程
│   ├── lvmlockctl      # 操作lvmlockctl的命令
│   ├── lvmlockd        # LVM锁守护进程,可以使用sanlock或者dlm
│   ├── lvmpolld        # LVM命令后台执行进程
│   └── ...
└── share
    └── man
        └── man8
        ...
8 directories, 118 files

可见LVM不仅提供LVM命令,还提供与DM驱动进行通信和LVM的编程接口。

查看命令的库依赖

$ find sbin -type f | xargs ldd
sbin/lvmlockd:
	linux-vdso.so.1 =>  (0x00007fff3b197000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f83e7977000)
	libdevmapper.so.1.02 => /opt/lvm2/target/lib/libdevmapper.so.1.02 (0x00007f83e7707000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f83e74ff000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f83e72e3000)
	libdlm_lt.so.3 => /lib64/libdlm_lt.so.3 (0x00007f83e70dd000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f83e6d1b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f83e7bae000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f83e6af6000)
	libsepol.so.1 => /lib64/libsepol.so.1 (0x00007f83e68b0000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f83e65ae000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f83e634d000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f83e6127000)
sbin/lvmconf:
	不是动态可执行文件
sbin/lvmetad:
	linux-vdso.so.1 =>  (0x00007fff5af8c000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f84a23e9000)
	libdevmapper.so.1.02 => /opt/lvm2/target/lib/libdevmapper.so.1.02 (0x00007f84a2179000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f84a1f71000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f84a1d55000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f84a1992000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f84a2834000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f84a176d000)
	libsepol.so.1 => /lib64/libsepol.so.1 (0x00007f84a1528000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f84a1225000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f84a0fc4000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f84a0d9f000)
	sbin/lvm:
	linux-vdso.so.1 =>  (0x00007ffe85933000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ff248621000)
	libdevmapper-event.so.1.02 => /opt/lvm2/target/lib/libdevmapper-event.so.1.02 (0x00007ff248418000)
	libdevmapper.so.1.02 => /opt/lvm2/target/lib/libdevmapper.so.1.02 (0x00007ff2481a9000)
	libreadline.so.6 => /lib64/libreadline.so.6 (0x00007ff247f63000)
	librt.so.1 => /lib64/librt.so.1 (0x00007ff247d5a000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ff247998000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff248c54000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff247773000)
	libsepol.so.1 => /lib64/libsepol.so.1 (0x00007ff24752d000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff247311000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ff24700f000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007ff246de4000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff246b83000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ff24695e000)
sbin/lvmlockctl:
	linux-vdso.so.1 =>  (0x00007ffeca352000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f7b56c09000)
	libdevmapper.so.1.02 => /opt/lvm2/target/lib/libdevmapper.so.1.02 (0x00007f7b56999000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f7b565d7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7b56e40000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f7b563cf000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f7b561a9000)
	libsepol.so.1 => /lib64/libsepol.so.1 (0x00007f7b55f64000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7b55d48000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f7b55a45000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f7b557e4000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f7b555bf000)
sbin/blkdeactivate:
	不是动态可执行文件
sbin/lvmpolld:
	linux-vdso.so.1 =>  (0x00007ffc0df4d000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f36a272f000)
	libdevmapper.so.1.02 => /opt/lvm2/target/lib/libdevmapper.so.1.02 (0x00007f36a24bf000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f36a22b7000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f36a209b000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f36a1cd8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f36a2966000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f36a1ab3000)
	libse
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值