Linux 磁盘配额,RAID,LVM

来源:互联网 发布:博士后出站 知乎 编辑:程序博客网 时间:2024/04/24 03:10

磁盘配额,就是妥善的分配系统资源

quota比较常用的情况

针对 www server 例如:每个人的网页空间的容量限制

针对 mail server 例如:每个人的邮件空间限制

针对 file server 例如:每个人最大的可用网络磁盘空间

quota的使用限制

仅针对整个文件系统:如果你的/dev/sda5是挂载在/home底下,那么在/home底下的所在目录都会受到限制

核心必须支持quota : 也就是说linux核心必须支持quota这个功能才行,而由旧版本的quota可以籍由convertquota这个程序来转换

成新帮本的aquota的

只针对一般身份使用者有效:例如root就不能设定quota,因为整个系统的数据几乎都是他的

所以不能针对【某个目录】来进行quota的设计,但可以针对【某个文件系统】来设定,

quota的规范设定项目:quota针对整个文件系统的限制项目主要分为底下几个部分‘

1可以管理inode(档案数量)和block的数量(管理用户磁盘容量的限制)

2柔性劝导与硬性规定(soft/hard) ,通常hard限制要比soft高,若限制项目为block,可以限制hard为500MBytes而soft为400MByte

hard代表硬性规定,绝对不允许超个的限制值,如若超过则系统会锁住该用户的磁盘使用权

soft 代表软性规定,如果超过了软性的限制,但是低于硬性的限制,每次用户登录系统时,系统会主动发出磁盘即将爆满

的警告信息,且会给予一个宽限时间,不过,若使用者在宽限时间倒数期间将容量再次降低与soft限制之下,则宽限时间会停止

3会倒数计时的宽限时间 这个宽限时间用于磁盘用量在soft到hard之间时,才会出现,soft就是为了提醒用户注意这个磁盘配额的问题

一般宽限时间为7天,如果7天内你都不进行任何磁盘管理,那么soft限制值会即可取代hard限制来作为quota的限制,此时

你的磁盘使用权就会被封锁住而无法新增档案了

一个quota实例

有五个账户,且每个用户的初始群组都是myquotagrp,其他的帐号属性则使用默认值,每个用户能够使用300MBytes的磁盘使用量(hard)

250MBytes的磁盘使用量(soft),群组限制,针对myquotagrp这个群组最多仅能使用1GByte的容量,这个时候就会使群组的设定和用户的

设定产生一定的问题,最后那个宽限时间为14天

在操作之前,先得查看一下,/home是否是一个独立的filesystem

df -h /home,接着查看文件系统的类型,由于VFAT文件系统并不支持Linux Quota的功能,使用mount | grep home来查看/home的文件系统类型

接下来可以使用如下的方法加入quota的支持mount -o remount,usrquota,grpquota /home,接着再执行mount | grep home就可以看到这个文件系统上

已经加入usrquota,grpquota的支持到你所想要设定的系统中了,另外使用者与群组的quota文件系统支持的参数为: usrquota grpquota

若希望下次开机的时候自动的挂载该文件系统,可以直接修改/etc/fstab  LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2

mount -a 的意思是将fstab中的文件系统重新的挂载

接着建立quota记录文件

使用quotacheck:扫描文件系统并建立Quota的记录文件

quotacheck [-avugfM] [/mount_point]

选项和参数

-a :扫瞄所有在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此参数后,

-u : 针对用户扫描档案与目录的使用情况,会建立aquota.user 

-g :针对群组扫描档案与目录的使用情况,会建立 aquota.group

-v :显示扫瞄过程的信息;

-f :强制扫瞄文件系统,幵写入新的 quota 配置文件 (危险)

-M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。

quotacheck -avug仅针对整个系统含有usrquota, grpquota参数的文件系统进行quotacheck扫描

由于/home目录支持usrquota和grpquota,所以搜索结果会将两个记录文件放在/home底下,这两个档案就是quota最重要的信息

因为特殊需求需要强制扫瞄已挂载的文件系统时,使用quotacheck -avug -mf

这两个文件不是纯文本,是quota自己的数据文件,且该档案会一直变动,这个因为当你对/home这个文件系统进行操作时

你操作的结果会影响磁盘,所以当然会记载到这两个档案中的,所以要建立aquota.user 和 aquota.group 记得使用quotacheck指令

不要手动编辑

制作好quota配置文件,接着要启动quota了,使用quotaon和quotaoff进行开启和关闭

启动quota的服务

-u :针对使用者启动 quota (aquota.user)

-g :针对群组启动 quota (aquota.group)

-v :显示启动过程的相关讯息;

-a :根据 /etc/mtab 内的 filesystem 设定启动有关的 quota ,若不加 -a 的话, 则后面就需要加上特定的那个 filesystem 喔!

由于我们要启动usr/group的quota,所以执行quotaon -avug ,由于只有在第一次启动quota时才需要进行这个命令,因此等到下次重启系统时

