linux学习笔记5-安全的动态磁盘策略

 

全的动态磁盘策略

RAID技术

RAID0/RAID1/RAID5

RAID技术产生的背景

通的IDE硬盘速度不够快,性能不够稳定,不能应用于企业级的关键任务

效并且稳定可靠的SCSI硬盘价格昂贵,中小企业承受不起

RAID(Redundant Array of Inexpensive/Independent Disks),即廉价/独立磁盘冗余陈列(或简称磁盘陈列),它的出现,可以让我们把普通的IDE硬盘组成快速安全可靠的存储设备。

RAID原理

RAID是一种把多块独立的硬盘按不同方式组合起来的形成一个磁盘组,从而提拱比单个硬盘更高的存储性能和提供数据冗余的技术。不同的组织方式成为RAID级别(RAID Level)

据冗余的功能是在用户数据一旦发生损坏后,利用冗余信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。

用户看起来,组成磁盘就像是一个硬盘,对磁盘陈列的操作与单个硬盘一模一样。


RAID级别

前共有067种基本的RAID级别

RAID级别是level 0,level 1,level 5

RAID控制器(一种PC适配器)来管理硬盘

Linux内核可以模拟RAID控制器,用来管理硬盘,但只支持级别0,1,4,5



RAID0

RAID0又称为Striping

RAID0能过把连续的数据访问分散到多个磁盘上来提高存储性能,这样,数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它的自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性。

RAID1又称为MirrorMirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。

RAID1的操作方式是把用户写入磁盘的数据百分之百的自动复制到另外的一个磁盘上。

RAID5不对存储的数据进行备份,而是把数据和相对应的奇偶校验存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

RAID 0+1

RAID 0 RAID 1的组合形式,也称为RAID 10

Linux中的软件RAID

使用Linux内核实现的软件RAID控制器

需要内核支持

要相应的应用软件(raidtools)创建管理RAID设备

RAID设备文件名:

/dev/mdN(N=0,1,2...)

RAID设备可以当分区来待,需要格式化后挂载

#mkfs.ext3 /dev/md1

#mount /dev/md1 /opt



RAID创建过程

添加硬盘

RAID设备的成员是硬盘分区,需要先对硬盘分区,分区不能同一个物理硬盘上

raidtools

raidtools中包含有RAID创建管理工具和默认的示范性配置文件

编写配置文件/etc/raidtab

以从raidtools中的示范配置文件里复制

创建RAID设备

#mkraid /dev/md0

看当前硬盘

[root@www ~]# df

[root@www ~]# fdisk -l /dev/sda

[root@www ~]# rpm -q raidtools确认软件包是否安装好

[root@server ~]# fdisk /dev/sda

Raidtools现在也改为mdadm



构建raid 0



先增加两块硬盘

fdisk -l /dev/sdb查看硬盘

fdisk -l /dev/sdc

fdisk /dev/sdb创建硬盘分区

fdisk /dev/sdc

默认的文件来改

cp /usr/share/doc/raidtools-1.00.3/raid0.conf.sample /etc/raidtab

vi /etc/raidtab 编辑,构建raid 0

raiddev /dev/md0

device /dev/sdb1组成md0的第一个分区

device /dev/sdc1组成md0的第二个分区

mkraid /dev/md0创建raid设备

mkfs.ext3 /dev/md0格式化raid设备

mount /dev/md0 /opt

cp /etc/hosts /opt

ls /opt

vi /etc/fstab写进fstab

/dev/md0 /opt ext3 defaults 0 0



raid 1



umount /opt

raidstop /dev/md0

cp /usr/share/doc/raidtools-1.00.3/raid1.conf.sample /etc/raidtab

vi /etc/raidtab 编辑,构建raid 0

raiddev /dev/md1

device /dev/sdb1组成md1的第一个分区

device /dev/sdc1组成md1的第二个分区

mkraid /dev/md1创建raid设备

