设备文件管理方法

2_设备文件管理方法

devfs

Linux早期采用的静态管理方法
/dev目录下由大量静态文件
内核版本2.6.13开始被完全取代

udev

只有连接系统上来的设备才在/dev下创建设备文件
与主、次设备编号无关
为设备提供持久、一致的名字
设备命名规则按设备被加载的顺序命名

接入设备事件链

内核发现设备并导入设备状态到sysfs
udev接到事件统治
udev创建设备节点或是运行指定程序
udev通知hald守护进程
HAL探测设备信息
HAL创建设备对象结构
HAL通过系统消息总线广播该事件
用户程序也可以监控该事件

udev的作用

从内核收到添加/一出硬件事件时,udev将会分析:
/sys目录下信息
/etc/udev/rules.d目录中的规则
基于分析结果,udev会:
处理设备命名
决定要创建那些设备文件或链接
决定如何设置属性
决定触发那些事件

工作过程

当设备接入,设备信息固定的信息(容量、生产厂商、型号)就会被加载进入内存里面,存入udev配置文件里面

获取已经接口入设备的信息

编写udev规则文件
    vim /etc/udev/rules.d/50-iscsidisk.rules  //文件命名规则1~99 必须有“-”
                            后面是描述信息,以.rules结尾
    udev主配置文件
    vim /etc/udev/udev.conf  //处理详细,不用做处理,保持默认就好
    udev_root:创建设备文件位置,默认为/dev
    udev_rules:udev规则文件位置,默认为/etc/udev/rules.d
    udev_log:syslog优先级,缺省为err

实验:

问题:

   在linux系统中,一切设备皆文件,由于新增设备加载顺序的先后不同,导致相同设备在/dev下的文件名不
同,由而引发在服务与存储分离中分区(磁盘)共享时的挂载问题

目的:

   在设备连接上系统时,系统自动给相同设备创建一个链接文件,以后有对该共享设备操作时,利用该链接文
件即可对该设备进行操作,解决实验问题

准备:

client50:192.168.4.50
storage51:192.168.4.51

1.显示系统的设备信息

udevadm monitor --property

2.获取设备的物理路径

    udevadm info -q path -n /dev/sdd
    /devices/platform/host4/session2/target4:0:0/4:0:0:0/block/sdd

3.查看系统识别该设备的参数信息 键值类型

    udevadm info -q all -p
    /devices/platform/host4/session2/target4:0:0/4:0:0:0/block/sdd -a
        UBSYSTEM=="block"                //设备类型,是一个块设备
        ATTR{size}=="10483712"           //设备的大小
        ATTRS{model}=="diskb           "  //该设备的型号,空格不能少
        ATTRS{vendor}=="LIO-ORG "   //生产厂商信息

4.将以上信息写入/etc/udev/rules.d/50-iscsidisk.rules

UBSYSTEM=="block",  ATTR{size}=="10483712", ATTRS{model}=="diskb         ",
ATTRS{vendor}=="LIO-ORG ",  SYMLINK+=”iscsi/vdc”
    //当该设备登入后,会对该设备创建一个链接/dev/iscsi/vdc,每个逗号后面的空格不能少

5.验证:

    把iscsi设备登出,再登入,查看ls /dev/iscsi/vdc 链接文件存在即成功
        登出设备
        iscsiadm --mode node --targetname
        iqn.2018-10.cn.tedu.storage51:vdb --portal 192.168.1.1:3260 --logout
        登陆设备
        iscsiadm --mode node --targetname
        iqn.2018-10.cn.tedu.storage51:vdb --portal 192.168.1.1:3260 --login

配置Multipath多路径

问题:

   单网卡连接之间的网络存储设备的共享不可靠,容易由于非人为破坏导致共享断开,由而引发设置多网卡,
然后让多网卡对相同设备进行连接,然而,多网卡之间连接相同的共享设备时,相同设备不同连接不可以进
行相互冗余,致使连接无意义

目的:

使多张网卡之间的连接相同的共享设备时可以形成相互冗余、备份,高可用

准备:

添加网卡eth1
client50:192.168.2.50
storage51:192.168.2.51

登出iscsi设备,分别使用下面设备登陆

    ]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.51 --discover //发现
    ]# iscsiadm --mode node --targetname                                   //登陆
       iqn.2018-10.cn.tedu.storage51:vdb --portal 192.168.2.51:3260 --login
    ]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.51 --discover //发现
    ]# iscsiadm --mode node --targetname                        //登陆
       iqn.2018-10.cn.tedu.storage51:vdb --portal 192.168.4.51:3260 --login

安装多路径软件包

    yum -y install device-mapper-multipath.x86_64
    mpathconf --user_friendly_names n   //设置非友好方式产生以下配置文件
    ls /etc/multipath.conf              //由上一个命令产生的文件
    /usr/lib/udev/scsi_id --whitelisted --device=/dev/sda
        360014051854c2ad423e4170a9e4ca149
                                //该设备是iscsi设备,会出现一个值

