设为首页收藏本站language 语言切换
楼主: 崔凯
收起左侧

Linux配置文档整理-全面解析版

  [复制链接]
 楼主| 发表于 2010-9-10 10:42:29 | 显示全部楼层

不用关闭selinux而成功启动samba的方法

将smb.conf中如下这两行启用(去掉行首的;号就可以了)

    setsebool -P samba_domain_controller on setsebool -P samba_enable_home_dirson这两行生效后,自己的home目录就可以正常读写了。

    如果想将/home mba/temp目录设置成完全的共享就应该在字符状态写输入:chcon -t samba_share_t /home mba/temp 同时不要忘记将/home mba/temp目录属性设置成777 就可以了。其它和以前的FC版本应该没有什么区别了。
16# 2010-9-10 10:42:29 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:44:00 | 显示全部楼层

SELinux拒绝vsftpd上传文件到用户主目录

系统是CentOS 5.1,创建用户后,不能登陆FTP,在 ar/log/messages文件记录以下信息:

    Mar 31 13:46:15 localhost kernel: audit(1206942375.697:5719): avc: denied { append } for pid=32111 comm="vsftpd" name="test" dev=sda3 ino=19400200 scontext=root:system_r:ftpd_t:s0 tcontext=root:object_r:root_t:s0 tclass=file

    SELinux ftp daemon policy is customizable based on least access required. So by default SElinux does not allow users to login and read their home directories.

    If you are setting up this machine as a ftpd server and wish to allow users to access their home directorories, you need to set the ftp_home_dir boolean.

    执行命令:

    setsebool -P ftp_home_dir 1

    上传文件成功。
17# 2010-9-10 10:44:00 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:45:30 | 显示全部楼层

Redhat关闭SELinux的正确步骤

Redhat从FC3开始,就使用了SELinux来增强安全,但是使用起来有时候太繁琐,就想关闭它,但是如果安装服务器的时候开始没有图形界面,还真很难找到地方可以关闭。

    正确方法如下:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。

    搞定,简单吧。

    Update:在有selinux版本的系统中安装Zend Optione,一个方法是关闭掉Selinux,一个办法是:执行 chcon ZendOptimizer.so -t shlib_t 问题解决。

    另外也可以透過Kernel的命令列參數的方式設定。也就是利用Boot loader設定這個參數。以常用的GRUB來說,就可以在/etc/grub.conf中,進行下面的設定:

    kernel /boot/vmlinuz-2.6.1 ro selinux=0 root=LABEL=/
18# 2010-9-10 10:45:30 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:47:26 | 显示全部楼层

SELINUX从理解到动手配置

SELinux 可以为你的系统提供较棒的安全防护。 使用者能被分配预先定义好的角色,以便他们不能存取文件或者访问他们不拥有的程序。

    Selinux的启用与关闭

    编辑/etc linux/conf文件

    SELINUX=enforcing(强制:违反了策略,你就无法继续操作下去)

    Permissive(有效,但不强制:违反了策略的话它让你继续操作,但是把你的违反的内容记录下来)

    Disabled(禁用)

    禁用的另一种方式:在启动的时候,也可以通过传递参数selinux给内核来控制它

    编辑/etc/grup.conf

    title Red Hat Enterprise Linux Server (2.6.18-8.el5)

    root (hd0,0)

    kernel  mlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet selinux=0

    initrd /initrd-2.6.18-8.el5.img

    SELINUXTYPE=targeted

    此参数可选项:targeted和strice。分别是targeted只控制关键网络服务,strice控制所有的服务

    查询selinux的状态

    [root@linuxas ~]# /usr/sbin/getenforce

    Enforcing

    [root@linuxas ~]# sestatus -bv

    SELinux status: enabled

    SELinuxfs mount:  linux

    Current mode: enforcing

    Mode from config file: enforcing

    Policy version: 21

    Policy from config file: targeted

    查看selinux加载的内核模块

    [root@linuxas selinux]# semodule -l

    amavis 1.1.0

    ccs 1.0.0

    clamav 1.1.0

    dcc 1.1.0

    evolution 1.1.0

    iscsid 1.0.0

    mozilla 1.1.0

    mplayer 1.1.0

    nagios 1.1.0

    oddjob 1.0.1

    pcscd 1.0.0

    pyzor 1.1.0

    razor 1.1.0

    ricci 1.0.0

    smartmon 1.1.0

    查看selinux错误日志

    [root@linuxas selinux]# sealert -a  ar/log/audit/audit.log

    SElinux的图形化管理工具

    [root@linuxas selinux]# system-config-selinux

    Selinux的基本操作

    查看文件:ls –Z(--context)

    [root@linuxas ~]# ls -Z

    drwx------ root root rootbject_r:user_home_t Desktop

    -rw------- root root system_ubject_r:user_home_t anaconda-ks.cfg

    -rw-r--r-- root root rootbject_r:user_home_t install.log

    -rw-r--r-- root root rootbject_r:user_home_t install.log.syslog

    [root@linuxas ~]# ls --context

    drwx------ root root rootbject_r:user_home_t Desktop

    -rw------- root root system_ubject_r:user_home_t anaconda-ks.cfg

    -rw-r--r-- root root rootbject_r:user_home_t install.log

    -rw-r--r-- root root rootbject_r:user_home_t install.log.syslog

    查看文件系统的扩展属性:getfattr

    [root@linuxas ~]# getfattr -m. -d /etc/passwd

    getfattr: Removing leading '/' from absolute path names

    # file: etc/passwd

    security.selinux="system_ubject_r:etc_t:s0\\000"

    查看的文件的 security.selinux 属性中储存了此文件的安全上下文, 所以上面例子中的上下文就是 system_ubject_r:etc_t 。

    所有运行了SE Linux的ext2/3文件系统上都有 security.selinux 这个属性。

    更改文件的扩展属性标签:chcon (不能在 /proc 文件系统上使用,就是说 /proc 文件系统不支持这种标记的改变。)

    [root@linuxas test]# ls --context aa.txt

    -rw-r--r-- root root rootbject_r:user_home_t aa.txt

    [root@linuxas test]# chcon -t etc_t aa.txt

    [root@linuxas test]# ls --context aa.txt

    -rw-r--r-- root root rootbject_r:etc_t aa.txt

    恢复原来的文件标签: restorecon

    [root@linuxas test]# restorecon aa.txt

    [root@linuxas test]# ls -Z aa.txt

    -rw-r--r-- root root user_ubject_r:user_home_t aa.txt

    显示当前用户的Selinux context

    [root@linuxas ~]# id -Z

    root:system_r:unconfined_t:SystemLow-SystemHigh

    runcon 使用特定的context来执行指令

    [root@linuxas ~]# runcon -t user_home_t cat /etc/passwd

    root:system_r:user_home_t:SystemLow-SystemHigh is not a valid context

    查看某种服务是否受到SELinux的保护

    [root@linuxas ~]# getsebool -a (RHEL4:inactive受保护,active不受保护;RHEL5:off受保护,on不受保护)
19# 2010-9-10 10:47:26 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:49:41 | 显示全部楼层

Snort搭建安全的Linux服务器

Snort是一个著名的免费而又功能强大的轻量级入侵检测系统,具有使用简便、轻量级以及封堵效率高等特点,本文从实用操作的角度介绍了如何用Snort保证上网主机的安全。

  入侵检测技术是继“防“

  火墙”、“数据加密”等传统安全保护措施之后的新一代安全保障技术。它对计算机和网络资源上的恶意使用行为进行识别和响应,它不仅检测来自外部的入侵行为,同时也监督内部用户的未授权活动。而且,随着网络服务器对安全性要求的不断增大,如何在Linux环境下抵御黑客入侵和攻击,切实保证服务器的安全具有重大的实践意义。

  Snort是一个强大的轻量级的免费网络入侵检测系统,其特点如下:

  1.轻量级的网络入侵检测系统:Snort虽然功能强大,但其代码非常简洁、短小,源代码压缩包只有1.8M多。

  2.Snort的可移植性好:Snort的跨平台性能极佳,目前已经支持类Unix下Linux、Solaris、Freebsd、Irix、HP-ux、微软的Windows2000等服务器系统。

  3.Snort的功能非常强大

  Snort具有实时流量分析和日志IP网络数据包的能力,能够快速检测网络攻击,及时发出报警。利用XML插件,Snort可以使用SNML(简单网络标志语言)把日志放到一个文件或者适时报警。Snort能够进行协议分析和内容的搜索/匹配,现在Snort能分析的协议有TCP、UDP、ICMP,将来可能增加对ARP、IPX等协议的支持。它能够检测多种方式的攻击和探测,例如缓冲区溢出、秘密端口扫描、CGI攻击、SMB探测、探测存在系统指纹特征的企图等。Snort的日志格式既可以是tcpdump式的二进制格式,也可以解码成ASCⅡ字符格式,更加便于用户尤其是新手检查。使用数据库输出插件,Snort可以把日志记录进数据库。使用TCP流插件,Snort可以对TCP包进行重组。

  4.Snort的扩展性较好,对于新的攻击反应迅速

  作为一个轻量级的网络入侵检测系统,Snort有足够的扩展能力。它使用一种简单的规则描述语言,最基本的规则只是包含四个域:处理动作、协议、方向、注意的端口,例如“log tcp any any-> 192.168.0.1/24 79”。发现新的攻击后,可以很快根据“bugtraq”邮件列表,找出特征码,写出检测规则。因为规则语言简单,所以容易上手,节省人员的培训费用。

  5.遵循公共通用许可证GPL:Snort遵循通用公共许可证GPL,所以只要遵守GPL ,任何组织和个人都可以自由使用。

  Snort的体系结构

  包解码 Snort的包解码支持以太网和SLIP及PPP媒体介质。包解码所做的工作就是为探测引擎准备数据,其功能是捕获网络传输数据并按照TCP/IP协议的不同层次将数据包进行解析。Snort利用libpcap库函数进行数据采集, 该库函数可以为应用程序提供直接从链路层捕获数据包的接口函数,并可以设置数据包过滤器来捕获指定的数据。网络数据采集和解析机制是整个NIDS实现的基础,其中最关键的是要保证高速和低的丢包率,这不仅仅取决于软件的效率还同硬件的处理能力相关。对于解析机制来说,能够处理数据包的类型的多样性也同样非常重要。

  探测引擎 探测引擎是Snort的心脏,它主要负责的工作是:按照启动时加载的规则,对每个数据包进行分析。探测引擎将Snort规则分解为链表头和链表选项进行引用。链表头由诸如源/目标IP地址及端口号这些普通信息标识,链表选项定义一些更详细的信息如TCP 标志、ICMP代码类型、特定的内容类型、负载容量等。探测引擎按照Snort规则文件中定义的规则依次分析每个数据包。与数据包中数据匹配的第一条规则触发在规则定义中指定的动作,凡是与规则不匹配的数据包都会被丢弃。

  日志记录/告警系统 告警和日志是两个分离的子系统。日志允许将包解码收集到的信息以可读的格式或以tcpdump格式记录下来。可以配置告警系统,使其将告警信息发送到syslog、flat文件、Unix套接字或数据库中。在进行测试或在入侵学习过程当中,还可以关掉告警。缺省情况下,所有的日志将会写到 ar/log/Snort文件夹中,告警文件将会写到 ar/log/Snort/alerts文件中。Snort的数据包记录器子系统主要提供了如下方式:“Fast Model”,采取tcpdump的格式记录信息 ;“Readable Model”,按照协议格式记录,易于用户查看;“Alert to syslog”,向syslog发送报警信息;“Alert to text file”,以明文形式记录报警信息。

  值得提出的是,Snort考虑到用户需要高性能的时候,即网络数据流量非常大,可以将数据包信息进行压缩从而实现快速报警。