mkfs.ext3 /dev/md1

vi /etc/fstab写进fstab

/dev/md1 /opt ext3 defaults 0 0

mount /dev/md1 /opt

cp /etc/services /opt考一个文件进去

ls /opt

df

如何恢复?

lsraid -A -a /dev/md1 查看两个磁盘有没有损坏

raidsetfaulty –help用软件来模拟硬盘出问题

raidsetfaulty /dev/md1 /dev/sdb1

lsraid -A -a /dev/md1 查看两个磁盘有没有损坏

以看到/dev/sdb1己经坏了

ls /opt还存在我们先考的文件

cat /opt/services也可以读出来

是没有文件损坏,此时所有的风险都是由/dev/sdc1来承担的,如果它也坏了,就再不能不恢复了

raidhotadd /dev/md1 /dev/sdd1增加一个分区到md1

lsraid -A -a /dev/md1此时会看到一个冗余的磁盘

more /proc/stat可以看到修复过程

raidhotremove /dev/md1 /dev/sdb1删掉坏掉的磁盘

lsraid -A -a /dev/md1可以看到/dev/sdb1没有了

在我们利用磁盘冗余技术来自动恢复

umount /opt

raidstop /dev/md1

配置文件里加一个冗余磁盘

raiddev /dev/md0

raid-level 1

nr-raid-disks 2

nr-spare-disks 1

chunk-size 4

device /dev/sdb1

raid-disk 0

device /dev/sdc1

raid-disk 1

device /dev/sdd1加上这个就不需要人工干预,它会自动恢复

spare-disk 0

umount /opt

raidstop /dev/md1



构建raid 5

man raidtab

少要3个硬盘

fdisk /dev/sdd 对第三块硬盘分区

cp /usr/share/doc/raidtools-1.00.3/rai5d1.conf.sample /etc/raidtab

vi /etc/raidtab 编辑,构建raid 5

raiddev /dev/md5

device /dev/sdb1组成md5的第一个分区

device /dev/sdc1组成md5的第二个分区

device /dev/sdd1组成md5的第三个分区

mkraid -R /dev/md5

more /proc/mdstat这个命令反应的是内核里的状态

mkfs.ext3 /dev/md5

vi /etc/fstab写进fstab

/dev/md5 /opt ext3 defaults 0 0

mount /dev/md5 /opt

ls /opt

lsraid -A -a /dev/md5

果其中一个硬盘坏掉了,可以一个新的分区来恢复

硬盘大小,是总的2/3

raid 5 用的比较多

果需要把根分区也挂载到raid设备上,需要把根分区的ls -l /boot

出来,因为raid设备无位对内核定位

linux启动的时候是用vi /etc/grub.conf来加载内核文件的

root (hd0,0)可以看到是过通过hd0来定位的

df -lh

umount /opt

raidstop /dev/md0

more /proc/mdstat

结合raid 0,raid 1来做磁盘阵列

LVM逻辑卷管理技术

PV/VG/LV

LVM技术产生的背景

业日益变化的存贮需求使得传统的磁盘分区存储显得不够灵活。

磁盘分区存储

/home /var /

100M 100M 1G



100M 100M 50M

/dev/sda1 /dev/sda2 /dev/sda3

PV(physical Volume)

pvcreate /dev/sda1 /dev/sda2 /dev/sda3

物理卷合成一个大的设备

vgcreate vg0 /dev/sda1 /dev/sda2

200M 50M

/dev/sda1 /dev/sda2 /dev/sda3

VG(Volume Group)

lvcreate -n data -L 10M vg0

LV(Logical Volume)

e2fsadm -L +10M /dev/vg0/data增加空间

vgextend vg0 /dev/sda3增加卷组

pvmove /dev/sda1 [/dev/sdb1]



区后

t 进行格式转换

L查看转换的码

8e转换linux lvm

/dev/sda5 463 483 168682 8e Linux LVM

