一、服务器磁盘
1、磁盘的物理组成:
- 圆形的磁盘盘
- 机械手臂,与在机械手臂上的磁盘读取头
- 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据
磁盘主要存储数据的是磁盘盘,磁盘盘组成:
1、扇区(sector)是最小的物理存储单位,有512bytes和4K两种格式
2、将扇区组成一个圆是磁柱
3、最小分区单位通常为扇区
4、磁盘分区表主要有两种格式,一种是限制较多的MBR分区,一种是GPT格式
5、MBR分区中,第一个扇区最重要,主要存放开机区的MBR和分区表
6、GPT分区表除了分区数量扩充较多之外,支持的磁盘容量超过2TB
2、文件系统:
只有将磁盘分区格式化之后,才能成为操作系统能够利用的文件系统格式
3、硬盘读写数据过程:
现代硬盘寻道都是采用CHS的方式,即Cylinder(柱面)、Head(磁头)、Sector(扇区),硬盘读取数据时,读写磁头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间
因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。目前硬盘一般为2到30毫秒,平均约为9毫秒。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称为旋转延迟时间
4、磁盘容量的计算:
只要知道了硬盘的CHS的数目,即可确定硬盘的容量:
硬盘的容量=柱面数(磁道数) * 磁头数 * 单磁道扇区数 * 单个容量扇区大小(一般初始为512字节)
二、磁盘分区核心命令介绍
1、fdisk命令
查看系统的分区详细信息
命令选项:
- fdisk -l 列出分区表
[root@localhost ~]# fdisk -l
Disk /dev/sda: 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: 0x000814e7
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1592 2088960 82 Linux swap / Solaris
/dev/sda4 1592 1617 208008+ 83 Linux
- fdisk device 对磁盘进行分区
示例1:创建分区
[root@localhost ~]# fdisk /dev/sda
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
Selected partition 4
First cylinder (1592-2610, default 1592):
Using default value 1592
Last cylinder, +cylinders or +size{K,M,G} (1592-2610, default 2610): +2G
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: Device or resource busy.
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.
【注】:以上所示表示创建 /dev/sda4 分区,默认从1592柱面开始,指定大小为2G,然后保存[w]
示例2:删除分区
[root@localhost ~]# fdisk /dev/sda
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): d
Partition number (1-4): 4
Command (m for help): w
The partition table has been altered!
...
【注】:以上所示表示删除 /dev/sda4 分区,然后保存[w]
当然,在这里,我们也可以执行命令帮助,里面详细说明了如创建分区等多个选项意义
Command (m for help): m
Command action
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
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
2、文件系统管理工具命令
1.创建文件系统的工具
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, …
示例:
[root@localhost ~]# mkfs.ext2 /dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
512064 inodes, 2046070 blocks
102303 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2097152000
63 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
2.检测及修复文件系统的工具
fsck
fsck.ext2, fsck.ext3, …
示例:
[root@localhost ~]# fsck.ext2 /dev/sda4
e2fsck 1.41.12 (17-May-2010)
/dev/sda4: clean, 11/512064 files, 36645/2046070 blocks
3.查看其属性的工具
dumpe2fs, tune2fs
示例:
[root@localhost ~]# dumpe2fs /dev/sda4
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 61bb29bb-9b61-4821-aa8c-5cee0b06ebf4
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
...
Group 0: (Blocks 0-32767)
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-500
Block bitmap at 501 (+501), Inode bitmap at 502 (+502)
Inode table at 503-1010 (+503)
31751 free blocks, 8117 free inodes, 2 directories
Free blocks: 1017-32767
Free inodes: 12-8128
Group 1: (Blocks 32768-65535)
Backup superblock at 32768, Group descriptors at 32769-32769
Reserved GDT blocks at 32770-33268
Block bitmap at 33269 (+501), Inode bitmap at 33270 (+502)
Inode table at 33271-33778 (+503)
31757 free blocks, 8128 free inodes, 0 directories
Free blocks: 33779-65535
Free inodes: 8129-16256
4.调整文件系统特性
- tune2fs
- -l:查看超级块内容
[root@localhost ~]# tune2fs -l /dev/sda4
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 61bb29bb-9b61-4821-aa8c-5cee0b06ebf4
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 512064
Block count: 2046070
Reserved block count: 102303
Free blocks: 2009425
Free inodes: 512053
...
修改文件系统属性:
- -j:ext2-----> ext3
- -L LABEL:修改卷标
- -m # :设定预留空间 #代表百分比,默认占用5%的空间
示例:
[root@localhost ~]# tune2fs -J ext3 -L mycp -m 7 /dev/sda4
tune2fs 1.41.12 (17-May-2010)
...
5.ext系列文件系统专用管理工具:mke2fs
mke2fs [OPTIONS] device
- -t {ext2|ext3|ext4}指明要创建的文件系统类型
mkfs.ext2=mkfs -t ext2 =mke2fs -t ext2 - -b {1024|2048|4096}:指定文件系统块大小
- -L LABEL:指明卷标
- -i #:指明inode百分比 每多少个字节创建一个inode
- -N #:直接给定inode数量
- -m # :设定预留空间 #代表百分比,默认占用5%的空间
【注】:这个命令是mke2fs,而不是make 2fs 呦!
示例:
[root@localhost ~]# mke2fs -t ext2 -L mycp /dev/sda4
mke2fs 1.41.12 (17-May-2010)
/dev/sda4 is mounted; will not make a filesystem here!
显示已挂载,所以我们要先卸载,在进行文件系统管理:
[root@localhost ~]# umount /dev/sda4
[root@localhost ~]# mke2fs -t ext2 -L mycp /dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=mycp
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
512064 inodes, 2046070 blocks
102303 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2097152000
63 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
6.调整文件系统大小 resize2fs
[选项] device [size]
-f:强制执行
示例:
[root@localhost ~]# resize2fs -f /dev/sda4 1G
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/sda4 is mounted on /mnt; on-line resizing required
On-line shrinking from 2046070 to 262144 not supported.
7.e2fsck: 磁盘修复 卸载后
- -a:自动修复
- -b:设定surperblock位置
- -B:设定块大小
- -c:检查坏道
- -C file:检查结果保存到file中
- -f:强制检查
- -F:检查前清空缓存
- -v:显示详细报告
- -y:交互式
示例:
[root@localhost ~]# e2fsck -acvF /dev/sda4
e2fsck: Bad magic number in super-block while trying to open /dev/sda4
/dev/sda4:
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
8.fsck:可以检测多个系统
- -s:按照顺序检测
- -A:对/etc/fstab中列出的分区进行检查 mount -a
- -a:自动修复
- -r:如果有错误,由使用者决定是否修复
例:
[root@localhost ~]# fsck -a
fsck from util-linux-ng 2.17.2
/dev/sda2 is mounted.
e2fsck: Cannot continue, aborting.
9.blkid:获取文件系统类型 UUID
[root@localhost ~]# blkid /dev/sda4
/dev/sda4: UUID="825a3ab0-78ee-4190-8c58-5b5ac171fa95" TYPE="ext4"
- -L label:根据卷标定位设备
[root@localhost ~]# mke2fs -t ext2 -L mycp /dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=mycp
...
[root@localhost ~]# blkid -L mycp
/dev/sda4
- -U UUID:根据UUID定位设备
[root@localhost ~]# blkid -U "825a3ab0-78ee-4190-8c58-5b5ac171fa95" TYPE="ext4"
/dev/sda4
三、swap
1、查看当前的交换分区
- free -m
- swapon -s
swapon -a (授权所有的交换分区 /etc/fstab)
mkswap - set up a Linux swap area
示例:
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 980 631 349 0 29 437
-/+ buffers/cache: 164 816
Swap: 2039 0 2039
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2088956 0 -1
2、初始化
mkswap /dev/sdb1
3、挂载
blkid /dev/sdb1
四、磁盘挂载工具
根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂
载”;此目录即为“挂载点”
挂载点:用于作为另外一个文件系统的访问入口
(1) 事先存在;
(2) 应该使用未被或不会被其它进程使用到的目录;
(3) 挂载点下原有的文件将会被隐藏;
挂载时可以使用的设备名:
- 设备名 /dev/sda1
- 卷标 LABEL=nebula
- UUID UUID=“353a34b8-9233-465c-b7cf-92c8d308c05b”
- UDEV 可以给设备建立一个别名
1、mount
mount -t 文件系统 -o 选项… 设备名 挂载点
挂载时若没有指定挂载选项,则为默认选项
defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
-
选项:
- -r:只读挂载
- -w:读写挂载
- -n:默认情况下 只要挂载或者卸载会同步更新/etc/mtab,-n禁止同步
- -t:指明文件系统
- -L LABEL:挂载的时候以卷标指明设备
- -U UUID:挂载的时候以UUID指明设备
- -o:指定挂载选项:
示例:
[root@localhost ~]# mount -w /dev/sda4 /mnt/
-
查看当前系统已挂载的设备:
- mount
[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sr0 on /media type iso9660 (ro)
/dev/sda4 on /mnt type ext4 (rw)
- cat /etc/mtab
[root@localhost ~]# cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
/dev/sr0 /media iso9660 ro 0 0
/dev/sda4 /mnt ext4 rw 0 0
- cat /proc/mounts
[root@localhost ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=489480k,nr_inodes=122370,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/sda2 / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=489480k,nr_inodes=122370,mode=755 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
/dev/sr0 /media iso9660 ro,relatime 0 0
/dev/sda4 /mnt ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
2、umount卸载
umount device/directory
卸载前:
[root@localhost ~]# umount /dev/sda4
卸载后:
注意:正在被进程访问到的挂载点无法被卸载;
-
查看被哪个或哪些进程所占用:
lsof mountpoint -
终止所有正在访问某挂载点的进程:
fuser -km MOUNT_POINT
3、lsof命令
是一个列出当前系统打开文件的工具
lsof输出各列信息的意义如下:
[root@localhost mnt]# lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 132016 /sbin/i
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件
TYPE:文件类型,如DIR、REG等 DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
命令选项:
- lsof -c abc 显示abc进程现在打开的文件
- lsof -c -p 1234 列出进程号为1234的进程所打开的文件
- lsof -g gid 显示归属gid的进程情况
- lsof -i #:用以显示符合条件的进程情况,列出谁在使用端口
4、du
显示每个文件和目录的磁盘使用空间~~~文件的大小
选项:
- -a #显示目录中文件的大小 单位 KB
- -b #显示目录中文件的大小,以字节byte为单位
- -c #显示目录中文件的大小,同时也显示总和;单位KB
- -s #仅显示目录的总值,单位KB
- -h #以K M G为单位显示,提高可读性~~~
5、df
显示磁盘分区上可以使用的磁盘空间
选项:
- -h:以可读性高的显示 -KB GB MB
- -a:显示全部文件系统
6、挂载配置文件
- /etc/fstab文件
磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载
系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的
挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了
- 挂载限制
1、根目录是必须挂载的,而且一定要先于其他mount point被挂载。因为mount是所有目录的跟目录,其
他木有都是由根目录 /衍生出来的
2、挂载点必须是已经存在的目录
3、挂载点的指定可以任意,但必须遵守必要的系统目录架构原则
4、所有挂载点在同一时间只能被挂载一次
5、所有分区在同一时间只能挂在一次
6、若进行卸载,必须将工作目录退出挂载点(及其子目录)之外
- fstab文件中的参数
[root@localhost mnt]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Feb 23 05:07:08 2020
#
# 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=58639013-41a1-42ab-88c6-d1ee6638b93a / ext4 defaults 1 1
UUID=cc0f2edf-2dfc-431f-b8e8-e5b517bf2fc6 /boot ext4 defaults 1 2
UUID=234c2e76-5a53-4c96-a0d4-9fc742d0ec0c swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sr0 /media iso9660 defaults 0 0
第一列:Divice:磁盘设备文件或者设备的Lable页或UUID
第二列:Mount point:设备的挂载点,就是你要挂载到哪个目录下
第三列:filesystem:磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等
第四列:parameters:文件系统的参数,在上面mount命令中已讲
第五列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1
第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整
五、RAID磁盘阵列
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有 “独立磁盘构成的具有冗余能力的阵列” 之意
RAID 可以通过技术(软件或硬件)将多个较小的磁盘整合称为一个较大的磁盘设备,而这个较大的磁盘功能可不止是存储而已,它还具有数据保护的功能
- 磁盘阵列优点:
- 数据安全与可靠性
- 读写性能
- 容量
整个RAID由于选择的级别(level)不同,而使得整合后的磁盘具有不同的功能,基本常见的有下面几种:
项目 | DAID0 等量模式 | RAID1 镜像模式 | RAID10 | RAID5 | RAID6 |
---|---|---|---|---|---|
最少磁盘数 | 2 | 2 | 4 | 3 | 4 |
最大容错磁盘数 | 无 | n-1 | n/2 | 1 | 2 |
数据安全性 | 完全没有 | 最佳 | 最佳 | 好 | 比RAID 5 好 |
可用容量 | n | 1 | n/2 | n-1 | n-2 |
特点 | 性能最佳 | 完整备份 | 整合了1和0 | 性能与备份的综合考虑 | - |
一般应用 | 强调性能数据不重要 | 数据与备份 | 服务器、云系统 | 数据与备份 | 数据与备份 |
- 热备份磁盘:
是一块或多块没有包含在原本磁盘阵列级别中的磁盘,当磁盘阵列有任何磁盘损坏时,这块热备份磁盘就会被主动拉近磁盘阵列中
设置软件磁盘阵列
在Linux服务器中是通过mdadm工具来创建和维护软RAID的,mdadm在创建和管理软RAID时非常方便,而且很灵活
选项参数:
- –create或-C:创建一个新的软RAID,后面接raid设备的名称
- –assemble或-A:加载一个已存在的阵列,后面跟阵列以及设备的名称
- –detail或-D:输出指定RAID设备的详细信息
- –stop或-S:停止指定的RAID设备。
- –level或-l:设置RAID的级别,例如,设置“-–level=5”则表示创建阵列的级别是RAID 5
- –raid-devices=#:指定阵列中活动磁盘的数目
- –spare-devices=#:指定阵列中的备用磁盘数目
- –scan或-s:扫描配置文件或/proc/mdstat文件来搜索软RAID的配置信息,该参数不能单独使用,只能配置其它参数才能使用
- –stop:停止raid
练习二:制作软件磁盘阵列
[root@localhost ~]# mdadm --create /dev/md1 --level=5 --raid-devices=3 --spare-devices=1 /dev/sdc{1,2,3,4}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
查看磁盘阵列:
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdc3[4] sdc4[3](S) sdc2[1] sdc1[0]
4204544 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
格式化与挂载使用:
[root@localhost ~]# mkfs.ext4 /dev/md1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
262944 inodes, 1051136 blocks
52556 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1077936128
33 block groups
32768 blocks per group, 32768 fragments per group
7968 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
#将/dev/md1作为设备被格式化
[root@localhost ~]# mkdir /srv/raid
[root@localhost ~]# mount -t ext4 /dev/md1 /srv/raid
[root@localhost ~]# df -h /srv/raid
Filesystem Size Used Avail Use% Mounted on
/dev/md1 3.9G 8.1M 3.7G 1% /srv/raid
六、LVM逻辑卷管理器
LVM 是将几个物理分区或磁盘通过软件组成一块看起来是独立的大磁盘
在我们第一次规划主机的时候,文件系统容量会给定一个值,但这个值不够用或者多出来了非常大的空间,好麻烦,在一定意义上浪费人力资源和磁盘容量资源,那该如何解决呢?
那这个LVM的重点就在于 可以弹性地调整文件系统的容量
①~PE (Physical Extend) 每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的
PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
②PV (Physical Volume) 物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),
是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
③VG (Volume Group) LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建
一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
④LV (Logical Volume) LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统
(比如/home或者/usr等)。
⑤LE (Logical Extent) 逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
也就是说:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区
LVM管理命令
【注】:LVM必须要有内核支持且需要安装 lvm2 这个软件
[root@localhost ~]# yum install lvm2 -y
1、PV相关命令
- pvcreate: 创建pv
例:
[root@localhost ~]# pvcreate /dev/sdb{1,2}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
- pvs: 查看pv的信息
例:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 ---- 109.79m 109.79m
/dev/sdb2 lvm2 ---- 109.82m 109.82m
-
pvdisplay: 查看pv的详细信息
-
pvscan :在系统中扫描硬盘,列出找到的物理卷列表
pvscan –e 仅显示属于卷组的物理卷 pvscan –n 仅显示不属于任何卷组的物理卷 pvscan –s 短格式输出 pvscan –u 显示UUID
例:
[root@localhost ~]# pvscan
PV /dev/sdb1 lvm2 [109.79 MiB]
PV /dev/sdb2 lvm2 [109.82 MiB]
Total: 2 [219.61 MiB] / in use: 0 [0 ] / in no VG: 2 [219.61 MiB]
- pvremove: 移除物理卷
pvremove /dev/sdd
pvmove: 移除物理卷中的PE,即将硬盘上的数据转移到其他硬盘上. pvmove /dev/sdc
2、vg相关命令
1.vgcreate : 创建卷组
-s : 指定PE的大小
vgcreated –s 16M vg1 /dev/sd{d,f,g}
例:
[root@localhost ~]# vgcreate -s 16M vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
2.vgextend: 向卷组中添加成员
vgextend vg0 /dev/sd{c,e}
例:
[root@localhost ~]# vgextend vg1 /dev/sdb3
Volume group "vg1" successfully extended
3.vgreduce:从卷组中删除成员
vgreduce vg0 /dev/sdc
4.vgremove: 删除卷组
vgremove vg0
例:
[root@localhost ~]# vgremove vg1
Do you really want to remove volume group "vg1" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume lvm? [y/n]: y
Logical volume "lvm" successfully removed
Volume group "vg1" successfully removed
5.vgs : 查看卷组信息
例:
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 192.00m 192.00m
6.vgdisplay: 查看卷组的详细信息.
例:
[root@localhost mnt]# vgdisplay vg1
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 288.00 MiB
PE Size 16.00 MiB
Total PE 18
Alloc PE / Size 14 / 224.00 MiB
Free PE / Size 4 / 64.00 MiB
VG UUID 3EAf1L-oqLA-BGOa-H7XP-4V8d-yL1H-RXBWsx
7.vgrename : 更改卷组的名称
verename vg0 lalala
8.vgchange : 改变卷组的工作状态
vgchange –a y|n(y:可用•n:不可用) vg0
9.vgexport : 导出卷组
vgexport vg0
10.vgimport : 导入卷组
vgexport vg0
3、lv的相关命令
-
lvcreate: 创建逻辑卷
-n :指定逻辑卷的名称 -L :指定逻辑卷的大小,使用空间容量进行指定,-L ## 绝对容量 ,-L +## 增量容量 -l :指定逻辑卷的大小,使用PE的个数进行指定.-l ## 绝对数量 ,-l +## 增量个数 %##free %##vg -s :指明创建的逻辑卷为快照 -p : r 设置只读属性
lvcreate –s –n lv1_snapshot -L 10G /dev/vg0/lv0 -p r #创建快照
[root@localhost ~]# lvcreate -L 100M -n lvm vg1
Rounding up size to full physical extent 112.00 MiB
Logical volume "lvm" created.
-
lvextent :扩展逻辑卷大小
lvextent –L +100G /dev/vg0/lv1
-
lvreduce :缩减逻辑卷大小
lvreduce –L 17G /dev/vg0/lv0
-
lvrename :更改逻辑卷名称
lvrename /dev/lalala/lv0 lalala0
-
lvs: 查看lv的信息
例:
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvm vg1 -wi-a----- 112.00m
- lvdisplay : 查看lv 的详细信息
例:
[root@localhost ~]# lvdisplay /dev/vg1/lvm
--- Logical volume ---
LV Path /dev/vg1/lvm
LV Name lvm
VG Name vg1
LV UUID xsAuk3-ALzd-Tnz6-089C-0ITX-oLxH-jq1HvV
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-03-27 23:54:01 +0800
LV Status available
# open 0
LV Size 112.00 MiB
Current LE 7
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
-
lvremove :删除逻辑卷
-
lvconvert :恢复快照,快照在恢复后被删除
lvconvert --merge /dev/vg0/lv1_snapshot
-
lvresize:对LV进行容量大小的调整
例:
[root@localhost ~]# lvresize -L +100M /dev/vg1/lvm
Rounding size to boundary between physical extents: 112.00 MiB.
Size of logical volume vg1/lvm changed from 112.00 MiB (7 extents) to 224.00 MiB ( 14 extents).
Logical volume lvm successfully resized.
!!!LV缩减
LVM缩减是一个比较危险的操作,而且不能像扩容一样在线操作,必须卸载逻辑卷才行,步骤如下:
1、 先卸载逻辑卷
2、 然后通过e2fsck命令检测逻辑卷上空余的空间
3、 使用resize2fs将文件系统减少
4、 再使用lvreduce命令将逻辑卷减少
注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文
件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就会出问题
!!!删除逻辑卷
1、先通过umount命令卸载掉逻辑卷
2、修改/etc/fstab里面逻辑卷的挂载信息(如有添加),否则系统有可能启动不起来。
3、通过lvremove 删除逻辑卷
4、通过vgremove 删除卷组
5、通过pvremove 将物理卷转化成普通分区
练习
1、新增磁盘一块
2、创建至少4个分区
[root@localhost ~]# fdisk /dev/sdb
...
3、创建2块pv 大小100M pvs
[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
Physical volume "/dev/sdb4" successfully created
4、创建一组vg1 大小100M vgs
[root@localhost ~]# vgcreate -s 16M vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 192.00m 192.00m
5、创建lvm 大小100M lvss
[root@localhost ~]# lvcreate -L 100M -n lvm vg1
Rounding up size to full physical extent 112.00 MiB
Logical volume "lvm" created.
[root@localhost ~]# lvdisplay /dev/vg1/lvm
--- Logical volume ---
LV Path /dev/vg1/lvm
LV Name lvm
VG Name vg1
LV UUID xsAuk3-ALzd-Tnz6-089C-0ITX-oLxH-jq1HvV
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-03-27 23:54:01 +0800
LV Status available
# open 0
LV Size 112.00 MiB
Current LE 7
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
6、新增vg2 100M
[root@localhost mnt]# vgcreate vg2 /dev/sdb4
Volume group "vg2" successfully created
7、扩容vg1 +100
[root@localhost ~]# vgextend vg1 /dev/sdb3
Volume group "vg1" successfully extended
8、扩容LV 300M
[root@localhost ~]# lvresize -L +100M /dev/vg1/lvm
Rounding size to boundary between physical extents: 112.00 MiB.
Size of logical volume vg1/lvm changed from 112.00 MiB (7 extents) to 224.00 MiB ( 14 extents).
9、格式化lv ext4格式
[root@localhost ~]# mkfs.ext4 /dev/vg1/lvm
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
57344 inodes, 229376 blocks
11468 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
28 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185
...
10、挂载到 /mnt/mylv
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
[root@localhost mnt]# mkdir mylv
[root@localhost mnt]# mount /dev/vg1/lvm /mnt/mylv
[root@localhost mnt]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sr0 on /media type iso9660 (ro)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/vg1-lvm on /mnt/mylv type ext4 (rw)