前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解Lustre分布式文件系统之Utils工具篇

深入理解Lustre分布式文件系统之Utils工具篇

作者头像
用户4700054
发布2022-08-17 12:54:27
1.5K0
发布2022-08-17 12:54:27
举报
文章被收录于专栏:存储内核技术交流

2.1 基本介绍

  • 管理类的utils工具是Lustre提供用来调整不同配置的工具。这些配置工具包括创建后端的块设备扩展Lustre文件系统中的ost更改文件的布局等一系列的功能。如下列举了Lustre文件系统中的工具命令的使用用途。
  • mkfs.lustre :用来ldikfs/zfs文件系统来格式化一个磁盘。
代码语言:javascript
复制
// 使用zfs格式化后端磁盘
$ wipefs -a /dev/sdg
$ mkdir -p /lustre/mdt
$ mkfs.lustre --fsname=bigfs --mgs --mdt --index=0   --backfstype=zfs --reformat mdspool/mdt /dev/sdg 
$ mount.lustre mdspool/mdt /lustre/mdt/

// 使用ldiskfs格式化后端的磁盘
$ wipefs -a /dev/sdc
$ mkfs.lustre --ost  --backfstype ldiskfs --reformat --fsname perrynfs --index 0 --mgsnode CentOS-Lustre-Server@tcp0 /dev/sdc
$ mount -t lustre /dev/sdc /ost0
  • tunefs.lustre:更改lustre后端磁盘块设备的配置信息。使用方式参照:tunefs.lustre [options] /dev/device
代码语言:javascript
复制
// tunefs.lustre --erase-params --param=new_parameters 这个命令擦除旧参数 ,设置新的参数

// 修改某个ost的的mgsnode
$ tunefs.lustre --erase-param --mgsnode=CentOS-Lustre-Server@tcp0 --writeconf /dev/sda

// 设置某个ost的mgsnode
$ tunefs.lustre --param="failover.node=192.168.0.13@tcp0" /dev/sda
  • lctl :用来控制lustre功能的接口,包括一些配置变更和调试功能等。基本的使用语法参照 lctl [--device devno] command [args].
代码语言:javascript
复制
// command:dl dk device network up|down list_nids ping nid  quit

// 展示本地lustre obd信息
$ lctl dl

// 打印本地节点所有的nids信息
$ lctl list_nids
  • mount.lustre:用来启动lustre客户端或者lustre服务端的后端服务.
  • lfs:lustre提供配置和查询文件相关的工具,比如设置文件的stripe,查询文件的stripe.使用lfs来查找文件功能。
代码语言:javascript
复制
$ lfs find /mnt/lustre 
/mnt/lustre
/mnt/lustre/stripe_1_data
/mnt/lustre/stripe_1_data/go.tar.gz
/mnt/lustre/stripe_3_data
/mnt/lustre/stripe_3_data/go.tar.gz
/mnt/lustre/stripe_3_data/data.tar.gz
/mnt/lustre/stripe_3_data/demo.tar.gz

2. 2 lfs工具

  • lfs可以用来配置和监控lustre整个文件系统。在lustre文件系统中最常用的有设定指定stripe创建新文件、查看文件的stripe、查询文件的扩展属性、列举当前ost的信息、设置quota的限制等操作。
代码语言:javascript
复制
// 设置模具路
$ lfs setstripe -S 1M -c 3 /mnt/lustre/stripe_3_data/

// 查看lustre文件系统的容量信息
$ lfs df
UUID                   1K-blocks        Used   Available Use% Mounted on
perrynfs-MDT0000_UUID     9275752        2328     8436212   1% /mnt/lustre[MDT:0] 
perrynfs-OST0000_UUID    15813024       20208    14937572   1% /mnt/lustre[OST:0] 
perrynfs-OST0001_UUID    15813024       17172    14940608   1% /mnt/lustre[OST:1] 
perrynfs-OST0002_UUID    15813024       16784    14940996   1% /mnt/lustre[OST:2] 

filesystem_summary:     47439072       54164    44819176   1% /mnt/lustre

// 获取文件的扩展属性和文件布局信息
$ lfs getstripe /mnt/lustre/stripe_3_data/demo.tar.gz 
/mnt/lustre/stripe_3_data/demo.tar.gz
lmm_stripe_count:  3
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    0
lmm_stripe_offset: 1
        obdidx           objid           objid           group
             1               4            0x4                0
             2               4            0x4                0
             0               5            0x5                0