系统的/etc/rc.d/rc.sysinit这个初始化脚本就会自动的下达这个命令了,因此你只要在这次实例中进行一次即可,未来不需要自行启动quota的

quotaoff :关闭 quota 的朋务

-a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab)

-u :仅针对后面接的那个 /mount_point 关闭 user quota

-g :仅针对后面接的那个 /mount_point 关闭 group quota

edquota :编辑账号/群组的限值与宽限时间

edquota [-u username] [-g groupname] -u进入quota的编辑页面去设定username的限制值

edquota -t <==修改宽限时间 -g 可以进入quota的编辑页面去设定groupname的限制值

edquota -p 范本账号 -u 新账号 将范本账号这个人的quota限制值复制给新帐号,进入quota的编辑页面去设定username的限制值

例如设定myquota1这个用户的限额设定 执行命令edquota -u myquota1

画面中的第一行为说明针对哪个帐号进行quota的限制设定,第二行则是标头行,共分七个字段 1,文件系统或分区

2 磁盘容量(blocks) 3soft 磁盘容量(blocks) 4 hard block的hard限制值 5档案数量 6 inode的soft限制值 7 inode的hard限制值

当 soft/hard 为 0 时,表示没有限制的意思,

目前先设定号myquota1,接着执行 edquota -p myquota1 -u myquota2 赋给myquota2 一直到myquota5就行了

接着再设定去组 edquota -g myquotagrp ,最后edquota -t 来将宽限时间改为14天

查看限制值的报表 quota的报表主要有两种模式,一种是针对每个个人或群组quota指令,一个是针对整个文件系统的

repquota指令,

先看quota : 单一用户的quota报表

quota [-gvs] [groupname]

选项和参数:

-u : 后面可以接username,表示显示该用户的quota限制值,若不接username表示显示出执行者的quota的限制值

-g : 后面可接 groupname ,表示显示出该群组的 quota 限制值。

-v :显示每个用户在 filesystem 的 quota 值;

-s :使用 1024 为倍数来指定单位,会显示如 M 之类的单位!

quota -uvs myquota1 myquota2的含义是显示这两个用户在所以文件系统中的quota值,大小以M为单位显示

显示出 myquotagrp 的群组限额

quota -gvs myquotagrp 显示这个群组在所有文件系统中的quota值,大小以M为单位显示

如果要针对整个 filesystem 列出报表时, 那个可爱的 repquota 就派上用场啦!

repquota :针对文件系统的限额做报表

repquota -a [-vugs]

-a :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,并报告 quota 的结果;

-v :输出的数据将含有 filesystem 相关的细部信息;

-u :显示出用户的 quota 限值 (这是默认值);

-g :显示出个别群组的 quota 限值。

-s :使用 M, G 为单位显示结果

查询本案例中所有使用者的 quota 限制情况:

 执行repquota -auvs,查询出mtab中含有quota的文件系统的所有用户的限定值,输出的结果含有firstsystem相关的细部信息

并且以M,G为单位显示结果

quota的测试与管理

首先建置一个270MB的大档案,观察结果

dd if=/dev/zero of=bigfile bs=1M count=250 接着会看到警告warning的讯息

repquota -auv 查看所有/etc/mtab文件系统中,用户的磁盘配额的使用情况,并且将文件系统的相关细部信息一并输出

此时看到grace出现,并且开始倒数了

此时再建立一个大档案,让总容量超过300M,接着看到的讯息不一样了,提示没有办法写入了,

du -sk 查看果然到了极限了

如果在宽限时间归零之前不做任何处理,那么到归零之后通过repquota -au进行查看时,就会发现grace的部分变成none啦,不继续倒数了

有时候使用者不知道系统出了什么问题,最好寄一些警告信(email)给用户比较妥当,透过warnquota来处理即可

warnquota :对超过限额者发出警告信

这是根据/etc/warnquota.conf的设定,然后找出系统上面quota用量超过soft的账号,透过email的功能将警告信发送到用户的电子邮件信箱

warnquota不会自动执行,我们需要手动执行,单纯执行warnquota之后,他会发送两封信出去,一封给root

一封给这个使用者

执行warnquota可能不会产生任何讯息以及信件,因为只有当使用者quota有超过soft,warnquota才会发送警告信

信件内容中,包括标题、信息内容说明、签名文件等数据放在/etc/warnquota中,你也可以更改其中的内容

不过这个发送信件的方式并不适用在/var/spool/mail也爆掉的quota控管中,因为这个系统的容量已经爆掉了,那么

新的信件当然就收不下来的,我们需要让系统自动的执行warnquota

vi /etc/cron.daily/warnquota  编辑每天的执行任务,让固定的时间去执行/usr/sbin/warnquota指令

chmod 755 /etc/cron.daily/warnquota

setquota :直接于指令中设定 quota 限额

如果你想要使用 script 的方法来建立大量的账号,并且所有的账号都在建立时就给予 quota

可以有两个方法

