Hard disk introduction
Hard disk partition method
MBR <2TB fdisk 4 primary partitions or 3 primary partitions + 1 extended partition (N logical partitions)
The abbreviation of MBR (Master Boot Record) consists of three parts, namely:
- Bootloader (Primary Bootloader) =446 bytesThe first sector of the hard disk = 512 bytes
- The main program that boots the operating system
- DPT partition table (Disk Partition Table) =64 bytes
- The partition table stores the partition information of the hard disk, and the operating system can obtain the partition information of the hard disk by reading the information in the partition table.
- Each partition requires16 bytes in size, save the file system identification, start and stop cylinder number, head number, sector number, start sector position (4 bytes), total sector number of the partition (4 bytes), etc.
- The partition information stored in the partition table isPrimary Partition and Extended Partitionpartition information,Extended partitions cannot be used directly, need to divide one or more in the extended partitionlogical partitionavailable after
- Partition information for logical partitionsSave asin extended partitionInstead of saving in the MBR partition table, in this way, you can break through the limitation that the MBR partition table can only save 4 partitions
- Hard disk valid flag (check digit) =2 bytes
GPT >2TB gdisk(parted) 128 primary partitions
Note: Converting from MBR to GPT, or from GPT to MBR will result in total data loss !
Further reading: http://www.eassos.cn/jiao-cheng/ying-pan/mbr-vs-gpt.php
Basic partition management
Disk Partition Ideas
- enter the partition tablenew buildpartition fdisk /dev/sdb
- update partition table <refresh partition table>
- Format partition --> file system mkfs.ext4 /dev/sdb1
- Mount using ——> mount [automatically mount at boot | autofs automatically mount]
==fdisk partition
use fdisk partition
# 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 保存分区表
Summarize:
- It can only be divided into 4 main partitions at most, and the main partition numbers are 1-4
- The sum of logical partition sizes cannot exceed the extended partition size, and logical partition partition numbers start from 5
- If the extended partition is deleted, the following logical volume partitions are also deleted
- Partition number (1-4) of the extended partition
Case 1:
To add a hard disk, you need to divide it into two partitions, format them into ext4 and vfat format file systems, and finally need to use 2G space.
思路:
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
Summarize:
- The size of the extended partition determines alllogical partitionthe size of
- After deleting the extended partition, the following logical partitions are all deleted
- Needed after partitioningRefresh the partition table manually, if the refresh is unsuccessful requiresrestart the operating system
- When creating partitions, pay attention to the continuity of partition numbers as much as possible
mount partition device
Mount manually:
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
Automatically mount at boot:
Operating system startup process:
- Hardware initialization hard disk, memory,. . . HD
- System initialization /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
Logical volume management
Logical volume:
Logical Volume (LVM): It is the Linux environment fordisk partition managementA mechanism that builds on **physical storage deviceAn abstraction layer above, the advantage lies in flexible management.
Features:
1.Dynamic online expansion (emphasis)**
2. Offline cropping
3. Data striping
4. Data mirroring
Basic concepts of logical volumes
- Physical Volume (Physical Volume, PV)
The physical volume is the underlyingreally provide capacity, the device for storing data, it can be the entire hard disk, partitions on the hard disk, etc.
- Volume Group (Volume Group, VG)
Volume groups are built on top of physical volumes and consist ofone or more physical volumescomposition. That is, physical volumes are integrated to provide capacity allocation.
An LVM system can have only one volume group, or it can contain multiple volume groups.
- Logical Volume (LV)
A logical volume is built on top of a volume group, which is a piece of space "cut out" from the volume group. it isLogical design used by end usersprepare. After the logical volume is created, itsThe size can be stretched。
- Physical area PE (physical extent)
Each physical volume is divided into basic units called PE (Physical Extents), and PE with a unique number is the smallest unit that can be addressed by LVM. The size of the PE can be specified, and the default is 4 MB. Once the PE size is determined, it cannot be changed, and the PE sizes of all physical volumes in the same volume group are consistent.
4MB=4096kb=4096kb/4kb=1024 blocks
illustrate:
- The minimum unit of hard disk read data is 1 sector, 512 bytes
- The minimum unit of operation read data is 1 data block = 8*512 bytes = 4096 bytes = 4KB
- The smallest unit of lvm addressing is 1 PE=4MB
- Logical area LE (logical extent)
Logical volumes are also divided into addressable basic units called LE (Logical Extents). In the same volume group, the size of LE is the same as that of PE, and there is a one-to-one correspondence.
Real physical device --> logical (command creation) --> physical volume (pv) --> volume group (vg) --> logical volume (lv) --> logical volume format --> mount use
Logical volume LVM application
logical volume creation
Create a 2.5G == logical volume
思路:
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
Create a logical volume lv02 with a size of 200M; each PE is 4M, and -l50 specifies 50 PEs with a size of 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
Create a logical volume lv03 whose size is 50% of the space of the remaining volume group vg01
[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
# format logical volume
[root@linux ~]# mkfs.ext4 /dev/vg01/lv01
mount use
1) Create an empty mount point
2) Mount using
[root@linux ~]# mount /dev/vg01/lv01 /u01
Logical volume dynamic expansion
Dynamically expand the /u01 directory to 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
Trim logical volumes offline (understand)
[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 挂载使用
Logical volume related commands
创建物理卷: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
Practical exercise
思路:
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.测试验证
访问之前的网站看是否可以正常访问
Expand swap space
Method 1: Add a hard disk or partition to expand the swap space ==
查看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
Method 2: Use the dd command to simulate large files to expand 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
Striping Logical Volumes
条带化:
把保存到逻辑卷的数据分成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
Mirroring logical volumes
逻辑卷实现镜像:
镜像:对某个逻辑卷的数据做镜像,起到数据备份的作用。
当前环境:
├─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. 等待复制完成就可以再次人为模拟另一块物理卷损坏继续测试
logical volume snapshot
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表示关闭自动扩容
disk quota
磁盘配额 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 partition
gdisk tool partition
parted tool partition.
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