配额、RAID、软RAID、LVM、btrfs文件系统

磁盘配额允许控制用户或者组织对磁盘的使用,它能防止个人或者组织使用文件系统中超过自己使用的部分,或者造成系统完全拥堵。配额必须由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
##上传完毕




btrfs文件系统:技术预览版(centos7)

描述:

Btrfs(B-tree,Butter FS,Better fs),GPL授权,Orale,2007
写实复制特性(Cow)
    cp --reflink (只能在btrfs文件系统中使用)
想取代ext系统系统,
支持非常大文件,文件检查,快照,增量快照,快照单个文件,支持raid功能 lvm功能.
已经有企业在生产环境中使用btrfs

核心特性:

  • 1.多物理卷支持:
    支持将多个底层物理设备组织成同一个文件系统,类似物理卷,,btrfs可由多个底层物理卷组成,支持RAID,以联机实现物理卷的"添加,移除,修改"

  • 2写时复制更新机制(CoW):复制,更新及替换指针,而非"就地更新"

不修改文件时,复制的文件无文件内容,指针仍指向原文件的数据
修改文件时,不立即修改源文件,会对目标文件进行备份,对备份文件进行修改,把文件名指向,由源文件改为备份文件,源数据保留,方便数据恢复.
  • 3.数据及元数据校验码机制:
    存储每个文件时,把文件的元数据的校验码和数据的校验码,通过文件的属性拓展保存下来.访问文件时,通过扫描校验码,可快速判断文件是否受损.一旦受损,自动尝试修复.极大保证数据的可靠性

  • 4.支持子卷(sub_volume):
    在某卷上创建诸多子卷,每个子卷可以实现单独使用和挂载

  • 5.快照:
    基于写时复制机制,比lvm的快照,增加了差异(增量)快照,可以对快照的进行快照.完成对快照后的文件改变进行再次快照.

  • 6透明压缩机制:
    在这个分区上存储文件,,想节约空间,可以把任何数据流发往btrfs文件系统上,自动通过某些占据cpu的时钟周期完成数据压缩存放,用户不知道.读取时自动解压缩.但消耗cpu的时钟周期.

使用:

1.创建btrfs文件系统

mkfs.btrfs命令:
    mkfs.btrfs [OPTINOS] 
    -L 'LABEL':指明卷标
    -d <type> :指明数据存储类型
        raid0,raid0,raid5,raid6,raid10,single
    -m <profilr>:指明元数据存储机制(底层物理存储设备空间够用)
        raid0,raid0,raid5,raid6,raid10,single(单个文件) or dup(冗余)
    -O <feature>:在格式化,指明其他特性
        -O list-all:列出支持的所有feature:

创建意义:基于分区,btrfs文件系统既然支持raid0,raid0,raid5,raid6,raid10 ,把btrfs创建在不同磁盘不同分区有意义吗?
不打算使用raid0,raid0,raid5,raid6,raid10具有冗余能力的磁盘io能力外,可以简单使用多个磁盘组合起来成为一个大分区使用,那么在不同磁盘不同分区创建并无意义.

btrfs filesystem命令:
show:
sync:
df:查看
defragmenting:
resize:
label:指明或显示卷标

管理物理卷(btrfs处于使用挂载状态)
1.添加新的物理卷
dtrfs device
dtrfs device add /dev/sd# /mntdate
2.把原有的数据均衡到新的物理卷
btrfs-balance:start(开始),cancel(暂停),resume(继续),status(状态)
btrfs balance start /mydate

3.移除物理卷
btrfs文件系统移除物理卷,会在操作前,自动移走要移除物理卷里的数据,可直接执行移除命令.

btrfs divice delete
btrfs divice delete /devsdb /mydate

需要改数据的raid级别
btrfs balance start -mconvert=raid5 /mntdate
创建子卷
btrfs subvolume create /挂载点/子卷名

实战:
1.创建