1 先建立一个原始quota 使用 edquota -p quota账号 -u new账号, 写入脚本中

2 直接以 setquota 建立用户的 quota 设定值

不同于edquota是呼叫vi来进行设定,setquota直接由指令输入所必须要的各项限制值

命令结构:

setquota [-u|-g] 名称 block(soft) block(hard)  inode(soft) inode(hard)

quota -uv myquota5

setquota -u myquota5 100000 200000 0 0 /home

quota -uv myquota5

这样可以看到结果的改变

不更改既有系统的 quota 实例

例如设定邮件主机,原先没有规划将信箱所在的/var/spool/mail 目录独立成一个parition,那么可以通过让

使用者的邮件信箱与家目录的总体磁盘使用量为固定,由于/home以及/var/spool/mail根本不在一个文件系统中

1. 将 /var/spool/mail 这个目录完整的移懂到 /home 底下; 

2. 利用 ln -s /home/mail /var/spool/mail 来建立链接数据; 

3. 将 /home 进行 quota 限额设定

Linux 软件磁盘阵列 (RAID) : 简称容错式廉价磁盘阵列

RAID可以将多个较小的磁盘整合成为一个较大的磁盘装置,而这个较大的磁盘功能不止可以存储而已,还具有数据保护的功能,整个RAID选择的等级不同,使得整合后的磁盘

具有不同的功能:常见的有以下几种

RAID-0 效能较佳,采用两个磁盘交错的存放数据,如果是100m的数据,则每个磁盘存放50m数据,每个磁盘所负责的数据量都降低了,效能较佳,磁盘容量变大,但是使用

时的安全性较差,如果某一个磁盘损毁,那么档案数据将缺一块,所以当一颗磁盘损毁,则RAID上面的所有数据都会遗失而无法读取

RAID-1 这种模式需要相同的磁盘容量,最好一模一样的磁盘,如果不同大小的,则以小的磁盘为主,这种模式是让同一份数据保存在两个磁盘上,这种模式可能在写入数据的

时候让效能变的非常差,好在如果使用的是硬RAID,磁盘阵列卡会主动的复制一份而不使用系统系统的IO主线,效能方面还行,如果使用软RAID,则效能就不好了

RAID-1最大的优点就是在于数据的备份,不过由于一个磁盘用于备份,因此总容量会是全部磁盘容量的一半而已,虽然RAID -1 写入效能不佳,不过读取的效能还可以

这是因为数据有两份在不同的磁盘上面,如果多个 processes 在读取同一笔数据时, RAID 会自行取得最佳的读取平衡

RAID 0+1,RAID 1+0

RAID-0 的效能佳但是数据不安全,RAID-1 的数据安全但是效能不佳,那么就将两者整合起来,先让两颗磁盘组成RAID-0.并且设定共有两组,在将两组RAID-0再组成一个

RAID-1 这就是RAID 0+1了,这种情况下不论哪一组RAID-0中的磁盘损坏,只要另一组RAID-0存在,那么就可以通过RAID-1将数据回复回来,但是由于存在RAID-1的缺点,

所以造成磁盘总容量会少一半,用来做备份用了

RAID 5:效能与数据备份的均衡考虑

至少需要三颗以上的磁盘,在每个循环写入的过程中,在每颗磁盘还加入了一个同位检查数据,这个数据会记录其他磁盘的备份数据,用于当有磁盘损毁时的救援

每循环一次,都会有同位检查码被记录下来,每次循环都记录在不同的磁盘上,任何一个磁盘损坏时,都能藉由其他磁盘的检查码来重建原本磁盘内的数据,由于存在

同位检查码,所以RAID-5的总容量是整体的磁盘数量减一颗,RAID-5预设仅能支持一颗磁盘的损坏。

读写效能上还算不错,在写入的时候需要计算同位检查码,所以加上计算的动作,尤其当使用软RAID时,同位检查码是通过CPU去计算而非专职的磁盘阵列卡,效能会受影响

RAID-6可以使用两颗磁盘作为parity的储存,因此磁盘容量会少两颗,但是允许出错的磁盘数量达到两颗,两颗坏了,还能就回数据

Spare Disk:预备磁盘的功能:

当磁盘阵列中的磁盘损坏时,将要将坏的拔除,换一个新的,换成新的磁盘并且顺利启动磁盘阵列后,磁盘阵列就会开始主动的重建,将原本坏掉的那颗磁盘数据算出来放到

新的磁盘上,然后你磁盘阵列的数据就复原了,不过我们还是需要动手拔插硬盘,此时通常得要关机才能这么做,为了让系统可以在某个磁盘坏掉的时候主动的重建,就需要

预备磁盘的辅助了,这颗预备磁盘平时不会被磁盘阵列所使用,当有磁盘损坏,则这颗预备盘会被主动的拉进磁盘阵列中,并将坏掉的那颗移除磁盘阵列,然后立即重建数据

