Linux技术研究-基础篇(raid与LVM,配额)

创建RAID-5

若想建立新的md1设备 只在/dev下建立还不够 重启后会消失
固化的方法是
为了使udev自动产生/dev/md1, /dev/md2,需要在/etc/udev目录下建立devices子目录,并手工建立md1,md2。这样udev会在系统启动时把md1,md2复制到/dev目录下

[root@server1 ~]# mkdir /etc/udev/devices
[root@server1 ~]# cd /etc/udev/devices
[root@server1 ~]# mknod md1 b 9 1
[root@server1 ~]# mknod md2 b 9 2

# mdadm -C /dev/md0 -l 5 -n 3 /dev/sda5 /dev/sda6 /dev/sda7
mdadm: array /dev/md0 started.
# mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
Creation Time : Sat May 16 12:02:03 2009
     Raid Level : raid5
     Array Size : 594176 (580.35 MiB 608.44 MB)
Used Dev Size : 297088 (290.17 MiB 304.22 MB)
   Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 16 12:02:08 2009
          State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 5a944e39:948186b6:f2927409:b0ee5d4a
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        6        1      active sync   /dev/sda6
       2       8        7        2      active sync   /dev/sda7
生成 /etc/mdadm.conf 配置文件
[root@lan1 dev]# mdadm -D -s
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=5a944e39:948186b6:f2927409:b0ee5d4a
[root@lan1 dev]# mdadm -D -s > /etc/mdadm.conf

模拟损坏
[root@lan1 /]# mdadm /dev/md0 -f /dev/sda6
mdadm: set /dev/sda6 faulty in /dev/md0
[root@lan1 /]# mdadm -D /dev/md0

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       0        0        1      removed
       2       8        7        2      active sync   /dev/sda7

       3       8        6        -      faulty spare   /dev/sda6
[root@lan1 /]#

将损坏的盘移除
[root@lan1 /]# mdadm /dev/md0 -r /dev/sda6
mdadm: hot removed /dev/sda6
[root@lan1 /]# mdadm -D /dev/md0


    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       0        0        1      removed
       2       8        7        2      active sync   /dev/sda7
[root@lan1 /]#
添加一个新盘

[root@lan1 /]# partprobe /dev/sda
[root@lan1 /]# mdadm /dev/md0 -a /dev/sda8
mdadm: added /dev/sda8
不需要格式化会自动重构
    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       3       8        8        1      spare rebuilding   /dev/sda8
       2       8        7        2      active sync   /dev/sda7
[root@lan1 /]# mdadm -D /dev/md0

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        8        1      active sync   /dev/sda8
       2       8        7        2      active sync   /dev/sda7
[root@lan1 /]#

启用与停用

[root@lan1 ~]# umount /mnt
[root@lan1 ~]# mdadm -A -s /dev/md0
mdadm: device /dev/md0 already active - cannot assemble it
[root@lan1 ~]# mdadm -S -s /dev/md0
mdadm: stopped /dev/md0
[root@lan1 ~]# mdadm -D -s /dev/md0
mdadm: md device /dev/md0 does not appear to be active.
[root@lan1 ~]# mdadm -A -s /dev/md0
mdadm: /dev/md0 has been started with 3 drives.
[root@lan1 ~]# mdadm -D -s /dev/md0
/dev/md0:
        Version : 00.90.03
Creation Time : Sat May 16 12:02:03 2009
     Raid Level : raid5
     Array Size : 594176 (580.35 MiB 608.44 MB)
Used Dev Size : 297088 (290.17 MiB 304.22 MB)
   Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 16 12:15:50 2009
          State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 5a944e39:948186b6:f2927409:b0ee5d4a
         Events : 0.12

    Number   Major   Minor   RaidDevice State
       0       8        5        0      active sync   /dev/sda5
       1       8        8        1      active sync   /dev/sda8
       2       8        7        2      active sync   /dev/sda7
[root@lan1 ~]#

移除
[root@lan1 /]# umount /mnt
[root@lan1 /]# mdadm -S -s /dev/md0
mdadm: stopped /dev/md0
[root@lan1 /]# mdadm --zero-superblock /dev/sda5 /dev/sda7 /dev/sda8
[root@lan1 /]# mdadm -A -s /dev/md0
mdadm: /dev/md0 assembled from 1 drive - not enough to start the array.
[root@lan1 /]#


LVM

建立三个分区,修改类型为 8e Linux LVM
[root@lan1 ~]# fdisk -l
/dev/sda5             844         868      200781   8e Linux LVM
/dev/sda6             869         905      297171   8e Linux LVM
/dev/sda7             906         967      497983+ 8e Linux LVM
[root@lan1 ~]#
[root@lan1 ~]# partprobe /dev/sda

