admin管理员组文章数量:1568358
磁盘配额,就是妥善的分配系统资源
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
版权声明:本文标题:Linux 磁盘配额,RAID,LVM 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727614424a1123090.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论