[root@w7 ~]# mkfs.btrfs -L btrfs /dev/sde /dev/sdf (磁盘不分区,直接格式化)
[root@w7 ~]# btrfs filesystem show  查看btrfs
Label: 'btrfs'  uuid: c1e91916-3ab1-40a5-a1b4-b41c11abfbfd
    Total devices 2 FS bytes used 112.00KiB
    devid    1 size 20.00GiB used 2.03GiB path /dev/sde
    devid    2 size 20.00GiB used 2.01GiB path /dev/sdf
btrfs-progs v3.19.1
[root@w7 ~]# blkid /dev/sde   两个磁盘UUID一样
/dev/sde: LABEL="btrfs" UUID="c1e91916-3ab1-40a5-a1b4-b41c11abfbfd" UUID_SUB="a7cd116c-fa7d-44f8-9763-892f2c9549d3" TYPE="btrfs" 
[root@w7 ~]# blkid /dev/sdf   两个磁盘UUID一样
/dev/sdf: LABEL="btrfs" UUID="c1e91916-3ab1-40a5-a1b4-b41c11abfbfd" UUID_SUB="53bcfb31-fe56-4cdb-a987-ac9a9d7b41fd" TYPE="btrfs" 
[root@w7 ~]# mkdir /mntdate
[root@w7 ~]# mount -t btrfs /dev/sde /mntdate/   使用两个磁盘中的任何一个

2.缩减

mount /dev/sde /mntdate/                缩减必须在挂载的情况下
btrfs filesystem show /mntdate             查看btrfs的磁盘情况
btrfs filesystem resize -10G /mntdate    减10G
btrfs filesystem show /mntdate            查看btrfs的磁盘情况,并没有更改        
btrfs filesystem df /mntdate            查看btrfs的各磁盘情况,并没有更改
df -h                                    看当前系统下的挂载磁盘情况,查看btrfs的整体磁盘大小 变30G

3.扩展(必须在物理磁盘的空间范围内,如想继续扩大,需添加新的物理卷)