若你的磁盘阵列支持热插拔则就更完美了,直接将坏掉的那颗磁盘拔除换一颗新的。

总之磁盘阵列的优点有:

数据安全与可靠,读写效能得以改善,容量可以让多个磁盘组成一个相当大的文件系统

磁盘阵列分为硬RAID和软RAID,硬RAID需要通过磁盘阵列卡来达到数组的目录,磁盘阵列卡上有一块专门芯片用于处理RAID的任务,因此效能方面较好,不会在计算同位

检查码的时候消耗原本系统的IO总线,中高阶的磁盘阵列卡都支持热插拔,可以在不关机的情况下抽取损坏的磁盘,对于系统的复原与数据的可靠性方面很好用

不过磁盘阵列卡十分贵,并且操作系统要拥有磁盘阵列卡的驱动程序,才能正确的捉到磁盘阵列所产生的磁盘驱动器

由于硬件磁盘阵列太贵,就发展出了软件类仿真磁盘阵列的功能,即所谓软RAID,软RAID通过软件来仿真数组的任务,因此消耗CPU的运算与IO总线的资源,不过现在的机器

都非常快,可以来玩软件磁盘阵列的

软件磁盘阵列为mdadm这套软件,这套软件将分区或disk为单位,不需要两颗以上的磁盘,只要两个分割槽就可设计磁盘阵列,mdadm支持RAID 0,1,5 ,而且提供的管理

机制可以达到热插拔的功能,可以在线进行分割槽的替换,其实硬RAID看起来是一颗实际的大磁盘,装置名为/dev/sd【a-p】,至于软RAID是仿真的,因此装置名是系统的

装置文件,文件名/dev/md0 /dev/md1,因此硬RAID和软RAID两者的装置文件名不同.

软件磁盘阵列的设定

设定软件磁盘阵列的设定需要mdadm这个指令,语法有点像以下这样:

mdadm --detail /dev/md0

mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N --level=[015] --space-devices=N /dev/sdx /dev/hdx...等等

选项和参数

--create : 为建立RAID的选项

--auto=yes :决定建立后面接的软件磁盘阵列装置,亦即/dev/md0, /dev/md1

--raid-devices=N 使用几个磁盘或分区作为磁盘阵列的装置

--space-devices=N 使用几个磁盘作为备用(space)装置

--level=[015] 设定这组磁盘阵列的等级,支持很多,不过建议只要使用0,1,5即可

--detail : 后面所接的那个磁盘阵列装置的详细信息

上面提到的装置文件名可以是整棵磁盘/dev/sda /dev/sdb 或者是分割槽,例如/dev/sdb1 /dev/sdb2,不过这些装置文件名的总数必须要等于 --raid-devices与--space-devices的

个数总和才行,接下来使用raid5来做一下实验,使用分割槽作为软件磁盘阵列的分区

fdisk -l查看分区的情况

fdisk /dev/sda 进行分区 ,,w:保存,d:删除 ,p查看, n创建  q退出 

接下来创建四个分区组成RAID-5 再找一个作为space disk ,RAID - 5 每个分区大小一致,将此RAID-5 装置挂载到mnt/raid目录下

以 mdadm 建置 RAID

mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --space-device=1 /dev/hda{6,7,8,9,10} 这里透过 {} 将重复的顷目简化

mdadm --detail /dev/md0 来对这个软件磁盘阵列进行查看,信息包括:RAID装置文件名,RAID被建立的时间,RAID的等级,RAID的可用磁盘容量 RAID 每个装置的可用容量

用作RAID的装置数量 全部的装置数量,启动的active装置数量,可动作的装置数量,出现错误的装置数量,预备磁盘的数量,此装置(RAID)的标识符,

由于磁盘阵列的建置需要一些时间,所以你最好等待数分钟后再使用『 mdadm -detail /dev/md0 』去查看磁盘阵列信息,否则有可能看到某些磁盘正在space rebuliding

处理上述指令之外,也可以查阅如下的档案来看看刚刚建立的系统软件磁盘阵列的情况

cat /proc/mdstat

第一行信息部分说明的内容有 md0为RAID5 使用了四颗磁盘装置,每个装置后面的中括号内的数字为此磁盘在RAID中的顺序,至于hda10后面的s 则代表hda10是space之意

第二行信息指出这个磁盘阵列拥有多少block 总容量的大小,使用RAID-5等级,写入磁盘的小区块大小为多少,使用algorithm2磁盘阵列算法

【m/n】代表此数组需要m个装置,且n个装置正常运行,U 代表正常运作,若为 _ 则代表不正常。

格式化与挂载使用 RAID

使用格式化工具 mkfs -t ext3 /dev/md0

仿真 RAID 错误的救援模式

mdadm

选项与参数

--add 会将后面的装置加入到这个md中

--remove 会将后面的装置有这个md中移除

--fail 会将后面的装置设定成为出错的状态

接下来实验设定磁盘为错误 (fault),如何让一个磁盘变成错误,再然后space disk自动的开始重建系统

