磁盘管理(1)

硬盘介绍

硬盘的分区方式

MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)

MBR(Master Boot Record)的缩写,由三部分组成,即:

  1. Bootloader(主引导程序)=446字节 硬盘第一个扇区=512字节
    • 引导操作系统的主程序
  2. DPT分区表(Disk Partition Table)=64字节
    • 分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息
    • 每个分区需要占用16个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
    • 分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用
    • 逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
  3. 硬盘有效标志(校验位)=2个字节

GPT >2TB gdisk(parted) 128个主分区

注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失

扩展阅读:http://www.eassos.cn/jiao-cheng/ying-pan/mbr-vs-gpt.php

基本分区管理

磁盘划分思路

  • 进入分区表 新建分区 fdisk /dev/sdb
  • 更新分区表<刷新分区表>
  • 格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
  • 挂载使用——>mount【开机自动挂载|autofs自动挂载】

==fdisk分区

使用fdisk分区

# lsblk
# df -h  查看正在挂载的设备情况
# fdisk -l		查看当前系统的所有设备分区情况
# fdisk  /dev/sdb

硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)
Disk /dev/sda: 26.8 GB, 26843545600 bytes   磁盘空间
 255 heads, 63 sectors/track, 3263 cylinders
 255磁头    63个扇区 每 磁道   3263个圆柱体
Units = cylinders of 16065 * 512 = 8225280 bytes       单元
Sector size (logical/physical): 512 bytes / 512 bytes
扇区大小(逻辑/物理)  都是512字节。
I/O size (minimum/optimal): 512 bytes / 512 bytes
I/O 大小(最小/最大) 都是512字节。
Disk identifier: 0x00030124   设备识别码

 启动设备加*           起始         结束      块           id     系统
 Device Boot      Start         End      Blocks     Id  System
/dev/sda1   *           1        2497    20051968   83  Linux
/dev/sda2            2497        2611      916481    5  Extended	扩展分区
/dev/sda3            2612        3263     5237190   83  Linux
/dev/sda5            2497        2611      916480   82  Linux swap / Solaris

Command(m for help): m      							输出帮助信息
Commandaction
   a  toggle a bootable flag  						设置启动分区
   b  edit bsd disklabel      						编辑分区标签
   c  toggle the dos compatibility flag
   d  delete a partition        						删除一个分区
   l  list known partition types  					列出分区类型
   m  print this menu         						帮助
   n  add a new partition     						建立一个新的分区
   o  create a new empty DOS partition table  	创建一个新的空白DOS分区表
   p  print the partition table               	打印分区表
   q  quit without saving changes           		退出不保存设置
   s   createa new empty Sun disklabel				创建一个新的空的SUN标示
   t   changea partition's system id          	改变分区的类型
   u   changedisplay/entry units            		改变显示的单位
   v   verifythe partition table              	检查验证分区表
   w  write table to disk and exit           	保存分区表

总结:

  1. 最多只能分4个主分区,主分区编号1-4
  2. 逻辑分区大小总和不能超过扩展分区大小,逻辑分区分区编号从5开始
  3. 如果删除扩展分区,下面的逻辑卷分区也被删除
  4. 扩展分区的分区编号(1-4)

案例1:

添加一块硬盘,需要将其分两个分区,分别格式化成ext4和vfat格式文件系统使用,最终需要使用2G空间。

思路:
1. 增加一块硬盘
2. 使用fdisk命令进行分区
3. 格式化指定分区
4. 创建一个空的目录作为挂载点
5. 挂载使用

步骤:
1. 增加硬盘
增加完硬盘记得重启系统
# lsblk	查看硬盘是否添加成功
[root@linux ~]# fdisk -l /dev/sdb 

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 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

2. 使用fdisk命令分区
[root@web ~]# fdisk /dev/sdb
Command (m for help): p			打印分区表信息

[root@linux ~]# 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.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x7d48c333.

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): 1
First sector (2048-62914559, default 2048): 
Using default value 2048
Last sector, +sectors or +size{
    
    K,M,G} (2048-62914559, default 62914559): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 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: 0x7d48c333

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

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

Command (m for help): p

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 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: 0x7d48c333

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux

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

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

