超详细samba+域认证+keepalived+inotify+rsync

硬盘分区

         /boot 500M ext4格式

         /boot/efi 200M vfat格式

         PV

         VG: LV1swap(两倍内存) LV2root(根目录ext4格式50G够了)LV3data(数据目录xfs格式)

系统装完以后先yum –y update 更新一下

如果setfacl显示不支持的操作那么需要让硬盘支持aclmount -o remount,acl /XXXX

 

使用ACL必须要在目录下挂载,具体查询网站编辑磁盘文件即可

注意主备机从域内get到的用户ID是否一样

备份事宜要做好

 

修改网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0                    #网卡名字

TYPE=Ethernet                          #网络类型 以太网

UUID=b8dbc778-11f7-43e0-9e5c-4341845b5b0a                         #UUID 做到系统中独一无二

ONBOOT=yes                   #再开机或重启网卡的时候是否启动网卡

NM_CONTROLLED=yes                   #是否受network程序管理

BOOTPROTO=none                           #网卡获取IP地址的方式a.dhcp自动获取IP地址b.none固定的IP地址c.static 固定的IP地址

HWADDR=00:50:56:AF:3D:78                          #硬件地址 MAC地址

IPADDR=192.168.58.5                     #IP地址

PREFIX=24                         #NETMASK与PREFIX的作用一样,都是配置子网掩码,只是PREFIX更简洁,两个都存在时,PREFIX优先起作用

GATEWAY=192.168.58.1                           #网关

DNS1=192.168.58.201                     #DNS地址

DEFROUTE=yes                        # yes -- 将该接口设置为默认路由。no -- 不要将该接口设置为默认路由。

USERCTL=no                    #普通用户能否控制网卡

IPV4_FAILURE_FATAL=yes              

IPV6INIT=no

NAME="System eth0"

 

yum -y update 更新系统

 

使用smb服务必须关闭防火墙iptables and selinux

Centos7防火墙:

Systemctl status firewall                                   //查看防火墙状态

Systemctl stop firewall                                      //暂时关闭防火墙

Systemctl disable firewall              //禁止开机启动

Redhate6 防火墙

临时关闭、启动:

 service iptables stop /start

 service ip6tables stop /start

永久关闭、启动:

 chkconfig --level 2345 iptables off /on

 chkconfig --level 2345 ip6tables off/on

 

常用命令:    smbpasswd –a 用户 (新建,在非域环境必须与系统用户相同)

                          Smbpasswd –d 用户(禁用)

                          Smbpasswd –x 用户(删除)

                          pdbedit –a username:新建Samba账户。

pdbedit –x username:删除Samba账户。

pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。

pdbedit –Lv:列出Samba用户列表的详细信息。

pdbedit –c “[D]” –u username:暂停该Samba用户的账号。

pdbedit –c “[]” –u username:恢复该Samba用户的账号。

Winbind参数说明

winbind separator。在域中,Windows 用户名包含一个用户名和一个域名,在它们之间有一个分隔符。此选项设置该字符。默认是反斜杠(\),加号(+)是常见的替代分隔符。

 

winbind cache timeWinbind 缓存指定时间段的身份验证数据,默认设置为 300 秒(5 分钟)。在测试 Winbind 配置时您可能想要降低此值。

 

template shell。使用此选项设置用户的默认 shell。默认值是 /bin/false,这适用于不支持 shell 访问的系统;但是,如果您想让用户能够从本地登录或者通过 Secure Shell (SSH) 等服务器登录,则应该将此选项设置为 /bin/bash 或其他一些合法的 Linux shell

template homedir。您必须为用户设置默认主目录。您通常会使用一个或多个 Samba 变量,比如用户名的 %U 和域名的 %D。此参数的默认值是 /home/%D/%U

 

winbind enum users。此 Boolean 选项启用或禁用某些系统调用的支持,支持程序枚举用户。默认值是 Yes,但是将它设置为 No 可改进性能,也会避免一些程序(比如 finger)的古怪行为。

 

winbind enum groups。此选项的工作方式与 winbind enum users 非常类似,但它适用于组而不是用户。

 

winbind use default domain。如果您将此选项设置为 YesWinbind 会删除大多数操作的用户名的域组件,这通常是想要的效果,因为它会缩写用户名例如,将 MYDOMAIN\rexx 缩写为 rexx。如果网络包含多个域,则使用默认值 No 很有意义。

 