Snort的使用方法

  安装Snort

  Snort是基于libpcap的,一般操作系统安装的时候,libpcap已经默认安装了,如果没

  有安装,可以到http://www.tcpdump.org下载。Snort的安装步骤如下:

  1.分别执行指令:mkdir Snortinstall和cd Snortinstall;

  2.从www.Snort.org 下载Snort-2.0.0.tar.gz和Snortrules.tar.tz到新建的目录中,可以通过浏览器或者wget下载;

  3.分别执行如下指令:tar -zxvf Snort-2.0.0.tar.gz;cd Snort-2.0.0;

  ./configure;make;make install。

  Snort使用

  这里通过使用常见的观察主机是否存活的Ping命令来介绍Snort的具体使用。执行命令“./Snort -v”,运行Snort和显示IP和TCP/UDP/ICMP头信息。笔者使用命令:“ping 192.168.0.1”,显示如下信息:

  06/10-10:21:13.884925 192.168.0.2 -> 192.168.0.1

  ICMP TTL:64 TOS:0x0 ID:4068

  ID:20507 Seq:0 ECHO

  06/10-10:21:13.885081 192.168.0.1 -> 192.168.0.2

  ICMP TTL:128 TOS:0x0 ID:15941

  ID:20507 Seq:0 ECHO REPLY

  06/10-10:21:14.884874 192.168.0.2 -> 192.168.0.1

  ICMP TTL:64 TOS:0x0 ID:4069

  ID:20507 Seq:256 ECHO

  06/10-10:21:14.885027 192.168.0.1 -> 192.168.0.2

  ICMP TTL:128 TOS:0x0 ID:15942

  ID:20507 Seq:256 ECHO REPLY

  如果想要解码应用层,就执行命令“Snort -d”,然后执行“ping 192.168.0.1”,就可以显示如下信息:

  06/10-10:26:39.894493 192.168.0.2 -> 192.168.0.1

  ICMP TTL:64 TOS:0x0 ID:4076

  ID:20763 Seq:0 ECHO

  58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F X.B9............

  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................

  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./

  30 31 32 33 34 35 36 37 01234567

  06/10-10:26:39.894637 192.168.0.1 -> 192.168.0.2

  ICMP TTL:128 TOS:0x0 ID:15966

  ID:20763 Seq:0 ECHO REPLY

  58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F X.B9............

  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................

  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./

  30 31 32 33 34 35 36 37 01234567

  如果要看到更详细的关于以太网帧头的信息,就要使用“Snort -vde” 命令,然后执行“ping 192.168.0.1”就可以显示相应信息。

  Snort规则的编写

  Snort之所以受到广泛的关注,一方面由于它的轻量级特性,消耗系统资源少;另一方面就在于它的动态性和可编程性。然而这对于广大网络用户来说有些困难,因为他们必须具备相应的网络协议分析知识和安全知识。值得庆幸的是,这个软件有相应的规则库可以实时地从网上下载(网址为:www.Snort.org),用户可以直接下载即可使用,所以本文不讲述过多的规则编写规范,只是给出几个简单的例子:

  ● SMB报警配置: output alert_smb:workstation.list ;

  ● 端口扫描检测模块的配置:prepro

  cessor portscan:192.168.1.0/24 5 7  ar/log/portscan.log ;

  ● 封堵带有不健康信息的数据包:alert tcp any any <> 192.168.1.0/24 80 (content-list:"adults";msg:"Not for children!";react:block,msg) 。
20# 2010-9-10 10:49:41 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:52:04 | 显示全部楼层

