centos7下磁盘管理
- 一.基本分区管理
- 二.逻辑卷(LVM)管理
- 三.磁盘配额(摘抄)
- 四.磁盘阵列
一.基本分区管理
1.fdisk命令:
语法:fdisk ‘磁盘’
fdisk进入磁盘后,可用m或help查看帮助:
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)
例句:
[root@test ~]# 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 0x05f8aa7a.
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: 0x05f8aa7a
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free) (主分区)
e extended (扩展分区,可用来划分逻辑分区)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G
Partition 1 of type Linux and of size 5 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
解析:为磁盘sdb划分一块大小为5G的主分区
磁盘分完区后并不会马上生效,需使用partx或partprobe命令生效磁盘分区
[root@test ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
[root@test ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 45.1G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
└─sdb2 8:18 0 5G 0 part
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom
格式化分区:(ext4格式)
[root@test ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
最后挂载使用:
[root@test ~]# mkdir /test1
[root@test ~]# mount /dev/sd
sda sda1 sda2 sdb sdb1 sdb2 sdc
[root@test ~]# mount /dev/sd
sda sda1 sda2 sdb sdb1 sdb2 sdc
[root@test ~]# mount /dev/sdb1 /t
test1/ tmp/
[root@test ~]# mount /dev/sdb1 /test1/
[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 5.5G 45G 11% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 142M 873M 14% /boot
/dev/mapper/centos-home 46G 33M 46G 1% /home
tmpfs 373M 0 373M 0% /run/user/0
/dev/sdb1 4.8G 20M 4.6G 1% /test1
拓展:
lsblk命令为树状查看磁盘信息
常用参数:
-a 显示所有设备
-h 查看命令帮助
-f 查看文件系统信息
2.parted命令:
语法:parted ‘磁盘’
例句:
[root@test ~]# parted /dev/sdc (进入磁盘sdc)
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print (打印分区表)
Error: /dev/sdc: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel msdos (将磁盘转换为MBR)
(parted) mkpart (分区)
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 0%
End? 5G
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 5000MB 4999MB primary
解析:为磁盘sdc划分一块大小为5G的主分区
3.fdisk命令与parted命令区别:(摘抄)
MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)
MBR(Master Boot Record)的缩写,由三部分组成,即:
- Bootloader(主引导程序)=446字节 硬盘第一个扇区=512字节
- 引导操作系统的主程序
- DPT分区表(Disk Partition Table)=64字节
- 分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息
- 每个分区需要占用16个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
- 分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用
- 逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
- 硬盘有效标志(校验位)=2个字节
GPT >2TB gdisk(parted) 128个主分区
注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!
4.开机自动挂载:
[root@test ~]# vim /etc/fstab
/dev/mapper/centos-swap swap swap defaults 0 0
# 以下为添加
/dev/cdrom /opt/centos iso9660 defaults 0 0
解析:光盘开机自动挂载到/opt/centos文件夹下
二.逻辑卷(LVM)管理
1.逻辑卷介绍:(摘抄)
逻辑卷:
逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。
优点:可通过lvm实现动态在线扩容
- 物理卷(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个扇区512字节
- 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
- lvm寻址最小单位1个PE=4MB
- 逻辑区域 LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
真实的物理设备——>逻辑上(命令创建)——>物理卷(pv)——>卷组(vg)——>逻辑卷(lv)——>逻辑卷格式化——>挂载使用
2.创建逻辑卷:
例句:
[root@test ~]# pvcreate /dev/sdb[1,2] (创建物理卷sdb1和sdb2)
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
[root@test ~]# pvs /dev/sdb[1,2] (简要查看)
PV VG Fmt Attr PSize PFree
/dev/sdb1 vgtest1 lvm2 a-- <5.00g <5.00g
/dev/sdb2 vgtest1 lvm2 a-- <5.00g <5.00g
[root@test ~]# pvdisplay /dev/sdb[1,2] (详细查看)
...
[root@test ~]# vgcreate vgtest1 /dev/sdb[1,2] (创建卷组vgtest1,并将物理卷sdb1和sdb2添加进去)
Volume group "vgtest1" successfully created
[root@test ~]# vgs vgtest1 (简要查看)
VG #PV #LV #SN Attr VSize VFree
vgtest1 2 0 0 wz--n- 9.99g 9.99g
[root@test ~]# vgdisplay vgtest1 (详细查看)
...
[root@test ~]# lvcreate -n lvtest1 -L 2.5G vgtest1 (基于卷组vgtest1创建逻辑卷lvtest1)
Logical volume "lvtest1" created.
[root@test ~]# lvs /dev/vgtest1/lvtest1 (简要查看)
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvtest1 vgtest1 -wi-a----- 2.50g
[root@test ~]# lvs /dev/mapper/vgtest1-lvtest1 (简要查看)
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvtest1 vgtest1 -wi-a----- 2.50g
# 逻辑卷查看的方式略有不同,通过操作系统映射的文件进行查看
lvdisplay ... (详细查看)
...
lv命令创建逻辑卷常用参数:
-n:指定逻辑卷的名字
-L:指定逻辑卷的大小
-l:指定逻辑卷的大小
3.动态在线扩容:
- 1.背景:扩容原本8G的逻辑卷lvtest2为15G,发现卷组vgtest1剩余空间不足
[root@localhost ~]# lvextend -L 15G /dev/vgtest1/vgtest2
Insufficient free space: 1792 extents needed, but only 511 available
或
[root@localhost ~]# lvextend -L +7G /dev/vgtest1/vgtest2
Insufficient free space: 1792 extents needed, but only 511 available
[root@localhost ~]# vgs vgtest1
VG #PV #LV #SN Attr VSize VFree
vgtest1 1 1 0 wz--n- <10.00g <2.00g
- 2.将卷组vgtest1扩容到20G:
[root@localhost ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# vgextend vgtest1 /dev/sdb2
Volume group "vgtest1" successfully extended
[root@localhost ~]# vgs vgtest1
VG #PV #LV #SN Attr VSize VFree
vgtest1 2 1 0 wz--n- 19.99g 11.99g
- 3.逻辑卷lvtest扩容:
[root@localhost ~]# lvextend -L 15G /dev/vgtest1/vgtest2
Size of logical volume vgtest1/vgtest2 changed from 8.00 GiB (2048 extents) to 15.00 GiB (3840 extents).
Logical volume vgtest1/vgtest2 successfully resized.
[root@localhost ~]# lvextend -L +7G /dev/vgtest1/vgtest2
Size of logical volume vgtest1/vgtest2 changed from 8.00 GiB (2048 extents) to 15.00 GiB (3840 extents).
Logical volume vgtest1/vgtest2 successfully resized.
[root@localhost ~]# lvs /dev/vgtest1/vgtest2
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
vgtest2 vgtest1 -wi-a----- 15.00g
- 4.同步文件系统
[root@localhost ~]# resize2fs /dev/vgtest1/vgtest2
ps:动态在线扩容在实际中是很实用的,root空间也可以用逻辑卷进行动态在线扩容
三.磁盘配额(摘抄)
一、启用磁盘限额
1. 让文件系统支持配额 [ext3/4]
# vim /etc/fstab
/dev/vg02/lv02 /u01 ext4 defaults,usrquota,grpquota 0 0
# umount /u01
# mount -a (将/etc/fstab文件重新加载)
# 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 修改配额的宽限期
生效配置
[root@server ~]# quotaon -a
测试:
# 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:交互模式,可加多个
四.磁盘阵列
1.磁盘阵列(raid)介绍:
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 [1]
磁盘阵列还能利用同位检查(Parity Check)的观念,当数组中任意一个硬盘发生故障时,仍可读出数据。在数据重构时,可将数据经计算后重新置入新硬盘中。
- 当拥有多的廉价硬盘时,为了发挥出高级硬盘的效果,把多块廉价磁盘组合一块raid提升性能.
- 一.raid0介绍:
需要两块磁盘
将数据条带化分布到磁盘,拥有100%的磁盘空间利用率
数据安全性低
缺点:
如果有一块磁盘故障,数据将无法恢复,风险高 - 二.raid1介绍:
需要两块磁盘
将数据写到一块磁盘上,另一块磁盘同步备份,拥有50%的磁盘空间利用率
读性能好,写性能差
数据安全性较高
缺点:
成本高 - 三.raid5介绍:
至少需要三块磁盘
数据条带化存储在磁盘,拥有(n-1)/n的磁盘空间利用率
数据安全性中等
缺点:
一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能) - 四.raid6介绍:
至少需要四块磁盘
数据条带化存储在磁盘,拥有磁盘利用率(n-2)/n
数据安全性高
缺点:
成本高
ps:raid分为软raid和硬raid
软raid通过软件实现
硬raid通过硬件实现
实际工作中推荐硬raid
2.软raid创建:
安装mdadm工具:
[root@test ~]# yum -y install mdadm
创建raid0:
[root@test ~]# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb[34]
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看raid信息:
[root@test ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdb4[1] sdb3[0]
10474496 blocks super 1.2 512k chunks
unused devices: <none>
查看刚创建的raid0:
[root@test ~]# mdadm -D /dev/md0
...
格式化ext4格式:
[root@test ~]# mkfs.ext4 /dev/md0
...
挂载使用:
[root@test ~]# mount /dev/md0 /md0test/
[root@test ~]# df -h
...
创建raid1:
[root@test ~]# mdadm -C /dev/md1 -l 1 -n 2 /dev/sdc[34]
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: largest drive (/dev/sdc4) exceeds size (5237760K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
加入新的磁盘:
[root@test ~]# mdadm /dev/md1 -a /dev/sdc5
mdadm: added /dev/sdc5
创建raid5:
mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdb[1,2,3,4]
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
参数详解:
-x, --spare-devices= 表示指定热备盘
3.保存raid信息:
[root@localhost ~]# mdadm -D --scan >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md5 metadata=1.2 spares=1 name=localhost.localdomain:5 UUID=3a89dd37:3d1c479a:8c87494b:17f60dbf
4.raid停止与启动:
raid停止:
[root@localhost ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
raid启动:
# 以配置文件启动
[root@localhost ~]# mdadm -A /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
# 无配置文件启动
[root@localhost ~]# mdadm -A /dev/md5 /dev/sdb[1234]
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
raid删除:
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdb[1234] (移除md5下的所有磁盘)
mdadm: set /dev/sdb1 faulty in /dev/md5
mdadm: set /dev/sdb2 faulty in /dev/md5
mdadm: set /dev/sdb3 faulty in /dev/md5
mdadm: set /dev/sdb4 faulty in /dev/md5
[root@server ~]# mdadm /dev/md5 -r /dev/sdb[1234]
mdadm: hot removed /dev/sdc7 from /dev/md5
mdadm: hot removed /dev/sdc8 from /dev/md5
mdadm: hot removed /dev/sdc9 from /dev/md5
mdadm --stop /dev/md5 (停止md5)
擦除超级块:
mdadm --misc --zero-superblock /dev/sdb[1234]