配额、RAID、软RAID以及LVM管理

磁盘配额允许控制用户或者组织对磁盘的使用,它能防止个人或者组织使用文件系统中超过自己使用的部分,或者造成系统完全拥堵。配额必须由root用户或者具有root权限的用户启用和管理。

硬RAID以及软RAID :RAID是Redundant Array of Independent Disks的简写,即独立硬盘冗余阵列,简称磁盘阵列。通过实现的方式不同,可以分为硬RAID和软RAID两种; 
LVM :LVM是Logical Volume Manager的简称,即逻辑卷。是一种可以使用在内核的逻辑分卷管理器。


配额的配置管理

磁盘配额的使用对象必须是整个文件系统,无法对单一的目录进行设置,并且linux核心必须支持。只能对普通用户用户有效,对root账户无效。大多数开启了SELinux的情况下,默认只对/home目录有效。

配额实验步骤

1、建立一个新的分区,将该分区格式化为ext系列文件系统,在这个实验中我们使用的是ext4文件系统; 
2、挂载分区到/home目录下面并且启用该目录的配额功能; 
3、指定用户用户,测试器功能;

查看系统磁盘分区情况

~]#    lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  120G  0 disk
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0   40G  0 part /
├─sda3   8:3    0   20G  0 part /usr
├─sda4   8:4    0    1K  0 part
└─sda5   8:5    0    2G  0 part [SWAP]
sdb      8:16   0   20G  0 disk
sdc      8:32   0  200G  0 disk
sdd      8:48   0  120G  0 disk
sr0     11:0    1 1024M  0 rom

使用磁盘b分区并且格式化为ext4文件系统使用

 ~]#    fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root:~]#    mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
   32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

将磁盘sdb1挂载到/home下面