lfs_migrate功能

  • lfs_migrate工具用来在lustre的osts之间进行数据的迁移。这个迁移分为两个步骤,第一拷贝指定文件到临时文件;第二步是目标文件和临时文件进行交换来完成迁移。lfs_migrate能够解决lustre集群中OST之间的空间协调。
代码语言:javascript
复制
// 列举当前的lustre中的所有osts,当前是有3个ost
$ lfs osts
OBDS:
0: perrynfs-OST0000_UUID ACTIVE
1: perrynfs-OST0001_UUID ACTIVE
2: perrynfs-OST0002_UUID ACTIVE

// 原始的文件布局,这个文件是有2个stripe
$ lfs getstripe /mnt/lustre/stripe_2_data/
/mnt/lustre/stripe_2_data/
stripe_count:  2 stripe_size:   1048576 pattern:       raid0 stripe_offset: -1

// data.tar.gz的数据分别在ost={0,1}上
/mnt/lustre/stripe_2_data//data.tar.gz
lmm_stripe_count:  2
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    0
lmm_stripe_offset: 0
        obdidx           objid           objid           group
             0              34           0x22                0
             1              34           0x22                0

// 把/mnt/lustre/stripe_2_data的数据从ost=perrynfs-OST0001,也就是ost index=1迁移到其他的ost
$ lfs find /mnt/lustre/stripe_2_data/ --ost perrynfs-OST0001 -size +1M | lfs_migrate -y
/mnt/lustre/stripe_2_data//data.tar.gz: done

// 迁移完成后的数据布局
$ lfs getstripe /mnt/lustre/stripe_2_data/
/mnt/lustre/stripe_2_data/
stripe_count:  2 stripe_size:   1048576 pattern:       raid0 stripe_offset: -1

// 这里已经能够看出data.tar.gz已经从ost1迁移到ost2上了
/mnt/lustre/stripe_2_data//data.tar.gz
lmm_stripe_count:  2
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    1
lmm_stripe_offset: 2
        obdidx           objid           objid           group
             2              34           0x22                0
             0              35           0x23                0

// 均衡stripe_12_data所有的数据
$ lfs_migrate /mnt/lustre/stripe_12_data/

lctl功能

  • lctl工具负责控制和配置整个lustre文件系统,其中包括设置集群的配置、启用lustre的Debug工。lctl是一个命令交互的命令,支持dl、device、network up/down、list_nids、ping nid、conn_list
代码语言:javascript
复制
$ lctl
lctl > net up
LNET configured
lctl > list_nids
10.211.55.7@tcp
lctl > net tcp

