Linux磁盘管理与LVM

磁盘管理

根据Linux下皆文件的思想,Linux中将硬盘、分区等设备也是表示为文件,存放在目录/dev/下:

在这里插入图片描述

当我们往主板上插入一块新的硬盘时,/dev/目录下就会产生一个设备文件。怎么看哪个是设备文件呢?

我们知道,硬盘接口类型有IDE、SATA、SCSI,故IDE接口的硬盘的文件名格式为hd*;由于SATA/USB/SCSI等磁盘接口都是使用SCSI模块来驱动的,故SATA和SCSI接口的硬盘的文件名格式为sd*。

在这里插入图片描述

master boot record——主引导记录MBR包含了硬盘的主引导程序和硬盘分区表,在而分区表中有4个分区记录区,每个分区记录区占16个字节。

怎么划分分区呢?我们来认识一下磁盘管理工具fdisk。

fdisk

我们用fdisk命令,加上参数<设备路径>,对该设备进行磁盘管理:

[root@nat18 ~]# 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 0x571c56c2.

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
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   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)

从输入m请求help的输出信息中我们可以看到,输入不同的字母可以执行不同的操作,下面我们介绍一下几个常用的:

字母作用
n创建分区 new
d删除分区 delete
t转换分区system id
w保存退出交互 write
p打印该磁盘分区情况 print
q退出不保存 quit

好,我们来试着用这些交互来创建一个分区:

Command (m for help): n      //创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):          //默认创建主分区
Using default response p
Partition number (1-4, default 1):     //分区号
First sector (2048-41943039, default 2048):        //指定起始扇区,默认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): 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: 0x571c56c2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

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

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

完成后确认,没有问题则输入w保存退出。退出交互后我们来确认一下是否成功,用fdisk -l dev_path

[root@nat18 ~]# fdisk -l /dev/sdb   //查看/dev/sdb设备的分区情况

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: 0x571c56c2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

以及能看到这个分区了,分区创建成功!但我们现在还不能使用这个分区,我们还要进行格式化和挂载,使用mkfs命令来对分区进行格式化。

mkfs

一般用法:

mkfs -t 文件系统类型

mkfs.文件系统类型

我们看下实例:

[root@nat18 ~]# mkfs.ext4 /dev/sdb1    //格式化为ext4格式
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 

没有报错,格式化成功。

注:格式化会导致磁盘数据丢失,慎用。

格式化完成后接下来是挂载。

mount

命令格式:

mount dev_path mountpoint

我们创建一个挂载点,把格式化好的分区挂载起来:

[root@nat18 ~]# mkdir /sdb1   				//创建挂载点
[root@nat18 ~]# mount /dev/sdb1 /sdb1/		//挂载分区

用df命令来验证一下:

[root@nat18 ~]# df -Th     //查看挂载情况
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  9.7G  7.4G  57% /
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M  8.0M  479M   2% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0
/dev/sdb1               ext4      9.8G   37M  9.2G   1% /sdb1

既然有挂载,那自然就有取消挂载。

umount

命令格式:

umount dev_path

umount mountpoint

例子:

[root@nat18 ~]# umount /sdb1/
[root@nat18 ~]# df -Th     //查看设备是否还是挂载状态
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  9.7G  7.4G  57% /
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M  8.0M  479M   2% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0

至此为止,我们就把一块新的硬盘真正地使用起来了。但这样挂载存在一个问题:设备关机重启后,这些分区需要重新去挂载。作为管理员,这样的懒我们当然要想办法去偷~

自动挂载

当系统下划分了新的分区后,需要将这些分区设置为开机自动挂载,/etc/fstab文件负责配置Linux开机时自动挂载的分区。

我们用vim编辑器进入/etc/fstab文件中一看究竟:

# /etc/fstab
# Created by anaconda on Sat Aug 31 07:09:33 2019
#
# 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
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=01918100-0888-4544-b866-be556b8f36a1 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

我们来解读一下这个配置文件,看第一行,首先是一个设备路径,说明这是个分区;xfs是高性能日志文件系统,所以路径后面应该是文件系统类型;‘defaults’表示的是权限,默认的权限是读写,根据需要也可以改成ro(read only);最后两个0分别是容灾和加载顺序,一般填0就可以了。

回到原来的需求上,要实现自动挂载,就要把我们刚挂载的sdb1写入到/etc/fstab文件中:

# /etc/fstab
# Created by anaconda on Sat Aug 31 07:09:33 2019
#
# 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
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=01918100-0888-4544-b866-be556b8f36a1 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /sdb1   ext4    defaults        0       0  			//写入sdb1的挂载情况