[root@w7 ~]#mount /dev/sde /mntdate/ 操作必须在挂载的情况下
[root@w7 ~]#btrfs filesystem show /mntdate 查看btrfs的磁盘情况
[root@w7 ~]# btrfs filesystem resize +5G /mntdate
Resize '/mntdate' of '+5G'
[root@w7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 59G 1.8G 57G 3% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 483M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 111M 87M 57% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sde 35G 18M 28G 1% /mntdate

[root@w7 ~]# btrfs filesystem resize max /mntdate 直接调整为最大
Resize '/mntdate' of 'max'
[root@w7 ~]# df -h 查看文件系统的空间大小为40
Filesystem Size Used Avail Use% Mounted on
/dev/sde 40G 18M 38G 1% /mntdate

4.添加新的物理卷
dtrfs device
dtrfs device add /dev/sd# /mntdate

[root@w7 ~]# btrfs device add /dev/sdb /mntdate
/dev/sdb appears to contain a partition table (dos).
Use the -f option to force overwrite.
[root@w7 ~]# btrfs device add -f /dev/sdb /mntdate
[root@w7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 59G 1.8G 57G 3% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 483M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 111M 87M 57% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sde 120G 18M 56G 1% /mntdate

2.原有数据均衡到新的物理卷
[root@w7 ~]# btrfs balance start /mntdate
Done, had to relocate 5 out of 5 chunks
[root@w7 ~]# btrfs filesystem show
Label: 'btrfs' uuid: c1e91916-3ab1-40a5-a1b4-b41c11abfbfd
Total devices 3 FS bytes used 1.13MiB
devid 1 size 20.00GiB used 1.03GiB path /dev/sde
devid 2 size 20.00GiB used 2.00GiB path /dev/sdf
devid 3 size 80.00GiB used 2.03GiB path /dev/sdb

btrfs-progs v3.19.1

3.移除物理卷
[root@w7 ~]# btrfs filesystem show
Label: 'btrfs' uuid: c1e91916-3ab1-40a5-a1b4-b41c11abfbfd
Total devices 3 FS bytes used 1.13MiB
devid 1 size 20.00GiB used 1.03GiB path /dev/sde
devid 2 size 20.00GiB used 2.00GiB path /dev/sdf
devid 3 size 80.00GiB used 2.03GiB path /dev/sdb
btrfs-progs v3.19.1
[root@w7 ~]# btrfs device delete /dev/sdb /mntdate 移除物理卷
[root@w7 ~]# btrfs filesystem show
Label: 'btrfs' uuid: c1e91916-3ab1-40a5-a1b4-b41c11abfbfd
Total devices 2 FS bytes used 1.45MiB
devid 1 size 20.00GiB used 1.28GiB path /dev/sde
devid 2 size 20.00GiB used 1.28GiB path /dev/sdf
btrfs-progs v3.19.1

更详细内容可参考:https://www.ibm.com/developerworks/cn/linux/l-cn-btrfs/

 

练习题:

Q1:创建一个10G分区,并格式为ext4文件系统;

(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;

[root@promote ~]# fdisk /dev/sdb            #将/dev/sdb进行分区操作;
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb294ca06.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n        #创建新分区
Command action
   e   extended
   p   primary partition (1-4)
P                                    #选择建立主分区
Partition number (1-4): 1                #为主分区编码1号
First cylinder (1-2610, default 1):             #使用默认起始柱面
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G        #大小为10G

Command (m for help): w                            #保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@promote ~]# mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=MYDATA
操作系统:Linux
块大小=2048 (log=1)
分块大小=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
657408 inodes, 5245206 blocks
104904 blocks (2.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=543162368
321 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
    16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
    2048000, 3981312

正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@promote ~]# tune2fs -o acl /dev/sdb1        #默认挂载属性包含acl
tune2fs 1.41.12 (17-May-2010)

(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;

[root@promote ~]# mount -o noexec,noatime /dev/sdb1 /data/mydata

Q2:创建一个大小为1G的swap分区,并创建好文件系统,并启用之;

[root@promote ~]# fdisk  /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n        #创建新分区
Command action
   e   extended
   p   primary partition (1-4)
P                            #选择创建主分区
Partition number (1-4): 2        #创建的主分区编号为2
First cylinder (1307-2610, default 1307): 
Using default value 1307
Last cylinder, +cylinders or +size{K,M,G} (1307-2610, default 2610): +1G        #大小1G

Command (m for help): t            #更改分区类型,原本的为83
Partition number (1-4): 2            #对第二块主分区磁盘进行修改
Hex code (type L to list codes): 82        #分区类型swap分区代码:82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): p            #可以看到/dev/sdb2已经修改为swap分区

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb294ca06

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  83  Linux
/dev/sdb2            1307        1438     1060290   82  Linux swap / Solaris
Command (m for help): w            #保存
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@promote ~]# partx -a /dev/sdb        #多输入两遍,重新加载磁盘分区;
BLKPG: Device or resource busy
error adding partition 1
[root@promote ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
[root@promote ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 1060284 KiB
no label, UUID=ec026d7c-f173-4746-94db-1b93ffdb44ee
[root@promote ~]# swapon /dev/sdb2

Q3:写一个脚本

  • (1)、获取并列出当前系统上的所有磁盘设备;

  • (2)、显示每个磁盘设备上每个分区相关的空间使用信息;

    #!/bin/bash
    #
    fdisk -l /dev/s[dh][a-z] | grep -o "Disk /dev/s[dh][a-z]" | cut -d" " -f2
    echo -e "\n"
    df -h

Q4:总结RAID的各个级别及其组合方式和性能的不同;

见另一篇博客;

Q5:创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;

#首先创建3个10G分区,/dev/sdb1,/dev/sdc1,/dev/sdd1
[root@CentOS7_2 ~]# mdadm --create /dev/md0 --auto=yes --level=1 --chunk=128K --raid-devices=2 --spare-devices=1 /dev/sd{b1,c1,d1}

Q6:创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;

#首先创建3个2G分区,/dev/sdb2,/dev/sdc2,/dev/sdd2
[root@CentOS7_2 ~]# mdadm --create /dev/md1 --auto=yes --level=5 --chunk=256K --raid-devices=2 --spare-devices=1 /dev/sd{b2,c2,d2}
[root@CentOS7_2 ~]# mke2fs -t ext4 /dev/md1
[root@CentOS7_2 ~]# vim /etc/fstab
# /dev/md1        /backup        ext4        noatime,acl    0  0

Q7:写一个脚本

  • (1) 接受一个以上文件路径作为参数;

  • (2) 显示每个文件拥有的行数;

  • (3) 总结说明本次共为几个文件统计了其行数;

#方法一:
#!/bin/bash
#
[ $# -lt 1 ] && echo "At least one path!" && exit 1
for i in $*;do
    echo "$i has $(wc -l $i | cut -d" " -f1) lines."
done
echo
echo $#

#方法二:
#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one path!"
    exit 1
fi
for i in $*;do
    echo "$i has $(cat $i | wc -l) lines."
done
echo
echo $#

Q8:写一个脚本

  • (1) 传递两个以上字符串当作用户名;

  • (2) 创建这些用户;且密码同用户名;

  • (3) 总结说明共创建了几个用户;

#方法一:
#!/bin/bash
#
[ $# -lt 2 ] && echo "At least two strings!" && exit 1

declare -i sum=0
for i in $*;do
    id $i &> /dev/null && echo "user $i has existed!" || (useradd $i && echo "$i" | passwd --stdin $i)
    sum+=1 
done
echo "You added $sum users." 

#方法二:
#!/bin/bash
#
if [ $# -lt 2 ];then
    echo "At least two strings!"
    exit 1
fi

declare -i sum=0
for i in $*;do
        if id $i &> /dev/null;then
                echo "user $i has existed!"
        continue
    else
        useradd $i
        sum+=1
        echo "$i" | passwd --stdin $i
        fi 
done
echo "You added $sum users."

Q9:写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;

#!/bin/bash
#

declare -i sum=0
for i in {1..20};do
    id visitor$i &> /dev/null && echo "user visitor$i has existed!" || useradd visitor$i && echo "visitor$i has been added successfully!"
    id_num=$(grep "visitor$i" /etc/passwd | cut -d":" -f3)
    let sum+=$id_num
done
echo "The sum of the twenty users'ID is $sum."
【注】批量删除这20个用户,在shell命令行窗口中输入:
[root@promote ~]# for i in {1..20};do userdel -r visitor$i;done

Q10:写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;

#!/bin/bash
#
declare -i sum=0
for i in {/etc/rc.d/rc.sysinit,/etc/rc.d/init.d/functions,/etc/fstab};do
    echo "File:$i has $(grep "^#.*" $i | wc -l) lines to be started with '#'."
    add=$(grep "^[[:space:]]*$" $i | wc -l)
    let sum+=$add
done
echo "三个文件总的空白行数:$sum"

Q11:写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;

#!/bin/bash
#
grep "bash$" /etc/passwd | cut -d":" -f1,3
declare -i id_sum=0
for i in $(grep "bash$" /etc/passwd | awk -F: '{print $3}');do
    id_sum+=i
done
echo "默认shell为bash用户的UID之和为:$id_sum"

Q12:写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;

#!/bin/bash
#
cat /etc/group | cut -d: -f1,4 | grep -v ":$" | cut -d: -f1
num=$(cat /etc/group | cut -d: -f1,4 | grep -v ":$" | cut -d: -f1 | wc -l)
echo "拥有附加组用户有$num个"
#特别注意:grep -v的用法;

Q13:创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;

#在磁盘上进行分区,分别为/dev/sb3和/dev/sc3
#将/dev/sb3和/dev/sc3创建成PV
[root@CentOS7_2 ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created
[root@CentOS7_2 ~]# pvcreate /dev/sdc3
  Physical volume "/dev/sdc3" successfully created
[root@CentOS7_2 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  119.51g 64.00m
  /dev/sdb3         lvm2 ---    5.00g  5.00g
  /dev/sdc3         lvm2 ---   15.00g 15.00g

#用/dev/sb3和/dev/sc3创建的两个PV,生成一个VG,PE大小为8M
[root@CentOS7_2 ~]# vgcreate -s 8M myvg /dev/sd{b3,c3}
  Volume group "myvg" successfully created
[root@CentOS7_2 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  centos   1   3   0 wz--n- 119.51g 64.00m
  myvg     2   0   0 wz--n-  19.98g 19.98g

#myvg创建逻辑卷LV:大小5G,名为mylv1
[root@CentOS7_2 ~]# lvcreate -L 5G -n mylv1 myvg
  Logical volume "mylv1" created.

#对mylv1格式化
[root@CentOS7_2 ~]# mkfs.ext4 /dev/myvg/mylv1 

#对mylv1设置开机自动挂载
[root@CentOS7_2 ~]# vim /etc/fstab
添加:
/dev/myvg/mylv1        /users        ext4        defaults,acl        0  0
[root@CentOS7_2 ~]# mount -a
[root@CentOS7_2 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.7G   49G    4% /
devtmpfs                 483M     0  483M    0% /dev
tmpfs                    493M     0  493M    0% /dev/shm
tmpfs                    493M  6.8M  487M    2% /run
tmpfs                    493M     0  493M    0% /sys/fs/cgroup
/dev/mapper/centos-home   68G   33M   68G    1% /home
/dev/sda1                497M  125M  373M   26% /boot
tmpfs                     99M     0   99M    0% /run/user/0
/dev/mapper/myvg-mylv1   4.8G   20M  4.6G    1% /users

Q14:新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;

[root@promote /]# mkdir users
[root@promote /]# useradd -d /users/magedu magedu
[root@promote users]# su - magedu
[magedu@promote ~]$ pwd
/users/magedu
[magedu@promote ~]$ cp /etc/fstab /etc/networks ./
[magedu@promote ~]$ ls
fstab  networks

Q15:扩展mylv1至9G,确保扩展完成后原有数据完全可用;

[root@CentOS7_2 ~]# df -h /dev/myvg/mylv1 
文件系统                容量  已用  可用 已用% 挂载点
/dev/mapper/myvg-mylv1  4.8G   20M  4.6G    1% /users

[root@CentOS7_2 ~]# lvextend -L 9G /dev/myvg/mylv1 
  Size of logical volume myvg/mylv1 changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents).
  Logical volume mylv1 successfully resized.
[root@CentOS7_2 ~]# resize2fs /dev/myvg/mylv1 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.

[root@CentOS7_2 ~]# df -h /dev/myvg/mylv1 
文件系统                容量  已用  可用 已用% 挂载点
/dev/mapper/myvg-mylv1  8.8G   23M  8.3G    1% /users

Q16:缩减mylv1至7G,确保缩减完成后原有数据完全可用;

[root@CentOS7_2 ~]# umount /dev/myvg/mylv1
[root@CentOS7_2 ~]# e2fsck -f /dev/myvg/mylv1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/myvg/mylv1: 11/589824 files (0.0% non-contiguous), 75551/2359296 blocks
[root@CentOS7_2 ~]# resize2fs -f /dev/myvg/mylv1 7G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv1 to 1835008 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long.
[root@CentOS7_2 ~]# lvreduce -L 7G /dev/myvg/mylv1 
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv1? [y/n]: y
  Size of logical volume myvg/mylv1 changed from 9.00 GiB (1152 extents) to 7.00 GiB (896 extents).
  Logical volume mylv1 successfully resized.

[root@CentOS7_2 ~]# mount -a
[root@CentOS7_2 ~]# df -h /dev/myvg/mylv1 
文件系统                容量  已用  可用 已用% 挂载点
/dev/mapper/myvg-mylv1  6.8G   23M  6.5G    1% /users

Q17:对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;

[root@CentOS7_2 ~]# lvcreate -L 20M -s -p r -n mylv1snap1 /dev/myvg/mylv1 
  Rounding up size to full physical extent 24.00 MiB
  Logical volume "mylv1snap1" created.
posted @ 2017-06-04 14:04  chenghuan  阅读(1109)  评论(0)    收藏  举报