假设 /dev/hda8 这个装置出错了!实际模拟的方式:

mdadm --manager /dev/md0 --fail /dev/hda8

mdadm --detail /dev/md0 可以看到出错的磁盘有一个,预备盘dev/hda10 启动而/dev/hda8死掉了

cat /proc/mdstat 查看到此时RAID -5正在重建系统,若你等待一段时间后再输入后面的观察指令,可以看到藉由space disk 重建完毕的RAID-5

又恢复正常了!真好!我们的 /mnt/raid 文件系统是完整的!并不需要卸除

将出错的磁盘移除并加入新磁盘

首先,我们再建立一个新的分割槽,这个分割槽要与其他分割槽一样大才好!然后再利用 mdadm 移除错诨的并加入新的

加入新的拔除有问题的磁盘 [root@www ~]# mdadm --manage /dev/md0 --add /dev/hda11 --remove /dev/hda8

你的磁盘阵列内的数据不但一直存在,而且你可以一直顺利的运作 /mnt/raid 内的数据,即使 /dev/hda8 损毁了!

通过管理的功能就能加入新磁盘且拔除掉坏了的磁盘

开机自动启动 RAID 并自动挂载

这个配置文件在 /etc/mdadm.conf,你只要知道 /dev/md0 的 UUID 就能够设定这个档案啦

mdadm --detail /dev/md0 | grep -i uuid 查询UUID

# 开始设定 mdadm.conf [root@www ~]# vi /etc/mdadm.conf ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b # RAID装置 标识符内容

开始设定开机自动挂载并测试 [root@www ~]# vi /etc/fstab /dev/md0 /mnt/raid ext3 defaults 1 2

编写好之后执行umount /dev/md0 ; mount -a重新挂载/etc/fstab中设定挂载的分区

关闭RAID的方法 确认你的/dev/md0确实不要用且要关闭了才进行底下的内容操作,先卸载,再从fstab中去掉有关内容,mdadm --stop /dev/md0 这样就关闭了

cat /proc/mdstat 确实不存在任何数组装置了

逻辑滚动条管理员(LVM)

当一个文件系统在初始化的时候分的不够大,那么就需要加一个新硬盘,然后重新分割,格式化,将/home的数据完整的复制过来,将原本的分区卸载,

再重新挂载新的分区,由于这样做太烦,所以就有了LVM

LVM重点在于它可以弹性的调整文件系统的容量,并非在于效能和数据保全,LVM可以整合多个实体partition在一起,这个partitions看起来就像一个磁盘一样

而且,还可以在未来新增或移除其他的实体partition到这个LVM管理的磁盘当中,如此一来,整个磁盘空间的使用上,相当的具有弹性

LVM中的PV, PE, VG, LV 的意义

LVM 可以将多个partitions或disk透过软件组合成一块看起来是独立的大磁盘,这个磁盘就是VG,然后将这个大磁盘再经过分割成可使用分割槽(LV),最终就能够挂载使用了

这样的系统可以进行filesystem的扩展或缩小,其实和PE有关.

PV  实体滚动条

我们实际的partition需要调整系统标识符成8e(LVM的标识符),然后再经过pvcreate的指令将他转成LVM最底层的实体滚动条(PV),之后就能够将这些PV加以利用,

调整system ID的方法就是通过fdisk 命令

VG 滚动条群组

VG其实就是由多个PV组成的,就是LVM组合起来的大磁盘,而这个大磁盘最大可以放多少容量,这就和PE有关,因为每个VG最多仅能包含65534个PE而已

如果使用LVM预设的参数,则一个VG最大可以有256GB的容量

PE 实体延伸区块

LVM预设使用4MB的PE区块,VG最大65534个PE,因此LVM 的VG为4M * 65534(1024M/G)=256G,这个PE很有趣,他是最小的储存区块,其实我们的档案资料都是由写入

PE来处理的,这个PE有点像文件系统中的block大小,调整PE会影响到VG的最大容量

LV 这个LV就是最后可以被格式化使用的类似分割槽的东西,LV的大小不可随意指定,既然有PE这个最小储存单位,那么LV的大小就与此LV的PE总数有关,LV的装置文件名

指定为/dev/vgname/lvname,LVM 可弹性的变更 filesystem 的容量是通过交换PE来进行数据转换,将原本LV内的PE转移到其他装置中降低LV容量,或者将其他装置的PE

加入到此LV中以加大容量,是通过PE的多少来改变LV的大小的

透过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!而且这个文件系统的容量在未来还能够进行扩充或减少,其中的数据不受影响

LV 的写入是写入到硬盘当中:

有两种方式:

1 线性模式: 将/dev/sda1 , /dev/sda2 这两个partition加入到VG当中,并且整个VG只有一个LV时,那么所谓的线性模式就是当/dev/sda1的容量用完之后,再去使用/dev/sdb1

的容量 ,这种比较建议