3. 再次查看分区情况
[root@linux ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk 
├─sda1   8:1    0   78G  0 part /
└─sda2   8:2    0    2G  0 part [SWAP]
sdb      8:16   0   30G  0 disk 
├─sdb1   8:17   0    1G  0 part 
└─sdb2   8:18   0    1G  0 part 
sr0     11:0    1  4.4G  0 rom  

4. 格式化分区
[root@linux ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux

[root@linux ~]# yum -y install dosfstools  需要mkfs.vfat命令,安装软件

[root@linux ~]#  mkfs.vfat /dev/sdb2
mkfs.fat 3.0.20 (12 Jun 2013)

5. 创建新的挂载点
[root@linux ~]# mkdir /u01
[root@linux ~]# mkdir /u02

6. 挂载使用
[root@linux ~]# mount /dev/sdb1 /u01
[root@linux ~]# mount /dev/sdb2 /u02

总结:

  1. 扩展分区的大小决定了所有逻辑分区的大小
  1. 删除扩展分区后下面的逻辑分区都被删除
  2. 分完区后需要手动刷新分区表,如果刷新不成功需要重启操作系统
  1. 创建分区的时候尽可能注意分区序号的连续性

挂载分区设备

手动挂载:

mount   [options]     需要挂载的设备     挂载点
特点:系统重启后需要重新挂载;手动卸载后需要手动挂载

-o:挂载选项	ro,sync,rw,remount
-t:文件系统类型
mount -t nfs=mount.nfs
mount -t cifs=mount.cifs

10.1.1.2  /share   [smb]

mount.cifs -o user=user01,password=123 //10.1.1.2/smb /u01
mount.nfs 10.1.1.2:/share /u02

[root@MissHou ~]# mount -o remount,ro /u02		//可以是挂载点也可以是设备
remount:重新挂载一个正在挂载的设备

# mount -o remount,ro /dev/sdb1		
# mount -o remount,ro /u01
注意:后面可以根挂载点也可以跟设备本身


挂载设备:真实设备、设备UUID,设备的卷标
/dev/sdb
/dev/sdb1		
[root@linux ~]# blkid /dev/sdb2          //查看设备的UUID和文件系统类型
/dev/sdb2: UUID="6483-0B59" TYPE="vfat"" 
[root@linux ~]# blkid /dev/sdb1 
/dev/sdb1: UUID="3256e440-f8ff-41e7-ba2c-3ad161ba4d1a" TYPE="ext4"
[root@linux ~]# e2label /dev/sdb1 DISK1

说明:e2label只能够对ext2~ext4的文件系统设置卷标

[root@linux ~]# e2label /dev/sdb2 disk2
e2label: Bad magic number in super-block while trying to open /dev/sdb2
Couldn't find valid filesystem superblock.
[root@linux ~]#  blkid /dev/sdb2
/dev/sdb2: UUID="6483-0B59" TYPE="vfat" 


卸载设备:umount
[root@linux ~]#  umount /u01
[root@linux ~]# umount /dev/sdb2

开机自动挂载:

操作系统启动流程:

  1. 硬件初始化 硬盘、内存、。。。HD
  2. 系统初始化 /sbin/init—>xxxxxx/etc/fstab
UUID="6483-0B59" /u01   auto    defaults    0 0       
UUID="3256e440-f8ff-41e7-ba2c-3ad161ba4d1a" /u02    ext4    ro    0 0
# mount -a
特点:系统重启后自动挂载;手动卸载后重启会自动挂载或者使用mount -a自动挂载

/etc/fstab文件:
格式:
要挂载的资源路径	挂载点	文件系统类型	挂载选项	dump备份支持  文件系统检测
UUID=289370eb-9459-42a8-8cee-7006507f1477   /      ext4    defaults        1 1
1段:挂载的设备(磁盘设备的文件名或设备的卷标或者是设备的UUID)
2段:挂载点(建议用一个空目录),建议不要将多个设备挂载到同一个挂载点上
3段:文件系统类型(ext3、ext4、vfat、ntfs(安装软件包)、swap等等)
4段:挂载选项
async/sync  异步/同步:
auto/noauto     自动/非自动:
rw/ro   读写/只读:
exec/noexec     可被执行/不可被执行:
remount     重新挂在一个已经挂载的文件系统,常用于修改挂载参数
user/nouser     允许/不允许其他普通用户挂载:
suid/nosuid     具有/不具有suid权限:该文件系统是否允许SUID的存在。
usrquota    这个是在启动文件系统的时候,让其支持磁盘配额,这个是针对用户的。
grpquota    支持用户组的磁盘配额。
....
defaults 同时具有rw, dev, exec, acl, async,nouser等参数。

mount -a  重新读取/etc/fstab文件内容

man mount 可以找到详细信息

5段:是否支持dump备份。//dump是一个用来备份的命令,0代表不要做dump备份,1代表要每天进行dump的动作,2也代表其他不定日期的dump备份。通常这个数值不是0就是1。数字越小优先级越高。

6段:是否用 fsck 检验扇区。//开机的过程中,系统默认会用fsck检验文件系统是否完整。0是不要检验,1表示最先检验(一般只有根目录会设定为1),2也是要检验,只是1是最先,2是其次才进行检验。

# fsck -f /dev/sdb2		强制检验/dev/sdb2上文件系统

说明:
要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等

建议:
/etc/rc.local  操作系统启动后读取的最后一个文件

vim /etc/rc.local
...
/bin/mount -o noexec,ro /dev/sdb1 /u01

逻辑卷管理

逻辑卷:

逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在**物理存储设备之上的一个抽象层,优点在于灵活管理。
特点:
1、
动态在线扩容(重点)**
2、离线裁剪
3、数据条带化
4、数据镜像

逻辑卷基本概念

  • 物理卷(Physical Volume,PV)

物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。

  • 卷组(Volume Group, VG)

卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。
一个LVM系统中可以只有一个卷组,也可以包含多个卷组。

  • 逻辑卷(Logical Volume, LV)

逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩

  • 物理区域 PE(physical extent)

每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
4MB=4096kb=4096kb/4kb=1024个block

说明:

  1. 硬盘读取数据最小单位1个扇区512字节
  2. 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
  3. lvm寻址最小单位1个PE=4MB
  • 逻辑区域 LE(logical extent)

逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

真实的物理设备——>逻辑上(命令创建)——>物理卷(pv)——>卷组(vg)——>逻辑卷(lv)——>逻辑卷格式化——>挂载使用

逻辑卷LVM应用

逻辑卷创建

创建一个2.5G大小的==逻辑卷

思路:
1. 物理的设备
2. 将物理设备做成物理卷
3. 创建卷组并将物理卷加入其中
4. 创建逻辑卷
5. 格式化逻辑卷
6. 挂载使用

步骤:
1. 物理设备
[root@linux u01]# fdisk -l /dev/sdb

[root@linux u01]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has b
een opened read-only.[root@linux u01]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk 
├─sda1   8:1    0   78G  0 part /
└─sda2   8:2    0    2G  0 part [SWAP]
sdb      8:16   0   30G  0 disk 
├─sdb1   8:17   0    1G  0 part /u02
├─sdb2   8:18   0    1G  0 part /u01
├─sdb3   8:19   0    5G  0 part 
├─sdb4   8:20   0    1K  0 part 
├─sdb5   8:21   0    2G  0 part 
├─sdb6   8:22   0    2G  0 part 
└─sdb7   8:23   0 1021M  0 part 
sr0     11:0    1  4.4G  0 rom  


更新分区表,并查看系统是否接收新的分区表
[root@linux u01]# partprobe

2. 创建物理卷
[root@linux u01]#  pvcreate /dev/sdb3 /dev/sdb5
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb5" successfully created.
查看物理卷:
[root@linux u01]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb3     lvm2 ---  5.00g 5.00g
  /dev/sdb5     lvm2 ---  2.00g 2.00g
  
[root@linux u01]#  pvdisplay /dev/sdb3 /dev/sdb5      详细查看
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               vg01
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1279
  Free PE               1279
  Allocated PE          0
  PV UUID               lTvCmO-8732-UP3N-lKFb-FTNY-PsCD-HAiMyd
   
  --- Physical volume ---
  PV Name               /dev/sdb5
  VG Name               vg01
  PV Size               2.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              511
  Free PE               511
  Allocated PE          0
  PV UUID               ErlvER-8euJ-Oc6Z-4gR0-PDVm-UyIY-86IGMw

3. 创建卷组并将物理卷加入其中
[root@linux u01]# vgcreate vg01 /dev/sdb3 /dev/sdb5
  Volume group "vg01" successfully created
查看卷组信息:
[root@linux u01]# vgs vg01         简单查看
  VG   #PV #LV #SN Attr   VSize VFree     
  vg01   2   0   0 wz--n- 6.99g 6.99g

[root@linux u01]# vgdisplay vg01        详细查看
 
4. 创建逻辑卷
[root@linux u01]# lvcreate -n lv01 -L 2.5G vg01
  Logical volume "lv01" created.
  
在操作系统层面映射两个地方:
[root@linux u01]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Feb  8 02:21 /dev/mapper/vg01-lv01 -> ../dm-0
[root@linux u01]# ll /dev/vg01/lv01 
lrwxrwxrwx 1 root root 7 Feb  8 02:21 /dev/vg01/lv01 -> ../dm-0

查看逻辑卷的信息:
[root@linux u01]# lvdisplay /dev/vg01/lv01 
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                75Zjdt-PbTm-ncMv-mKTg-4Pan-fksg-y2A0H4
  LV Write Access        read/write
  LV Creation host, time linux, 2023-02-08 02:21:18 -0500
  LV Status              available
  # open                 0
  LV Size                2.50 GiB
  Current LE             640
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

-n:指定逻辑卷的名字
-L:指定逻辑卷的大小
-l:指定逻辑卷的大小
举例:
-l 100			100个PE,每个PE大小默认4M,故逻辑卷大小为400M
-l 50%free		卷组剩余空间的50%
[root@server ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree  
  vg01   1   1   0 wz--n- 2.00g 516.00m

创建大小为200M的逻辑卷lv02;每个PE为4M,-l50指定50个PE,大小为200M

[root@linux u01]# lvcreate -n lv02 -l50 vg01
  Logical volume "lv02" created.
[root@linux u01]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree 
  vg01   2   2   0 wz--n- 6.99g <4.30g
[root@linux u01]# lvs /dev/vg01/lv02
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv02 vg01 -wi-a----- 200.00m           

创建大小为剩余卷组vg01空间的50%的逻辑卷lv03

[root@linux u01]# lvcreate -n lv03 -l50%free vg01
  Logical volume "lv03" created.
[root@linux u01]# lvs /dev/vg01/lv03 
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv03 vg01 -wi-a----- <2.15g                                                    
[root@linux u01]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree 
  vg01   2   3   0 wz--n- 6.99g <2.15g

#格式化逻辑卷

[root@linux ~]# mkfs.ext4 /dev/vg01/lv01

挂载使用

1)创建一个空的挂载点
2)挂载使用

[root@linux ~]#  mount /dev/vg01/lv01 /u01

逻辑卷动态扩容

将/u01目录动态扩容到6G

思路:
1. 查看/u01目录所对应的逻辑卷是哪一个  /dev/mapper/vg01-lv01
2. 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
3. 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
4. 如果vg01空间足够,直接扩容逻辑卷

步骤:
1. 查看/u01目录属于哪个卷组
[root@linux ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               7.8G     0  7.8G   0% /dev
tmpfs                  7.8G     0  7.8G   0% /dev/shm
tmpfs                  7.8G   12M  7.8G   1% /run
tmpfs                  7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               78G  2.1G   76G   3% /
tmpfs                  1.6G     0  1.6G   0% /run/user/0
/dev/mapper/vg01-lv01  2.4G  7.5M  2.3G   1% /u01
/dev/sdb1              976M  2.6M  907M   1% /u02

[root@linux ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao----   2.50g                                                    
  lv02 vg01 -wi-a----- 200.00m                                                    
  lv03 vg01 -wi-a-----  <2.15g    

2. 卷组的剩余空间
root@linux ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree 
  vg01   2   3   0 wz--n- 6.99g <2.15g
结果:当前卷组空间不足我扩容
  
3. 扩容逻辑卷所在的卷组
1)首先得有物理设备 /dev/sdb6
2) 将物理设备做成物理卷
[root@linux ~]# pvcreate /dev/sdb6
  Physical volume "/dev/sdb6" successfully created.
  
[root@linux ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree  
  /dev/sdb3  vg01 lvm2 a--  <5.00g 156.00m
  /dev/sdb5  vg01 lvm2 a--  <2.00g  <2.00g
  /dev/sdb6       lvm2 ---   2.00g   2.00g
3)将物理卷加入到卷组中(卷组扩容)
[root@linux ~]# vgdisplay
[root@linux ~]# vgextend vg01 /dev/sdb6
  Volume group "vg01" successfully extended

[root@linux ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   3   3   0 wz--n- <8.99g 4.14g

注意:
正常情况下,应该先将/dev/sdb6物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷。

4. 扩容逻辑卷
[root@linux ~]# lvextend -L 6G /dev/vg01/lv01     -L 6G最终的大小
  Size of logical volume vg01/lv01 changed from 2.50 GiB (640 extents) to 6.00 GiB
 (1536 extents).  Logical volume vg01/lv01 successfully resized.
 or
 [root@linux ~]# lvextend -L +2.5G /dev/vg01/lv01 	 -L +2.5G 扩容2.5G

5. 查看结果
[root@linux ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao----   6.00g                                                    
  lv02 vg01 -wi-a----- 200.00m                                                    
  lv03 vg01 -wi-a-----  <2.15g   
 
[root@linux ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               7.8G     0  7.8G   0% /dev
tmpfs                  7.8G     0  7.8G   0% /dev/shm
tmpfs                  7.8G   12M  7.8G   1% /run
tmpfs                  7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               78G  2.1G   76G   3% /
tmpfs                  1.6G     0  1.6G   0% /run/user/0
/dev/mapper/vg01-lv01  2.4G  7.5M  2.3G   1% /u01   实际并没有改变
/dev/sdb1              976M  2.6M  907M   1% /u02

 6. 同步文件系统
[root@linux ~]#  resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /u01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 1572864 blocks long.

7. 再次查看验证
[root@linux ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               7.8G     0  7.8G   0% /dev
tmpfs                  7.8G     0  7.8G   0% /dev/shm
tmpfs                  7.8G   12M  7.8G   1% /run
tmpfs                  7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               78G  2.1G   76G   3% /
tmpfs                  1.6G     0  1.6G   0% /run/user/0
/dev/mapper/vg01-lv01  5.9G   10M  5.6G   1% /u01
/dev/sdb1              976M  2.6M  907M   1% /u02

离线裁剪逻辑卷(了解)

[root@server ~]# umount /data/
[root@server ~]# e2fsck -f /dev/vg01/lv01		检验文件系统
[root@server ~]# resize2fs /dev/vg01/lv01 2G	裁剪文件系统到2G
[root@server ~]# lvreduce /dev/vg01/lv01 -L 2G	裁剪逻辑卷
[root@server ~]# mount /dev/vg01/lv01 /data		挂载使用

逻辑卷相关命令

创建物理卷:pvcreate
pvcreate /dev/sdb1
创建卷组:vgcreate
vgcreate vg01 /de/sdb1
创建逻辑卷:lvcreate		
lvcreate -n lv01 -L 1G vg01
lvcreate -n lv01 -l 100 vg01
lvcreate -n lv01 -l 100%free vg01

删除逻辑卷:lvremove
lvremove /dev/vg01/lv01
删除卷组:vgremove
vgremove vg01
说明:卷组里的物理卷没有被使用才可以直接删除卷组
删除物理卷:pvremove 
pvremove /dev/sdb1

扩容卷组:vgextend
vgextend vg01 /dev/sdb2
扩容逻辑卷:lvextend
lvextend /dev/vg01/lv01 -L +2G
同步文件系统:
resize2fs /dev/vg01/lv01

裁剪卷组:vgreduce
vgreduce vg01 /dev/sdb2
裁剪逻辑卷:lvreduce

实战演练

思路:
0. 准备好物理设备,并创建一个逻辑卷,大小根据mysql数据库的实际大小再大一些,挂载到系统中
1. 最好在系统维护时间操作(23:00-8:00)
2. 先停止前端应用 LAMP apache
3. 停止mysql数据库(建议备份mysql数据库)
4. 迁移mysql数据文件

步骤:
1. 添加一块物理硬盘[是否需要重启开服务器是否支持热插拔]
sdb                            8:16   0   10G  0 disk 
├─sdb1                         8:17   0    2G  0 part 
├─sdb2                         8:18   0    2G  0 part 
├─sdb3                         8:19   0    1K  0 part 
├─sdb5                         8:21   0    2G  0 part 
├─sdb6                         8:22   0    2G  0 part 
└─sdb7                         8:23   0    2G  0 part
2. 创建大小为8G的逻辑卷
1)创建物理卷
[root@server ~]# pvcreate /dev/sdb[12567]
2)创建卷组vg_mysql
[root@server ~]# vgcreate vg_mysql /dev/sdb[12567]
[root@server ~]# vgs vg_mysql
  VG       #PV #LV #SN Attr   VSize VFree
  vg_mysql   5   0   0 wz--n- 9.98g 9.98g
3)创建逻辑卷lv_mysql
[root@server ~]# lvcreate -n lv_mysql -L 8G vg_mysql
[root@server ~]# lvs /dev/vg_mysql/lv_mysql 
  lv_mysql vg_mysql -wi-a----- 8.00g     

4)格式化为ext4文件系统
[root@server ~]# mkfs.ext4 /dev/vg_mysql/lv_mysql 

5)挂载使用
a. 创建一个空的挂载点/u01
[root@server ~]# mkdir /u01
b. 挂载逻辑卷lv_mysql到/u01目录
[root@server ~]# mount /dev/vg_mysql/lv_mysql /u01