idmap uid。您应该使用此选项指定一组 UID,使用短划线作为 (-) 分隔符,如 10000-20000 所示。确保您使用的范围与您系统上使用的本地定义的 UID 不重叠。

 

idmap gid。此选项和 idmap uid 一样,但它设置一组 GID

 

安装samba服务

yum install samba                     #yum安装samba 及依赖包

yum install krb5*                      #yum安装krb5及依赖包

yum install pam_krb5              #yum 安装pam_krb5及依赖包

 

配置smb,修改smb配置文件 /etc/samba/smb.conf

[global]

 

        workgroup = DERASTORAGE

        password server = test.abc.com

        realm = ABC.COM

        security = ads

        template shell = /sbin/nologin

        winbind use default domain = true

        winbind offline logon = false

        idmap config * : range = 16777216-33554431

        server string = Samba Server Version %v

        netbios name = samba4

        log file = /var/log/samba/log.%m

        max log size = 50

        passdb backend = tdbsam

        winbind enum users = yes

        winbind enum groups = yes

 

[share]

        path = /share/Personal

        browseable = yes

        valid users = @"abc\domain users"

        writable = yes

        create mask = 0770

        directory mask = 0770

        hide unreadable = yes

详细说明:

[global]

 

        workgroup = ABC                 #设定 Samba Server 所要加入的工作组或者域,不加.com

        password server = test.abc.com     #域控服务器名称

        realm = ABC.COM                 #域名

        security = ads          #结合域的时候就用这个;以下三种安全级别用在Standalone Server Options部分,其中user级别也用于Domain Controller Options部分。 (1)share:访问Samba服务器共享资源时不需要输入用户名和密码,属于匿名访问。 (2)user:访问Samba服务器共享资源时需要输入用户名和密码,认证用户来源为Samba服务器本机。 (3)server:访问Samba服务器共享资源时需要输入用户名和密码,认证用户来源为另一台Samba服务器或Windows服务器。 以下两种安全级别用在Domain Members Options部分: (4)domain:Samba服务器在一个基于Windows NT平台的Windows域中,访问共享资源需要输入用户名和密码,认证用户来源为Windows域。 (5)ads:Samba服务器在一个基于Windows 200X平台的Windows活动目录中,访问共享资源需要输入用户名和密码,认证用户来源为Windows活动目录。

        template shell = /sbin/nologin               #

        winbind use default domain = true

        winbind offline logon = false

        idmap config * : range = 16777216-33554431     #这个很重要,没有的话不会同步域用户,这是制定UID和GID

        server string = Samba Server Version %v      #设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

        netbios name = samba4                  #设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。

        log file = /var/log/samba/log.%m                 #定义Samba日志文件的位置及名称。默认为每一个与服务器连接的客户端定义一个单独的日志文件。

        max log size = 50                      #设置最大的日志文件大小,单位为KB。

        passdb backend = tdbsam               # smbpasswd、tdbsam、ldapsam、mysql。默认为tdbsam,一般不用修改,除非想使用老版本Samba服务器的smbpasswd文件方式或其它方式。

        winbind enum users = yes

        winbind enum groups = yes

 

[share]

        path = /share/Personal          #共享目录路径

        browseable = yes

        valid users = @"abc\domain users"

        writable = yes

        create mask = 0770                 #用户创建的文件具有完全控制权限

        directory mask = 0770

        hide unreadable = yes    #隐藏不具有权限的目录  

 

加入域:(注意如果AD更改了组名称,centos不会更改,必须要在AD中将windows2000以前版本的组名一起更改以后centos才会同步)

1.Tool install:

 yum install krb5-libs krb5-devel pam_krb5 krb5-workstation krb5-auth-dialog

yum install samba-winbind samba samba-common samba-client samba-winbind-clients

2. vi /etc/krb5.conf 

[logging]

 default = FILE:/var/log/krb5libs.log

 kdc = FILE:/var/log/krb5kdc.log

 admin_server = FILE:/var/log/kadmind.log

 

[libdefaults]

 default_realm = ABC.COM

 dns_lookup_realm = true

 dns_lookup_kdc = true

 ticket_lifetime = 24h

 renew_lifetime = 7d

 forwardable = true

 

[realms]

ABC.COM = {

  kdc = test.abc.com:88

  admin_server = test.abc.com:749

  default_domain = ABC.COM

 }

 