配置/etc/multipath.conf文件

    vim /etc/multipath.conf
        //此处内容不动
        23 defaults {
        24         user_friendly_names no //设置非友好方式产生以下配置文件
        25         find_multipaths yes
        26 }
        //以下内容为新增
        97 multipaths {
        98         multipath {
        99          wwid "360014051854c2ad423e4170a9e4ca149"
           100          alias mpatha
           101 }
           102 }

启用Multipath多路径,并测试

    multipath -rr   //重新加载多路径信息
       |-+- policy=‘service-time 0‘ prio=1 status=enabled
       | `- 14:0:0:0 sda 8:0  active ready running
       `-+- policy=‘service-time 0‘ prio=1 status=enabled
       `- 15:0:0:0 sdb 8:16 active ready running
    multipath -ll   //查看多路径信息
    ifdown eth1
    multipath -rr  //重新加载后就会少一个网口的信息
       |-+- policy=‘service-time 0‘ prio=1 status=enabled
       | `- 14:0:0:0 sda 8:0  active ready running
    multipath -ll

以上所有实验都是基于Red Hat Enterprise Linux Server release 7.4 (Maipo)

原文地址:http://blog.51cto.com/12284146/2296093

时间: 2024-10-13 18:17:44

设备文件管理方法的相关文章

iOS 获取最新设备型号方法

1.IOS 获取最新设备型号方法 列表最新对照表:http://theiphonewiki.com/wiki/Models 方法: #import "sys/utsname.h" struct utsname systemInfo; uname(&systemInfo); NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

centos/ubuntu挂载vmdk、 vdi为块设备的方法(非vdfuse)

因vdfuse只支持virtualbox4.x,目前已经在新版ubuntu或centos中取消,换个思路,可以使用qemu+nbd的方法挂载vmdk,vdi,vhd,vhdx等格式的磁盘. 以下方法在centos7上实现. 1.编译内核,编译nbd为模块. yum groupinstall "DevelopmentTools" yum install gcc ncurses ncurses-devel bc yum update wget https://www.kernel.org/

iscsi target存储技术-多路径 udev动态管理设备文件方法 nfs

惠普 戴尔 华为 目前国内服务器厂商排名 存储技术分类: SCSI小型计算机系统接口DAS直连式存储NAS网络技术存储SAN存储区域网络FC光纤通道 SCSI小型计算机系统接口 (U盘) DAS技术:直连式存储(将存储设备通过scsi接口或光纤通道直连到计算机上,不能实现数据与其它主机的共享,占用服务器操作系统资源cpu,io等,数据量越大,性能越差) NAS网络技术存储  做公享文件夹  (这是一种专用数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据,提高性能,节省成本)

判断当前iOS设备的方法

1.在程序中涉及到全屏的宽高的时候,初始化的时候,代码中不要写320和480 #define Screen_height [[UIScreen mainScreen] bounds].size.height #define Screen_width [[UIScreen mainScreen] bounds].size.width  2.使用宏定义方法判断 #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(curren

JS判断移动设备最佳方法 并实现跳转至手机版网页

方法一:纯JS判断 使用这方法既简单,又实用,不需要引入jQuery库,把以下代码加入到<head>里即可. <script type="text/javascript"> if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { window.location = "mobile.html"; //可以

功能自动化测试工具 Selenium 各个浏览器以及Android设备驱动方法

SeleniumTest https://github.com/WeikiForNtt/SeleniumTest.git 这几天在做Selenium的测试,各个浏览器都做了下调查,共享一下所得 (1),Selenium具体是个什么东西,自己去百度,官网http://docs.seleniumhq.org/,如果打不开,要开VPN访问. (2),Selenium对Web浏览器驱动 (2-1),根目录下有个Selenium总结.xlsx文件,供参照,有一些配置时候的注意点 (2-2),drivers

网页自适应不同浏览设备的方法

网页自适应可使网站从桌面电脑显示器到智能手机或其他移动产品设备上具有更好的阅读体验,具体方法如下: 1.在HTML头部增加viewport标签. 在网站HTML文件的开头,增加viewport meta标签告诉浏览器视口宽度等于设备屏幕宽度,且不进行初始缩放.代码如下: <meta name="viewport" content="width=device-width, initial-scale=1" /> 这段代码支持Chrome.Firefox.I

微信小程序中获取高度及设备的方法

由于js中可以采用操纵dom的方法来获取页面元素的高度,可是在微信小程序中不能操纵dom,经过查找之后发现仅仅只有以下几个方法可以获取到高度 wx.getSystemInfoSync().windowWidth // 获取当前窗口的宽度 wx.getSystemInfoSync().windowHeight // 获取当前窗口的高度 wx.getSystemInfoSync().model // 获取当前采用的设备 wx.getSystemInfoSync().pixelRatio wx.get

[方法提炼] 获取Android设备序列号方法

通过这个方法可以检测设备是否连接成功,如果有一台或者多台设备,可以将所有设备序列号全部输出 1 # -*- coding:utf-8 -*- 2 import os 3 4 def attachDeviceList(): 5 device_list = [] 6 cmd_output = os.popen("adb devices","r").read().split()[4:] # 从输出的列表中第5个开始为设备序列号,将后面所有内容全部输出 7 for i in