// tcp连接信息
lctl > conn_list
12345-10.211.55.6@tcp O[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 2959360/367360 nonagle
12345-10.211.55.6@tcp I[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 87040/5799648 nonagle
12345-10.211.55.6@tcp C[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 87040/367360 nonagle
// 查看device
lctl > dl

lctl > dk

// 列举出nid
lctl > list_nids
10.211.55.7@tcp
// ping nid
lctl > ping 10.211.55.7@tcp
12345-0@lo
12345-10.211.55.7@tcp
  • lctl其次可以设置或者获取集群的具体配置参数信息,使用的方式lctl set_param [-P] [-d] {obdtype}.{obdname}.{property}=value来设置lustre文件系统的参数;查看lustre文件系统中的参数可以用如下格式进行查看lctl get_param [-n] {obdtype}.{obdname}.{property}来查看。
代码语言:javascript
复制
// 在mgs或者mds节点上执行如下命令,列举出当前所有的可配置的参数列表
$ lctl list_param *.*.*

// 当前lustre系统中有如下{obdtype}
$ lctl list_param *.*.*  | awk '{split($0,b,".");print b[1]}' | awk '!a[$0]++{print}'
ldlm
lod
lov
lwp
mdd
mds
mdt
mgc
mgs
obdfilter
osc
osd-ldiskfs
osp
ost
fld
seq
nodemap
qmt


// 当前lustre系统中有如下{obdtype}.{obdname}
$ lctl list_param *.*.*  | awk '{split($0,b,".");print b[1]"."b[2]}' | awk '!a[$0]++{print}'     
ldlm.namespaces
ldlm.services
lod.perrynfs-MDT0000-mdtlov
lov.perrynfs-MDT0000-mdtlov
lwp.perrynfs-MDT0000-lwp-MDT0000
lwp.perrynfs-MDT0000-lwp-OST0000
lwp.perrynfs-MDT0000-lwp-OST0001
lwp.perrynfs-MDT0000-lwp-OST0002
mdd.perrynfs-MDT0000
mds.MDS
mdt.perrynfs-MDT0000
mgc.MGC10
mgs.MGS
obdfilter.perrynfs-OST0000
obdfilter.perrynfs-OST0001
obdfilter.perrynfs-OST0002
osc.perrynfs-OST0000-osc-MDT0000
osc.perrynfs-OST0001-osc-MDT0000
osc.perrynfs-OST0002-osc-MDT0000
osd-ldiskfs.perrynfs-MDT0000
osd-ldiskfs.perrynfs-OST0000
osd-ldiskfs.perrynfs-OST0001
osd-ldiskfs.perrynfs-OST0002
osp.perrynfs-OST0000-osc-MDT0000
osp.perrynfs-OST0001-osc-MDT0000
osp.perrynfs-OST0002-osc-MDT0000
ost.OSS
fld.srv-perrynfs-MDT0000
fld.srv-perrynfs-OST0000
fld.srv-perrynfs-OST0001
fld.srv-perrynfs-OST0002
seq.cli-cli-perrynfs-OST0000-osc-MDT0000
seq.cli-cli-perrynfs-OST0001-osc-MDT0000
seq.cli-cli-perrynfs-OST0002-osc-MDT0000
seq.cli-ctl-perrynfs-MDT0000
seq.cli-lfsck-perrynfs-MDT0000-osd
seq.cli-perrynfs-MDT0000
seq.cli-perrynfs-OST0000-super
seq.cli-perrynfs-OST0001-super
seq.cli-perrynfs-OST0002-super
seq.ctl-perrynfs-MDT0000
seq.srv-perrynfs-MDT0000
seq.srv-perrynfs-OST0000
seq.srv-perrynfs-OST0001
seq.srv-perrynfs-OST0002
nodemap.default
qmt.perrynfs-QMT0000
  • llog_reader:解析lustre配置文件的日志,然后转换为可读方式的格式,使用的语法是llog_reader {file_name}.
代码语言:javascript
复制
// 以ldiskfs的文件系统挂载mgt/mdt
$ mount -t ldiskfs /dev/sdb /mnt/mgt_mdt

// 进入mdt/mgt的CONFIGS目录
$ pwd
/mnt/mgt_mdt
$ ls -l /mnt/mgt_mdt/CONFIGS
total 88
// mountdata是挂载数据
-rw-r--r-- 1 root root 12288 Mar  2 17:51 mountdata
// 节点映射表
-rw-r--r-- 1 root root  8192 Mar  2 17:51 nodemap
// 集群参数
-rw-r--r-- 1 root root     0 Mar  2 17:51 params
// 客户端的挂载需要的数据
-rw-r--r-- 1 root root 13952 Mar  2 17:52 perrynfs-client
// mdt的配置数据
-rw-r--r-- 1 root root 12672 Mar  2 17:52 perrynfs-MDT0000
// ost的配置数据
-rw-r--r-- 1 root root  8896 Mar  2 17:52 perrynfs-OST0000
-rw-r--r-- 1 root root  8896 Mar  2 17:52 perrynfs-OST0001
-rw-r--r-- 1 root root  8896 Mar  2 17:52 perrynfs-OST0002


// dump出perrynfs-client的客户端数据,一般的格式为{fsname}-client
$ debugfs -c -R 'dump CONFIGS/perrynfs-client /tmp/perrynfs-client' /dev/sdb
debugfs 1.46.2.wc3 (18-Jun-2021)
/dev/sdb: catastrophic mode - not reading inode or group bitmaps

// 查看并解析perrynfs-client文件,这里面列举了客户端需要的所有的obd模块,客户端解析这些然后进行初始化自身所有的模块,来完成
$ ls -l -1h /tmp/perrynfs-client 
-rw-r--r-- 1 root root 14K Mar  6 21:20 /tmp/perrynfs-client

// 解析日志
$ llog_reader  /tmp/perrynfs-client 


// 查看解析mdt中的配置信息
$ debugfs -c -R 'dump CONFIGS/perrynfs-MDT0000 /tmp/perrynfs-MDT0000' /dev/sdb
debugfs 1.46.2.wc3 (18-Jun-2021)
/dev/sdb: catastrophic mode - not reading inode or group bitmaps

$ ls -l -1h /tmp/perrynfs-MDT0000 
-rw-r--r-- 1 root root 13K Mar  6 21:23 /tmp/perrynfs-MDT0000
$ llog_reader  /tmp/perrynfs-MDT0000
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.1 基本介绍
    • 2. 2 lfs工具
      • lfs_migrate功能
        • lctl功能
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档