[domain_realm]

 .derastorage.com = ABC.COM

 derastorage.com = ABC.COM

 

[appdefaults]

 pam = {

  debug = false

  ticket_lifetime = 36000

  renew_lifetime = 36000

  forwardable = true

  krb4_convert = false

 }

3. vi /etc/nsswitch.conf 

#

# /etc/nsswitch.conf

#

# An example Name Service Switch config file. This file should be

# sorted with the most-used services at the beginning.

#

# The entry '[NOTFOUND=return]' means that the search for an

# entry should stop if the search in the previous entry turned

# up nothing. Note that if the search failed due to some other reason

# (like no NIS server responding) then the search continues with the

# next entry.

#

# Valid entries include:

#

#       nisplus                 Use NIS+ (NIS version 3)

#       nis                     Use NIS (NIS version 2), also called YP

#       dns                     Use DNS (Domain Name Service)

#       files                   Use the local files

#       db                      Use the local database (.db) files

#       compat                  Use NIS on compat mode

#       hesiod                  Use Hesiod for user lookups

#       [NOTFOUND=return]       Stop searching if not found so far

#

 

# To use db, put the "db" in front of "files" for entries you want to be

# looked up first in the databases

#

# Example:

#passwd:    db files nisplus nis

#shadow:    db files nisplus nis

#group:     db files nisplus nis

 

passwd:     files winbind nis

shadow:     files winbind nis

group:      files winbind nis

 

#hosts:     db files nisplus nis dns

hosts:      files dns

 

# Example - obey only what nisplus tells us...

#services:   nisplus [NOTFOUND=return] files

#networks:   nisplus [NOTFOUND=return] files

#protocols:  nisplus [NOTFOUND=return] files

#rpc:        nisplus [NOTFOUND=return] files

#ethers:     nisplus [NOTFOUND=return] files

#netmasks:   nisplus [NOTFOUND=return] files

 

bootparams: nisplus [NOTFOUND=return] files

 

ethers:     files

netmasks:   files

networks:   files

protocols:  files

rpc:        files

services:   files

 

netgroup:   files

 

publickey:  nisplus

 

automount:  files

aliases:    files nisplus

4. vi /etc/resolv.conf

# Generated by NetworkManager

#domain abc.com

#search abc.com

nameserver 192.168.58.201

5. vi /etc/hosts

#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.58.5 samba4.abc.com samba4

6. vi /etc/sysconfig/network 

NETWORKING=yes

HOSTNAME=samba3

NTPSERVERARGS=iburst

7. vi /etc/nsswitch.conf

#

# /etc/nsswitch.conf

#

# An example Name Service Switch config file. This file should be

# sorted with the most-used services at the beginning.

#

# The entry '[NOTFOUND=return]' means that the search for an

# entry should stop if the search in the previous entry turned

# up nothing. Note that if the search failed due to some other reason

# (like no NIS server responding) then the search continues with the

# next entry.

#

# Valid entries include:

#

#       nisplus                 Use NIS+ (NIS version 3)

#       nis                     Use NIS (NIS version 2), also called YP

#       dns                     Use DNS (Domain Name Service)

#       files                   Use the local files

#       db                      Use the local database (.db) files

#       compat                  Use NIS on compat mode

#       hesiod                  Use Hesiod for user lookups

#       [NOTFOUND=return]       Stop searching if not found so far

#

 

# To use db, put the "db" in front of "files" for entries you want to be

# looked up first in the databases

#

# Example:

#passwd:    db files nisplus nis

#shadow:    db files nisplus nis

#group:     db files nisplus nis

 

passwd:     files winbind nis

shadow:     files winbind nis

group:      files winbind nis

 

8.加入域

setenforce 0

ntpdate -u 192.168.58.201

net ads join -U administrator(域服务器用户密码)

9.启用winbind

Service winbind start

10.验证

wbinfo -t    //查看与AD主机是否己建立信任关系

wbinfo -g    //显示AD的组信息

getent passwd    //显示本地和域中可登录用户

getent group    //显示本地和域中的组

net ads info    //查询AD域基本资料

net getdomainsid    //查询AD域ID号码

注:退出域的命令是:net ads leave -U administrator

 

注意:如果时钟不与域控同步将不能同步到域用户和组