/dev/sda6 484 500 136552 8e Linux LVM

/dev/sda7 501 522 176714+ 8e Linux LVM

pvcreate /dev/sda[5-7] 创建物理卷

vgscan 会自动产生配置的数据库和配置文件

vgcreate vg0 /dev/sda5 /dev/sda6创建卷组

vgdisplay vg0显示创建卷组属性

lvcreate -n data -L 10M vg0创建逻辑卷

mkfs.ext3 /dev/vg0/data 格式化逻辑卷

[root@server ~]# mount /dev/vg0/data /mnt 挂载

[root@server ~]# cp /etc/services /mnt考一个文件到/mnt

[root@server ~]# ls /mnt

lvdisplay /dev/vg0/data

vgdisplay vg0

Alloc PE / Size 3 / 12.00 Mb可见分了三个扩展块,虽然我们分的是10M,但是每个扩展块是PE Size 4.00 MB 所以总共是 LV Size 12.00 MB

[root@server ~]# lvcreate -n test -L 20M vg0 表示的建一个新的逻辑卷,大小为20M

[root@server ~]# lvcreate -n test -l 5 vg0l表示是5个扩展块

[root@server ~]# mkfs.ext3 /dev/vg0/test

[root@server ~]# lvscan查看目前有多少逻辑卷可以使用

ACTIVE '/dev/vg0/data' [12.00 MB] inherit

ACTIVE '/dev/vg0/test' [20.00 MB] inherit

[root@server ~]# mount /dev/vg0/data /mnt如果逻辑卷data不够用了,我们可以增加

[root@server ~]# df -lh

FC6中没有e2fsadm,调整逻辑卷的空间需要用三条命令来实现

e2fsck /dev/vg0/data

lvextend -L +100M /dev/vg0/data

resize2fs /dev/vg0/data



[root@server ~]# e2fsck /dev/vg0/data

[root@server ~]# lvextend -L +30M /dev/vg0/data逻辑卷增加30M,如果前面是-号则减少30M

[root@server ~]# e2fsck -f /dev/vg0/data

[root@server ~]# resize2fs /dev/vg0/data

[root@server ~]# mount /dev/vg0/data /mnt

[root@server ~]# df -lh

vgdisplay vg0可以看到己分配的多了几个扩展块Alloc PE / Size 16 / 64.00 MB

[root@server ~]# ls /mnt可以看到原有的数据还在

们系统没有启动,它就自动的增加在了大小,并且原来的数据还存在,实现了动态存储

[root@server ~]# pvscan查看所有逻辑卷都是用pvcreate初始化的物理卷

[root@server ~]# vgextend vg0 /dev/sda7/dev/sda7加到vg0

[root@server ~]# vgdisplay vg0

[root@server ~]# lvscan查看所有物理卷

[root@server ~]# pvmove /dev/sda5这个过程将把物理卷的数据重新分配到其它的物理卷上

[root@server ~]# vgreduce vg0 /dev/sda5真正移开

[root@server ~]# pvscan这时可以看到 PV /dev/sda5 lvm2 [164.73 MB是自由的,这时我们可以用fdisk来转换类型,随意处置了

[root@server ~]# vgdisplay vg0

何更改 PE Size 4.00 MB

[root@server ~]# vgcreate -s 8M vg1 /dev/sda5

[root@server ~]# vgdisplay vg1

以看到 PE Size 8.00 MB,加-s就可以改变PE大小

[root@server ~]# lvcreate -n data -l 2 vg1这里指定逻辑块的数量,来乖以PE大小,就是你最后分配逻辑卷的大小

[root@server ~]# ls /dev/vg?

[root@server ~]# lvdisplay vg1

[root@server ~]# lvcreate –help

lvcreate -s|--snapshot这个参数可以来备份数据,可以数据同步问题,只能使用一次,并且在负载不是很重的时候使用,如果很重,则会拖慢你系统的速度。