3. 停止前端web服务
[root@server ~]# service apache stop

4. 停止mysql数据库
[root@server ~]# service mysql stop

5. 备份mysql数据库到另外一台备份机 (实验环境不是必须)
备份机:10.1.1.2   备份目录:/backup
[root@server ~]# rsync -av /usr/local/mysql 10.1.1.2:/backup/

6. 将/usr/local/mysql/目录里的所有数据文件同步到逻辑卷上,即/u01目录
[root@server ~]# rsync -av /usr/local/mysql/ /u01
查看是否同步完成:
[root@server ~]# ls /u01
[root@server ~]# du -sh /u01		查看大小是否和原来mysql数据库大小一致

7. 卸载逻辑卷
[root@server ~]# umount /u01

8. 删除/usr/local/mysql/目录里原来的数据文件
注意:删之前一定要确定成功备份了!!!
[root@server ~]# rm -rf /usr/local/mysql/*

9. 挂载逻辑卷lv_mysql到mysql的安装目录/usr/local/mysql
[root@server ~]# mount /dev/vg_mysql/lv_mysql /usr/local/mysql/
开机自动挂载:
vim /etc/rc.local
...
mount /dev/vg_mysql/lv_mysql /usr/local/mysql/

10. 启动数据库
[root@server ~]# service mysql start