ntpdate –u dc.domain.com

         vi /etc/crontab

         45 11 * * * root ntpdate -u 192.168.58.201 (每天11点5自动与域控同步)

看加入域配置文档,这里还要修改smb的配置文件并加入winbind服务器的配置,否则域用户不能同步

测试ntlm_auth --username=ucdisk01

Getent passwd | grep 1677 (查看域用户同步)

Getent group | grep 1877 (查看域组同步)

创建用户文件 cp -a /etc/skel/. /home/ucdisk01 13. su ucdisk01

 

安装 Keepalived

yum -y install keepalived

配置文件/etc/keepalived/keepalived

keepalived基础配置可以检测网口和keepalived的服务状态进行切换服务器,添加vrrpbash脚本后可以检测smb服务的状态来进行切换

cp keepalived.conf /etc/keepalived/keepalived.conf.bak备份原keepalived.conf文件

mkdir /home/keepalived/

vi change_backup.sh     #创建change_backup.sh脚本

#!/bin/bash

echo "samba1 smb server stop" | mail -s "samba1 smb server stop" xxx@xxx.com

service keepalived stop

exit

 

chmod +x change_backup.sh    #添加脚本可执行权限

 

vi check_running

#!/bin/bash

smbclient -N -L //服务器IP地址 | grep 共享文件夹 > /dev/null 2>&1

if [[ $? -eq 0 ]]; then

        echo 0 > /home/1.txt

        exit 0

else

        count=`cat /home/1.txt`

        sum=$[$count+1]

        echo $sum > /home/1.txt

        if [[ $sum -ge 3 ]]; then

                exit 1

        fi

fi

####注意参数和{符号之间有空格

chmod +x check_running     #添加脚本可执行权限       

server 1 keepalived.conf

vrrp_script check_local {

         script “脚本存放路径/脚本名(*.sh)”

         interval 5

         weight -90

}

global_defs {

         router_id server1   ####服务器1的名称####

}

vrrp_instance VI_1 {

         state MASTER      ####服务器1为主要####

         interface eth0

         virtual_router_id 51

         priority 100

         advert_int 1

         authentication {

         auth_type PASS

         auth_pass 1111

}

Virtual_ipaddress {

         192.168.183.190(虚拟IP)

}

Track_script {

         脚本名称,无需路径

}

}

Server 2 keepalived.conf

global_defs {

   notification_email {

     xxx@xxx.com

   }

    router_id samba1   ####服务器2的名称####

}

 

vrrp_instance VI_1 {

    state BACKUP      ####服务器2为备份####

    interface bond0

    dont_track_primary

    virtual_router_id 51

    priority 80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123qwe123

    }

    virtual_ipaddress {

       192.168.100.111/24(虚拟IP

    }

}

 

安装inotify

inotify 配合 rsync 使用,先配置ssh免密码登陆

ssh-keygen -t rsa 一路回车

生成 /root/.ssh  目录

在母机上,进入/root/.ssh目录,找到id_rsa.pub该文件,这个文件就是刚才执行ssh-keygen所生成的公钥key文件。

ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.1   把本地公钥发送到对端服务器,ssh 192.168.1.1 测试登陆

(注意:从新安装了backup机后,ssh不能再用以前的了,需要删除master上/root/.ssh/known_hosts文件)

 

tar -zvxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

yum -y install gcc (centos不安装gcc就安装不了inotify)

./configure --prefix=/usr/local/inotify

make

make install

 

etc/sysctl.conf配置(主服务器配置就好了)

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

fs.inotify.max_user_instances = 99999999

fs.inotify.max_user_watches = 99999999

fs.inotify.max_queued_events = 99999999

 

修改完配置文件后sysctl -p  立即刷新内核

 

 

检测文件增改删的脚本(脚本执行如果有问题,可能是需要在vi里设置文件格式set fileformat=unix)

#!/bin/bash

cd /share

/usr/local/inotify/bin/inotifywait --format '%Xe %w%f' -mrq -e modify,create,delete,attrib,close_write,move /share/ | while read file