cp -a /home/* /mnt/home/
mount /dev/sdb1 /home/
cp -a /mnt/home/ /home/
cd /home/
ll
total 20
drwx------ 2 root    root    4096 Nov 10 09:42 lost+found
drwx------ 3 mage    mage    4096 Nov 10 09:48 mage
drwx------ 3 roger   roger   4096 Nov 10 09:48 roger
drwx------ 3 wang    wang    4096 Nov 10 09:48 wang
drwx------ 3 wangcai wangcai 4096 Nov 10 09:48 wangcai

启用磁盘配额

mount -o remount,usrquota,grpquota /home/
quotacheck -cug /home/
quotaon /home/

启用普通用户的配额,设定配额参数

edquota -p  wang
setquota wang 100000 150000 100 150 /home
repquota -a
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                       Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --       8       0       0              2     0     0      
wang      --      32  100000  150000              13   100   150      
mage      --      32       0       0              8     0     0      
roger     --      32       0       0              8     0     0      
wangcai   --      32       0       0              8     0     0

上面的的Block limits和File limits两项设置,其中used是现在已经使用的情况,soft是使用预警,当块使用量或者文件个数达到该值的时候,系统将会预警,后面的hard是最大使用量,达到两个值的任意一个,将无法创建文件或者增大文件的大小。 
下面我们来验证该功能

切换普通用户wang

su - wang
pwd
/home/wang

创建文件验证File limits功能

touch a{1..88}
sdb1: warning, user file quota exceeded.

wang用户在创建文件之前以及有13个文件,现在创建88个文件刚好达到100预警数量,因此有了sdb1:warning,user file quota exceeded的提示。但是此时还能创建文件。

touch a{89..137}
touch a138
sdb1: write failed, user file limit reached.
touch: cannot touch ‘a138’: Disk quota exceeded
du -sh .
52K .

此时达到最大值150后,提示无法创建,此时磁盘的使用并没有达到Block limits。

下面我用验证容量限制

#查看wang用户的配额限制,最大使用大小为150M左右,预警100M
edquota wang
Disk quotas for user wang (uid 1006):
 Filesystem                   blocks       soft       hard     inodes     soft     hard
 /dev/sdb1                        52     100000     150000         13      100      150
#在已经使用52K的情况下,建一个100M大小的文件a
dd if=/dev/zero of=a bs=1M count=100
sdb1: warning, user block quota exceeded.   #可以看到系统已经预警了
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.319193 s, 329 MB/s
#再建一个50M大小的文件
dd if=/dev/zero of=aa bs=1M count=50
sdb1: write failed, user block limit reached.
dd: error writing ‘aa’: Disk quota exceeded    #已经开始报错
47+0 records in
46+0 records out
48689152 bytes (49 MB) copied, 0.2505 s, 194 MB/s

ll -h
total 147M
-rw-rw-r-- 1 wang wang 100M Nov 10 10:57 a
-rw-rw-r-- 1 wang wang  47M Nov 10 11:01 aa   #没有创建为50M,只有47M

配额实验结果

由于hard的值为150000,换算后为146.68M,因此只能为大概为147M。以上实验验证磁盘配额quota效果。

RAID及其实现

RAID简称磁盘阵列,其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘 阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。由于RAID把多个硬盘组合成为一个逻辑扇区,因此对于电脑来说,只会把它当作一个硬盘或逻辑存储单元。 
根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:

1、增强数据集成度 
2、增强容错功能 
3、增强处理量和容量

RAID的版本

RAID 技术最初由加利福尼亚大学伯克利分校(University of California-Berkeley)在1988年提出,经过多年发展已经拥有的众多的版本,主要分为标准 RAID(RAID 0 、RAID1、RAID4、RAID5、 RAID 6)、混合 RAID(RAID 10、RAID01、RAID 50 等)。

RAID0

RAID0亦称为条带。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID0的速度是最快的。但是RAID0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失,危险程度与JBOD相当。 如下图所示

RAID1

两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。 
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。 如下图所示

RAID4

它与RAID 3不同的是它在分区时是以区块为单位分别存在硬盘中,但每次的数据访问都必须从同比特检查的那个硬盘中取出对应的同比特数据进行核对,由于过于频繁的使用,所以对硬盘的损耗可能会提高。(块交织技术,Block interleaving) 如图所示

RAID5

RAID5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID5至少需要三块硬盘,RAID5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。如图所示

RAID6

与RAID 5相比,RAID 6增加第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,任意两块磁盘同时失效时不会影响数据完整性。RAID 6需要分配给奇偶校验信息更大的磁盘空间和额外的校验计算,相对于RAID 5有更大的IO操作量和计算量,其“写性能”取决于具体的实现方案,因此RAID6通常不会通过软件方式来实现,而更可能通过硬件/固件方式实现。 
同一数组中最多容许两个磁盘损坏。更换新磁盘后,数据将会重新算出并写入新的磁盘中。依照设计理论,RAID 6必须具备四个以上的磁盘才能生效。可使用的容量为硬盘总数减去2的差,乘以最小容量,同理,数据保护区域容量则为最小容量乘以2。RAID 6在硬件磁盘阵列卡的功能中,也是最常见的磁盘阵列档次 。如图所示

RAID01以及RAID10

混合型RAID常见的有RAID01和RAID10,RAID01采用的分别是先组合成RAID0,然后用多个RAID0再次组合成RAID01;同理,RAID10是先组合成RAID1,然后用多个RAID1再次组合成RAID0。

RAID分类

通过不同的实现方式,RAID可以分为硬件RAID(简称硬RAID)和软件RAID(简称软RAID)。

硬RAID

简单来说就是全部通过用硬件来实现RAID功能的就是硬RAID,比如:各种RAID卡,还有主板集成能够做的RAID都是硬RAID。 所以硬 RAID 就是用专门的RAID控制器(RAID 卡)将硬盘和电脑连接起来,RAID控制器负责将所有的RAID成员磁盘配置成一个虚拟的RAID磁盘卷。 
对于操作系统而言,他只能识别到由RAID控制器配置后的虚拟磁盘,而无法识别到组成RAID的各个成员盘硬RAID全面具备了自己的RAID控制/处理与I/O处理芯片,甚至还有阵列缓冲(Array Buffer),对CPU的占用率以及整体性能中最有优势。

软RAID

通过用操作系统来完成RAID功能的就是软RAID,比如:在Linux操作系统下,用3块硬盘做RAID5。 也就是不使用RAID控制器(业界称其为RAID 协处理器―RAID Co-Processor )与I/O芯片,直接通过软件层实现的RAID,所有功能都是操作系统(OS)与CPU来完成,可想而知这是效率最低的一种RAID。 
与硬RAID不同的是,软RAID的各个成员盘对于操作系统来说是可见的,但操作系统并不把各个成员盘呈现给用户,而只是把通过软件层配置好的虚拟RAID卷呈现给用户,使用户可以像使用一个普通磁盘一样使用RAID卷。

RAID的实现

由于硬RAID的操作都是在服务器的启动过程中,在BIOS程序中进行配置的,配置完成后,在操作系统层面只显示RAID盘。因此,为了更好的显示RAID盘建立,采用软RAID的实现方式。

准备磁盘

采用两块磁盘,一个磁盘分区来创建软RAID

创建分区

创建一个名为sdc1的、大小为20G的分区,注意分区类型为fd。

fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-419430399, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): +20G  
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd     #更改分区类型
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdc: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0002b4f1

  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41945087    20971520   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

创建RAID

用两块大小不一样的磁盘/dev/sdb和/dev/sdd以及上面创建大小为20G的分区建立RAID5,并且用一个空闲盘当备用磁盘。当RAID中的一块磁盘故障时,空闲盘能及时的补上去。

mdadm -C /dev/md0 -l 5 -n 3 -x 1 -a yes /dev/sdb /dev/sdc1 /dev/sdd /dev/sde
mdadm: /dev/sdb appears to be part of a raid array:
      level=raid0 devices=0 ctime=Thu Jan  1 08:00:00 1970
mdadm: partition table exists on /dev/sdb but will be lost or
      meaningless after creating array
mdadm: /dev/sdc1 appears to contain an ext2fs file system
      size=31457280K  mtime=Mon Nov  7 22:58:25 2016
mdadm: /dev/sdd appears to be part of a raid array:
      level=raid0 devices=0 ctime=Thu Jan  1 08:00:00 1970
mdadm: partition table exists on /dev/sdd but will be lost or
      meaningless after creating array
mdadm: largest drive (/dev/sdd) exceeds size (20955136K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

mdadm -D /dev/md0
/dev/md0:
       Version : 1.2
 Creation Time : Thu Nov 10 13:26:12 2016
    Raid Level : raid5
    Array Size : 41910272 (39.97 GiB 42.92 GB)
 Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
  Raid Devices : 3
 Total Devices : 4
   Persistence : Superblock is persistent

   Update Time : Thu Nov 10 13:26:20 2016
         State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
 Spare Devices : 2

        Layout : left-symmetric
    Chunk Size : 512K

Rebuild Status : 10% complete

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
        Events : 2

   Number   Major   Minor   RaidDevice State
      0       8       16        0      active sync   /dev/sdb
      1       8       33        1      active sync   /dev/sdc1
      4       8       48        2      spare rebuilding   /dev/sdd

      3       8       64        -      spare   /dev/sde  #备用空闲盘

格式化并挂载该RAID,确认其可用

mkfs.ext4 /dev/md0           #####格式化
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477568 blocks
523878 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
   32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
   4096000, 7962624

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

mkdir /mnt/md             ####创建挂载点
mount /dev/md0 /mnt/md/    #####挂载
cd /mnt/md/                ####进入挂载目录
ll
total 16
drwx------ 2 root root 16384 Nov 10 13:31 lost+found
cp /etc/issue .          ####复制文件
cat issue                ####查看文件
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

验证空闲盘的自动替代功能

空闲盘在整个RAID中具有很重要的功能,当阵列中的一块磁盘出现故障的时候,共享盘能够自动顶替,并且同步数据,保证RAID磁盘的正常使用。

mdadm -D /dev/md0              ####正常状态下的磁盘情况
/dev/md0:
       Version : 1.2
 Creation Time : Thu Nov 10 13:26:12 2016
    Raid Level : raid5
    Array Size : 41910272 (39.97 GiB 42.92 GB)
 Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
  Raid Devices : 3
 Total Devices : 4
   Persistence : Superblock is persistent

   Update Time : Thu Nov 10 13:36:04 2016
         State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 512K

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
        Events : 18

   Number   Major   Minor   RaidDevice State    ###如下
      0       8       16        0      active sync   /dev/sdb
      1       8       33        1      active sync   /dev/sdc1
      4       8       48        2      active sync   /dev/sdd

      3       8       64        -      spare   /dev/sde

mdadm /dev/md0 -f /dev/sdd     ###标记/dev/sdd故障
mdadm: set /dev/sdd faulty in /dev/md0

mdadm -D /dev/md0            ###查看一块磁盘故障是的情况
/dev/md0:
       Version : 1.2
 Creation Time : Thu Nov 10 13:26:12 2016
    Raid Level : raid5
    Array Size : 41910272 (39.97 GiB 42.92 GB)
 Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
  Raid Devices : 3
 Total Devices : 4
   Persistence : Superblock is persistent

   Update Time : Thu Nov 10 13:41:34 2016
         State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
 Spare Devices : 1

        Layout : left-symmetric
    Chunk Size : 512K

Rebuild Status : 1% complete

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
        Events : 20

   Number   Major   Minor   RaidDevice State    ###情况如下
      0       8       16        0      active sync   /dev/sdb
      1       8       33        1      active sync   /dev/sdc1
      3       8       64        2      spare rebuilding   /dev/sde

      4       8       48        -      faulty   /dev/sdd

上面的实验显示,当一块磁盘发生故障时,空闲盘会自动顶替上去并且同步数据。完成后RAID所有磁盘状态如下:

mdadm -D /dev/md0 
/dev/md0:
       Version : 1.2
 Creation Time : Thu Nov 10 13:26:12 2016
    Raid Level : raid5
    Array Size : 41910272 (39.97 GiB 42.92 GB)
 Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
  Raid Devices : 3
 Total Devices : 4
   Persistence : Superblock is persistent

   Update Time : Thu Nov 10 13:43:21 2016
         State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
 Spare Devices : 0

        Layout : left-symmetric
    Chunk Size : 512K

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
        Events : 37

   Number   Major   Minor   RaidDevice State
      0       8       16        0      active sync   /dev/sdb
      1       8       33        1      active sync   /dev/sdc1
      3       8       64        2      active sync   /dev/sde

      4       8       48        -      faulty   /dev/sdd

此时显示的是/dev/sdd为故障状态,而/dev/sde已经顶替上了/dev/sdd的位置,而且整个/dev/md0正常。 
验证其文件是否正常

cat issue 
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

由此可见,设备正常,文件没有受到破坏。 
此时在标记一块磁盘故障,则会对整个设备造成降级运行甚至破坏。

mdadm /dev/md0 -f /dev/sdc1    ###标记/dev/sdc1故障
mdadm: set /dev/sdc1 faulty in /dev/md0
mdadm -D /dev/md0
/dev/md0:
       Version : 1.2
 Creation Time : Thu Nov 10 13:26:12 2016
    Raid Level : raid5
    Array Size : 41910272 (39.97 GiB 42.92 GB)
 Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
  Raid Devices : 3
 Total Devices : 4
   Persistence : Superblock is persistent

   Update Time : Thu Nov 10 13:55:55 2016
         State : clean, degraded      ###显示为降级运行
Active Devices : 2
Working Devices : 2
Failed Devices : 2
 Spare Devices : 0

        Layout : left-symmetric
    Chunk Size : 512K

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
        Events : 39

   Number   Major   Minor   RaidDevice State
      0       8       16        0      active sync   /dev/sdb
      2       0        0        2      removed
      3       8       64        2      active sync   /dev/sde

      1       8       33        -      faulty   /dev/sdc1
      4       8       48        -      faulty   /dev/sdd
cat issue     ###正常显示文件内容
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

以上说明,RAID5最少需要3块磁盘,当不足3块时,会降级运行。

移除设备

mdadm /dev/md0 -r /dev/sdc1        ###将/dev/sdc1从RAID中移除
mdadm: hot removed /dev/sdc1 from /dev/md0

删除RAID

mdadm /dev/md0 -r /dev/sdb                #### 移除设备/dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
umount /mnt/md/                           #### 移除挂载
mdadm --zero-superblock /dev/sdb /dev/sdc1 /dev/sdd /dev/sde   ###移除RAID信息

LVM

什么是LVM

LVM利用Linux内核的device-mapper来实现存储系统的虚拟化。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区,可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间. LVM是用来方便管理的,不会提供额外的安全保证。

LVM的组成

LVM的基本组成块(building blocks)如下: 
物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域. 
卷组Volume group (VG):将一组物理卷收集为一个管理单元。 
逻辑卷Logical volume (LV):虚拟分区,由物理区域组成。 
物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)。

优点 
1、比起正常的硬盘分区管理,LVM更富于弹性: 
2、使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。 
3、使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。 
4、可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。 
5、在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。 
6、可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。 
7、无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。 
8、允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。 
这些优点使得LVM对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍。 
缺点 
在系统设置时需要更复杂的额外步骤,并且不提供容错功能。

LVM的创建

创建LVM可以采用分区,也可以用磁盘。在采用分区创建的话,分区类型须指定为8e。

创建一个分区类型为8e的分区

fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
Select (default p): p        
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G    
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000005

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

创建PV

lsblk                ##查看当前磁盘情况
NAME   MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
md0      9:0    0   40G  0 raid5
sda      8:0    0  120G  0 disk  
├─sda1   8:1    0  500M  0 part  /boot
├─sda2   8:2    0   40G  0 part  /
├─sda3   8:3    0   20G  0 part  /usr
├─sda4   8:4    0  512B  0 part  
└─sda5   8:5    0    2G  0 part  [SWAP]
sdb      8:16   0   20G  0 disk  
└─sdb1   8:17   0   10G  0 part  
sdc      8:32   0  200G  0 disk  
sdd      8:48   0  120G  0 disk  
sde      8:64   0   20G  0 disk  
sr0     11:0    1 1024M  0 rom  
#创建pv
pvcreate /dev/sdd /dev/sdc /dev/sdb1
 Physical volume "/dev/sdd" successfully created
 Physical volume "/dev/sdc" successfully created
 Physical volume "/dev/sdb1" successfully created

创建VG

####创建名为myvg的vg,且PE为8M
vgcreate -s 8M myvg /dev/sdd /dev/sdc /dev/sdb1
 Volume group "myvg" successfully created

创建LV

##创建名为mylv,大小为20G的LV
lvcreate -L 20G -n mylv myvg
 Logical volume "mylv" created.

格式化LV,创建挂载点挂载,并且复制文件

mkfs.ext4 /dev/myvg/mylv         ###格式化LV
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
   32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
   4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  

mkdir /mnt/mylv      ####创建分区并挂载
mount /dev/myvg/mylv /mnt/mylv/

cd /mnt/mylv/
cp -r /etc/issue .
cp -r /etc/rc.d/ .
cp -r /etc/rc.d/init.d/functions .
cp -r /etc/fstab .

扩展LV为30G

 lvextend -r -L 30G /dev/myvg/mylv 
 Size of logical volume myvg/mylv changed from 20.00 GiB (2560 extents) to 30.00 GiB (3840 extents).
 Logical volume mylv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt/mylv; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long.

[root:mylv]#    df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/sda2               40G  804M   40G   2% /
devtmpfs               223M     0  223M   0% /dev
tmpfs                  237M     0  237M   0% /dev/shm
tmpfs                  237M  8.9M  229M   4% /run
tmpfs                  237M     0  237M   0% /sys/fs/cgroup
/dev/sda3               20G  4.4G   16G  22% /usr
/dev/sda1              497M  140M  358M  29% /boot
tmpfs                   48M     0   48M   0% /run/user/0
/dev/mapper/myvg-mylv   30G   45M   28G   1% /mnt/mylv
###检查文件时候损坏
cat issue
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

cat fstab

#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a /                       xfs     defaults        0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot                   xfs     defaults        0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr                    xfs     defaults        0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap

缩减LV的大小

缩减LV的大小分为5步:

a、卸载LV

 umount /mnt/mylv/

b、检测文件系统

 e2fsck -f /dev/myvg/mylv      # 须强制检测
e2fsck 1.42.9 (28-Dec-2013)
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/myvg/mylv: 14/1966080 files (0.0% non-contiguous), 167448/7864320 blocks

c、缩减文件系统大小

resize2fs /dev/myvg/mylv 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.

d、缩减LV大小

lvreduce -L 10G /dev/myvg/mylv 
 WARNING: Reducing active logical volume to 10.00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
 Size of logical volume myvg/mylv changed from 30.00 GiB (3840 extents) to 10.00 GiB (1280 extents).
 Logical volume mylv successfully resized.

e、重新挂载LV

mount /dev/myvg/mylv /mnt/mylv/

此时,查看该LV的大小

df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/sda2               40G  805M   40G   2% /
devtmpfs               223M     0  223M   0% /dev
tmpfs                  237M     0  237M   0% /dev/shm
tmpfs                  237M  8.9M  229M   4% /run
tmpfs                  237M     0  237M   0% /sys/fs/cgroup
/dev/sda3               20G  4.4G   16G  22% /usr
/dev/sda1              497M  140M  358M  29% /boot
tmpfs                   48M     0   48M   0% /run/user/0
/dev/mapper/myvg-mylv  9.8G   37M  9.2G   1% /mnt/mylv   #大小为9.8G

查看此时文件是否正常

 cat /mnt/mylv/issue 
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

cat /mnt/mylv/f
fstab      functions  
[root:~]#    cat /mnt/mylv/fstab

#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a /                       xfs     defaults        0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot                   xfs     defaults        0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr                    xfs     defaults        0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap                    swap    defaults        0 0

磁盘或者分区故障的处理

通过pvmove命令转移空间数据

    pvdisplay         ###查看pv占用情况
 --- Physical volume ---
 PV Name               /dev/sdd
 VG Name               myvg
 PV Size               120.00 GiB / not usable 8.00 MiB
 Allocatable           yes
 PE Size               8.00 MiB
 Total PE              15359
 Free PE               14079
 Allocated PE          1280
 PV UUID               o0R5Im-C8R4-hep8-18jL-qwtB-S69T-vRvEDo
    --- Physical volume ---
 PV Name               /dev/sdc
 VG Name               myvg
 PV Size               200.00 GiB / not usable 8.00 MiB
 Allocatable           yes
 PE Size               8.00 MiB
 Total PE              25599
 Free PE               25599
 Allocated PE          0
 PV UUID               FmF3cU-Xsn4-ha5f-TZmc-ioMj-kOmG-lppdcx
 --- Physical volume ---
 PV Name               /dev/sdb1
 VG Name               myvg
 PV Size               10.00 GiB / not usable 8.00 MiB
 Allocatable           yes
 PE Size               8.00 MiB
 Total PE              1279
 Free PE               1279
 Allocated PE          0
 PV UUID               wEZ2zm-jM1m-VPg7-N7PI-JMLw-q4XM-dycCsH
 ##将/dev/sdd上面的数据迁移到/dev/sdc上面
 pvmove /dev/sdd /dev/sdc
 /dev/sdd: Moved: 0.0%
 /dev/sdd: Moved: 99.7%
 /dev/sdd: Moved: 100.0%

通过vgreduce命令将即将坏的磁盘或者分区从卷组myvg里面移除除去。

vgreduce myvg /dev/sdd
 Removed "/dev/sdd" from volume group "myvg"

通过pvremove命令将即将坏的磁盘或者分区从系统中删除掉。

pvremove /dev/sdd
 Labels on physical volume "/dev/sdd" successfully wiped

手工拆除硬盘或者通过一些工具修复分区。

为LV创建快照

为mylv创建大小为1G,名字为mylv-snap的快照,并查看文件

##创建快照
lvcreate -L 1G -n mylvsnap -p r -s /dev/myvg/mylv
 Logical volume "mylvsnap" created.
##挂载快照
mkdir /mnt/mylvsnap
mount /dev/myvg/mylv /mnt/mylvsnap/
##查看文件
cd /mnt/mylvsnap/
[root:mylvsnap]#    ll
total 40
-rw-r--r-- 1 root root   595 Nov 10 15:42 fstab
-rw-r--r-- 1 root root 13948 Nov 10 15:42 functions
-rw-r--r-- 1 root root    79 Nov 10 15:42 issue
drwx------ 2 root root 16384 Nov 10 15:39 lost+found
cat fstab issue

#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a /                       xfs     defaults        0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot                   xfs     defaults        0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr                    xfs     defaults        0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap                    swap    defaults        0 0
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com
##快照创建成功

删除LV

在确保数据备份完毕,LV没有存在的必要时,可以删除LV。删除LV的步骤和创建的步骤刚好相反。

umount /dev/myvg/mylv     ##卸载LV
lvremove /dev/myvg/mylv   ##删除LV
Do you really want to remove active logical volume mylv? [y/n]: y
 Logical volume "mylv" successfully removed
vgremove myvg    ##删除VG        
 Volume group "myvg" successfully removed
pvs
 PV         VG   Fmt  Attr PSize   PFree  
 /dev/sdb1       lvm2 ---   10.00g  10.00g
 /dev/sdc        lvm2 ---  200.00g 200.00g
pvremove /dev/sdc /dev/sdb1      ##删除PV
 Labels on physical volume "/dev/sdc" successfully wiped
 Labels on physical volume "/dev/sdb1" successfully wiped
##上传完毕

原创文章,作者:王更生,如若转载,请注明出处:http://www.178linux.com/60587

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code