Linux安全的log日志记录服务器

 环境 RedHat 7.3
 
  在网上越来越多的 hacker 的出现,越来越多的高手出现的情况下。如何才能确保自己可以保存一份完整的 log 呢?稍微有点概念的 hacker 都知道,进入系统后的第一见事情就是去清理 log,而发现入侵的最简单最直接的方法就是去看系统纪录文件。现在我们来说说如何设定一个安全的 log 服务器。
 
  想想看,如果入侵者无法连结您的log服务器,又如何能改您的 log 呢?现在我们来学习如何设定一个无 ip 的 log 服务器。
 
  现在,来介绍一下如何用 Snort来做三件事情∶
 
  Stealth sniffer

    stealth NIDS porbe

    stealth logger
 
  这一切都是用在一台没有ip的服务器上面的。NIDS是Network Intrusion Dectection Server 的简称,也就是说入侵检测服务器。
 
  为什么要 stealth 呢?
 
  在 internet 中运行任何一种服务,都是有一定的危险的。不管是http也好, ftp 也好, telnet 也好,总之都会有机会被 hack 入侵。 stealth logger 的独特性可以让我们在接收资料的同时,不发送任何的资料。这样外界的电脑(被 hack 入侵的电脑)就根本无法去更改 loger server 所收到的信息。也就是说保证了我们信息的完整性,以及原始性。 为了确保 log 服务器的安全,最好不要将 log 服务器连接在网路中。也就是说,当您需要检查 logger 服务器上得东西的时侯,您需要到电脑前,打开屏幕。而不是远端 login 进来。但是,如果说您一定要连接网路的话的话,那么请用两个的介面来做。也就是说两片网卡,并且注意,第一,IP forwarding 一定要关闭。第二就是,用来做 stealth logger 的介面是没有 ip 的一张网卡,这张网卡必须不能跟另外一个有 ip 的网卡在同一网路下面。
 
  设定:
 
  首先当然是确定您的网卡安装无误,并且可以被 kernel 抓到。然后把网卡所需要的 module 写到 /etc/modules.conf 文件中。
 
  现在我们来设定一个没有 ip 的网卡介面。 

    编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0

    vim /etc/sysconfig/network-scripts/ifcfg-eth0

  DEVICE=eth0

    USERCTL=no

    ONBOOT=yes

    BOOTPROTO=

    BROADCAST=

    NETWORK=

    NETMASK=

    IPADDR=
 
 
  存档后,用 ifconfig 来 active 我们的 eth0 介面。
 
  初试 stealth
 
  这里我们用到了 snort 这个程式。如果您的电脑中没有这个程式,可以到 www.snort.org 下载。
 
  现在我们运行 
 
  snort -dvi eth0
 
  这里 -d 的选项告诉 snort 对资料进行 decode (解码) 
 
  -v 告诉 snort 将结果显示在屏幕上面
 
  -i 则是指定所需要的 interface 
 
  可以用 -C 选项告诉 snort 只显示 ASCII 部份。 忽略 hexadecimal 资料。 
 
  ?$snort -dviC eth0
 
  Log directory=  ar/log/snort
 
  Initializing Network Interface eth0

    kernel filter, protocol ALL, TURBO mode

    (63 frames), raw packet socket
 
  ——== Initializing Snort ==——

    Decoding Ethernet on interface eth0
 
  ——== Initialization Complate ==——
 
  -*> Snort! <*-
 
  Version 1.8.4 (Build 99)
 
  By Martin Roesch (roesch@sourcefire.comwww.snort.org
 
  ……
 
  ……

    ……
 
  NIDS(入侵侦测)入侵检测本身是一件很复杂的事情。snort 本身也提供了强大的入侵检测的功能。这里我只做一个简单的介绍,好让大家有一个概念。如果真正实体去做一个 NIDS 的话。需要些更复杂的动作。例如设定更完善的 rules, 定时更新 snort.conf 中所定义的 rules (当新的攻击方式出现以后,要及时更新)

 首先,我们需要更改一下 /etc/snort/snort.conf 具体需要参照您自己的机器来设定。
 
  #设定 log 存放的地方
 
  config logdir:  ar/log/snort
 
  #设定网路
 
  var HOME_NET 192.168.1.0/24

    var EXTERNAL_NET any

    var SMTP ?$HOME_NET

    var HTTP_SERVERS ?$HOME_NET

    var SQL_SERVERS ?$HOME_NET

    var DNS_SERVERS 192.168.1.250/32 var RULE_PATH ./

  #设定 preprocessors
 
  preprocessor frag2

    preprocessor stream4: detect_scans

    preprocessor stream4_reassemblt

    preprocessor portscan:?$HOME_NET 4 3 portscan.log
 
  #设定 output
 
  output database:log,mysql,user=root

    dbname-snort host=localhost
 
  #rules
 
  alert tcp ?$HOME_NET 7161 -> ?$EXTERNAL_NET any(msg:"MISC Cisco Catalyst Remote Access";flags: SA; reference:arachnids, 129;reference:cve, CVE-1999-0430;classtype:bad-unknow; sid:513; rev:1;)
 
  #设定 patch , 这些都是些附加的 rules 的文件

  include ?$RULE_PATH -traffic.rules include ?$RULE_PATH/exploit.rules include ?$RULE_PATH/scan.rules include ?$RULE_PATH/ftp.rules
 
  #这些 rule 其实还有很多。您可以自己去写,也可以找人家写好的下载拿来用。
 
  现在让我们把 snort 跑起来∶
 
  snort -c /etc/snort/snort.conf -D -i eth0
 
  现在 snort NIDS 的模式跑起来了。 在 default 的情况下∶
 
  alerts 会放在  ar/log/snort/alert 中
 
  port-scanning 会放在  ar/log/snort/portscan.log

当您真正跑 NIDS 的时侯,需要把 snort 以 daemon 的模式来跑。 如果您安装的是 rpm 的东西,那么 rpm 文件中已经包含了一个 snortd 的文件,并且会帮您安装在 /etc/rc.d/init.d/ 下面。 当您设定好 snort 的 configure 文件以后,只要用 chkconfig 把 snortd 打开就可以了:
 
  加入 snortd
 
  chkconfig ——add snortd
 
  打开 snortd
 
  chkconfig snortd on
 
  或者
 
  chkconfig ——level 3 snortd on
 
  这里的 level 请自行更改到您所跑的 runlevel
 
  您可以用 cat /etc/inittab | grep id 来看自己在哪个runlevel 上面。
 
  cat /etc/inittab | grep id
 
  id:5:initdefault:
 
  这里就是说跑在 run level 5 上面。

  设定服务器 我们需要对服务器做一些设定,让服务器把 log 送到我们的 logger 服务器去。 首先,我们需要设定 /etc/syslog.conf 把 log 送到一个有效的,但是不存在的 ip 下面。例如我们的网路是 192.168.1.0/24 其中并没有 192.168.1.123 这台机器,也就是说这个 ip 实际上是空的。我们就把 log 指向这里。您可以指向任意一个空的有效 ip.
 
  vim /etc/syslog.conf
 
  加入
 
  *.info @192.168.1.123
 
  如果您的系统是用 syslog-ng 的话
 
  vim /etc/syslog-ng/syslog-ng.conf
 
  destination d_loghost { udp(ip(192.168.123)
 
  port (514)); };filter f_info { level(info); };log {filter(f_info); destination(d_loghost);};
 
  我们还需要加入 static ARP entry 才可以。 如果您的网路只是接了记个 Hub 而已, 那么 ARP 地址一样可以好象 ip 一样,设定成虚构的。 如果您有连结 switch, 您需要加入 log 服务器的真实 MAC 地址。
 
  我们这里加入我们 logger 服务器的真实 MAC 地址就可以了。
 
  arp -s 192.168.1.123 00:D0:B7:DB:BF:95
 
  在 Logger 服务器设定 snort
 
  /etc/snort/snort.conf
 
  var EXTERNAL_NET any
 
  #等于 snort -d
 
  config dump_payload
 
  #等于 snort -C
 
  config dump_chars_only
 
  #设定 log 存放的 path
 
  config logdir:  ar/log/snort
 
  # frag2 所做的动作就是把 fragmented 给我们 re-assembly
 
  preprocessor frag2
 
  log udp 192.168.1.1/32 any -> 192.168.1.123/32 514(logto: "logged-packets";)
 
  最后一行需要稍微解释一下∶
 
  我们这里把 snort 来做 packet logger. 也就是说,并不是把所有的东西都写入到  ar/log/snort/alert 中。而是 log any packets with match the rule without writing an alert.
 
  udp: 是说,我们这里用 udp 的 protocol. system log 通常都是使用 udp 的。
 
  192.168.1.1/32: 就是只我们的服务器啦,也就是送 log 的机器。 如果您是从整个一个网路段中收 log 也可以用 192.168.1.0/24.
 
  any: any source port 任何 port
 
  ->: 这个是 direction operator 大家都知道的
 
  192.168.1.123/35 514 就是我们给出的那个空 ip 啦,port 514
 
  如果没有指定 logto: 的话,log 会分别保存在不同的文件中。 而指定 logto 的话,就会把 log 全部存放到我们指定的文件中,看起来方便多了。
 
  更安全的保存 log 就可以更安全的保护服务器。 snort 的功能实际上非常的强大, 这里只是一个简单的介绍而已。如果您对这些东西有兴趣。可以去 www.snort.org/docs/ 下面看到非常多的有用的文件。
21# 2010-9-10 10:52:04 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 10:53:33 | 显示全部楼层

Linux系统下三款常用的网络安全工具简介

一、John the ripper

  在Linux中,密码以hash格式被存储,你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。

  John the ripper是一个高效的易于使用的密码猜测程序。

  其主页在http://www.openwall.com/john/

  下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。

  John也可以Crack由htpasswd 生成的用于验证apache用户的密码,如果你用htpasswd -c apachepasswd user创建了一个用户user,并生成了密码,你也可以用john apachepasswd来进行猜测。

  John在猜测密码时输出在终端上,并把猜测出的密码存于john.pot文件中。

  另一个password Cracker是大家知道的经典的Cracker.

  主页在 http://www.users.dircon.co.uk/~crypto/

  二、Logcheck

  Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux log文件,象 ar/log/messages,  ar/log cure, ar/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送email给管理员。你能设置它基于每小时,或者每天用crond来自动运行。

  logcheck工具的主页在http://www.psionic.com/abacus/logcheck/下载后用tar xvfz logcheck*解开到一临时目录如/tmp下,然后用./make linux自动生成相应的文件到/usr/local/etc,/usr/local/bin/等目录下,你可能更改设置如发送通知能谁的邮件帐号,默认发送到root,你能设置root的邮件别名帐号到一批人,更改设置让其忽略某些类型的消息如你的邮件记录文件中的plug-gw,因为plug-gw做反向IP查找,若找不到则记录一个警告消息到 ar/log/maillog,logcheck默认记录下所有这些警告发送给你,你可以通过设置忽略掉它们。利用logcheck工具分析你的所有logfile,避免了你每天经常手动地检查它们,节省了时间,提高了效率。

  三、Tripwire

  Tripwire 是一个用来检验文件完整性的非常有用的工具,你能定义哪些文件/目录需要被检验,不过默认设置能满足大多数的要求,它运行在四种模下:数据库生成模式,数据库更新模式,文件完整性检查,互动式数据库更新。当初始化数据库生成的时候,它生成对现有文件的各种信息的数据库文件,万一以后你的系统文件或者各种配置文件被意外地改变,替换,删除,它将每天基于原始的数据库对现有文件进行比较发现哪些文件被更改,你能根据email的结果判断是否有系统入侵等意外事件。

  Tripwire的主页在 http://www.tripwiresecurity.com , tripwire-1.2.3的版本你能免费使用.

  如果你使用Redhat Linux 6.1,你也能得到最新的为6.1重建的Tripwire-1.2.3

  (http://rufus.w3.org/linux/RPM/po ... ire-1.2-3.i386.html

  当你手动更改了系统中的配置文件或程序时,你能手动再次生成一次数据库文件,运行 tripwire-initialize 在当前目录下创建databases目录并在该目录下生成新的系统数据库文件,然后cp到 ar/spool/tripwire目录中覆盖旧的。
22# 2010-9-10 10:53:33 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-10 11:20:36 | 显示全部楼层

Linux逻辑盘卷管理LVM详解

摘要:Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如PatitionMagic等),但这都只是暂时解决办法,没有根本解决问题。随着Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解,本文就深入讨论LVM技术,使得用户在无需停机的情况下方便地调整各个分区大小。
  
  一、前言
  
  每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。
  
  虽然现在有很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。
  
  因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。
  
  LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
  
  二、LVM基本术语
  
  前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
  
  *物理存储介质(Thephysicalmedia)
  这里指系统的存储设备:硬盘,如:/dev a1、/dev/sda等等,是存储系统最低层的存储单元。
  
  *物理卷(physicalvolume)
  物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
  
  *卷组(VolumeGroup)
  LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  
  *逻辑卷(logicalvolume)
  LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  
  *PE(physicalextent)
  每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
  
  *LE(logicalextent)
  逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

   2003.12.12.16.41.33.lvm-17777777.jpg
   
  
  首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。
  
      2003.12.12.16.41.46.lvm-200000000.jpg
  
  一个卷组由一个或多个物理卷组成。
  
      2003.12.12.16.42.0.lvm-3999999.jpg
  
  从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
  
  下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
  
      2003.12.12.16.42.11.lvm-411111111111.jpg
  
  和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
  
  系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。

 三、安装LVM
  
  首先确定系统中是否安装了lvm工具:
  
  [root@wwwroot]#rpm–qa|greplvm
  lvm-1.0.3-4
  
  如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVMrpm工具包。
  
  安装了LVM的RPM软件包以后,要使用LVM还需要配置内核支持LVM。RedHat默认内核是支持LVM的,如果需要重新编译内核,则需要在配置内核时,进入Multi-deviceSupport(RAIDandLVM)子菜单,选中以下两个选项:
  
  
  • Multipledevicesdriversupport(RAIDandLVM)
      <*>Logicalvolumemanager(LVM)Support
      
      然后重新编译内核,即可将LVM的支持添加到新内核中。
      
      为了使用LVM,要确保在系统启动时激活LVM,幸运的是在RedHat7.0以后的版本,系统启动脚本已经具有对激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下内容:
      
      #LVMinitialization
      if[-e/proc/lvm-a-x/sbin/vgchange-a-f/etc/lvmtab];then
      action$"SettingupLogicalVolumeManagement:"/sbin/vgscan&&/sbin/vgchange-ay
      fi
      
      其中关键是两个命令,vgscan命令实现扫描所有磁盘得到卷组信息,并创建文件卷组数据文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange-ay命令激活系统所有卷组。
      
      四、创建和管理LVM
      
      要创建一个LVM系统,一般需要经过以下步骤:
      
      1、创建分区
      使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。
      
      2、创建物理卷
      创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。将整个磁盘创建为物理卷的命令为:
      
      #pvcreate/dev/hdb
      
      将单个分区创建为物理卷的命令为:
      
      #pvcreate/dev/hda5
      
      3、创建卷组
      创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:
      
      #vgcreateweb_document/dev/hda5/dev/hdb
      
      vgcreate命令第一个参数是指定该卷组的逻辑名:web_document。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate在创建卷组web_document以外,还设置使用大小为4MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数(使用-s指定,具体请参考manvgcreate)。
      
      4、激活卷组
      为了立即使用卷组而不是重新启动系统,可以使用vgchange来激活卷组:
      
      #vgchange-ayweb_document
      
      5、添加新的物理卷到卷组中
      当系统安装了新的磁盘并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令:
      
      #vgextendweb_document/dev/hdc1
      
      这里/dev/hdc1是新的物理卷。
      
      6、从卷组中删除一个物理卷
      要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:
      
        2003.12.12.16.42.22.lvm-544444444.jpg
      
      如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
      
      #vgreduceweb_document/dev/hda1
      
      7、创建逻辑卷
      创建逻辑卷的命令为lvcreate:
      
      #lvcreate-L1500–nwww1web_document
      
      该命令就在卷组web_document上创建名字为www1,大小为1500M的逻辑卷,并且设备入口为/dev/web_document/www1(web_document为卷组名,www1为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需要首先察看该卷组的PE数,然后在创建逻辑卷时指定:
      
      #vgdisplayweb_document|grep"TotalPE"
      TotalPE45230
      #lvcreate-l45230web_document-nwww1

    8、创建文件系统
      笔者推荐使用reiserfs文件系统,来替代ext2和ext3:
      
       34343434343.jpg
      
      创建了文件系    以后,就可以加载并使用它:

        # mkdir /data/wwwroot

        # mount /dev/web_document/www1 /data/wwwroot

        如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:

        /dev/web_document/www1 /data/wwwroot reiserfs defaults 1 2

        9、 删除一个逻辑卷

        删除逻辑卷以前首先需要将其卸载,然后删除:

        # umount /dev/web_document/www1

        # lvremove /dev/web_document/www1

        lvremove -- do you really want to remove "/dev/web_document/www1"? [y/n]: y

        lvremove -- doing automatic backup of volume group "web_document"

        lvremove -- logical volume "/dev/web_document/www1" successfully removed

        10、 扩展逻辑卷大小

        LVM提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvcreate:

        # lvextend -L12G /dev/web_document/www1

        lvextend -- extending logical volume "/dev/web_document/www1" to 12 GB

        lvextend -- doing automatic backup of volume group "web_document "

        lvextend -- logical volume "/dev/web_document/www1" successfully extended

        上面的命令就实现将逻辑卷www1的大小扩招为12G。

        # lvextend -L+1G /dev/web_document/www1

        lvextend -- extending logical volume "/dev/web_document/www1" to 13 GB

        lvextend -- doing automatic backup of volume group "web_document "

        lvextend -- logical volume "/dev/web_document/www1" successfully extended

        上面的命令就实现将逻辑卷www1的大小增加1G。

        增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。笔者推荐使用reiserfs文件系统来替代ext2或者ext3。因此这里仅仅讨论reiserfs的情况。Reiserfs文件工具提供了文件系统大小调整工具:resize_reiserfs。对于希望调整被加载的文件系统大小:

        # resize_reiserfs -f /dev/web_document/www1

        一般建议最好将文件系统卸载,调整大小,然后再加载:

        # umount /dev/web_document/www1

        # resize_reiserfs /dev/web_document/www1

        # mount -treiserfs /dev/web_document/www1 /data/wwwroot

        对于使用ext2或ext3文件系统的用户可以考虑使用工具

        ext2resize。http://sourceforge.net/projects/ext2resize

        11、 减少逻辑卷大小

        使用lvreduce即可实现对逻辑卷的容量,同样需要首先将文件系统卸载:

        # umount /data/wwwroot

        # resize_reiserfs -s-2G /dev/web_document/www1

        # lvreduce -L-2G /dev/web_document/www1

        # mount -treiserfs /dev/web_document/www1 /data/wwwroot

        五、 总结

        根据上面的讨论可以看到,LVM具有很好的可伸缩性,使用起来非常方便。可以方便地对卷组、逻辑卷的大小进行调整,更进一步调整文件系统的大小。如果希望了解更多信息,请参考LVM-HOWTO。
  • 0025555555.jpg
    23# 2010-9-10 11:20:36 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:22:37 | 显示全部楼层

    【汇总】LVM—linux逻辑磁盘卷管理专题

    0025555555.jpg


    Linux逻辑盘卷管理LVM详解
    http://bbs.hh010.com/forum.php?m ... mp;amp;toread=1#tpc

    基础VM安装配置入门
    一份非常内行的Linux LVM HOWTO
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34518

    进阶VM与RAID的协作
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34519

    raid and LVM linux 高级管理
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34520

    RedHat Linux 手动创建RAID和LVM分区
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34521

    如何重新映射设备实例号及重新配置逻辑卷管理器(LVM)?
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34522

    系统维护:linux下的LVM分区管理
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34523


    RAID+LVM的列举应用
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34524


    监控:LVM性能分析
    LVM for Linux测试报告
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34525

    使用 lvmstat 命令监控 LVM 性能
    http://bbs.hh010.com/forum.php?mod=viewthread&tid=34526
    24# 2010-9-10 11:22:37 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:32:18 | 显示全部楼层

    一份非常内行的Linux LVM HOWTO

    1. 绪论
        欢迎你,亲爱的读者。

        写这个文档的目的是为了告诉你什么是LVM,它怎样工作,你怎样运用它使你的生活变得更容易。虽然有一份LVM FAQ,但仍是德文的,它是从不同的角度来描写的。它是一份“真的”HOWTO,在传授理解(有希望的)的时候也是非常内行的。

        我要说清楚我不是一个Linux逻辑卷管理器(Logical Volume Manager)的作者。我向那些作者表示敬意,同时我希望能和他们合作。

        不可思议的是我甚至不知道LVM的开发者。我希望这种情况不久会改变。我事先向他们表示道歉。

        1.1 免责声明 & 许可
        分发这个文档是希望它对你有用,但是不提供任何担保,也没有销售或适应特殊目的的隐含担保。

        如果你的磁盘融化了,你公司解雇了你--这决不是我们的错。对不起。请记得经常做备份,在没有重要数据的系统上做实验。

        此外,Richard Allen不代表他老板说话。

        Linux是Linus Torvalds的注册商标。

        英文原文(若翻译有误,以原文为准)

        This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

        If your disks melt and your company fires you - its never our fault. Sorry. Make frequent backups and do your experiments on non-mission critical systems.

        Furthermore, Richard Allen does not speak for his employer.

        Linux is a registered trademark of Linus Torvalds.

        1.2 预备知识
        不是太多。如果你曾经安装过Linux和创建过文件系统(fdisk/mkfs),那你就准备就绪了。但因为总是以root身份操作,所以一定要小心谨慎!错误的命令或操作设备文件都可能损坏已经存在的数据。

        如果你知道怎样配置HP/UX LVM,那你几乎都完成了,Linux工作得很象HP上的处理。

        1.3 注意事项
        关于这份文档有几点需要注释。虽然我写了大部分,但我真的不希望它停步。我坚决相信Open Source,我鼓励你反馈、更新、打补丁等等。不要不愿意告诉我们有关排版或普通的老错误。

        如果你感觉你更有资格来维护一部分,或者你认为你能创作和维护一个新的部分,欢迎你。这个HOWTO的SGML格式是通过CVS可用的。我预想这会是个合作计划。

        这份文档里,你会发现许多FIXME的通知。补丁总是欢迎的!无论你在哪里发现FIXME,你都要明白你正踩在未知的领域。这不是说其他地方没有错误,而是说这里是要特别注意的地方。如果你已经验证了什么,请告诉我,我好删除这FIXME通知。

        1.4 访问,CVS & 更新
        这份HOWTO的规范定位在 这里。

        我们现在有匿名的CVS访问,对全世界普遍有效。这使你更容易获得最新版的HOWTO,并提供改变和增强。

        如果你想通过CVS获得这份HOWTO,下面教你怎样做:

        $ export CVSROOT=:pserver:anon@outpost.ds9a.nl:/var/cvsroot
        $ cvs login
        CVS password: [enter cvs (without s)]
        $ cvs co lvm-howto
        cvs server: Updating lvm-howto
        U lvm-howto/lvm-howto.sgml


        如果你发现错误,或者想增加什么,本地修复它,并运行“cvs diff -u”,同时将结果发给我们。

        提供了一个Makefile文件来帮助你创建postscript,dvi,pdf,html 和 plain text格式。你可能需要安装sgml-tools,ghostscript 和 tetex 以获得所有格式。

        1.5 这份文档的编排
        我们将首先解释一些需要的基本知识。我们尽量设法包括例子来帮助理解。


        2. 什么是LVM?
        传统上,一个分区大小是静态的。这要求一个系统安装人员必须考虑的不是“我要在这个分区上存储多少数据”,而是“我‘究竟’要在这个分区上存储多少数据”。当一个用户在这个分区上没有空间了,他要么不得不重新分区(这可能要求整个操作系统重装),要么象符号连接一样使用组装机。

        一个分区就是物理磁盘上一系列连续数据块的概念已经演变了。多数类Unix系统现在有能力分解物理磁盘到许多单元。多个驱动器上的存储单元可以汇聚成一个“逻辑卷”,它们可以分配给分区。另外,单元可以随着空间要求的改变而从分区中添加和删除。

        这就是基本的逻辑卷管理器(LVM)

        例如,假设你有一个1GB的磁盘,并且创建“/home”分区花了600MB。设想你没有空间了,于是决定“/home”需要1GB。用传统的分区观念,你不得不有另外一个至少1GB大小的驱动器。接着增加这个磁盘,创建新的/home,并且将现有的数据拷贝过去。

        然而,用LVM配置,你仅仅只需要增加400MB(或更大)的磁盘,并将它的存储单元添加到“/home”分区中。其他工具可以让你调整原来文件系统的大小,所以你仅仅只需要调整“/home”大小来使用更大的分区,接着返回到商务中。

        一个非常特殊的处理,LVM甚至可以做它自身的“快照”,这使你能对不可移动的目标做备份。我们返回到这个激动人心的可能中,稍后,有许多另外的真实应用。

        以下章节中,我们解释了LVM的基本要素,和它使用中的许多概要。


        3. 基本原理
        Ok,不要因为恐惧而停止,但是LVM有许多你要明白的术语,以免你危及你的文件系统。

        我们从下面开始,或多或少。

        物理介质 The physical media
        你应该感受“物理”这个单词有极大的延伸,虽然我们刚开始假设它仅仅是一个硬盘,或者一个分区。例如,/dev/hda,/dev/hda6,/dev/sda。你可以转换一个块设备上任何连续块到一个。。。
         
        物理卷 Physical Volume (PV)
        一个PV只不过是有许多管理数据添加在它里面的物理介质--一旦你添加了它,LVM就认为它是。。。的一个持有者。
         
        物理分区 Physical Extents (PE)
        物理分区真的象一些大的数据块,通常有几MB。PE可以分配给一个。。。
         
        卷组 Volume Group (VG)
        一个VG是由许多物理分区组成的(可能来自多个物理卷或硬盘)。虽然这可能容易让你认为一个VG就是由几个硬盘组成的(例如/dev/hda和/dev/sda),但是更确切的说,它包含由这些硬盘提供的许多PE。
         
        >;从这个卷组,PE可以分配给一个。。。
         
        逻辑卷 Logical Volume (LV)
        Yes,我们最终到达某处。一个逻辑卷是我们工作的最终结果,这里是我们存储信息的地方。这等同于传统分区的想法。
        象用通常的分区一样,在逻辑卷上你能代表性的创建一个。。。
         
        文件系统 Filesystem
        文件系统是你想它成为的形态:标准的 ext2,ReiserFS,NWFS,XFS,JFX,NTFS,等等。。。对Linux内核来说,在通常的分区和逻辑卷之间没有差别。
        我试着画了一个ASCII图来使这些形象化。

        一个物理卷,包含了许多物理分区:

        +-----[ Physical Volume ]------+
        | PE | PE | PE | PE | PE | PE |
        +------------------------------+

        一个卷组,包含了2个物理卷(PV)有6个物理分区:

        +------[ Volume Group ]-----------------+
        | +--[PV]--------+ +--[PV]---------+ |
        | | PE | PE | PE | | PE | PE | PE | |
        | +--------------+ +---------------+ |
        +---------------------------------------+

        我们现在做更进一步扩展:

        +------[ Volume Group ]-----------------+
        | +--[PV]--------+ +--[PV]---------+ |
        | | PE | PE | PE | | PE | PE | PE | |
        | +--+---+---+---+ +-+----+----+---+ |
        | | | | +-----/ | | |
        | | | | | | | |
        | +-+---+---+-+ +----+----+--+ |
        | | Logical | | Logical | |
        | | Volume | | Volume | |
        | | | | | |
        | | /home | | /var | |
        | +-----------+ +------------+ |
        +---------------------------------------+


        这个向我们展示了两个文件系统,它跨越两个磁盘。/home文件系统包含4个物理分区,/var文件系统包含2个。

        bert hubert 正在写一个工具来更真实的描述LVM,这里提供了一些它在屏幕上出现的外观。看起来比ASCII图画要好。

        3.1 Show & Tell
        Ok,这些概念很难理解(’We are LVM of Borg...),因此下面给出了创建一个逻辑卷的例子。不要粘贴这个例子到你的控制台,因为这样会破坏数据,除非碰巧你的计算机的/dev/hda3和/dev/hdb2没有使用。

        如果有疑问,查看上面的ASCII图画。

        你应该首先设置/dev/hda3和/dev/hdb2的分区类型为0x8e,它表示”Linux LVM”。请注意你的fdisk的版本可能仍不认识这种类型,因此它显示为“Unknown”:


        # fdisk /dev/hda

        Command (m for help): p

        Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
        Units = cylinders of 16065 * 512 bytes

        Device Boot Start End Blocks Id System
        /dev/hda1 1 2 16033+ 83 Linux
        /dev/hda2 3 600 4803435 83 Linux
        /dev/hda3 601 607 56227+ 83 Linux
        /dev/hda4 608 614 56227+ 83 Linux

        Command (m for help): t
        Partition number (1-4): 3
        Hex code (type L to list codes): 8e

        Command (m for help): p

        Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
        Units = cylinders of 16065 * 512 bytes

        Device Boot Start End Blocks Id System
        /dev/hda1 1 2 16033+ 83 Linux
        /dev/hda2 3 600 4803435 83 Linux
        /dev/hda3 601 607 56227+ 8e Unknown
        /dev/hda4 608 614 56227+ 83 Linux

        Command (m for help): w

    我们对/dev b2做同样的操作,在此就不演示了。这是需要的,以至LVM能重建你应该丢失的配置。

        通常,不需要重启,但有些计算机却要求。因此如果下面的例子不工作,试试重启。

        接着我们创建物理卷(PV),如下:


        # pvcreate /dev a3
        pvcreate -- physical volume "/dev a3" successfully created
        # pvcreate /dev b2
        pvcreate -- physical volume "/dev b2" successfully created

        我们再将这两个物理卷(PV)加到一个叫做“test”的卷组(VG)中:


        # vgcreate test /dev b2 /dev a3
        vgcreate -- INFO: using default physical extent size 4 MB
        vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
        vgcreate -- doing automatic backup of volume group "test"
        vgcreate -- volume group "test" successfully created and activated

        现在我们有一个空的卷组(VG),让我们来检查一下:


        # vgdisplay -v test
        --- Volume group ---
        VG Name test
        VG Access read/write
        VG Status available/resizable
        VG # 0
        MAX LV 256
        Cur LV 0
        Open LV 0
        MAX LV Size 255.99 GB
        Max PV 256
        Cur PV 2
        Act PV 2
        VG Size 184 MB
        PE Size 4 MB
        Total PE 46
        Alloc PE / Size 0 / 0
        Free PE / Size 46 / 184 MB

        --- No logical volumes defined in test ---


        --- Physical volumes ---
        PV Name (#) /dev a3 (2)
        PV Status available / allocatable
        Total PE / Free PE 13 / 13

        PV Name (#) /dev b2 (1)
        PV Status available / allocatable
        Total PE / Free PE 33 / 33

        这里的许多数据--大多数现在都容易理解了。我们看到没有逻辑卷(LV)定义,因此我们要补上它。我们将在“test”卷组(PV)中创建一个50MB的逻辑卷,叫做“HOWTO”:


        # lvcreate -L 50M -n HOWTO test
        lvcreate -- rounding up size to physical extent boundary "52 MB"
        lvcreate -- doing automatic backup of "test"
        lvcreate -- logical volume "/dev/test/HOWTO" successfully created

        Ok,到这里,我们创建一个文件系统:


        # mke2fs /dev/test/HOWTO
        mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
        Filesystem label=
        OS type: Linux
        Block size=1024 (log=0)
        Fragment size=1024 (log=0)
        13328 inodes, 53248 blocks
        2662 blocks (5.00%) reserved for the super user
        First data block=1
        7 block groups
        8192 blocks per group, 8192 fragments per group
        1904 inodes per group
        Superblock backups stored on blocks:
        8193, 24577, 40961

        Writing inode tables: done
        Writing superblocks and filesystem accounting information: done
        # mount /dev/test/HOWTO /mnt
        # ls /mnt
        lost+found

        我们做完了!让我们回顾我们的卷组(VG),它现在充满了一些东西:


        # vgdisplay test -v
        --- Volume group ---
        VG Name test
        VG Access read/write
        VG Status available/resizable
        VG # 0
        MAX LV 256
        Cur LV 1
        Open LV 1
        MAX LV Size 255.99 GB
        Max PV 256
        Cur PV 2
        Act PV 2
        VG Size 184 MB
        PE Size 4 MB
        Total PE 46
        Alloc PE / Size 13 / 52 MB
        Free PE / Size 33 / 132 MB

        --- Logical volume ---
        LV Name /dev/test/HOWTO
        VG Name test
        LV Write Access read/write
        LV Status available
        LV # 1
        # open 1
        LV Size 52 MB
        Current LE 13
        Allocated LE 13
        Allocation next free
        Read ahead sectors 120
        Block device 58:0


        --- Physical volumes ---
        PV Name (#) /dev a3 (2)
        PV Status available / allocatable
        Total PE / Free PE 13 / 13

        PV Name (#) /dev b2 (1)
        PV Status available / allocatable
        Total PE / Free PE 33 / 20

        好,这就是了。/dev a3完全没用,而/dev b2有13个物理分区(PE)在用。

        3.2 激活和非激活:内核空间和用户空间
        和使用所有操作系统一样,Linux划分了两个部分:内核空间(kernel space)和用户空间(user space)。用户空间有时叫做用户区(userland),这也是关于这个主题的一个很好的名字。

        关于逻辑卷管理器的创建和修改都是在用户空间做的,然后传给内核。一旦卷组或逻辑卷向内核汇报,它就叫做“激活(Active)”。当它被激活时,只有某些更改可以执行,其他的更改只有在它非激活时执行。


        4. 首要条件
        LVM在很大范围内的内核中都有效。在Linux 2.4,LVM将全部被集成。内核2.3.47和以前的,LVM要经过处理来合并到主内核中。

        4.1 内核
        Linux 2.4
        包含了你需要的所有内容。希望大多数的发行版都将LVM当成模块集成来发行。如果你需要编译,仅仅是当你选择块设备时打勾LVM选项。

        Linux 2.3.99.*
        一旦内核向前发展稳定了,这部分就不会存在了。但是现在,我们还是要描述一下。

        当我们写这篇文档时,Linux最新的内核版本是2.3.99pre5,它仍然需要一些小的补丁才能使LVM工作。

        对于Linux 2.3.99pre3,有两个补丁发行:

        一个补丁是张贴在linux-kernel,在这里可以找到。

        Andrea Arcangeli改进了这个补丁,提供了一个增量的补丁,它应用于2.3.99pre3 LVM补丁和这之上。

        对于Linux 2.3.99pre5,bert hubert将这两个补丁合并成一个了,并且主要针对2.3.99pre5。在这里可以找到这个补丁。使用它要小心。

        2.3.99pre6-1,是的,是补丁的一个预览版,特色是第一次完成了LVM的支持!它仍然遗漏了Andreas的补丁,但我们确信它不久真的会发行的。

        2.3.99pre4-ac1缺省有一个小的补丁在,并且能工作。虽然它不包括Andreas的补丁。

        Linux 2.2
        FIXME: write this

        Linux 2.3
        FIXME: write this

        4.2 用户余地
        你需要从LVM站点下载有效的工具。用glibc2.1编译系统要求的一些补丁。即使这样,在Debian 2.2上仍会出错。

        5. 增长文件系统
        你可以用一个预备好的脚本做大量的工作,也可以根据你的需要手工做

        5.1 使用e2fsadm
        如果在你的卷组中有剩余空间,并且你使用的是ext2文件系统(大多数人都是这样的),你就可以使用这个便捷的工具。

        e2fsadm命令利用商业的resize2fs工具。虽然人们都感觉resize2fs是一个很好的软件,但是它并没有被广泛的安装。

        如果你想使用FSF的ext2resize命令,你需要告诉e2fsadm以下内容:

    # export E2FSADM_RESIZE_CMD=ext2resize
        # export E2FSADM_RESIZE_OPTS=""

        余下的就简单了,e2fsadm使用时很象其他的LVM命令:


        # e2fsadm /dev/test/HOWTO -L+50M
        e2fsadm -- correcting size 102 MB to physical extent boundary 104 MB
        e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
        Pass 1: Checking inodes, blocks, and sizes
        Pass 2: Checking directory structure
        Pass 3: Checking directory connectivity
        Pass 4: Checking reference counts
        Pass 5: Checking group summary information
        /dev/test/HOWTO: 11/25688 files (0.0% non-contiguous), 3263/102400 blocks
        lvextend -- extending logical volume "/dev/test/howto" to 104 MB
        lvextend -- doing automatic backup of volume group "test"
        lvextend -- logical volume "/dev/test/HOWTO" successfully extended

        ext2_resize_fs
        ext2_grow_fs
        ext2_block_relocate
        ext2_block_relocate_grow
        ext2_grow_group
        ext2_add_group
        ext2_add_group
        ext2_add_group
        ext2_add_group
        ext2_add_group
        ext2_add_group
        direct hits 4096 indirect hits 0 misses 1
        e2fsadm -- ext2fs in logical volume "/dev/test/HOWTO" successfully extended to 104 MB

        5.2 增长逻辑卷
        e2fsadm命令为你做了这些工作。然而,了解怎样手工来做可能会有用的。

        如果在你的卷组中有剩余空间,那么只需要一行:


        # lvextend -L+12M /dev/test/HOWTO
        lvextend -- rounding size to physical extent boundary
        lvextend -- extending logical volume "/dev/test/HOWTO" to 116 MB
        lvextend -- doing automatic backup of volume group "test"
        lvextend -- logical volume "/dev/test/HOWTO" successfully extended

        5.3 增长卷组
        这是用vgextend功能实现的,它很象馅饼一样容易。你首先需要创建一个物理卷。这要用pvcreate来实现。使用这个工具,你转换任何块设备为一个物理卷。

        这样做了之后,vgextend做余下的任务:


        # pvcreate /dev/sda1
        pvcreate -- physical volume "/dev/sda1" successfully created
        # vgextend webgroup /dev/sda1
        vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
        vgextend -- doing automatic backup of volume group "webgroup"
        vgextend -- volume group "webgroup" successfully extended

        请注意,为了要做这些,你的卷组必须是激活的。你可以通过执行象“vgchange -a y webgroup”来使它激活。

        5.4 增长文件系统
        如果你想手工做,有两条路径可以实现。

        ext2离线,使用ext2resize
        离线,就意味着你必须umount这个文件系统来做这些改变。在做这些改变的时候,这个文件系统和它上面的数据暂时不可用。如果你想扩充根分区或其他重要的分区,你必须用其他的启动介质来引导。

        ext2resize工具可以在GNU ftp站点找到,但大多数的发行版都将它作为一个包来发行。它的语法也简单易懂:


        # ext2resize /dev/HOWTO/small 40000

        这里40000是文件系统已经增长或收缩之后的块的数目。

        ext2在线
        FIXME: write this

        6. 替换磁盘
        这是LVM的好处之一。一旦你发现某个磁盘有错误,那就是要移动你的数据的时候了。使用LVM它很象馅饼一样容易。我们首先举一个明显的替换例子,你先添加一个磁盘到系统中,它至少要和你想要替换的磁盘一样大。

        要移动数据,我们移动卷组的物理分区到另一个磁盘上,或者更准确的说,到另一个物理卷上。要做这些,LVM给我们提供了pvmove功能。

        假设我们怀疑的那块磁盘叫/dev a1,并且我们想用/dev/sdb3来替换它。我们首先将/dev/sdb3添加到包含/dev a1的那个卷组中。

        在这之前,umount这个卷组上的所有文件系统看来是明智的。有一个全备份也不会损坏什么。

        FIXME: is this necessary?

        接下来我们执行pvmove。非常简单的,我们仅仅提到我们想要移走的那块磁盘,就象这样:


        # pvmove /dev a1
        pvmove -- moving physical extents in active volume group "test1"
        pvmove -- WARNING: moving of active logical volumes may cause data loss!
        pvmove -- do you want to continue? [y/n] y
        pvmove -- doing automatic backup of volume group "test1"
        pvmove -- 12 extents of physical volume "/dev a1" successfully moved

        请留意这个警告。而且看来至少有些内核或LVM的版本在使用这个命令时有问题。我是用2.3.99pre6-2来测试的,它可以工作,但要警告。

        现在,/dev a1没有包含任何物理分区了,我们可以将它从卷组中删除:


        # vgreduce test1 /dev a1
        vgreduce -- doing automatic backup of volume group "test1"
        vgreduce -- volume group "test1" successfully reduced by physical volume:
        vgreduce -- /dev a1

        FIXME: we need clarity on a few things. Should the volume group be active? When do we get data loss?

        6.1 当事情发生在晚期时
        如果一个磁盘没有出现警告就失败了,你就不能移走它上面的物理分区到另一个物理卷上,这样你可能会丢失数据,除非在这个失败的PV上的逻辑卷是镜像了的。正确的行为是用一个同样的PV或者至少同样大小的分区来替换这个失败的PV。

        /etc/lvmconf目录包含了LVM数据和结构的备份,包括哪些磁盘做成了PV,每个PV属于哪个VG,每个VG中有哪些LV。

        替换了出错的磁盘之后,你可以用vgcfgrestor命令来恢复LVM数据到新的PV上。它恢复卷组和所有它的信息,但是不会恢复在逻辑卷上的数据。这是因为当LVM数据做一些更改时,LVM命令自动做备份。


        --------------------------------------------------------------------------------

        7. 为一致性备份做快照
        这是更加难以置信的一个可能性。假设你有一个非常繁忙的服务器,有许多东西运行。为了一个有用的备份,你需要停止大量的程序,否则,你将以数据不一致告终。

        一个规范的例子是从/tmp移动一个文件到/root下,而且/root将先备份。当/root被读的时候,这个文件还不在那里。当/tmp被备份时,这个文件已经不在了。

        另一个事例是保存数据库或目录。如果一个文件在使用状态,我们就没有任何线索了,除非我们给应用程序时间做一个清除的关闭。

        这样的话,新的问题又出现了。我们关闭程序,做我们的备份,接着重新启动它们。如果备份只花几分钟这是很好的,但是,如果它要花数小时,或者你根本不确定它到底要花多久的时候,事情就真的痛苦了。

        LVM可以营救。

        使用LVM,我们可以做一个LV瞬间的快照,然后mount它,再备份它。

        让我们试验一下:


        # mount /dev/test/HOWTO /mnt
        # echo >; /mnt/a.test.file
        # ls /mnt/
        a.test.file lost+found
        # ls -l /mnt/
        total 13
        -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
        drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found

        Ok,我们现在有些事情要用它一起做。让我们产生这个快照:


        # lvcreate --size 16m --snapshot --name snap /dev/test/HOWTO
        lvcreate -- WARNING: all snapshots will be disabled if more than 16 MB are changed
        lvcreate -- INFO: using default snapshot chunk size of 64 KB
        lvcreate -- doing automatic backup of "test"
        lvcreate -- logical volume "/dev/test/HOWTO" successfully created

        对于“--size”参数以后再详述。让我们mount这个快照:


        # mount /dev/test/snap /snap
        # ls /snap
        total 13
        -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
        drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found

        现在我们从原处删除a.test.file,并且检查它是否仍然在快照里:

    # rm /mnt/a.test.file
        # ls /snap
        total 13
        -rw-r--r-- 1 root root 1 Apr 2 00:28 a.test.file
        drwxr-xr-x 2 root root 12288 Apr 2 00:28 lost+found

        太令人惊讶了!

        7.1 它是如何工作的?
        记得我们不得不设置“--size”参数吗?真正发生的事情是,“snap”卷需要有那些当LVM调用时,在原处要被改变的所有块的一个拷贝。

        当我们删除a.test.file时,它的i节点被删除。这引起64KB要被标注成“脏的”--同时原始数据的一个拷贝被写到“snap”卷。这个例子中,我们分配了16MB给快照,因此如果多于16MB的块要被修改,快照就会无效了。

        要决定一个快照分区的正确大小,你将不得不推测基于主LV的使用模式、快照要激活的总时间。例如,在午夜,当无人使用系统的情况下,一个几小时的备份可能要求很小的空间。

        请注意,快照不是永久的。如果你卸下LVM或重启,它们就丢失了,需要重新创建。


        --------------------------------------------------------------------------------

        8. 冗余 & 性能
        为了性能的考虑,可以将数据分散在几个条块化的磁盘上。这意味着块1在PV A上,块2在PV B上,块3又在PV A上。你也可以条块化跨多余2块磁盘。

        这样的安排意味着你有更多有效的磁盘带宽。也就是说包含了更多的“轴”。以后会详述。

        除此之外,为了提高性能,也可以将你的数据在多个磁盘上有多份拷贝。这叫做镜像。目前,LVM本身还不支持它,但是有多种方法能实现镜像。

        8.1 为何要条块化?
        磁盘的性能至少受三种因素的影响。最明显的是一块磁盘上的数据能连续被读或写的速度。这是当读或写仅连接了一个单一的磁盘的SCSI/IDE总线上的一个大文件时的限制因素。

        接着是到磁盘的有效带宽。如果你在一个SCSI总线上有7块盘,这也许会小于你的磁盘本身写的速度。如果你愿意花足够的钱,你可以避免这个瓶颈成为一个问题。

        然后是响应时间。当成谚语说,响应时间总是坏消息。甚至更坏的是,你不可能通过花更多的钱来降低响应时间!现在出产的大多数磁盘有一个大约7ms的响应时间。还有SCSI响应时间,通常是大约25ms。

        FIXME: need recent numbers!

        这意味着什么?在一个典型情形,总的响应时间大约是30ms。因此你每秒钟只能执行大约33个磁盘操作。如果你想每秒钟能做数千个查询,并且你没有大量的缓存,那么你就非常不走运了。

        如果你有多个磁盘,或者“轴”,在并行工作,那么你可以有多个命令很好地围绕你的响应问题同时执行。有些应用程序,比如一个大的新闻服务器,如果没有条块化或其它I/O敏捷性它甚至不再工作。

        这就是条块化做的事。如果你的总线能胜任,甚至连续的读和写可能会更快。

        8.2 为何不条块化
        条块化没有进一步的措施来解除你的错误机会,按一个“每次一比特”的基本原则。如果你的磁盘任一块死了,你全部的逻辑卷都会丢失。如果你正好连接数据,仅仅文件系统部分丢失。

        最终的选项是镜像的条块化。

        FIXME: make a mirrored stripe with LVM and md

        8.3 LVM本身的条块化
        当用lvcreate创建LV时,指定条块化配置项。有两个相关参数。-i参数告诉LVM应该在多少个PV上分散数据。条块化不是真的按一次一比特的基础来做的,而是按块。-I参数指定单位为KB的块大小。注意它必须是2的一个幂,而且最大的块大小为128KB。

        例如:


        # lvcreate -n stripedlv -i 2 -I 64 mygroup -L 20M
        lvcreate -- rounding 20480 KB to stripe boundary size 24576 KB / 6 PE
        lvcreate -- doing automatic backup of "mygroup"
        lvcreate -- logical volume "/dev/mygroup/stripedlv" successfully created

        性能注意事项
        如果跨同一块磁盘的两个分区来条块化,性能的“增加”可能会是非常消极的--注意避免这样。跨单一的IDE总线上的两个磁盘来条块化也是没用的--除非IDE已经改进了我所记忆的。

        FIXME: is this still true?

        很老的主板可能有两个IDE总线,但是第二个通常是用于一个相对慢的cdrom驱动器。你可以用几个工具来执行基准,最令人注目的是“Bonnie”。ReiserFS人们已经发布了Bonnie++,它可以用来测试性能数据。

        8.4 硬件RAID
        多数高速的Inter x86服务器有硬件RAID控制器。它们中大部分至少有2个独立的SCSI通道。幸运的是,这些在LVM上很少有关系。在Linux能看到如此一个控制器上的任何东西之前,管理员必须在RAID控制器自身里定义一个逻辑驱动器。举一个例子,他(她)可能选择条块化在SCSI通道A上的两个磁盘,然后镜像它们到通道B上的两块磁盘上。这是一个典型的RAID 0/1配置,最佳化性能和数据安全。当Linux在一台采用这种配置的机器上启动时,它只能“看”到在RAID控制器上的一块磁盘,那就是包含了RAID 0/1条块组上四块磁盘的逻辑驱动器。这就是说,至于LVM关心的,仅仅是在这台机器上的一块磁盘,它将被同样地使用。如果这些磁盘中的一个失败了,LVM甚至不知道。当管理员替换了磁盘(甚至很快的用热备硬件),LVM也不知道任一种情况发生了。控制器会重新同步镜像的数据,一切都良好。这里多数人会退一步来询问“那么使用这个RAID控制器,LVM为我带来什么好处呢?”最容易的回答是,多数情况下,你在RAID控制器里定义了一个逻辑驱动器后,你不可能在以后添加更多的磁盘到那个驱动器了。因此,如果你误算了所要求的空间,或者你只是需要更多的空间,你都不可能添加一个新的磁盘或一组磁盘到原来的条块组里。这意味着你必须在这个控制器里创建一个新的RAID条块组,然后用LVM你可以简单的扩展LVM的LV,以致它无缝的跨越RAID控制器里的两个条块组。

        FIXME: Is there more needed on this subject ?

        8.5 Linux软件RAID
        Linux 2.4带着一个非常好的RAID代替出现了。Linux 2.2缺省的,当被Alan Cox发布时,是一个初期的RAID版本的特写,它没有被很好的重视。2.2仍然是早期版本特色的原因是写内核的人们不想在一个稳定的版本里做改动,那样会要求使用者更新。

        更多的人们,包括Red Hat,Mandrake和SuSE,选择用表现得很完美的0.90版本来替换它。

        这里我们只论述0.90版本。

        FIXME: write more of this


        --------------------------------------------------------------------------------

        9. Cookbook
        9.1 在计算机之间移动LVM磁盘
        使用这些新技术,简单的任务象从一台计算机移动磁盘到另一台计算机就变得有些机警了。在用LVM之前,用户只需要把这块盘放到新的机器上并且mount这些文件系统。使用LVM,就多一点事情要做。LVM结构既保存在磁盘上也保存在/etc/lvmconf目录里,因此,移动一个或一组包含了一个VG的磁盘所要做的唯一的事情是确保这个VG属于的机器不会破坏它的数据。这是通过vgexport命令来实现的。vgexport仅仅从/etc/lvmconf删除关于这个VG的结构,而不会更改磁盘上的任何内容。一旦磁盘放到新的机器上(他们没必要有相同的ID),唯一要做的事情就是修改/etc/lvmconf。这是通过vgimport来做的。

        例如:

        在机器#1:


        vgchange -a n vg01
        vgexport vg01

        在机器#2:


        vgimport vg01 /dev/sda1 /dev/sdb1
        vgchange -a y vg01

        注意你没必要为这个VG使用相同的名字。如果vgimport命令没有保存配置的备份,那就用vgcfgbackup来做。

        9.2 重建/etc/lvmtab 和/etc/lvmtab.d
        FIXME: write about more neat stuff


        --------------------------------------------------------------------------------

        10. 进一步阅读
        LVM站点
        主要的有效LVM资源
        德文LVM HOWTO
        如果你能读懂德文,它就已经包含了许多信息
        德文HOWTO的翻译
        Peter.Wuestefeld@resnova.de正在将德文HOWTO翻译成英语。看来他们会花许多时间在上面。如果你怀疑我们的HOWTO,或者想知道些什么,请试试他们的努力。
        HP/UX管理磁盘向导
        因为Linux LVM几乎就是HP/UX执行的一个原样,他们的文档对我们也是非常有用的。是一个很好的资料。

        11. 致谢
        我们尝试在这里列出所有帮助我们写这篇HOWTO的人。包括呈报更新、修复或投稿的人,还有帮助我们理解这个主题的人。
    25# 2010-9-10 11:32:18 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:47:33 | 显示全部楼层

    通过RHEL 5实现软RAID及LVM

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入
    RAID是Redundant Array of Inexpensive Disk的缩写,意为廉价冗余磁盘阵列,是磁盘阵列在技术上实现的理论标准,其目的在于减少错误、提高存储系统的性能与可靠度。常用的等级有0、1、5级等。
    ◆RAID 0

    RAID 0将数据分条,存储到多个磁盘中,不带任何冗余信息。数据被分割成块,继续分布到磁盘中。这一级别也被认为是纯粹的数据分条。创建RAID 0 需要一个或多个磁盘。也就是说,单独的一个磁盘可以被认为是一个RAID 0 阵列。不幸的是,数据分条降低了数据的可用性,如果一个磁盘发生错误,整个阵列将会瘫痪。

    优点:易于实现 、无容量损失-所有的存储空间都可用

    缺点:无容错能力、一个磁盘出错导致损失所有阵列内的数据

    121212.jpg

    ◆RAID 1

    RAID 1适合性能要求较高又需要容错功能的阵列。另外, RAID 1是在只有少于2个磁盘的环境下支持容错功能的唯一选择。


    RAID 1至少要有两个(只能两个)硬盘才能组成,因此也称为镜像(Mirroring)方式。所谓镜像就是每两个硬盘的内容一模一样,但是对操作系统而言只呈现一个硬盘,以便于管理。由此可见,RAID 1对数据进行了完全的备份,其可靠性是最高的。当然,其数据的写入时间可能会稍长一点,但因为两个镜象硬盘可以同时读取数据,故读数据与RAID 0一样。磁盘阵列的总容量为其中N/2块硬盘的容量在RAID 级别中,RAID 1通过数据镜像提供了最高的信息可用性。另外,如果阵列支持数据和镜像的同时读取,读取信息的性能将会提高。

    优点:读取性能较单磁盘高

    缺点:需要2倍的存储空间

    232323.jpg


    ◆RAID 5

    RAID 5 是在多用户,对数据写入的性能要求不高的环境下的最好选择。然而,它要求至少3个磁盘来执行。


    RAID 5是将数据分条,奇偶校验产生冗余。但是,它不采用一个固定的硬盘来存储奇偶校验值,所有数据和校验值都分布在所有硬盘上。

    ◆优点:最高的信息处理读取率、经济实用-只需要一个额外的磁盘
    ◆缺点:单独信息块的传送和单磁盘时相同、需要特定的硬件

    下面将以讲述在RHEL 5中创建RAID 1为例子。
    ◆将分区标识为RAID分区,在创建软RAID这步是必须的,如果没执行在系统重启后,RAID设备可能会无法工作。
       1.jpg

    ◆建立RAID设备及定义RAID盘
    2.jpg

    1:创建一个RAID设备,在RHEL 5中RAID设备必须从md0开始依次增加。
    2:同意创建设备,如不加此参数时必须先使用mknod /dev/md1 b 9 0命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建。
    3:RAID级别,此处定义的是RAID 1。
    4:使用几个分区实现RAID。
    5:热备分区的个数。当定义一些具有容错功能的RAID级别(RAID1、RAID5)时,可多定义一块或热备分区,这样当RAID阵列中有1块硬盘损坏时,这个热备分区会自动补上去开始工作。
    6:加入RAID的分区。
    ◆查看RAID定义情况
    3.jpg

    1:查看指定RAID设备
    2:活动的二个RAID 1分区
    3:热备盘
    ◆格式化RAID设备

       4.jpg
    ◆让RAID设备在每次重启都生效

       5.jpg
    该方法会将系统中所有的RAID设备的定义导入/etc/mdadm.conf中,而该文件是记录系统所有RAID设备,以便下次启动时生效。
    ◆挂载RAID设备
    可临时使用mount命令挂载,也可定义在/etc/fstab中。
    6.jpg

    ◆测试容错,用以下命令模拟阵列中一块硬盘损坏。模拟阵列中一块硬盘损坏的方法在实际工作中并没有多大意义,只是用于测试。
    7.jpg

    ◆查看热备盘是否自动开始工作

       8.jpg
    1:在该阵列刚建立时,/dev/sda7、/dev/sda8是活动状态,/dev/sda9是热备分区,在上步骤中模拟将/dev/sda7损坏,这时/dev/sda7状态已是失败,而热备盘/dev/sda9自动开始工作。
    ◆移除损坏的/dev/sda7

    1:将/dev/sda7从/dev/md0阵列中移除
    2:在阵列中已没有/dev/sda7
    ◆添加一个新的分区作为热备分区

    1:将/dev/sda10加入/dev/md0阵列中
    2:/dev/sda10自动成为/dev/md0热备分区
    在RHEL 5中创建RAID 0及RAID 5的方法与创建RAID 1的方法基本一致。当然由于RAID 0自身没有容错功能,添加热备分区是没有意义,所在不需要使用-x参数。
    此外,在RHEL 5中实现软RAID时还提供了RAID6 ,即带有两种分布存储的奇偶校验码的独立磁盘结构,它是对RAID5的扩展,主要是用于要求数据绝对不能出错的场合,使用了二种奇偶校验值,所以需要N+2个磁盘,同时对控制器的设计变得十分复杂,写入速度也不好,用于计算奇偶校验值和验证数据正确性所花费的时间比较多,造成了不必要的负载,很少人用。
    26# 2010-9-10 11:47:33 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:49:04 | 显示全部楼层

    raid and LVM linux 高级管理

    一:例如,用三块大小相同的scsi硬盘创建raid 5 。
        1:在每块scsi硬盘上创建分区(sdb,sdc,sdd);
        #fdisk /dev/sdb
        :new
        :p
        :1
        :<enter>
        :<enter>
        :type
        :fd
        :write
        依次建立后面两块。
        2:使用mdadm命令来管理RAID
        #mdadm --create    /dev/md0  --level=5  --raid-device=3  /dev/sdb1  /dev/sdc1  /dev/sdd1
        在建盘时  /proc/mdstat  文件显示进度信息:
        #cat /proc/mdstat
        该文件总是显示内核的RAID系统当前的状态,当盘阵工作完成后会在  /var/log/messages 文件中看到通知信息。
        3:以后重新启动系统,我们需要单独有一步启动盘阵,可以放在启动脚本里:
        注意:以下 该命令集把当前的RAID设置存储到一个配置文件里(/etc/mdadm.conf)
        #echo  Device  /dev/sdb1  /dev/sdc1  /dev/sdd1  >  /etc/mdadm.conf
        #mdadm  --detail  --scan  >> /etc/mdadm.conf
        #cat /etc/mdadm.conf
        4:为了用新建的 /etc/mdadm.conf 文件在系统启动时候一起启动盘阵,执行:
        #msadm -As   /dev/md0
        5:手工停止盘阵:
        #mdadm  -S /dev/md0


       二:接下来就可以在我们创建的可扩大(缩小)文件系统上划定逻辑卷组了;
        配置LVM大致可以分以下几个步骤:
        a:创建(划定)和初始化物理卷;
        b:把物理卷加入到一个卷组;
        c:在卷组上创建逻辑卷;
        我们用的工具是LVM2软件工具解决以上任务;
        注:
        pv 命令操作物理卷;
        vg命令操作卷组;
        lv 命令操作逻辑卷;
        1:用命令pvcreate 初始化每个物理设备;
        #pvcreate  /dev/md0
        该命令会破坏设备或分区上所有数据。
        注:lvm允许我们向一个卷组增加多个不同类型的设备。
        2: 加入一个卷组;
        #vgcreate LVM1  /dev/md0
        用命令vgdisplay显示;
        3:在卷组LVM1里面创建逻辑卷,在卷上创建分区。
        #lvcreate  -L 10G  -n web1 LVM1
        #lvcreate  -L 10G  -n web2  LVM1
        两个逻辑卷web1 和 web2
        4:创建并安装文件系统;
        #mke2fs  -j  /dev/LVM1/web1
        #mke2fs  -j  /dev/LVM1/web2
        #mkdir /web1
        #mkdir /web2
        #mount /dev/LVM1/web1     /web1
        #mount /dev/LVM1/web2     /web2
        5:最后把新文件系统加到 、etc/fstab 文件中。
      

      三:处理故障硬盘:
        一般采取下面措施;
        a:从raid盘阵中删除硬盘。
        b:安排停止机子的时间(如果有必要);
        c:更换物理硬盘:
        d:向盘阵加入新硬盘;
        1:从raid配置中删除设备;
        #mdadm  /dev/md0  -r /dev/sdc1
        注:如果RAID的配置是在分区上组建的,再向盘阵加入替换硬盘之前必须运行“fdisk”先正确划定分区;
        2:在盘阵中加入新的硬盘;
        #mdadm  /dev/md0  -a  /dev/sdc1

        四:重新分配存储空间;
        注:例如  /web1   增长超过了我们预期需要更多的空间,一下都是针对ext3 文件系统;
        步骤包括:
        a:研究当前lvm配置;
        b:用lvextend 和 ext2online  命令调整分区大小;
        c:核实查看是否到位;
        1: 用vgdisplay查看卷的可用空间;
        #vgdisplay  LVM1
        #df  -h  /web1
        2:用命令 lvextend 把空间逻辑卷增加
        再用ext2online 扩大文件系统结构。
        #lvextend  -L + 10G  /dev/web1
        #ext2online  -d /dev/lvm1/web1
        #df -h /web1
    27# 2010-9-10 11:49:04 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:50:57 | 显示全部楼层

    RedHat Linux 手动创建RAID和LVM分区

    创建RAID(以RAID5为例)
      
      1、首先,我们要先创建新磁盘分区
      
      #fdisk /dev/hda
      
      创建3个500MB的分区(hda7,hda8,hda9),然后在fdisk命令下输入t,选择刚创建好的分区,输入fd,将刚创建好的3个分区转换为fd格式。输入w保存退出
      
      2、激活刚创建好的分区
      
      #partprobe
      
      3、将3个分区加载到md0,l5是代表RAID级别是RAID5,n3代表有3个分区。
      
      #mdam –C /dev/md0 –l5 –n3 /dev/had{7,8,9}
      
      4、查看一下创建的RAID分区
      
      #cat /proc/mstat
      
      5、将md0分区格式化成ext3格式,将RAID分区mount到目录上,并修改fstab表
      
      #mkfs.ext3 /dev/md0
      #mount /dev/md0 /pot
      #vi /etc/fstab
      
      这样我们就成功创建了一个RAID5的磁盘分区。
      
      创建LVM
      
      1、首先,我们要先创建新磁盘分区
      
      #fdisk /dev/had
      
      创建2个500MB分区(hda10,hda11),然后在fdisk命令下输入t,选择刚创建好的分区,输入8e,将刚创建好的2个分区转换为8e格式。输入w保存退出
      
      2、激活刚创建好的分区
      
      #partprobe
      
      3、创建成pv格式
      
      #pvcreate /dev/had{10,11}
      #pvdisplay  查看pv
      
      4、将分区加载到vg卷组,vg0是卷组名称,vg0卷组总空间是1000MB
      
      #vgcreate vg0 /dev/had{10,11}
      #vgdisplay  查看vg卷组
      
      5、创建lv分区800M是分区大小,lv0是lv分区名称,vg0是加载到卷组名称,此时创建了一个800MB的lvm分区,vg0卷组还剩余200MB的空间
      
      #lvcreate –L 800M –nlv0 vg0
      #lvdisplay  查看lv分区
      
      6、将lv分区格式化成ext3格式
      
      #mkfs.ext3 /dev/vg0/lv0
      
      7、将LVM分区mount到目录上,并修改fstab表
      
      #mount /dev/vg0/lv0 /lvm
      #vi /etc/fstab
      
      8、扩展(lv)刚才我们创建了800mb的lvm分区,当要对分区进行扩展应如下操作:
      
      #lvextend –L+100M /dev/vg0/lv0
      #ext2online /dev/vg0/lv0  动态扩展
      
      此时,我们已经向lv0分区增加了100MB空间,vg0卷组还剩余100MB空间,如果当我们认为空间还是不足,需要扩充,而vg0卷组的空间也不足时,我们就需要对vg0卷组进行扩展,然后再对lv分区进行扩展
      
      1、创建1个500MB分区(hda12),然后在fdisk命令下输入t,选择刚创建好的分区,输入8e,将刚创建好的分区转换为8e格式。输入w保存退出
      
      #fdisk /dev/had
      
      2、激活刚创建好的分区
      
      #partprobe
      
      3、创建成pv格式
      
      #pvcreate /dev/had12
      
      4、将hda12添加到vg0卷组,此时vg0卷组的总空间大小为1500MB
      
      #vgextend vg0 /dev/hda12
      
      5、对lv0分区进行动态扩展,增加500M空间
      
      #lvextend –L+500M /dev/vg0/lv0
      #ext2online /dev/vg0/lv0
      
      此时我们创建 LVM分区大小总空间应为800M+100M+500M=1400M
    28# 2010-9-10 11:50:57 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:52:16 | 显示全部楼层

    如何重新映射设备实例号及重新配置逻辑卷管理器(LVM)?

    配置信息
      
      操作系统 - HP-UX
      版本 - 10.x 和 11.x
      硬件系统 - HP9000
      系列 - 所有
      子系统 - 逻辑卷管理器(LVM)
      
      解决方法
      
      按下面的步骤重新映射设备实例号,重新配置LVM,使其识别新的实例号:
       1. 确认您当前的 LVM配置稳定、正确:
       注:用正确的卷组(VG) 名替代XX,对系统上的每个卷组执行这一步操作。 vgdisplay -v | lp vgcfgbackup -f /etc/lvmconf gXX.conf.orig /dev gXX
       2. 准备导出卷组:
       注:用正确的卷组(VG) 名替代XX,对系统上的每个卷组执行这一步操作。
       vgexport -s -p -m /etc/lvmconf gXX.map /dev gXX
      3. 创建一个'infile' 文件。
      注:下面的命令都只有一行, '\\'是新行字符的换码。 ioscan -kf | grep -e INTERFACE -e DEVICE | \\ grep -v target | \\ awk '{printf "%s %s %s\\n",$3,$1,$2}' > infile
       4. 修改infile中的实例号。
      5. 将 infile 移到 /stand: mv infile /stand/infile
       6. 移动 ioconfig 文件: mv /stand/ioconfig /stand/ioconfig.sav mv /etc/ioconfig /etc/ioconfig.sav
      7. 关闭系统: shutdown -ry 0
       8. 中断自动启动进程,从主引导路径引导,与IPL/ISL 进行人机对话。
       9. 进入ISL提示符时,引导系统进入LVM 维护模式:
      ISL> hpux -lm
       注:引导进入LVM 维护模式时,只修改下面第10到12步中所示的ioconfig和LVM 配置,然后在进行其它操作之前,重新启动(第13步)。 引导进入LVM 维护模式时, LVM 内核驱动程序没有全部活动,从LVM 维护模式进入多用户模式(例如init 3)可以导致根文件系统损坏。
       10. 创建新的 ioconfig 文件: cd /stand /sbin/ioinit -c /sbin/ioinit -f infile
       11. 删除旧的LVM 配置 注:用正确的卷组(VG) 名替代XX,对系统上的每个卷组执行这一步操作。 vgexport /dev gXX
       12. 用新的实例号恢复卷组。 注:用正确的卷组(VG) 名替代XX,对系统上的每个卷组执行这一步操作。 mkdir /dev gXX mknod /dev gXX/group c 64 0xXX0000 vgimport -v -s -m /etc/lvmconf gXX.map /dev gXX vgchange -a y /dev gXX vgcfgbackup -f /etc/lvmconf gXX.conf.new /dev gXX
       13. 用 "reboot(1m)" 命令重新启动系统,一定不要使用"shutdown(1m)" 命令。 reboot
       14. 允许系统自动启动,并作为根用户登录。由于系统引导进入LVM 维护模式,因此您需要修改/etc/mnttab: mv /etc/mnttab /etc/mnttab.orig mount
       15. 运行下面的命令,检查确认一切正常:
       lvlnboot -v vgdisplay -v bdf
       ioscan -fn more  ar/adm/syslog/syslog.log more /etc/rc.log dmesg
      如果一切正常,即完成所有的任务。
      
    29# 2010-9-10 11:52:16 回复 收起回复
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2010-9-10 11:54:03 | 显示全部楼层

    系统维护:linux下的LVM分区管理

    假设现在给服务器挂接了一块339.14GB的磁盘
    并希望使用LVM对这个磁盘进行分区管理
    本文中我们创建两个分区,名字分别叫做data和data1
    大小分别为300GB和39GB
    然后使用LVM调整其大小

    首先确认硬盘的设备名称
    执行lvmdiskscan命令
    例如得到如下结果

    [root@ns /data]# lvmdiskscan
    /dev/cciss/c0d0p1 [ 99.59 MB]
    /dev/cciss/c2d0p1 [ 1.00 KB]
    /dev/cciss/c0d0p2 [ 33.82 GB] LVM physical volume
    /dev/cciss/c2d0p5 [ 339.14 GB]
    0 disks
    2 partitions
    0 LVM physical volume whole disks
    1 LVM physical volumes
    [root@ns /data]#

    则339.14GB对应的/dev/cciss/c2d0p5就是设备名称
    在设备/dev/cciss/c0d0p2的后边已经带有LVM的标记了
    表示装Linux系统的时候就使用了LVM

    创建物理分区

    fdisk /dev/cciss/c2d0p5
    按n键,创建一个分区。
    类型选择主分区,大小设置为整个磁盘339.14GB即可
    创建完成后按w键写入分区表

    创建pv

    pv的全称是Physical Vloume,首先要在物理分区上创建pv方可。
    执行pvcreate /dev/cciss/c2d0p5即可

    创建vg

    vg的全称是Volume Group,他是一个Volume组,每个pv上要建立一个vg
    执行vgcreate VolGroup01 /dev/cciss/c2d0p5
    其中VolGroup01是名称,可以自定义

    创建lv

    lv的全称是Logical Vloume

    执行lvcreate -L 300G -n data VolGroup01
    其中-L 300G表示空间是300G
    -n data表示名字为data
    VolGroup01表示所在的vg
    随后lv创建完成
    这个lv的名字将会叫做/dev g名字/lv名字
    例如/dev/VolGroup01/data
    执行lvscan可以查看名字
    [root@ns ~]# lvscan
    ACTIVE '/dev/VolGroup01/data' [300.00 GB] inherit
    ACTIVE '/dev/VolGroup00/LogVol00' [32.78 GB] inherit
    ACTIVE '/dev/VolGroup00/LogVol01' [1.00 GB] inherit
    [root@ns ~]#

    这个结果就表示名为data的lv已经创建完成。

    同理,再创建data1分区
    执行lvcreate -L 39G -n data1 VolGroup01

    格式化lv

    执行mkfs.ext3 /dev/VolGroup01/data
    将磁盘格式化成ext3格式

    执行mkfs.ext3 /dev/VolGroup01/data1
    将磁盘格式化成ext3格式

    挂载lv到普通目录

    mkdir /www
    mount /dev/VolGroup01/data /www

    mkdir /www1
    mount /dev/VolGroup01/data1 /www

    即可将刚才的两个lv分区分别挂载到/www和/www1的位置
    修改/etc/fstab可以在启动时候自动挂载到相应位置
    执行df -h可以看分区列表和空间的情况

    调整lv的大小

    首先取消挂载
    umount /www
    umount /www1

    执行lvresize -L-30G /dev/VolGroup01/data
    即可给刚才的data分区减少30GB空间
    执行lvresize -L+30G /dev/VolGroup01/data1
    即可给刚才的data1分区增加30GB空间

    修改之后重新挂载
    mount /dev/VolGroup01/data /www
    mount /dev/VolGroup01/data1 /www1

    现在可以用df -h命令查看具体的磁盘空间
    可以看到磁盘容量已经改变

    ========================================================================

    如果不想破坏PV和VG的情况下,只对LV进行改变,可以这样做:
    1.lvremove -f vg0/raw_01  //对vg0的raw_01进行remove;
    2.lvcreate -L 150 -n test vg0   //创建一个150G的叫test的卷;
    3.格式化 mkfs.ext3 /dev g0/test
    4. mount /dev g0/test /mnt
    5.看是否被激活成ACTIVE的,要激活它们
      vgchange -ay 名字  //y是激活,n是不激活,名字也可不写,那就都激活了;
    6.修改/etc/fstab中的,使之自动进行挂载.
    30# 2010-9-10 11:54:03 回复 收起回复
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 论坛注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

    GMT+8, 2025-2-3 08:41 , Processed in 0.097518 second(s), 11 queries , Redis On.  

      Powered by Discuz!

      © 2001-2025 HH010.COM

    快速回复 返回顶部 返回列表