do

       INO_EVENT=$(echo $file | awk '{print $1}')

       INO_FILE=$(echo $file | awk '{print $2}')

       echo $INO_EVENT

       echo $INO_FILE

       if [[ $INO_EVENT = 'CREATE' ]] || [[ $INO_EVENT = 'MODIFY' ]] || [[ $INO_EVENT = 'CLOSE_WRITEI' ]] || [[ $INO_EVENT = 'MOVED_TO' ]]

       then

              rsync -Aa --delete $INO_FILE root@192.168.183.157:$INO_FILE 1>/dev/null 2>&1

       fi

 

       if [[ $INO_EVENT = 'DELETE' ]] || [[ $INO_EVENT = 'MOVED_FROM' ]] || [[ $INO_EVENT = 'ATTRIB' ]] || [[ $INO_EVENT = 'DELETEXISDIR' ]] || [[ $INO_EVENT = 'CREATEXISDIR' ]]

       then

              INO_FILES=`echo $INO_FILE | awk -F/ 'OFS="/"{$NF="";print}'`

              rsync -Aa --delete $INO_FILES root@192.168.183.157:$INO_FILES 1>/dev/null 2>&1

       fi

done

脚本的执行

sh /usr/local/inotify/inotify_start.sh 1>/dev/null 2>&1 &

 

脚本可以在xshell中复制另外一个ssh后用sh /usr/local/inotify/inotify_start.sh查看增改删的状态,如果不小心脚本执行了很多次,那么会产生很多进程去监控文件增改删,可以使用ps –aux删除进程然后在启动一个

注意: 1  当master的同步命令重启后消失,需要每次重启都手动开启,但是这并不会影响同步,因为当sh check_local.sh后master会自动将重启到现在的所有修改都同步到backup,这个非常好

              2 如果master宕机,那么数据会写入backup,这样的话backup并没有inotify,所以明显backup的数据会比master多,这样就需要手动复制文件到master去同步数据,同步完毕后在启动master的keepalived,然后在启动check_local.sh

 

配置完smb,winbind,keepalived后不要忘了开机自启动

chkconfig –level 2345 smb on

 

IN_ACCESS:文件被访问
IN_MODIFY:文件被修改
IN_ATTRIB,文件属性被修改
IN_CLOSE_WRITE,以可写方式打开的文件被关闭
IN_CLOSE_NOWRITE,以不可写方式打开的文件被关闭
IN_OPEN,文件被打开
IN_MOVED_FROM,文件被移出监控的目录
IN_MOVED_TO,文件被移入监控着的目录
IN_CREATE,在监控的目录中新建文件或子目录
IN_DELETE,文件或目录被删除
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

 

利用rysnc备份文件到备份服务器

 

#!/bin/bash

dir_name=$(date "+%Y-%m-%d")   当前时间点创建文件夹

del_dirname=$(date -d "2 days ago" "+%Y-%m-%d")   多少天之前的文件夹