[root@server ~]# lvcreate -s -l 8 -n snap /dev/vg0/data

[root@server ~]# mount /dev/vg0/snap /opt是一种快照,我们没有格式化也没有分区

[root@server ~]# rm /mnt/services

[root@server ~]# ls /opt我们删掉父卷中的数据,/opt里的数据还是不变

[root@server ~]# umount /opt

[root@server ~]# cp /etc/hosts /mnt

[root@server ~]# ls /mnt

hosts lost+found

[root@server ~]# mount /dev/vg0/snap /mnt

[root@server ~]# ls /mnt可以看到/mnt保留了前面一次的快照

何停止逻辑卷的使用?

Lvscan

后依次删除

lvremove /dev/vg0/snap

lvremove /dev/vg0/data

lvremove /dev/vg0/test

lvremove /dev/vg1/data

vgscan

vgremove vg0

vgchange -an vg1 不要活动

vgchange -ay vg1激活

vgremove vg1

pvscan

tail /var/log/messages如果逻辑卷出现什么问题,可以查看系统日志,一般它会现在/var/log/messages里面

vi /etc/rc.sysinit可以看到,只要我们建立好逻辑卷,并挂载到非根目录,系统启动时,会自动找到

df -lh

何让根分区支持lvm设备

先要让内核启动时就要认识lvm设备

ls -l /boot/initrd-2.6.25-14.fc9.i686.img 内核在启动时会加载一个虚拟磁盘镜相文件,内核启动的时候只能这个文件里面加载驱动程序

何你希望将根分区作为lvm设备挂载的话,你就需要在虚拟磁盘镜相文件中包含进你的LVM设备以及LVM的驱动模块

lvmcreate_initrd

生成ls /boot/initrd-lvm-XXX.gz

将上面这个文件写进vi /boot/grub.conf就可以了

vgcreate vg0 /dev/sdb1 /dev/sdb2

lvcreate -n data -l 2 vg0

lvmcreate_initrd

gunzip /boot/initrd-lvm-XXX.gz -c > initrd-lvm

file initrd-lvm

mount initrd-lvm /mnt/cdrom/ -o loop

ls /mnt/cdrom可以看到lvm的驱动程序和共享库



RAIDLVM的磁盘存储策略

合应用案例

求:使用三个硬盘存储数据,保证数据安全性的同时还能让磁盘根据需要动态的缩放

/dev/sdb1 /dev/sdc1 /dev/sdd1

vg

/ /home /var

raid 5技术,并把所有的分区移到lvm设备上

fdisk /dev/sdb

p/dev/sdb进行分区,首柱面和尾柱面都采用默认值

t进行转换

L fd

w保存退出

面两个/dev/sdc1 /dev/sdd1均按上面操作

cp /usr/share/doc/raidtools-1.00.3/rai5d1.conf.sample /etc/raidtab

vi /etc/raidtab 编辑,构建raid 5

raiddev /dev/md0

device /dev/sdb1组成md0的第一个分区

device /dev/sdc1组成md0的第二个分区

device /dev/sdd1组成md0的第三个分区

fdisk -l /dev/sd[bcd]

mkraid -R /dev/md0

more /proc/mdstat这个命令反应的是内核里的状态

pvcreate /dev/md0

vgcreate vg /dev/md0

vgdisplay vg

lvcreate -n home -l 250 vg

lvcreate -n var -l 250 vg

mkfs.ext3 /dev/vg/home

mkfs.ext3 /dev/vg/var

mkdir /mnt/home

mkdir /mnt/var

mount /dev/vg/home /mnt/home

mount /dev/vg/var /mnt/var