建立PV
[root@lan1 ~]# pvcreate /dev/sda5 /dev/sda6 /dev/sda7
Physical volume "/dev/sda5" successfully created
Physical volume "/dev/sda6" successfully created
Physical volume "/dev/sda7" successfully created
[root@lan1 ~]#
[root@lan1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/sda5
VG Name               vg01
PV Size               196.08 MB / not usable 4.08 MB
Allocatable           yes
PE Size (KByte)       4096
Total PE              48
Free PE               48
Allocated PE          0
PV UUID               dzPs4H-MZ9Q-nYwV-IVVA-gJOQ-gVBK-gL90JC
  
--- Physical volume ---
PV Name               /dev/sda6
VG Name               vg01
PV Size               290.21 MB / not usable 2.21 MB
Allocatable           yes
PE Size (KByte)       4096
Total PE              72
Free PE               72
Allocated PE          0
PV UUID               vbrCn3-2yxX-3CN4-qp3p-USyU-nxej-oPH2bS
  
--- Physical volume ---
PV Name               /dev/sda7
VG Name               vg01
PV Size               486.31 MB / not usable 2.31 MB
Allocatable           yes
PE Size (KByte)       4096
Total PE              121
Free PE               121
Allocated PE          0
PV UUID               D1AkXh-pzMY-MVFT-JC8W-ODB9-vKD4-0f7TEC
  
[root@lan1 ~]#


建立VG

[root@lan1 ~]# vgcreate vg01 /dev/sda5 /dev/sda6 /dev/sda7
Volume group "vg01" successfully created
[root@lan1 ~]#
[root@lan1 ~]# vgdisplay
--- Volume group ---
VG Name               vg01
System ID            
Format                lvm2
Metadata Areas        3
Metadata Sequence No 1
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                0
Open LV               0
Max PV                0
Cur PV                3
Act PV                3
VG Size               964.00 MB
PE Size               4.00 MB
Total PE              241
Alloc PE / Size       0 / 0  
Free PE / Size       241 / 964.00 MB
VG UUID               8JdrEK-7W3n-A3Fi-cOwN-MdJ0-aIRC-7Cq5vx
  
[root@lan1 ~]#

建立 LV

[root@lan1 ~]# lvcreate -L 400M -n lv01 vg01
Logical volume "lv01" created
[root@lan1 ~]#
[root@lan1 ~]# lvcreate -L 100M -n lv02 vg01
Logical volume "lv02" created
[root@lan1 ~]#
[root@lan1 ~]# ll /dev/vg01/
总计 0
lrwxrwxrwx 1 root root 21 05-16 12:29 lv01 -> /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 21 05-16 12:29 lv02 -> /dev/mapper/vg01-lv02
[root@lan1 ~]#

格式化
[root@lan1 ~]# mke2fs -j /dev/vg01/lv01
[root@lan1 ~]# mke2fs -j /dev/vg01/lv02
[root@lan1 ~]# mount
/dev/mapper/vg01-lv01 on /mnt type ext3 (rw)
[root@lan1 ~]#

伸缩VG
放大
[root@lan1 ~]# vgdisplay | grep 'VG Size'
VG Size               964.00 MB
[root@lan1 ~]#
[root@lan1 ~]# pvcreate /dev/sda8
Physical volume "/dev/sda8" successfully created
[root@lan1 ~]# vgextend vg01 /dev/sda8
Volume group "vg01" successfully extended
[root@lan1 ~]#
[root@lan1 ~]# vgdisplay | grep 'VG Size'
VG Size               1.32 GB

缩小
[root@lan1 ~]#
[root@lan1 ~]# vgreduce vg01 /dev/sda8
Removed "/dev/sda8" from volume group "vg01"
[root@lan1 ~]# vgdisplay | grep 'VG Size'
VG Size               964.00 MB
[root@lan1 ~]#


伸缩LV
放大
[root@lan1 ~]# lvdisplay /dev/vg01/lv01 | grep 'LV Size'
LV Size                400.00 MB
[root@lan1 ~]# lvextend -L +100M /dev/vg01/lv01
Extending logical volume lv01 to 500.00 MB
Logical volume lv01 successfully resized
[root@lan1 ~]# lvdisplay /dev/vg01/lv01 | grep 'LV Size'
LV Size                500.00 MB
[root@lan1 ~]#
[root@lan1 ~]# df -Th
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda2     ext3    5.7G 2.4G 3.1G 44% /
/dev/sda1     ext3     99M   12M   83M 12% /boot
tmpfs        tmpfs    125M     0 125M   0% /dev/shm
/dev/mapper/vg01-lv01
              ext3    388M   11M 358M   3% /mnt
[root@lan1 ~]# ext2online /dev/vg01/lvm01 # RHEL4的在线扩容命令
[root@lan1 ~]# resize2fs /dev/vg01/lv01 # RHEL5的在线扩容命令
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/vg01/lv01 is mounted on /mnt; on-line resizing required
Performing an on-line resize of /dev/vg01/lv01 to 512000 (1k) blocks.
The filesystem on /dev/vg01/lv01 is now 512000 blocks long.

[root@lan1 ~]# df -Th
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda2     ext3    5.7G 2.4G 3.1G 44% /
/dev/sda1     ext3     99M   12M   83M 12% /boot
tmpfs        tmpfs    125M     0 125M   0% /dev/shm
/dev/mapper/vg01-lv01
              ext3    485M   11M 449M   3% /mnt
[root@lan1 ~]#

缩小
[root@lan1 /]# umount /mnt
先离线
再做强制检查
[root@lan1 /]# e2fsck -f /dev/vg01/lv01
e2fsck 1.39 (29-May-2006)
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/vg01/lv01: 81/51200 files (2.5% non-contiguous), 12353/204800 blocks
收缩文件系统
[root@lan1 /]# resize2fs /dev/vg01/lv01 100M
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/vg01/lv01 to 102400 (1k) blocks.
The filesystem on /dev/vg01/lv01 is now 102400 blocks long.

[root@lan1 /]# lvdisplay
--- Logical volume ---
LV Name                /dev/vg01/lv01
VG Name                vg01
LV UUID                CjVh40-MrBQ-u852-W5oQ-pd8j-5MJ1-ZmYDQZ
LV Write Access        read/write
LV Status              available
# open                 0
LV Size                200.00 MB
Current LE             50
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0
再收缩LV  
[root@lan1 /]# lvresize -L 100M /dev/vg01/lv01
WARNING: Reducing active logical volume to 100.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv01? [y/n]: y
Reducing logical volume lv01 to 100.00 MB
Logical volume lv01 successfully resized
[root@lan1 /]# lvdisplay
--- Logical volume ---
LV Name                /dev/vg01/lv01
VG Name                vg01
LV UUID                CjVh40-MrBQ-u852-W5oQ-pd8j-5MJ1-ZmYDQZ
LV Write Access        read/write
LV Status              available
# open                 0
LV Size                100.00 MB
Current LE             25
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0
  
[root@lan1 /]# mount /dev/vg01/lv01 /mnt
[root@lan1 /]# df -Th
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda2     ext3    5.7G 2.4G 3.1G 44% /
/dev/sda1     ext3     99M   12M   83M 12% /boot
tmpfs        tmpfs    125M     0 125M   0% /dev/shm
/dev/mapper/vg01-lv01
              ext3     97M 5.8M   86M   7% /mnt
[root@lan1 /]#

文件系统简介
在众多个linux发行版中存在着很多种文件系统格式,在RHEL中默认使用的是EXT3
EXT3从EXT2中升级而来,做了什么升级呢?
因为断电后内存与硬盘数据不符合,导致在ex2中很容易遇到故障,对此EXT3添加了日志功能
日志中记录了用户的操作.断电后下次开机如果记录与内容不符合则通过日志做redo.
这是日志的最大好处--加速恢复.
简单的说 EXT3 = EXT2 + journal
无论是哪种文件系统,为了提高存储效率,linux都会在文件系统上建立许多block
再为每一个块给予一个编号,做为block的识别码
在众多的block中,又分为两种,一种叫data_block,一种叫inode_block

我们在linux中建立一个文件时,linux除了存储这个文件的内容外,还会存储文件的相关信息
比如:大小,权限,拥有者等等
那么文件内容就存在于data_block中,文件的属性信息就存在inode_block中
当我们读取一个文件时,linux先去找这些相关的信息,根据这些信息才能从磁盘中取得文件内容

那么现在你应该知道文件的分成两部分存储在block中
属性信息存在inode_block,文件内容存在data_block
用 ls -li
65501 -rwxr-xr-x 1 seker seker    29150 2008-09-10 install.log
65501既是install.log文件的block编号

那么linux又是如何找到inode的呢?
答案是通过目录

符号链接

链接是一种特殊文件,在使用连接文件时,实际使用的是原始文件.使用者有种两个文件能相互同步的感觉
如果真要想弄明白链接的内部结构 需要从inode与block的层面才能分析清楚.

 

连接有两种:
建立命令 : 硬 ln src.log hard
    软 ln -s src.log soft
1.硬链接

linux会在文件的存放目录中(data_block)添加一个新的文件名
而指向的inode编号与原始文件的inode编号相同,再把inode中的连接数+1.
原始数据始终都是只有一份,只是两个文件名同时引用了一个inode编号
2.软连接

linux会在文件的存放目录中(data_block)添加一个新的文件名
同时inode编号也全新的,只是新的inode中记录的是原始文件的路径名称

目录的data_block信息
--------------------
| 文件名   inode |
| src.log   1555   |
|    hard   1555   |
|    soft   1888   |
--------------------
文件的inode信息
--------------------
| 1555    1888    |
--------------------
其中1555指向的是文件data_block,而1888则指向的是目录data_block中的src.log 1555这一条路径


硬链接和软连接的差别
1. 类型 查看的文件类型字符处,硬链接与原始文件类型相同,软连接则是l
2. 权限 硬链接与原始文件权限相同,软连接则是777权限,但实际权限则取决于原始文件.
3. 大小 硬链接显示的与原始文件相同,但实际并不浪费空间,软链接则是原始文件路径名称的字符数
4. 删除 删除原始文件后,硬链接依然可以使用,而软连接则失效
当删除文件时,会在文件的inode中将连接数减一,如果减一后不是0,则不回收相关inode与block
5. 限制   硬链接只能作用于文件,且不能跨分区;软链接即可作用于目录又可以是文件,可跨分区
6. inode 硬链接与原始文件使用同一个inode,软链接则是独立的使用一个新的inode

演示:
软硬链接都是读取的一份原始数据,软连接只认一个原始文件名字

[root@lan2 dir2]# echo "00000000" >> file_src
[root@lan2 dir2]# ln file_src link_hard
[root@lan2 dir2]# ln -s file_src link_soft
[root@lan2 dir2]# cat link_hard
00000000
[root@lan2 dir2]# cat link_soft
00000000
[root@lan2 dir2]# ll -i
总计 8
65591 -rw-r--r-- 2 root root 9 05-16 15:42 file_src
65591 -rw-r--r-- 2 root root 9 05-16 15:42 link_hard
65598 lrwxrwxrwx 1 root root 8 05-16 15:42 link_soft -> file_src
[root@lan2 dir2]#
[root@lan2 dir2]# rm -rf file_src
[root@lan2 dir2]# cat link_hard
00000000
[root@lan2 dir2]# cat link_soft
cat: link_soft: 没有那个文件或目录
[root@lan2 dir2]#
[root@lan2 dir2]# cat link_soft
cat: link_soft: 没有那个文件或目录
[root@lan2 dir2]# echo "1111111" >> file_src
[root@lan2 dir2]# cat link_soft
1111111
[root@lan2 dir2]#

quota 磁盘配额
限制某用户建立大文件或多文件把磁盘空间耗尽,把inode耗尽.
基于两种模式user和group级,常用的是user级.
mount -o remount,rw,usrquota /home

quotacheck /home

quotaon /dev/sda4

 

创建配额文件.
ls /home/aquota.user

编辑配额
edquota -u user_name
blocks 用户已使用了多少.不能修改.这里和mkfs的BLOCK没关系.默认是1K = 1 block
soft   软限制(警告限制).
hard   硬限制(停用限制).
当blocks使用到soft时,给出警告. 达到hard时,停止了.
inodes 一般情况下一个文件使用一个inode.限制用户可以建立多少个文件.


打印配额报表
repquota -a

7days是达到了soft,还没到hard.那么第七天后也依旧不能再使用剩余的free space了.
修改方法 edquota -t

 

组的配额

/
| 组成员共同拥有的资源控制.
\

setquota 设置方法 , 可以写用户交互脚本,把变量引入这个命令去执行.
[root@seker ~]# setquota
setquota: Bad number of arguments.
setquota: Usage:
setquota [-u|-g] [-F quotaformat] <user|group>
<block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> -a|<filesystem>...
setquota [-u|-g] [-F quotaformat] <-p protouser|protogroup> <user|group> -a|<filesystem>...
setquota [-u|-g] [-F quotaformat] -b -a|<filesystem>...
setquota [-u|-g] [-F quotaformat] -t <blockgrace> <inodegrace> -a|<filesystem>...
setquota [-u|-g] [-F quotaformat] <user|group> -T <blockgrace> <inodegrace> -a|<filesystem>...
Bugs to: mvw@planets.elm.net, jack@suse.cz
[root@seker ~]#

setquota -u seker 200 400 20 40 /dev/sda6