2 交错模式: 将一笔数据拆成两部分,分为写入到/dev/sda1和/dev/sdb1的意思,有点像RAID-0 ,这样一来两颗硬盘,如此一来一份数据用两颗硬盘来写入,

基本上,LVM最主要的用处是一个可以弹性的管理partition,而不是着眼于效能上,因此LVM的读写模式是线性模式,如果使用交错模式,主要当任何个partition归天

那么所有的数据都会损毁的,所以不适合用这种模式,如果想要强调效能和备份,可以直接使用RAID,不需要用到LVM

LVM的制作流程

LVM必须要核心有支持且安装lvm2这个软件,默认都是支持的:制作步骤:

先分割出4个partition,每个容量为1,5GB,且system ID为8e

全部的partition整合成一个VG,且PE大小为16MB

全部的VG容量都给LV,LV的名称设定为vbirdlv

最终这个LV格式化,挂载到/mnt/lvm中

fdisk /dev/sda  分出4个 再一一执行t 接着 分区 ,最后输入8e来转换system ID,按w保存,接着输入partx -a /dev/sda进行初始化,再执行fdisk -l 就能看到了

建立PV  只要直接使用 pvcreate 即可

 pvcreate :将实体 partition 建立成为 PV ;
 pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
 pvdisplay :显示出目前系统上面的 PV 状态;
 pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

pvcreate /dev/hda{6,7,8,9} 创建  pvscan 查看,其中pvscan最后一行信息的含义是:整体 PV 的量 / 已经被使用到 VG 的 PV 量 / 剩余的 PV 量

pvdisplay 更详细的列示出系统上面每个 PV 的个别信息:

VG 阶段

vgcreate :就是主要建立 VG 的指令啦!他的参数比较多,等一下介绍。
vgscan :搜寻系统上面是否有 VG 存在?
vgdisplay :显示目前系统上面的 VG 状态;
vgextend :在 VG 内增加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :设定 VG 是否启劢 (active);
vgremove :删除一个 VG 啊!

PV 其实就是partition的装置文件名,但是VG的名称可以随便自己定义,

vgcreate [-s N[mgt]] VG名称 PV名称

-s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)

vgcreate -s 16M vbirdvg /dev/hda{6,7,8} 将6,7,8组成一个VG,且指定PE为16MB

vgscan

pvscan 发现三个pv被使用了,剩下一个没有使用

vgextend vbirdvg /dev/hda9 增加这个VG的容量,将上面那个没有使用的加入到这个VG中去

LV 阶段 对VG进行分割区就是所谓的LVlvcreate :建立 LV 啦!
lvscan :查询系统上面的 LV ;
lvdisplay :显示系统上面的 LV 状态啊!
lvextend :在 LV 里面增加容量!
lvreduce :在 LV 里面减少容量;
lvremove :初除一个 LV !
lvresize :对 LV 迚行容量大小的调整!

lvcreate [-L N[mgt]] [-n LV名称] VG名称

lvcreate [-l N] [-n LV名称] VG名称

-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必项要是 PE 的倍数,若不相符,系统会自行计算最相近的容量

-l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数

-n :后面接的就是 LV 的名称啦!

lvcreate -l 356 -n vbirdlv vbirdvg 将fbirdvg整个的分给vbirdlv这个LV

lvcreate -L 5.56G -n vbirdlv vbirdvg

ll /dev/vbirdvg/vbirdlv 可以查看到这个LV了

接着格式化 mkfs -t ext3 /dev/vbirdvg/vbirdlv <==注意 LV 全名

mount /dev/vbirdvg/vbirdlv /mnt/lvm 挂载

实际上 LVM 使用的装置是放置到 /dev/mapper/ 目录下的

放大 LV 容量

完整的步骤

1. 用 fdisk 设定新的具有 8e system ID 的 partition
2. 利用 pvcreate 建置 PV
3. 利用 vgextend 将 PV 加入我们的 vbirdvg
4. 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
5. 透过 resize2fs 将文件系统的容量确实增加!

其中最后一个步骤最重要

整个文件系统最初格式化的时候建立了inode block superblock 等信息,这写内容很难修改,不过因为文件系统格式化的时候建立了多个block group 因此我们可以透过在文件

系统中增加block group 的方式来增减文件系统的大小,而增减block group 就是利用 resize2fs ,只有最后一步是针对文件系统处理的,前面几部则是针对LVM的实际容量大小

pvcreate /dev/hda10 创建一个新的PV 接着加大 VG ,利用 vgextend 功能 执行 vgextend vbirdvg /dev/sda10 

再接着放大 LV 吧!利用 lvresize 的功能来增加,执行lvresize -l +179 /dev/vbirdvg/vbirdlv ,lvresize 的语法很简单,基本上同样透过 -l 或-L来增加 PE的个数或 者PE的容量

lvdisplay这样就能看到LV的变化了,但是文件系统没有增加,我们LVM可以在线直接处理,并不需要umount操作,但是还是要处理一下文件系统的容量