cp -a /home/* /mnt/home/

cp -a /var/* /mnt/var/

df -lh

vi /etc/fstab

/dev/vg/home /home ext3 defaults 0 0

/dev/vg/var /var ext3 defaults 0 0

vi /etc/rc.sysinit

/raid

raidstart /dev/md0

确认无误reboot

df确认是否是用的lvm设备

时我们可以把/dev/sda1中的home var目录删掉

mount /dev/sda1 /mnt

ls /mnt

rm -rf /mnt/var/*

rm -rf /mnt/home/*


umount /home

e2fsadm -l +250 /dev/vg/home 扩展块数量 -L则是容量大小

df -lh 可以看到被动态的缩放了


何将根分区移植到逻辑卷上去?

要把Linux启动的模块,库和相关的设备驱动文件全部放到这个启动文件的虚拟磁盘镜像文件,就可以将系统启动时将根作为逻辑卷来挂载

ls -l /boot/initrd-2.6.25-14.fc9.i686.img


lvcreate -n root -l 250 vg

mkfs.ext3 /dev/vg/root

umount /mnt

mount /dev/vg/root /mnt

cd /

ls

tmp proc不需要移植var home目录己移植好了

mkdir tmp proc var home

mkdir misc opt mnt initrd

cp -a bin dev etc lib sbin root usr /mnt

时将boot目录存入在原来的地方如果把boot目录放在逻辑卷上,内核是无法认识的

为在Linux启动之前,内核是无法找到逻辑卷设备的,而且也认不出raid设备

ctr+z挂起

bg在后台接着运行

ls -l /boot/initrd-2.6.25-14.fc9.i686.img

mkinitrd

lsmod

mkinitrd /boot/initrd-lvm-$(uname -r).img $(uname -r)

或使用lvmcreate_initrd

file /boot/initrd-lvm-2.6.25-14.fc9.i686.img 确认这个文件是gzip格式的,我们需要解开

cd /boot/

mv initrd-lvm-2.6.25-14.fc9.i686.img initrd-lvm-2.6.25-14.fc9.i686.img.gz

gunzip initrd-lvm-2.6.25-14.fc9.i686.img.gz

mount initrd-lvm-2.6.25-14.fc9.i686.img /opt -o loop

cp -a /dev/lvm dev/

cp -a /dev/vg dev/

ls dev

cp /dev/sd[abcd] dev

cp /dev/sd[abcd]1 dev

ls dev

ls

more linuxrc

#raidautorum /dev/md0

raidstart /dev/md0

vgscan

vgchange -a y


#mount -o defaults –ro -t ext3 /dev/root /sysroot

mount -o defaults –ro -t ext3 /dev/vg/root /sysroot


cp /sbin/vgscan bin/

cp /sbin/vgchange bin/

cp /sbin/raidstart bin/

ldd /sbin/ vgscan检查少了那些库然后考到这里来

ldd /sbin/vgchange

ldd /sbin/ raidstart

cp /etc/raidtab etc

umount /opt

initrd-lvm-2.6.25-14.fc9.i686.img这个己被改过了

gzip initrd-lvm-2.6.25-14.fc9.i686.img -c >initrd-lvm-2.6.25-14.fc9.i686.img.gz

vi /boot/grub/grub.conf 让它知道要加载上面的镜像文件

4 yy 然后移下来按p

default=1

title Fedora LVM

root (hd0,0)

kernel /boot/vmlinuz-2.6.25-14.fc9.i686 ro root=/dev/vg/root

initrd /boot/initrd-lvm-2.6.25-14.fc9.i686.img.gz

后保存退出

vi /opt/boot/fstab

/dev/vg/root / ext3 defaults 1 1

wq

reboot

df 可以看到根分区/己挂载到/dev/vg/root

是不管怎么/boot目录永远要放在物理硬盘上

fdisk -l /dev/sda

mount /dev/sda1 /mnt

cd /mnt

ls root

df -lh

根文件系统上构建lvm就成功了

/dev/vg/root /dev/vg/home /dev/vg/var都是建在vg卷组上,而vg卷组又建在raid设备上这样

保存数据的安全,而且能保证root home var能随机应变的缩放,达到动态存储的需求。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值