11. 启动web服务
[root@server ~]# service apache start

12.测试验证
访问之前的网站看是否可以正常访问

扩容swap空间

方法1:增加一个硬盘或者分区来扩容swap空间==

查看swap空间大小:
[root@web ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1861        646       1215          0          9         60
-/+ buffers/cache:        576       1285
Swap:         2047          0       2047
[root@web ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                               partition	2097144	0	-1

[root@web ~]# mkswap /dev/sdb7
Setting up swapspace version 1, size = 2104476 KiB
no label, UUID=485ff8ad-a636-4556-a2e7-4ee9efc78afb
[root@web ~]# blkid /dev/sdb7
/dev/sdb7: UUID="485ff8ad-a636-4556-a2e7-4ee9efc78afb" TYPE="swap"  

//激活swap分区。swap空间不能手动挂载
[root@server ~]# swapon /dev/sdb7

[root@server ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                               partition	2031608	0	-1
/dev/sdb7                               partition	2064312	0	-2

方法2:使用dd命令模拟大文件来扩容swap

[root@server ~]# dd if=/dev/zero of=/dev/sda1 bs=1M count=100  //不要执行

if=源文件
of=目标文件
bs=复制数据的大小
count=复制的个数

注意:
1. 一般可以使用dd命令做块设备文件的备份
2. /dev/zero 特殊设备,一般用来模拟一个大文件,源源不断的二进制的bit流;
   /dev/null  空设备,类似黑洞

步骤:
1. 使用dd命令模拟大文件
# dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024
2. 格式化大文件
[root@server ~]# mkswap /tmp/swapfile 

3.激活大文件
[root@server ~]# swapon -p 1 /tmp/swapfile
-p:指定优先级,数字越大优先级越高,0-32767
4. 查看
[root@server ~]# swapon -s
Filename				Type		Size	Used	Priority
/tmp/swapfile                           file		1048568	0	1

如果开机自动挂载,需要修改文件:/etc/fstab
/swap_file	swap swap defautls,pri=1 0 0

逻辑卷实现条带化

条带化:
        把保存到逻辑卷的数据分成n等分,分别写到不同的物理卷,可以提高数据的读写效率;
        如果任何一个涉及到的物理卷出现故障,数据都会无法恢复。


sdc                            8:32   0   20G  0 disk 
├─sdc1                         8:33   0    2G  0 part 
└─sdc2                         8:34   0    2G  0 part 

创建物理卷
[root@server ~]# pvcreate /dev/sdc[12]

查看物理卷
[root@server ~]# pvs
/dev/sdc1            lvm2 a--   2.01g  2.01g
/dev/sdc2            lvm2 a--   2.01g  2.01g


创建卷组:
[root@server ~]# vgcreate vg01 /dev/sdc[12]

[root@web ~]# pvs /dev/sdc[12]
  PV         VG   Fmt  Attr PSize PFree
 /dev/sdc1  vg01      lvm2 a--   2.00g  2.00g
 /dev/sdc2  vg01      lvm2 a--   2.00g  2.00g


创建实现条带化的逻辑卷:
[root@server ~]# lvcreate -n lv01 -L 1G vg01 -i 2 /dev/sdc[12]
  Using default stripesize 64.00 KiB
  Logical volume "lv01" created
  
[root@server ~]# lvs /dev/vg01/lv01 
  LV   VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-a----- 1.00g                                             
[root@server ~]# pvs /dev/sdc[12]
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdc1  vg01 lvm2 a--  2.00g 1.50g
  /dev/sdc2  vg01 lvm2 a--  2.00g 1.50g


-i 参数:给出条带化的数量


格式化挂载使用:
[root@server ~]# mkfs.ext4 /dev/vg01/lv01
[root@server ~]# mount /dev/vg01/lv01 /u01


测试:
[root@server ~]# yum -y install sysstat
[root@server ~]# iostat -m -d /dev/sdc[12] 2 
-d 查看磁盘
-m 以什么速度显示,每秒M
 2 每隔2s显示一次 
   如果后面还有数字则代表总共显示多少次
   
[root@server ~]# dd if=/dev/zero of=/u01/test bs=1M count=1000    模拟写数据
[root@server ~]# iostat -m -d /dev/sdc[12] 1
。。。
Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sdb5            178.00         0.00        52.00          0         52
sdb6            177.00         0.00        52.00          0         52

逻辑卷实现镜像

逻辑卷实现镜像:
镜像:对某个逻辑卷的数据做镜像,起到数据备份的作用。

当前环境:
├─sdb7                    8:23   0    2G  0 part 
└─sdb8                    8:24   0    2G  0 part 


创建物理卷:
[root@web ~]# pvcreate /dev/sdb[78]
[root@web ~]# pvs /dev/sdb[78]
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb7       lvm2 a--  2.01g 2.01g
  /dev/sdb8       lvm2 a--  2.01g 2.01g

  
 将物理卷加入到vg02卷组:
[root@web ~]# vgextend vg02 /dev/sdb[78]
  Volume group "vg02" successfully extended
[root@web ~]# vgs vg02
  VG   #PV #LV #SN Attr   VSize VFree
  vg02   4   1   0 wz--n- 8.02g 6.02g


创建实现镜像的逻辑卷:
[root@web ~]# lvcreate -n lv02 -L 2G vg02 -m 1 /dev/sdb[78]
  Logical volume "lv02" created

-m参数:给出镜像的个数;1表示1个镜像

[root@web ~]# lvs
  LV       VG   Attr       LSize  Pool Origin Data%  Move Log       Cpy%Sync Convert
  lv_root  vg01 -wi-ao---- 17.70g                                                   
  lv_swap  vg01 -wi-ao----  2.00g                                                   
  lv01     vg02 -wi-ao----  2.00g                                                   
  lv02     vg02 mwi-a-m---  2.00g                         lv02_mlog    38.67        
  lv-mysql vg03 -wi-ao---- 10.00g                                                   
   

说明: Cpy%Sync 53.52该值是100%说明复制ok 

创建后:
[root@web ~]# pvs /dev/sdb[78]
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb7  vg02 lvm2 a--  2.00g 4.00m
  /dev/sdb8  vg02 lvm2 a--  2.00g    0 


格式化逻辑卷:
[root@web ~]# mkfs.ext4 /dev/vg02/lv02
挂载使用
[root@web ~]# mount /dev/mapper/vg02-lv02 /u02

[root@web ~]# touch /u02/file{1..3}
[root@web ~]# mkdir /u02/dir{1..3}

 
测试验证:
思路:损坏一个磁盘,测试数据是否在第二个物理卷中
1. 使用dd命令破坏一个物理卷
[root@web ~]# dd if=/dev/zero of=/dev/sdb7 bs=1M count=100

2. 再次查看物理卷发现有一个unknown Device
 /dev/sdc       vg03 lvm2 a--  20.00g 10.00g
unknown device vg02 lvm2 a-m   2.00g  4.00m

3. 将损坏的盘从卷组中移除
vgreduce vg02 --removemissing --force

4. 再次查看挂载点/u02数据依然存在

自己也可以再次测试:
1. 再拿刚刚人为损坏的盘做成物理卷再次加入到vg02卷组中
[root@web ~]# pvcreate /dev/sdb7
  Physical volume "/dev/sdb7" successfully created
[root@web ~]# vgextend vg02 /dev/sdb7
  Volume group "vg02" successfully extended

2. 再次让/dev/sdd5和/dev/sdd6互为镜像
[root@web ~]# lvconvert -m 1 /dev/vg02/lv02 /dev/sdb[78]
  vg02/lv02: Converted: 0.0%
  vg02/lv02: Converted: 32.2%
  vg02/lv02: Converted: 65.8%
  vg02/lv02: Converted: 97.7%
  vg02/lv02: Converted: 100.0%

3. 等待复制完成就可以再次人为模拟另一块物理卷损坏继续测试

逻辑卷快照

1. 创建快照 (EXT4)
[root@node1 ~]# lvcreate -L 128M -s -n lv2-snap /dev/vg1/lv2	给lv2逻辑卷创建快照
[root@node1 ~]# mount -o ro /dev/vg1/lv2-snap /mnt/lv2-snap/	挂载快照

[root@node1 ~]# lvscan 		查看扫描快照
  ACTIVE            '/dev/vg1/lv1' [768.00 MiB] inherit
  ACTIVE   Original '/dev/vg1/lv2' [512.00 MiB] inherit
  ACTIVE   Snapshot '/dev/vg1/lv2-snap' [128.00 MiB] inherit

[root@node1 ~]# dmsetup ls --tree
vg1-lv2--snap (252:5)
 ├─vg1-lv2--snap-cow (252:7)		保存原卷改变前的数据
 │  └─ (253:17)
 └─vg1-lv2-real (252:6)				真实的逻辑卷(原卷)
    ├─ (253:17)
    └─ (253:18)
vg1-lv2 (252:1)
 └─vg1-lv2-real (252:6)
    ├─ (253:17)
    └─ (253:18)
    
2. 修改原卷的数据
[root@server ~]# dd if=/dev/zero of=/u01/test bs=1M count=30

3. 观察Snapshot
[root@server ~]# lvs /dev/vg1/lv2-snap 
  LV     VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  s-lv01 vg01 swi-aos--- 52.00m      lv01     0.16    
[root@server ~]# lvs /dev/vg1/lv2-snap 
  LV     VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  s-lv01 vg01 swi-aos--- 52.00m      lv01    58.16 
  

XFS:
[root@node1 ~]# mount -o nouuid,ro /dev/vg1/lv1-snap /mnt/lv1-snap/s
挂载快照,尽量使用ro的方式,将不会破坏快照卷中的数据

应用场景:
/var/lib/mysql
1. 锁表
2. 备份【逻辑|物理备份】
3. 解锁

100G  物理备份		/var/lib/mysql/xxx

1. 锁表
2. 创建快照
3. 解锁
4. 挂载快照
5. 备份到指定地方
6. 删除快照

快照实现自动扩容:
/etc/lvm/lvm.conf 
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20
//当快照使用到80%时,自动扩容20%;当snapshot_autoextend_threshold = 100表示关闭自动扩容

磁盘配额

磁盘配额 quota
===========================================================================
作用: 限制用户或组对磁盘空间的使用,例如文件服务器,邮件服务器...

一、启用磁盘限额
1. 让文件系统支持配额 [ext3/4]
# vim /etc/fstab 
/dev/vg02/lv02          /u01            ext4    defaults,usrquota,grpquota 0 0
# umount /u01
# mount -a
# mount |grep u01
/dev/mapper/vg02-lv02 on /u01 type ext4 (rw,usrquota,grpquota)

2. 创建磁盘配额的数据库文件
注意: 建议停用SELinux
[root@server ~]# yum -y install quota
[root@server ~]# quotacheck -acug
[root@server ~]# ll /u01
total 16
-rw------- 1 root root 6144 Sep 17 09:28 aquota.group
-rw------- 1 root root 6144 Sep 17 09:28 aquota.user


//-a 所有分区(已支持配额)
//-c 创建
//-u 用户
//-g 组

3.启动磁盘配额
# quotaon -a			//启动所有分区的磁盘配额


二、日常管理
设置配额:
方法一:edquota
# edquota -u stu1
Disk quotas for user stu1 (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg01-lv01          0           0          0          0        0        0  



soft:又称软限制,当用户到达这个限制以后,系统会给予警告,但仍可写入。
hard:又称硬限制,到达这个限制,就完全禁止任何写入

以下三个为磁盘空间的限制设置:
blocks:已使用空间,无需要设置
soft:用户空间使用限制,为软限制,需要设置
hard:用户空间使用限制,为硬限制,需要设置
以下三个为总文件个数的限制:
inodes:已有文件总数,无需要设置
soft:文件总数限制,为软限制,需要设置
hard:文件总数限制,为硬限制,需要设置

我们要限制stu1用户使用空间10M,最多不能超过12M,文件总数为200个,
最多不能超过250个,设置如下:
Filesystem        			blocks soft hard inodes soft hard
/dev/mapper/vg01-lv01       0     10240 12288 0    200  250 
注:空间限制是以k为单位的。

grace time: 宽限期,默认7天 
# edquota -t  修改配额的宽限期


测试:
# su - stu1
[stu1@vm1 data]$ dd if=/dev/zero of=test99 bs=1M count=11
dm-1: warning, user block quota exceeded.
11+0 records in
11+0 records out
11534336 bytes (12 MB) copied, 0.108284 s, 107 MB/s


[stu1@vm1 data]$ dd if=/dev/zero of=test99 bs=1M count=13
dm-1: warning, user block quota exceeded.
dm-1: write failed, user block limit reached.
dd: writing `test99': Disk quota exceeded
13+0 records in
12+0 records out
12582912 bytes (13 MB) copied, 0.257964 s, 48.8 MB/s

[stu1@vm1 data]$ touch file{
     
     1..6}
dm-1: warning, user file quota exceeded.

[stu1@vm1 data]$ touch file{
     
     1..11}
dm-1: write failed, user file limit reached.
touch: cannot touch `file10': Disk quota exceeded
touch: cannot touch `file11': Disk quota exceeded

[stu1@vm1 data]$ quota		//查看自己的配额情况
Disk quotas for user stu1 (uid 500): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/vg01-lv01
                  12288*  10240   12288   24:00       1       5      10 


方法二: setquota
# setquota -u username block软限制 block硬限制 inode软限制 inode硬限制 分区
# setquota -u jack 80000 100000 15 20 /dev/sda2
# quota jack

方法三:复制
# edquota -p alice tom robin user1 user2 user3
将alice的配额方案复制给后面所有用户

# for i in {1..10}
> do
> useradd zhang$i
> edquota -p stu1 zhang$i
> done


+++查看配额+++
查看单个用户的配额:	    # quota jack
查看所有用户的配额:	    # repquota -a
                              	        # repquota -ag
普通用户查看自己配额:  $ quota


扩展知识:针对组设置配额
例1:限制hr组的成员能在/home/hr目录中:100M   50文件
# groupadd hr
# useradd hr01 -G hr 
# useradd hr02 -G hr
# mkdir /home/hr
# chgrp hr /home/hr
# chmod 2770 /home/hr
# ll -d /home/hr
drwxrws--- 2 root hr 4096 09-12 17:07 /home/hr

# edquota -g hr
Disk quotas for group hr (gid 507):
 	Filesystem                           blocks       soft       hard     inodes     soft     hard
	/dev/mapper/vg01-lv_home          4          0     102400          1        0        50
# repquota -ag
===========================================================================

rhel7:
注意:
1、不需要手动执行quotacheck命令对xfs文件系统进行检查,它会在mount的时候自动执行
2、不需要在xfs文件系统的根下生成quota数据文件


 # mount -o uquota /dev/xvm/home /home
 # xfs_quota -x -c 'limit bsoft=500m bhard=550m tanya' /home
 # xfs_quota -x -c report /home

-x:专家模式
-c:交互模式,可加多个

GPT分区

gdisk工具分区

parted工具分区.

GPT  128个主分区
1.创建分区
# gdisk -l /dev/sdc
# gdisk /dev/sdc
# partprobe /dev/sdc
# ll /dev/sdc*

2.创建文件系统(格式化)redhat7默认使用xfs
# mkfs.xfs /dev/sdb1

3.挂载(手动、开机自动、autofs自动)
# mkdir /mnt/disk1
# mkdir /mnt/disk2
# mount -t xfs -o ro /dev/sdb1 /mnt/disk1		//手动挂载
# umount /mnt/disk1

猜你喜欢

转载自blog.csdn.net/weixin_39735909/article/details/128931855