开始观察一下文件系统,然后使用 resize2fs

dumpe2fs /dev/vbirdvg/vbirdlv 先看看原本的文件系统内的superblock记录情况

显示的内容包括,block数量,多少block设定成为一个block block的号码,本系统中最后一个group

resize2fs 的语法 resize2fs [-f] [device] [size]

-f :强制进行 resize 的动作!

[device]:装置的文件名;

[size] :可以加也可以不加。如果加上 size 的话,那么就必项要给予一个单位, 譬如 M, G 等等。如果没有 size 的话,那么预设使用『整个 partition』 的容量来处理!

完整的将 LV 的容量扩充到整个 filesystem  执行resize2fs /dev/vbirdvg/vbirdlv

此时你再以 dumpe2fs 来检查 /dev/vbirdvg/vbirdlv 时,就会发现后续的 Group 增加了

缩小 LV 容量

假设我们想将 /dev/hda6 抽离出来

就让上一小节的流程倒转过来即可啊

pvdisplay 查看那个要抽离的PV的大小

从这里可以看出 /dev/hda6 有多大,而且含有 89 个 PE 的量喔!

那如果要使用 resize2fs 时,则总量减去 1.40GB 就对了

从上面可以发现如果扣除 /dev/hda6 则剩余容量有:1.39*3+2.8=6.97 本来有四个1.39,去除一个还有三个1.39的PV

缩小文件系统似乎无法支持!所以要这样做umount /mnt/lvm

接着进行磁盘检查 e2fsck -f /dev/vbirdvg/vbirdlv

再执行 resize2fs /dev/vbirdvg/vbirdlv 6900M

然后再来就是将 LV 的容量降低!要注意的是,我们想要抽离的是 /dev/hda6,这个 PV 有 89 个 PE (上面的 pvdisplay 查询到的结果)。所以要这样进行:

降低 LV 的容量,同时我们知道 /dev/hda6 有 89 个 PE

执行lvresize -l -89 /dev/vbirdvg/vbirdlv 确定你的实际数据量还是比 6900M要小,才能执行y

这样就将 LV 缩小了!接下来就要将 /dev/hda6 移出 vbirdvg 这个 VG 之外,

我们得要先确定 /dev/hda6 里面的 PE 完全不被使用后,才能够将 /dev/hda6 抽离!

pvdisplay 查看/dev/hd6 是否将PE都移除了

pvmove 来源PV 目标PV ,可以将 /dev/hda6 内的 PE 通通移动到 /dev/hda10

将 /dev/hda6 移出 vbirdvg 中! vgreduce vbirdvg /dev/hda6   pvremove /dev/hda6删除PV属性

LVM 的系统忚照

那么 LVM 除了增减容量之外,还有就是可以进行系统快照,快照就是将当时的系统信息记录下来,就好像相机一般,未来若有任何资料更动了,则原始资料会被迁移到快照区

没有被更动的区域则由快照区与文件系统共享。快照区域系统区共享所有的PE数据,因此你看到快照区的内容与文件系统一模一样,运行一阵子后,假设某些数据被改动了

则变更前系统将该区域的数据移动到快照去,快照区被占用了一块PE成为A,其他B到I的区块则还是与文件系统共享

LVM 的系统快照是非常棒的『备份工具』,因为他只有备份有被更动到的数据,文件系统内没有被变更的数据依旧保持在原本的区块内,

由于快照区与原本的 LV 共享很多PE 区块,因此快照区与被快照的LV必须要在同一个VG上头,得要再加入 /dev/hda6 到我们的 VG 后,才能继续建立快照区,

快照区的建立

pvcreate /dev/hda6

vgextend vbirdvg /dev/hda6 将hda6加入到vg中

vgdisplay 查看多出了89个PE

利用 lvcreate 建立系统快照区,我们取名为 vbirdss,并给予 60 个 PE

lvcreate -l 60 -s -n vbirdss /dev/vbirdvg/vbirdlv

-s 的选顷!代表是 snapshot 快照功能之意

-n 后面接快照的装置名称,

-l 后面则是接使用多少个 PE 来作为这个快照区使用

这个 /dev/vbirdvg/vbirdss 快照区就被建立起来了!而且他的 VG 量竟然与原本的 /dev/vbirdvg/vbirdlv 相同,如果将这个装置进行挂载,看到的数据会跟原本的vbirdlv相同的

我们实验一下

mkdir /mnt/snapshot

mount /dev/vbirdvg/vbirdss /mnt/snapshot

/dev/mapper/vbirdvg-vbirdlv 6955584 262632 6410328 4% /mnt/lvm

/dev/mapper/vbirdvg-vbirdss 6955584 262632 6410328 4% /mnt/snapshot

可以看到是一样大的

/dev/vbirdvg/vbirdss会主动记录原 vbirdlv 的内容

利用快照区复原系统

你要复原的数据量不能够高亍快照区所能负载的实际容量,由亍原始数据会被搬移到快照区,如果快照区不够大,