写好文件后,保存退出。在命令行中重新挂载我们的sdb1(因为刚刚用umount取消挂载了),这时因为我们已经把sdb1写入到/etc/fstab中了,所以只需要使用命令‘mount -a’ 就能把/etc/fstab中的设备全部挂载。

[root@nat18 ~]# df -Th				//sdb1未挂载
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  9.7G  7.4G  57% /
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M   15M  473M   3% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0
[root@nat18 ~]# mount -a 			//挂载
[root@nat18 ~]# df -Th				//sdb1成功挂载
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  9.7G  7.4G  57% /
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M   15M  473M   3% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0
/dev/sdb1               ext4      9.8G   37M  9.2G   1% /sdb1

LVM

通过给fdisk命令给硬盘分区,确实可以给我们带来便利,但仍存在局限性:不能动态地改变分区的大小。而LVM,解决了这个问题。

LVM基本概念

PV——物理卷

VG——卷组

LV——逻辑卷

假如把所有的硬盘都当作资源来看,物理卷就是把硬盘经过加工,变成了适合去做LVM的一种形态;再把这些物理卷变成一个整体,也就是卷组,也可以把卷组理解成一个由很多硬盘组成的大硬盘;最后根据需要,对卷组进行划分,成为逻辑卷,逻辑卷就是可以灵活控制大小的磁盘啦。

物理卷PV管理

我们把/dev/sdc和/dev/sdd两个硬盘做成物理卷,首先按照fdisk分区的方法为两个硬盘分区,两个硬盘都分1个主分区就好。

pvcreate

[root@nat18 ~]# pvcreate /dev/sdc1 /dev/sdd1    //创建物理卷
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdd1" successfully created.

pvscan

[root@nat18 ~]# pvscan		//扫描做了物理卷的硬盘
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  PV /dev/sdd1                      lvm2 [<20.00 GiB]
  Total: 3 [58.99 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [<40.00 GiB]

pvremove

[root@nat18 ~]# pvremove /dev/sdc1 /dev/sdd1  //删除物理卷
  Labels on physical volume "/dev/sdc1" successfully wiped.
  Labels on physical volume "/dev/sdd1" successfully wiped.

卷组VG管理

vgcreate

[root@nat18 ~]# vgcreate myvg1 /dev/sdc1 /dev/sdd1   //创建卷组,名为myvg1
  Volume group "myvg1" successfully created

vgscan

[root@nat18 ~]# vgscan    //扫描卷组
  Reading volume groups from cache.
  Found volume group "myvg1" using metadata type lvm2

vgremove

[root@nat18 ~]# vgremove myvg1    //删除卷组
  Volume group "myvg1" successfully removed

逻辑卷LV管理

lvcreate

[root@nat18 ~]# lvcreate -L 10G -n mylv1 /dev/myvg1  //创建逻辑卷,大小为10G,名字为mylv1,使用卷组myvg1创建
  Logical volume "mylv1" created.

lvscan

[root@nat18 ~]# lvscan				//扫描LV
  ACTIVE            '/dev/myvg1/mylv1' [10.00 GiB] inherit

lvremove

[root@nat18 ~]# lvremove /dev/myvg1/mylv1     //删除LV
Do you really want to remove active logical volume myvg1/mylv1?[y/n]: yes
  Logical volume "mylv1" successfully removed

lvextend

[root@nat18 ~]# lvextend -L +5G /dev/myvg1/mylv1    //lv扩容+5G
  Size of logical volume myvg1/mylv1 changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
  Logical volume myvg1/mylv1 successfully resized.
[root@nat18 ~]# lvscan 
  ACTIVE            '/dev/myvg1/mylv1' [15.00 GiB] inherit

lvreduce

[root@nat18 ~]# lvreduce -L -5G /dev/myvg1/mylv1   //lv减5G
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg1/mylv1? [y/n]: yes
  Size of logical volume myvg1/mylv1 changed from 15.00 GiB (3840 extents) to 10.00 GiB (2560 extents).
  Logical volume myvg1/mylv1 successfully resized.
[root@nat18 ~]# lvscan 
  ACTIVE            '/dev/myvg1/mylv1' [10.00 GiB] inherit

到这里,我们创建的逻辑卷mylv1就可以当做正常的硬盘一样使用啦:

[root@nat18 ~]# mkfs.ext4 /dev/myvg1/mylv1   //格式化
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 

[root@nat18 ~]# mount /dev/myvg1/mylv1 /mylv1/   //挂载,需先创建挂载点
[root@nat18 ~]# df -Th    //查看挂载情况
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  9.7G  7.4G  57% /
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M   15M  473M   3% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0
/dev/sdb1               ext4      9.8G   37M  9.2G   1% /sdb1
/dev/mapper/myvg1-mylv1 ext4      9.8G   37M  9.2G   1% /mylv1   //挂载成功
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值