rsync -Aa --progress -e ssh /share/* root@192.168.183.157:/backup/$dir_name/  同步本地文件到其他服务器(使用了ssh方式,如果挂载到本地就更方便了)

rsync --delete -d -e ssh /backup/delete/ root@192.168.183.157:/backup/$del_dirname (删除多少天之前的文件,其实是用本地的空文件夹与目的端文件夹做比较清空目标的文件夹)

echo "已经清空" $del_dirname "目录" >> /backup/backupsmb.txt (将每次执行清空的文件夹重定向到日志文件)

 

挂载远端windows共享服务器

mount –t cifs //1.1.1.1/share /mnt/share –o username=administrator

 

使用rsync做差异备份

 

!!!!!!!!!!!!!!!!!!!所有写的脚本一定要添加执行权限!!!!!!!!!!!!!!!

rsync -Aa --progress --delete /a/ root@192.168.183.157:/a

 

#以下是一条命令,注意不是两条,比较a目录与对端目录a,然后将差异重定向到rsync命令指定的目录中,在比较其他目录,这样就实现了差异备份到其他目录

rsync --dry-run -rcn --out-format="%n" /a/ root@192.168.183.157:/a |grep -v "/$"|xargs -I{} rsync -R /a/./{} root@192.168.183.157:/b

#以上是一条命令,注意不是两条,在得瑞的实际项目中,-c这个参数不能用,用了卡死

 

完整备份

#!/bin/bash

allback=$(date "+%Y-%m-%d完整备份")

rsync --Aa --delete /share/ /mnt/bak/backup_all/ 1>/dev/null 2>&1

echo $allback"完成" >> /backup_all_qunhui/backupsharetoqunhui.log

 

增量备份

#!/bin/bash

increasingback=$(date "+%Y-%m-%d增量备份")

rsync --dry-run -r --out-format="%n" /share/ /mnt/bak/backup_all/ | grep -v "/$" | xargs -I{} rsync -R /share/./{} /mnt/bak/increasing/$increasingback/ 1>/dev/null 2>&1

echo $increasingback"完成" >> /backup_all_qunhui/backupsharetoqunhui.log

 

删除增量

#!/bin/bash

find /mnt/bak/increasing/ -name `date -d "30 days ago" "+%Y-%m-%d"增量备份` -exec rm -rf {} \; 1>/dev/null 2>&1

 

LVM缩减现有分区,将缩减容量挂载到新分区(缩减data(/home)到root的LV中,以下仅针对EXT4分区之间)

Umount /home  卸载即将缩减的分区

Fuser –m /home (系统繁忙无法卸载/home分区使用如下命令,可以查看进程ID)

Kill -9 home的进程ID

E2fsck -f /dev/mapper/vg_lvm-data (运行)

Resize2fs –p  /dev/mapper/vg_lvm-data 5G 将data缩减到5G

Mount /home 挂载/home目录

Df –h 查看挂载状态

lvreduce -L 5G /dev/mapper/vg_lvm-data 将/home的lv缩减到5G并把剩余容量放回公共区域

vgdisplay 查看Free PE / Size剩余容量

 

lvextend -L +4.00G /dev/mapper/vg_lvm-root  像增长LV添加可用容量

resize2fs -p /dev/mapper/vg_lvm-root 重设增长LV的容量

df –h 查看新容量

所遇到的问题

1、在卸载/home目录的时候失败

可先执行如下fuser –m 命令,然后再umount即可:

 [root@CentOS-78 /]# fuser -m /home

[root@CentOS-78 /]#

2、设定完lv_home的大小,再次mount该分区时,发现用df命令无法看到给分区,此时只要在mount一次即可

3、在设定lv_root的大小时,不要把Free PE / Size的空间全部都用上,这很可能会出现Free PE空间不足的现象,建议保留一点Free PE的空间

特别注意的是:
resize2fs命令            针对的是ext2ext3ext4文件系统
xfs_growfs命令         针对的是xfs文件系统
------------------------------------------------------------------------------------------

1ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

1

2

3

4

5

lvextend -L 120G /dev/mapper/centos-home     //增大至120G

lvextend -L +20G /dev/mapper/centos-home     //增加20G

lvreduce -L 50G /dev/mapper/centos-home      //减小至50G

lvreduce -L -8G /dev/mapper/centos-home      //减小8G

resize2fs /dev/mapper/centos-home            //执行调整

2xfs文件系统的调整命令是xfs_growfs(只支持增大)

1

2

3

4

5

6

lvextend -L 120G /dev/mapper/centos-home    //增大至120G

lvextend -L +20G /dev/mapper/centos-home    //增加20G

xfs_growfs /dev/mapper/centos-home          //执行调整

 

就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!)

硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~

 

Xfs文件系统缩减与增加

       lvreduce -L 2G /dev/mapper/vg_lvm-data 将lvdata减低到2G,空闲出8G

       vgs 查看空余空间

       lvcreate -L 8G -n /dev/mapper/vg_lvm-aaaa /dev/mapper/vg_lvm  在vg中创建新的lv名字为aaaa,并将8G空间赋予aaaa

       然后发现不能挂载/home目录了(home目录是data这个lv)

       然后执行了mkfs.xfs /dev/mapper/vg_lvm-data系统提示是xfs文件系统需要使用mkfs.xfs –f /mapper/vg_lvm-data,使用后成功格式化data这个lv,然后挂载/home这个目录成功,但是/home中之前的文件全都没有了

 

从VG中移除PV,未能完成,该pv挂载在/目录下,重启后/目录损坏

       查看想要移除的PV大小

       Lvreduce –L -5G /dev/mapper/vg_smb2_LV1 从PV所在的LV上先移除大于PV的空间

       Vgreduce vg_smb2 /dev/sdb1 将sdb1从卷组VG移除

       Pvremove /dev/sdb1 删除PV

 

创建lv并命名

  • 创建PV         pvs pvcreate
  • 创建VG        vgs  vgcreate
  • 创建LV         lvs lvcreate
  • 测试LV捆绑

1.在名为vg_newlvm的卷组中创建15G大小的逻辑卷:

1.[root@centos7 ~]# lvcreate -L 15G vg_newlvm

2.在名为vgnewlvm的卷组中创建大小为2500MB的逻辑卷,并命名为centos7newvol,这样就创建了块设备/dev/vgnewlvm/centos7newvol:

1.[root@centos7 ~]# lvcreate -L 2500-n centos7_newvol vg_newlvm

3.可以使用lvcreate命令的参数-l来指定逻辑卷扩展的大小。也可以使用这个参数以卷组的大小百分比来扩展逻辑卷。这下列的命令创建了centos7newvol卷组的50%大小的逻辑卷vgnewlvm:

1.[root@centos7 ~]# lvcreate -l 50%VG -n centos7_newvol vg_newlvm

4.使用卷组剩下的所有空间创建逻辑卷

1.[root@centos7 ~]# lvcreate --name centos7newvol -l 100%FREE vgnewlvm

 

新挂硬盘

Fdisk –l 可以查看现有分区

Ll /dev/disk/by-path 可以查看所有硬盘设备

Fdisk /dev/sdb 格式化分区表

fdisk选中/dev/sdb 输入m所有基本选项都出现,输入n新建分区

  Command (m for help): n

  Command action

  e extended

  p primary partition (1-4)

  有扩展分区和主分区,逻辑分区在扩展分区中建立。注意到括号中的1-4,最多只能建四个主分区(包括扩展分区)。先建一个主分区:

  Command (m for help): n

  Command action

  e extended

  p primary partition (1-4)

  p #建主分区

  Partition number (1-4): 1 #分区号为1

  First cylinder (1-2610, default 1): #直接回车默认从第一个柱面开始划分

  Using default value 1

  Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G #加空间大小,这里有很多种选择:+后面单位可以接M,G,K(记得要大写)表示划分你所加的空间,也可以是柱面数。不管怎样都不能超过该磁盘剩余的空间否则无效。

Command (m for help): p #分好后查看分区信息,刚所做的所有一目了然

 

格式化硬盘发现没有mkfs中没有xfs

安装yum -y install xfsprogs

 

转换超过2T的硬盘为GPT格式

# parted /dev/sdb
GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) mklabel gpt
将MBR磁盘格式化为GPT

(parted) mkpart primary 0 100
划分一个起始位置为0大小为100M的主分区

(parted) mkpart primary 100 200
划分一个起始位置为100M大小为100M的主分区

(parted) mkpart primary 0 -1
划分所有空间到一个分区,忽略/Ignore/放弃/Cancel? i

(parted) print
打印当前分区

(parted) quit
可能还会用到的一些命令

(parted) mklable msdos
如果要反过来.将GPT磁盘转化为MBR磁盘
在这样分完分区后,还要使用mkfs来进行格式化

分区表设置为GPT后使用mkfs格式化分区

Mkfs.xfs /dev/sdb1

 

Flashcache rpm安装

rpm安装 具体看网页详细信息

http://elrepo.org/

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

yum install flashcache-utils

yum install kmod-flashcache

格式化两块硬盘sdb1与sdc1

 

开机自动加载配置模块

vim /etc/sysconfig/modules/flashcache.modules

#! /bin/sh

/sbin/modinfo -F filename flashcache > /dev/null 2>&1 

if [ $? -eq 0 ]; then

    /sbin/modprobe flashcache

fi 

chmod +x  /etc/sysconfig/modules/flashcache.modules

 

手动加载配置模块

modprobe flashcache

查询是否加载成功

lsmod | grep flashcache

删除flashcache模块

rmmod flashcache

 

创建flashcache

SSD:/dev/sdb1 (实际环境应把固态硬盘做成lvm以便于扩展)

HDD: /dev/sdc1(实际环境应把固态硬盘做成lvm以便于扩展)

将sdb1设置为lvm-cache

将sdc1设置为lvm-data

 

创建flashcache

Flashcache_create –p back –b 4k cachedev /dev/mapper/vgssd-cache /dev/mapper/vghdd-data

 

销毁Flashcache

flashcache_destroy /dev/sdc  

这种方式删除writeback模式的flashcache时会将SSD上的所有数据删除包括脏数据

建议使用dmsetup命令(device-mapper软件包)删除,会自动将脏数据写入磁盘

dmsetup remove cachedev

 

挂载flashcache到share目录

Mount /dev/mapper/cachedev /share

 

开机自动加载已创建的缓存设备及挂载

cd /usr/lib/ocf/resource.d/

ll

cp flashcache /etc/init.d/

chmod +x /etc/init.d/flashcache

 

编辑flashcache并加入以下内容(特别注意,这个脚本的注释如果不写的话并不能chkconfig启动!!!!)

 

#!/bin/bash

#

# flashcache    Init Script to manage cachedev loads

#

# chkconfig: 345 9 98

# description: Flashcache Management

 

# Flashcache options

# modify this before using this init script

 

SSD_DISK=                                                     /dev/sdc1

BACKEND_DISK=                                                   /dev/sdb1

CACHEDEV_NAME=                                                     cachedev

MOUNTPOINT=                                                    挂载路径

FLASHCACHE_NAME=                                          设置一个flashcache名称

 

# Just a check, to validate the above params are set

[ -z "$SSD_DISK" ] && exit 10

[ -z "$BACKEND_DISK" ] && exit 11

[ -z "$CACHEDEV_NAME" ] && exit 12

[ -z "$MOUNTPOINT" ] && exit 13

[ -z "$FLASHCACHE_NAME" ] && exit 14

 

# Source function library.

. /etc/rc.d/init.d/functions

 

#globals

DMSETUP=`/usr/bin/which dmsetup`

SERVICE=flashcache

FLASHCACHE_LOAD=/sbin/flashcache_load

SUBSYS_LOCK=/var/lock/subsys/$SERVICE

 

RETVAL=0

 

start() {

    echo "Starting Flashcache..."

    #Load the module

    /sbin/modprobe flashcache

    RETVAL=$?

    if [ $RETVAL -ne 0 ]; then

       echo "Module Load Error: flashcache. Exited with status - $RETVAL"

       exit $RETVAL

    fi

    #flashcache_load the cachedev

    $FLASHCACHE_LOAD $SSD_DISK $CACHEDEV_NAME

    RETVAL=$?

    if [ $RETVAL -ne 0 ]; then

       echo "Failed: flashcache_load $SSD_DISK $CACHEDEV_NAME"

       exit $RETVAL;

    fi

    #mount

    if [ -L /dev/mapper/$CACHEDEV_NAME ]; then

       /bin/mount /dev/mapper/$CACHEDEV_NAME $MOUNTPOINT

       RETVAL=$?

       if [ $RETVAL -ne 0 ]; then

           echo "Mount Failed: /dev/mapper/$CACHEDEV_NAME to $MOUNTPOINT"

           exit $RETVAL

       fi

    else

       echo "Not Found: /dev/mapper/$CACHEDEV_NAME"

       exit 1

    fi

    #lock subsys

    touch $SUBSYS_LOCK

}

 

stop() {

    #unmount

    /bin/umount $MOUNTPOINT

    #check for force flag

    FLAG=0

    [ "$1" == '--force' ] && FLAG=1

    /sbin/sysctl -w dev.flashcache.$FLASHCACHE_NAME.fast_remove=$FLAG

    echo "Flushing flashcache: Flushes to $BACKEND_DISK"

    $DMSETUP remove $CACHEDEV_NAME

    #unlock subsys

    rm -f $SUBSYS_LOCK

}

 

status() {

    [ -f $SUBSYS_LOCK ] && echo "Flashcache status: loaded" || echo "Flashcache status: NOT loaded";

    $DMSETUP status $CACHEDEV_NAME

    exit $?

}

 

case $1 in

    start)

       start

       ;;

    stop)

       stop

       ;;

    status)

       status

       ;;

    forcestop)

       stop --force

       ;;

    *)

       echo "Usage: $0 {start|stop|status}"

       exit 1

esac

exit 0

添加flashcache进入开机启动

Chkconfig --add /etc/init.d/flashcache

Chkconfig flashcache on

 

监控flashcache

1、flashcache 卷的错误信息报告在/proc/flashcache/<cache name>/flashcache_errors 里

 

2、flashcache 卷的统计信息报告在 /proc/flashcache/<cache name>/flashcache_stats 里

 

3、Cache统计信息

可以使用 “dmsetup status cachename”命令来查询cache的统计信息。 “dmsetup table cachename”命令可以dumps出来achce相关的统计信息

4、用flashstat监控cachedev使用情况

1

 cp /root/flashcache-master/utils/flashstat /bin/

 

八、用fio压测sas盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值