若原始资料被更动的实际数据量比快照区大,那么快照区当然容纳不了,这时候快照功能会失效喔!

上面我们给了60个PE也就是900MB 作为快照区存放有变更了的数据的原始数据之用

/mnt/lvm 已经有 /mnt/lvm/etc, /mnt/lvm/log 等目录,接着将这个文件系统的内容作变更,然后再使用快照区数据还原

先将原本的 /dev/vbirdvg/vbirdlv 内容作些变更,增增减减一些目录

接着lvdisplay /dev/vbirdvg/vbirdss 查看快照区的使用量

利用快照区将原本的 filesystem 备份

mount /dev/vbirdvg/vbirdss /mnt/snapshot

df查看到两者确实不一样了!开始将快照区内容复制出来

mkdir -p /backups <==确认真的有这个目录

cd /mnt/snapshot

tar -jcv -f /backups/lvm.tar.bz2 *  此时你就会有一个备份资料,亦即是 /backups/lvm.tar.bz2

为什么需要备份,是因为如果将vbirdlv的数据格式化的话,那么你知道vbirdss是vbirdlv的快照,因此如果格式化vbirdlv时,原本文件系统所有数据

都会搬移到vbirdss,那如果vbirdss的容量不够大(通常都不是很大),那么部分数据将无法复制到vbirdss内,数据档案不能全部还原,所以才要

在上面制作一个备份文件

快照还有另外一个功能,就是你可以比对 /mnt/lvm 与 /mnt/snapshot 的内容,就能够发现到最近你到底改了啥

接下来让我们准备还原 vbirdlv 的内容

umount /mnt/snapshot 将vbirdss卸除并移除(因为里面的内容已经备份起来了)

lvremove /dev/vbirdvg/vbirdss 按y

umount /mnt/lvm 卸载

mkfs -t ext3 /dev/vbirdvg/vbirdlv 重新格式化

mount /dev/vbirdvg/vbirdlv /mnt/lvm 挂载

tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm 解压到这个目录下

ll /mnt/lvm 这就是通过快照还原的一个简单的方法

利用快照区进行各项练习与测试的任务,再以原系统还原快照

我们将原本的 vbirdlv 当作备份数据,然后将 vbirdss 当作实际在运作中的数据,任何测试的动作都在vbirdss这个快照区当中测试,那么当测试完毕

要将测试的数据删除时,只要将快照区删除即可,然后复制一个vbirdlv的系统,再做另一个快照区即可。

LVM的快照来进行备份因为需要制作一个备份,所以不太合理,我们可以创建一个基础的环境保持住,其他的环境使用快照来提供,即使你将系统搞烂

,只需要将快照删除,再重建一个快照区,这样环境就恢复了

建立一个大一些的快照区,让我们将 /dev/hda6 的 PE 全部给快照区

lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv

lvdisplay /dev/vbirdvg/vbirdss

隐藏 vbirdlv 挂载 vbirdss

umount /mnt/lvm      mount /dev/vbirdvg/vbirdss /mnt/snapshot

开始破坏

rm -r /mnt/snapshot/etc /mnt/snapshot/log

cp -a /boot /lib /sbin /mnt/snapshot/

ll /mnt/snapshot  与原本数据有差异了

mount /dev/vbirdvg/vbirdlv /mnt/lvm

ll /mnt/lvm 可以看到你在快照区恶搞啥咚咚,原本的 vbirdlv 里面的数据安好如初!

假设你将 vbirdss 搞烂了!里面的数据不再需要!那该如何是好

还原原本快照区的数据,回到与原文件系统相同的信息

umount /mnt/snapshot 卸载快照区

lvremove /dev/vbirdvg/vbirdss  移除快照区

lvcreate -s -l 89 -n vbirdss /dev/vbirdvg/vbirdlv 为vbirdlv创建新的快照

mount /dev/vbirdvg/vbirdss /mnt/snapshot 挂载

ll /mnt/snapshot 查看到数据复原了

LVM 相关指令汇整与 LVM 的关闭

至于文件系统的格式化处理部分,需要以resize2fs来修订文件系统的大小才行

你必项要会移除系统内的 LVM  因为你的实体partition已经被使用到LVM中去了,如果没有将LVM关闭就直接将那些partition删除或转为其他用途的话

系统会发生很大的问题,你必须要知道将LVM的装置关闭并移除的方法

1,先卸载系统上面的LVM文件系统   umount /mnt/lvm    umount /mnt/snapshot

2,使用lvremove 移除LV   lvremove /dev/vbirdvg/vbirdss   lvremove /dev/vbirdvg/vbirdlv

3,使用exchange -a n VGname 让VGname这个VG不具有Active的标志    vgchange -a n vbirdvg

4,使用vgremove移除VG    vgremove vbirdvg

5,使用pvremove移除PV   pvremove /dev/hda{6,7,8,9,10}

6,,最后fdisk修改system ID


原创粉丝点击