Blog

  • linux创建lvm

    一、概念:

    1).PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。
    2).VG(Volume Group):物理卷组,建立在PV之上,可以含有一个到多个PV。
    3).LV(Logical Volume):逻辑卷,建立在PV之上,相当于原来分区的概念。不过大小可动态改变。
    4).PE(Physical Extend):物理区域,PV中可以用于分配的最小存储单位,可以在建立PV时指定,如1,2,4,8… …64M,同一VG中的所有PV的PE应该相同。
    5).LE(Logical Extend):逻辑区域,LV中可以用于分配的最小存储单元,取决于LV所在PV中PE的大小,是PE的整数倍。
    6).VGDA(Volume Group Descriptor Area):卷组描述区域,存在于每个PV中,用于描述该PV本身、PV所含VG、VG中的LV以及LV中的物理区域分配等信息,在使用pvcreate命令建立PV时建立。

    二、步骤:

    1).建立LVM类型的分区
    2).建立LVM物理卷PV
    3).建立LVM卷组VG
    4).建立LVM逻辑卷LV
    5).建立文件系统
    6).挂接文件系统
    7).使用文件系统

    三、示例

    有硬盘sdb和sdc,sdb打算存数据盘,sdc用做数据的备份,为了防止以后空间不足等情况,需要创建lv,并分别挂载到/data和/backup下。

    1).要使用新硬盘,创建物理卷,这里使用整块硬盘

    pvcreate /dev/sdb
    pvcreate /dev/sdc

    pvdisplay:显示PV属性
    pvscan:在系统所有硬盘上查找PV
    pvdata:显示某个PV的详细信息

    2).将两块硬盘分别创建并加入不同的组datavg和backupvg

    vgcreate data /dev/sdb
    vgcreate backup /dev/sdc

    vgdisplay:显示卷组的属性
    vgscan:查找系统现有VG卷组
    vgdata:显示VG卷组上的VGDA信息
    vgchange:改变VG卷组属性
    此命令有两个常用的参数:
    -a:,–available{y|n}:在操作VG时,控制一个VG的可使用性,换句话说控制一个VG能否被系统内核识别。
    -x,–allocation{y|n}:控制一个VG能否被扩充或者缩减(控制一个VG内的PV能否被分配)。
    vgextend:用于向VG中添加新的PV
    如 vgextend datavg /dev/sda6
    vgreduce:用于从VG中删除PV
    如 vgreduce datavg /dev/sda6
    vgmerge:用于合并卷组。待合并的VG必须处于非活动状态。
    例如:将demoVG2合并到demoVG1中
    vgchange -a n demoVG1
    vgchange -a n demoVG2
    vgmerge demoVG1 demoVG2

    vgsplit:用于拆分已经存在的VG,VG必须处于活动状态。

    vgchange -a y demoVG2
    vgsplit demoVG2 demoVG4 /dev/hdd2 /dev/hdd5 /dev/hdd6 /dev/hdd7

    vgremove:用于删除VG,要求待删除的VG必须处于非激活状态。
    vgchange -a n demoVG1
    vgremove demoVG1

    vgrename:用于重命名VG,不要求VG处于非激活状态。
    vgrename demoVG2 demoVG3

    3)、创建逻辑卷

    由于这里要使用整个磁盘,所以在datavg和backupvg中分别建立datalv,backuplv

    lvcreate -l 100%FREE -n datalv datavg
    lvcreate -l 100%FREE -n backuplv backupvg

    lvdisplay:显示LV的属性
    lvscan:查找系统现有LV
    lvdata:显示LV上的LVDA信息
    lvchange:改变LV属性
    lvextend:扩展LV容量。LVM的最突出特点就是随时动态的调整LV空间大小。
    如lvextend -L +10m /dev/demoVG1/demoLV11 (为demoLV11增加10MB的空间)

    创建50% vg大小的lv
    lvcreate -l 50%VG -n lv001 vg001
    创建使用余下所有vg大小的lv
    lvcreate -l 100%FREE -n lv002 vg002
    创建100M大小的lv
    lvcreate -L 100M -n lv003 vg003

    lvreduce:减小LV容量。
    例如:
    lvextend -L -10m /dev/demoVG1/demoLV11 (为demoLV11减少10MB的空间)

    vrename:LV重命名
    例如:
    lvrename /dev/demoVG1/demoLV11 /dev/demoVG1/demoLV01
    lvremove:删除LV(逻辑卷)

    例如:
    lvremove /dev/demoVG1/demoLV01 <11>resize2fs/e2fsadm/resize_reiserfs:类似于extend命令。

    4).创建文件系统

    mkfs.ext4 /dev/datavg/datalv
    mkfs.ext4 /dev/backupvg/backuplv

    5).挂载文件系统

    mount /dev/datavg/datalv /data
    mount /dev/backupvg/backuplv /backup

    保证重启后还能用,/etc/fstab中加入

    /dev/jira/jiralv /var/lib/jira ext4 defaults 0 1
    /dev/backup/backuplv /var/lib/backup ext4 defaults 0 1

    LVM相关命令

    <1>lvmdiskscan:检测硬盘和分区中的逻辑卷管理信息
    <2>lvmsadc:收集逻辑卷的读写统计信息
    <3>lvmsar:查看LVM的日志文件信息
    <4>lvmchange:复位LVM组件

  • 使用dhclient重新获取ip地址

    dhcp的全称是Dynamic Host Configuration Protocol

    dhclient则是Dynamic Host Configuration Protocol client

    使用dhclient重新在dhcp服务器攻取ip地址

    dhclient -r eth0
    ifconfig eth0 down
    ifconfig eth0 up
    dhclient eth0

    经过上面操作,就会获取到新的ip地址。

    centos6的dhclient的信息缓存在/var/lib/dhclient/dhclient-*.leases

  • 建立一个yum源

    使用的工具是createrepo

    首先创建目录,

    mkdir -p mirrors.jpuyy.com/centos/6.4/os/x86_64

    并进入到此目录,执行

    createrepo .

    在当前目录下生成了repodata目录,记录了repo的信息。
    最终的rpm包都要放到Packages下

    目录结构参考http://mirrors.sohu.com。centos6的目录软链接到centos6.4

    mirrors.jpuyy.com
    └── centos
        ├── 6 -> 6.4
        ├── 6.0
        └── 6.4
            ├── centosplus
            ├── contrib
            ├── cr
            ├── extras
            ├── fasttrack
            ├── isos
            ├── os
            │   └── x86_64
            │       ├── EFI
            │       ├── images
            │       ├── isolinux
            │       ├── Packages
            │       │   ├── MariaDB-5.5.31-centos6-x86_64-client.rpm
            │       │   ├── MariaDB-5.5.31-centos6-x86_64-common.rpm
            │       │   ├── MariaDB-5.5.31-centos6-x86_64-devel.rpm
            │       │   ├── MariaDB-5.5.31-centos6-x86_64-server.rpm
            │       │   ├── MariaDB-5.5.31-centos6-x86_64-shared.rpm
            │       │   └── MariaDB-5.5.31-centos6-x86_64-test.rpm
            │       └── repodata
            │           ├── 0c2ce006b4ccb96b4d0947584daab68e971f25f0c59a2f856895a3dcc4760e0b-primary.xml.gz
            │           ├── 2a827a63089cb7561b755baff2c1ae4c202cd74a1a92e1274e85f9e4dac569a0-other.sqlite.bz2
            │           ├── 3e5e63e57c07f479edc526404f28c63c1ad097670cde380d3866b63090d6f3e0-filelists.xml.gz
            │           ├── 44a30e7cd6fd27e8f820ba7a50d329c99428ea68b4f0904475c5ee8961c1c8ec-primary.sqlite.bz2
            │           ├── b3d59bc4f2a6c3c198798e188b4a0d0af99692efaa88f989c47df4c036fea210-filelists.sqlite.bz2
            │           ├── f94e27df58d67783e29dd0aeca51ff7ffec2bc501e0f82e0a4c7d843dcb2cb6c-other.xml.gz
            │           └── repomd.xml
            ├── updates
            └── xen4

    这里的repo使用http提供服务,所以在nginx下,如果要酷一些的页面,可以编译nginx,添加fancyindex模块,http://wiki.nginx.org/NginxNgxFancyIndex

    server {
        listen 80;
        server_name mirrors.jpuyy.com;
        location / {
            root /data/mirrors.jpuyy.com/;
            autoindex on;
        }
    }

    在需要使用此源服务器上,添加/etc/yum.repos.d/jpuyy-mirrors.repo,写入

    [mirror-of-jpuyy]
    name=mirror-of-jpuyy
    baseurl=http://mirrors.jpuyy.com/centos/$releasever/os/$basearch/
    enabled=1
    gpgcheck=0

     

     

  • CentOS6禁用ipv6

    1.修改/etc/sysconfig/network,添加:

    NETWORKING_IPV6=no

    2.修改/etc/hosts,将ipv6的那句本地主机名解析的也注释掉:

    #::1 localhost localhost6 localhost6.localdomain6

    3.让系统不加载ipv6相关模块,这需要修改modprobe相关设定文件,可以新建一个/etc/modprobe.d/ipv6off.conf,添加

    alias net-pf-10 off
    options ipv6 disable=1

    4.重启系统,使用如下命令确认已经生效:

    [root@test ~]# lsmod | grep -i ipv6
    [root@test ~]# ifconfig | grep -i inet6

    参考:http://www.litvip.com/499/

  • 制作MariaDB5.5.31的rpm包

    制作MariaDB的rpm包使用CMake CPack Package Generators,这种制作出来的包叫做CPackRPM包。

    首先安装好环境(必须全部检查):

    bzr > 2.0
    gunzip
    GNU tar
    gcc 2.95.2 or later
    g++
    GNU make 3.75 or later
    libtool 1.5.24 or later
    bison (2.0 for MariaDB 5.5)
    libncurses (在centos下名为ncurses-devel)
    zlib-dev
    GNU automake
    GNU autoconf
    cmake >= 2.8.7 (在centos下名为cmake28)

    使用非root用户,将下载好的mariadb-5.5.31.tar.gz解压,这里是 /home/jpuyy/mariadb-5.5.31。

    将要编译的参数写到cmake后面,这里是最关键的是制作rpm包的参数-DRPM=centos6,语句的最后要有一个点号,表示在当前目录生成。

    cmake28 -DRPM=centos6 \
    -DCMAKE_INSTALL_PREFIX=/usr/local/DBServer/MariaDB5.5.31 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_EXTRA_CHARSETS=complex .

    当最后几行是如下信息时,表示检查编译通过

    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/jpuyy/mariadb-5.5.31

    打包

    make package

    连spec文件都不用写,cmake会自动生成制作rpm的环境,位置在/home/jpuyy/mariadb-5.5.31/_CPack_Packages/Linux/RPM

    最后生成的rpm包如下

    MariaDB-5.5.31-centos6-x86_64-client.rpm
    MariaDB-5.5.31-centos6-x86_64-common.rpm
    MariaDB-5.5.31-centos6-x86_64-devel.rpm
    MariaDB-5.5.31-centos6-x86_64-server.rpm
    MariaDB-5.5.31-centos6-x86_64-shared.rpm
    MariaDB-5.5.31-centos6-x86_64-test.rpm

    这些包的作用

    https://kb.askmonty.org/en/about-the-mariadb-rpm-files/

    安装方法:

    需要解决冲突和依赖

    冲突:查找已经安装的mysql包,rpm -qa ‘mysql*’,移除查找到的mysql包

    rpm -e mysql-libs-5.1.66-2.el6_3.x86_64 --nodeps
    rpm -e `rpm -qa mysql-libs*` --nodeps
    

    依赖:在执行rpm -ivh MariaDB-5.5.31-centos6-x86_64*时,如果出现依赖,如

    error: Failed dependencies:
    perl(DBI) is needed by MariaDB-server-5.5.31-1.x86_64
    perl(Time::HiRes) is needed by MariaDB-test-5.5.31-1.x86_64

    可以yum安装perl-DBI,perl-Time-HiRes。也可以使用

    rpm -ivh MariaDB-5.5.31-centos6-x86_64-* --nodeps

    不去检测依赖。PS:有些依赖确实无用可不用安装。

    参考:

    https://kb.askmonty.org/en/source-building-mariadb-on-centos/

    https://kb.askmonty.org/en/installing-mariadb-with-the-rpm-tool/

  • 查看路由与添加删除静态路由

    静态路由可以细化,定制网络运行方式。很多时候网络走不通,也要加静态路由,指定包的转发。

    显示当前的路由表

    root@agent-test:~# ip route show
    default via 192.168.198.2 dev eth0 
    192.168.198.0/24 dev eth0  proto kernel  scope link  src 192.168.198.137

    内核的路由表

    root@agent-test:~# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    default         localhost       0.0.0.0         UG    0      0        0 eth0
    192.168.198.0   *               255.255.255.0   U     0      0        0 eth0

    内核的路由表,全部使用数字方式显示

    root@agent-test:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.198.2   0.0.0.0         UG    0      0        0 eth0
    192.168.198.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

    添加路由,格式为 ip route add {目标网络} via {ip地址} dev {设备},如192.168.3.0/24的网络从192.168.1.254走

    ip route add 192.168.3.0/24 via 192.168.1.254 dev eth0

    旧命令格式为

    route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth1

    以上命令立即生效,重启失效。永久静态路由

    如CentOS下

    #vi /etc/sysconfig/network-scripts/route-eth0

    既可以如下添加一行

    10.0.0.0/8 via 10.9.38.65

    也可以按这种格式

    ADDRESS0=192.168.0.62
    NETMASK0=255.255.255.255
    GATEWAY0=192.168.8.51
    ADDRESS1=192.168.0.71
    NETMASK1=255.255.255.255
    GATEWAY1=192.168.8.51
    ADDRESS2=192.168.1.0
    NETMASK2=255.255.255.0
    GATEWAY2=192.168.8.28

    重启网络后生效

    在Debian下,找到对应的interface,编辑/etc/network/interface

    auto eth0
    iface eth0 inet static
    address 10.9.38.76
    netmask 255.255.255.240
    network 10.9.38.64
    broadcast 10.9.38.79
    ### static routing ###
    post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.9.38.65
    pre-down route del -net 10.0.0.0 netmask 255.0.0.0 gw 10.9.38.65

    在启动eth0时,添加一条路由,关闭时删掉对应路由即可。

    除了路由的添加删除,可以使用ip route replace改变已有路由的属性。如

    ip route replace default via 192.168.8.33 dev eth0

    关于默认路由,在CentOS中,既可以在/etc/sysconfig/networ-scripts/ifcfg-eth0中指定gateway,也可以在/etc/sysconfig/network中指定gateway,也可以在上面的ip route add default via 192.168.8.1 dev eth0。