常用命令
- 查看分区使用情况:df -h
- 查看文件、目录大小:du -h /etc/
- 查看文件详细时间参数:stat /etc/passwd
- 校验文件md5值:md5sum /etc/passwd
- 检测修复文件系统:fsck、e2fsck (单用户模式卸载文件系统后执行)
如果硬盘出现在/etc/fstab文件中的话,会在引导期间自动进行fsck。
硬盘分区
- 划分分区(fdisk)
- 创建文件系统(mkfs)
- 尝试挂载(mount)
- 写入配置文件(/etc/fstab)
- 查看硬盘分区情况(lsblk)
SAS硬盘可以热插拔,插入硬盘后,磁盘会立刻显示在fdisk -l 的列表里,可以立刻开始使用。
SCSI硬盘还没这么便捷,但也是可以做到不重启就加入使用的。
初始化硬盘
不重启服务器也能立刻使用,通过修改/proc/scsi/scsi文件
查看/proc/scsi/scsi的文件(作前后对比)
操作方法:
我们以root权限执行 echo "scsi add-single-device 0 0 1 0" > /proc/scsi/scsi 添加scsi设备
解释一下 scsi add-single-device a b c d 这个指令中的参数:
# 相反 scsi remove-single-device a b c d 是用来移除设备的
a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0
b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0
c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,
d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,
总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。
再看看效果:# cat /proc/scsi/scsi
划分分区
如何分区?
#fdisk /dev/sdb 进入到fdisk模式
输入命令F,查看未划分的空间
输入命令n,添加新分区
主分区最多可以建4个。
扩展分区里,再创建逻辑分区。
划分5个区
第一个分区,主分区是4G大小
为什么第一个扇区不是从0开始?因为在硬盘的最前面,是放硬盘的控制信息,也叫超级块(super block)。所以从2048开始。 如果0磁道坏了,无法修复。
5、6、7、8是逻辑分区。 sd2扩展分区是逻辑分区的容器,是不能直接挂载的。 5、6、7、8可以挂载
命令w写入到硬盘里面,再用lsblk查看
创建文件系统——格式化
现在分区有了,如何对磁盘进行格式化? mkfs
#mkfs.xfs /dev/sdb1 对sdb1构建文件系统
挂载
#cd /mnt
#mkdir mydisk1
#mount /dev/sdb1 /mnt/mydisk1
#lsblk
同理,其他的分区,也要这样先格式化,再挂载才能使用
写入配置文件
写入到配置文件
#vim /etc/fstab
第一个数字代表是否 内存上的恢复,系统有问题会把内存写入到磁盘下,1代表开启,0代表关闭
第二个数字代表是否 对这个分区进行检查,1代表开启,0代表关闭
然后重启 reboot
查看硬盘分区情况
结果:
磁盘阵列
阵列介绍
RAID0:RAID0 具有低成本、高读写性能(将数据按条带分散到存储池中的各个硬盘,顺序读写操作因此也就发生在多块硬盘上,降低了读写时间)、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。
RAID1:RAID1 为了增强数据安全性使两块 磁盘数据呈现完全镜像,写操作同时被复制到多块硬盘,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力。 磁盘利用率50%
RAID5:RAID5 的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。(通过奇偶校验计算出) 至少需要3块硬盘。其中(N-1)块用于存储数据
Ap、Bp、Cp、Dp 奇偶校验
性能 和 可靠性 兼顾,但磁盘利用率会损耗,因为有校验码
RAID 1+0:同时获得RAID 0的性能和RAID 1的冗余型,其配置至少需要4块硬盘。
RAID6:类似于带有两块奇偶校验盘的RAID 5。RAID 6能够承受两块硬盘的彻底故障而不丢失数据。它需要至少4块硬盘。
RAID5的不足之处:
mdadm指令
mdadm命令常见参数解释:
参数 | 作用 |
---|---|
-a | 检测设备名称、添加磁盘 |
-n/–raid-devices= | 指定设备数量 |
-l/–level | 指定RAID级别 |
-C/–create | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
RAID 0
现在有四块块硬盘,其中一个是按照自带的sda,一个sdb是上个实验的,sdc和sdd是新添加的
#vim /etc/fstab
删除刚才的内容
#umount /dev/sdb1
然后重启后,scsi编号会变。要先确认控制器的编号是什么。
#fdisk /dev/sdb 进入模式,输入命令d,删除分区
RAID 1
虚拟机上添加4个硬盘
#fdisk /dev/sdb
命令:m
默认:p
命令:t
Hex代码:fd 将分区Linux的类型更改为 Linux raid autodetect
命令:w 保存
同样操作对 /dev/sdc sde
![](https://img-blog.csdnimg.cn/20200509123745427.png)
可以看到一件把sdb1 sdc1 sde1分出来了
创建 镜像卷 和 热备盘
#mdadm -C -v /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1 -x 1 /dev/sde1
查看磁盘当前状态:cat /proc/mdstat
挂载:#mount /dev/md1 /mnt/raid1 (要先创建 #mkdir -p /mnt/raid1)
lsblk -l 表示以列表方式显示block设备的信息
向硬盘里面写入一个有大小的文件: dd if=/dev/zero of=/mnt/raid1/test bs=1M count=10
出去的数据流
热备盘作用体现
模拟硬盘出问题:#mdadm -f /dev/md1 /dev/sdb1
查看磁盘当前状态:#cat /proc/mdstat 能看到热备盘启动中,数据正在恢复 recovery
查看磁盘详细状态:#mdadm -D /dev/md1
把坏的硬盘拿下来:#mdadm -r /dev/md1 /dev/sdb1
查看磁盘详细状态:#mdadm -D /dev/md1 可以看到total devices:2
添加硬盘:#mdadm -a /dev/sdb1
查看磁盘详细状态:#mdadm -D /dev/md1发现sdb1作为热备盘了
如何拆卸RAID
把raid的信息写入到配置文件。 防止下次开机出问题
#mdadm -Ds > /etc/mdadm.conf
也可以放在fstab ,向上面一样
拆卸:#umount /dev/md1
umount:/mnt/raid1:target is busy (因为在当前目录)
停止:#mdadm -S /dev/md1
三个分区的超级块清空:
#mdadm --zero-superblock /dev/sdb1
#mdadm --zero-superblock /dev/sdc1
#mdadm --zero-superblock /dev/sde1
RAID 5
1、创建磁盘阵列:
mdadm -C -v /dev/md5 -l 5 -n 3 /dev/sdb1 /dev/sdc1 /dev/sde1 -x 1 /dev/sdd1
-l 表示指定RAID 级别
-n 表示需要的硬盘
-x 表示加热备盘
2、创建文件系统:
mkfs.xfs /dev/md5
cd /mnt
mkdir raid5
mount /dev/md5 /mnt/raid5
查看硬盘:lsdblk -l
#cat /proc/mdstat
虚拟文件/proc/mdstat总是包含了md以及系统中所有RAID的状态汇总信息。添加新硬盘或替换过故障硬盘之后,密切关注/proc/mdstat文件尤其有用。
模拟坏了硬盘:#mdadm -f /dev/md5 /dev/sde1
查看情况:cat /proc/mdstat
查看详细信息:#mdadm -D /dev/md5
卸下坏的硬盘:mdadm -r /dev/md5 /dev/sde1
同步好之后加入进去:mdadm -a /dev/sde1
做永久的挂载:#mdadm -Ds /etc/mdadm.conf
#vim /etc/fstab
#/dev/md5 /mnt/raid5 xfs defaults 0 0
第一个0是系统崩溃的时候,把系统写入到分区里。 0表示并不会写入
第二个0是启动时是否要对这个分区进行检查,0表示不检查
重启后 df 验证
软Raid与硬Raid的区别
软Raid:是由操作系统模拟的Raid,一旦硬盘损坏,操作系统就会损坏,Raid会丧失作用。
硬Raid:是由独立于硬盘之外的,硬件Raid卡组成;就算硬盘损坏,也不会导致Raid卡损坏,磁盘容错才能起作用。
- 创建磁盘阵列
由3块相同的1TB硬盘组成的RAID 5.
$ mdadm --create /dev/md/extra --level=5 --raid-devices=3 /dev/sdf1 /dev/sdg1 /dev/sdh1
划分分区
fdisk /dev/sdb
新建分区,更改分区类型
输入命令:t,在输入L,修改类型。如果最后提示错误的话,等修改完sdc和sdd,再重启,通过lsblk再次验证
fdisk /dev/sdc
fdisk /etc/sdd
结果:
创建磁盘阵列和格式化
安装工具:dnf info mdadm 创建和管理磁盘阵列
创建磁盘阵列
#mdadm -C -v /dev/md0 -l 0 -n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1
md这个命名是固定的,序号自己定。
- -l 0 表示raid 0 两块硬盘同时读写
- -n 3 表示3块磁盘用作磁盘阵列
在镜像启动的时候可以进行挂载,必须把mdadm -Ds 写到配置文件。这样重启之后,这个镜像还在。如果没写的话,可能会失效
#mdadm -Ds >/etc/mdadm.conf
然后进行格式化
挂载
#mkdir /mnt/raid0
#mount /dev/md0 /mnt/raid0
#df -h 初步验证
写入配置文件
写入到配置文件 /etc/fstab,为了系统重启之后还能正常使用
#vim /etc/fstab
验证
重启后最终验证
总结:
fdisk 后n 划分, mkfs 格式化,手动写入 /etc/fstab 自动挂载,lsblk查看
磁盘配额
作用:限制用户使用的磁盘空间
查看磁盘配合工具有没安装:dnf info quota
文件系统:xfs
文件系统:xfs
对用户、组设置配额功能:
#vim /etc/fstab
/dev/md5 /mnt/raid5 xfs defaults,uquota,gquota 0 0
#umount /mnt/raid5
#mount -o uquota,gquota /dev/md5 /mnt/raid5
查看配额报告:#xfs_quota -x -c 'report' /mnt/raid5
设置block的软硬限制:#xfs_quota -x -c 'limit bsoft=100M bhard=150M Kolor'
软限制有限定时间的
查看配额报告:#xfs_quota -x -c 'report -ubih' /mnt/raid5
#passwd Kolor
#chmod 777 /mnt/raid5 为了避免后面的权限不足
#su Kolor
$cd /mnt/raid5
$dd if=/dev/zero of=/mnt/raid5/test bs=1M count=100
zero表示填充0
of是输出
bs是每一块数据的大小
$xfs_quota -x -C 'report' /mnt/raid5
延长软硬件时间:#xfs_quota -x -c 'timer -b -u 30days' /mnt/raid5
查看配合状态:#xfs_quota -x -c 'state'
卸载配合限制:#xfs_quota -x -c 'disable -up' /mnt/raid5
#xfs_quota -x -c 'report -ubh' /mnt/raid5
文件系统:ext4
文件系统:ext4
#fdisk /dev/sdb
n->p->w流程
#mkfs.ext4 /dev/sdb1
#vim /etc/fstab
/dev/sdb1 /mnt/sdb ext4 defaults,usrquota,grpquota 0 0
#cd /mnt
#mkdir sdb
#mount /dev/sdb1 /mnt/sdb
#mount -o remount /mnt/sdb
#quotacheck --cvug /mnt/sdb
#ls 查看到配置文件
#quotaon /mnt/sdb 打开挂载点功能
改配置文件:
#edquota -u Kolor
102400 204800
#chmod 777 /mnt/sdb
#su Kolor
$dd if=/dev/zero of=/mnt/sdb/test bs=10M count=30
会提示:超出磁盘限额
案例(LVM)
1、如何添加一块新的50G硬盘到linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?
a、把硬盘放进服务器并连接
b、建立硬盘分区(通过fdisk命令)
c、格式化分区
d、挂载分区(可写入到/etc/fatab中,重启自动挂载)
fdisk –l 查找50G设备名称,假设为/dev/sdb
fdisk /dev/sdb
n
选择起始磁柱至最后结束磁柱
+50G
w保存退出
此时分区为/dev/sdb1
partprobe /dev/sdb1 partprobe: 通知系统分区表的变化
mkdir /pardisk
mkfs -t ext4 /dev/sdb1
mount /dev/sdab1/pardisk
逻辑卷管理
逻辑卷管理器允许你动态地将存储空间从过大的分区重新分配给有需要的分区。
逻辑卷管理本质上是硬盘分区的加强及抽象版。它将单个的存储设备组织成“卷组”(volume group)。卷组中的块可以进行分配,形成“逻辑卷”(logical volume),逻辑卷由块设备文件描述,其行为就像分区一样。
逻辑卷要比硬盘分区更灵活、更强大。下面是一些逻辑卷管理器能够完成的神奇操作;
- 在不同的物理设备之间移动逻辑卷;
- 动态地扩展和收缩逻辑卷
- 生成逻辑卷的写时复制“快照”;
- 在不中断服务的情况下在线更换硬盘;
- 在逻辑卷中实现镜像或条带化
逻辑卷的组成部分能够以多种方式组合在一起。串联将每个设备的物理块放在一起,依次使用各个设备。条带化将各部分交错分部,使得相邻的虚拟快实际上分布在多个物理硬盘上。通过降低单硬盘瓶颈,条带化往往可以带来更高的带宽和更低的延迟。
LVM的命令集如图所示:
LVM架构的最上层是由单个的硬盘和分区(物理卷)组成的存储池(称为卷组)。卷组然后被划分成逻辑卷,逻辑卷是用来存放文件系统的块设备。逻辑卷的体系分为3个层次: 底层的PV,中层的VG,最上层的LV。
Linux的LVM涉及几个截然不同的阶段:
- 创建(其实是定义)和初始化物理卷;
- 将物理卷添加到卷组;
- 在卷组中创建逻辑卷;
- 操作名:pv命令处理物理卷,vg命令处理卷组,lv命令处理逻辑卷
(1)逻辑卷快照
可以为任何LVM逻辑卷创建写时复制(copy-on-write)副本,无论卷中是否包含文件系统。
问题在于逻辑卷的大小是固定的。创建逻辑卷时,存储空间提前就从卷组中分配好了。写时复制副本最初并不消耗空间,但随着数据块被修改,卷管理器得找到空间保存新旧两个版本。在生成快照时,必须为被修改的块预留空间,和任何LVM逻辑卷一样,所分配的存储空间大小固定。
如果为快照分配的空间少于其做镜像的逻辑卷所消耗的空间,有可能会出现快照空间不足的情况。因为卷管理器无法维护一致的快照镜像。需要使用额外的存储空间保持快照和逻辑卷相同。空间不足的结果就是LVM停止维护快照,从而导致快照损坏。
要想将/dev/DEMO/web作为/dev/DEMO/web1的快照,使用下列命令。
$ sudo lvcreate -L 100G -s -n web1-snap DEMO/web1
这是建立在已经做好逻辑卷的基础上进行的。注意,快照有自己的名称,快照源必须以 卷组/逻辑卷
的形式指定。其中这个例子的卷组是DEMO,逻辑卷是web1
lvdisplay可以检查快照的状态。如果lvdisplay告诉你某个快照的状态是 “inactive”,这表示该快照空间不足,应该删掉了。如果快照处于这种状态,也就无能为力了。
(2)调整文件系统大小
文件系统溢出要比硬盘崩溃更常见,逻辑卷比硬性分区优势之一在于更灵活、更易于调整大小。
逻辑卷管理器对逻辑卷的内容一无所知,所以你必须在逻辑卷和文件系统这两个层面上调整大小。调整顺序取决于具体操作。
- 如果是减小操作,先在文件系统上执行;
- 如果是扩大操作,则必须先扩大逻辑卷;
示例1:/mnet/web1的增长超出了预期,需要再增加100GB的空间。我们先检查卷组,确保有足够的空间可用。
首先检查卷组,确保有足够的空间可用
$ vgdisplay DEMO
先卸载文件系统,然后使用lvresize为逻辑卷增加空间
$ sudo umount /mnt/web1
$ sudo lvchange -an DEMO/web1
$ sudo lvresize -L +100G DEMO/web1
$ sudo lvchange -ay DEMO/web1
使用lvchange命令来停用待调整大小的逻辑卷,调整完成后再重新启用该卷。
2、LVM合并磁盘方法❤
LVM逻辑卷管理支持“动态扩盘”,即可以在不停机的情况下扩容磁盘容量,前提是该分区也是LVM格式的才可以在此基础上进行“追加”。同时也可以将两块磁盘进行合并
(1)使用fdisk -l命令查看机器增加了2块物理磁盘,一块40G另一块50G,需要将这两块盘的空间合并在一起,而且还需要动态扩展即在不关机的情况下操作
(2)使用pvcreate将两块新增的物理磁盘加入物理卷
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
[root@localhost ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
(3)创建逻辑卷组VolGroup00,并将/dev/sdc加入其中
直接vgcreate创建卷组的同时,还可以将物理卷/dev/sdb添加到卷组中
[root@localhost ~]# vgcreate VolGroup00 /dev/sdb
Volume group "VolGroup00" successfully created
[root@localhost ~]# vgextend VolGroup00 /dev/sdc
Volume group "VolGroup00" successfully extended
(4)使用pvdisplay查看/dev/sdb /dev/sdc的Free PE,一个是10239,另一个是12799,两者之和是23038。
- pvdisplay指令用于显示物理卷的属性(大小,PE大小,被卷组描述符使用的空间)。
(5)使用vgdisplay查看两块物理磁盘合并后的Free PE SIZE大小通用为23038
- vgdisplay指令用于显示LVM卷组的元数据信息。
(6)然后创建LVM的逻辑卷:lvcreate -l +23038 -n vg01 VolGroup00 ,其中23038为Free PE SIZE的大小,VolGroup00 为步骤3中创建的逻辑卷组名
(7)使用lvdisplay命令获取到LV Path /dev/VolGroup00/vg01,并使用mkfs -t ext3 /dev/VolGroup00/vg01命令对其进行格式化
- lvdisplay指令用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。
(8)创建文件夹并挂载,目录大小显示为89G,已经将40和50G两块物理硬盘“合并”在一起了
[root@localhost ~]# mkdir -p /data
[root@localhost ~]# mount /dev/VolGroup00/vg01 /data
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 37G 5.7G 30G 17% /
tmpfs 495M 72K 495M 1% /dev/shm
/dev/sda1 485M 35M 426M 8% /boot
/dev/mapper/VolGroup00-vg01 89G 184M 84G 1% /data
2、初始化机器案例
[root@Centos64:~]# fdisk -l | grep '300.1 GB' | sort
Disk /dev/sda: 300.1 GB, 300069052416 bytes
Disk /dev/sdb: 300.1 GB, 300069052416 bytes
Disk /dev/sdc: 300.1 GB, 300069052416 bytes
Disk /dev/sdd: 300.1 GB, 300069052416 bytes
Disk /dev/sde: 300.1 GB, 300069052416 bytes
Disk /dev/sdf: 300.1 GB, 300069052416 bytes
Disk /dev/sdg: 300.1 GB, 300069052416 bytes
Disk /dev/sdh: 300.1 GB, 300069052416 bytes
Disk /dev/sdi: 300.1 GB, 300069052416 bytes
Disk /dev/sdj: 300.1 GB, 300069052416 bytes
Disk /dev/sdk: 300.1 GB, 300069052416 bytes
Disk /dev/sdl: 300.1 GB, 300069052416 bytes
①、用 fdisk 给每一个磁盘创建一个 8e 分区:
这样就完成了一块磁盘,接着我们依次将其他 sdc 到 sdl 的磁盘也操作一把。
[root@Centos64:~]# fdisk /dev/sdb
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
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 #选择主分区
Partition number (1-4): 1
First cylinder (1-36481, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-36481, default 36481): #直接回车选择最大
Using default value 36481
Command (m for help): t #输入 t 进入类型选择
Selected partition 1
Hex code (type L to list codes): 8e #输入 8e 格式
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w #w 保存
②、全部完成后,使用 pvcreate 将所有分区转化成物理卷,即添加 LVM 属性信息并划分 PE 存储单元:
[root@Centos64:~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sde1" successfully created
Physical volume "/dev/sdf1" successfully created
Physical volume "/dev/sdg1" successfully created
Physical volume "/dev/sdh1" successfully created
Physical volume "/dev/sdi1" successfully created
Physical volume "/dev/sdj1" successfully created
Physical volume "/dev/sdk1" successfully created
Physical volume "/dev/sdl1" successfully created
创建完 PV 之后,就可以使用 pvdisplay 或 pvs 查看详细信息了
③、下面我们需要创建一个 VG,然后 PV 都加入到这个卷组当中,卷名可自定义,比如 vg:
[root@Centos64:~]# vgcreate vg /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Volume group "vg" successfully created
同样,在创建好 VG 以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看 VG 的信息(略
④、接着,使用 lvcreate 命令基于 VG 创建逻辑卷,vg 和 lvm 我们自定义的名称:
[root@Centos64:~]# lvcreate -l 100%VG -n lvm vg
Logical volume "lvm" created
同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息(略)
⑤、格式化创建的逻辑卷:
[root@Centos64:~]# mkfs.ext4 /dev/vg/lvm
⑥、挂载分区:
[root@Centos64:~]# mkdir /data
[root@Centos64:~]# echo '/dev/vg/lvm /data ext4 noatime,acl,user_xattr 1 2' >> /dev/fstab
[root@Centos64:~]# mount -a
[root@Centos64:~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.9G 2.1G 7.4G 22% /
/dev/sda3 20G 370M 19G 2% /usr/local
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda4 244G 205M 232G 1% /data1
/dev/mapper/vg-lvm 3.1T 932M 3.0T 1% /data
所以,就将上面的操作串成脚本,一键完成:
#!/bin/bash
partition=/data # 定义最终挂载的名称
vgname=vg # 定义逻辑卷组的名称
lvname=lvm # 定义逻辑卷的名称
code='b c d e f g h i k j l' # 根据分区的实际情况修改
disk=
for i in $code
do
fdisk /dev/sd$i << EOF # 这里自动化完成了所有分区 fdisk 苦逼的交互步骤
n
p
1
1
t
8e
w
EOF
disk="$disk /dev/sd${i}1" # 将所有分区拼起来
done
pvcreate $disk
vgcreate $vgname $disk
lvcreate -l 100%VG -n $lvmname $vgname
mkfs.ext4 /dev/$vgname/$lvmname
mkdir -p $partition
echo "/dev/$vgname/$lvmname $partition ext4 noatime,acl,user_xattr 1 2" >> /dev/fstab
mount -a
df -h
3、扩容根磁盘
(1)背景:有一台服务器,我把服务都放在了根目录下,随着时间的增加,根目录的空间很快就被占满了。所以我不得不快速给根目录扩容。
(2)分析
- 先使用vgs查看vg是否还有剩余的内存。
- 再使用lsblk或者fdisk -l查看是否还有没有用到的盘。
- 如果上边两步都没有可用的空间,建议再插入一张磁盘。再重复2.2查看磁盘是否插入成功。
- 通过2.2,我发现了sdb还没使用,为了省事,我直接把整个磁盘sdb创建成了pv,然后把pv加载到vg,再分配给根目录挂在的lv上边。(注意:原来lv剩余0%时,先删除点日志,腾出来点空间再给lv分配空间,不然容易失败;另外,vgs查看剩余可用空间如果写着<200g,那么这时,只能给lv分配200G以内的数,建议150G,直接分配200G显示成功,实际失败)
(3)实现步骤
- 先使用vgs查看vg是否还有剩余的内存。
- 再使用lsblk或者fdisk -l查看是否还有没有用到的盘,发现有个sdb盘有200G还没有用。
- 通过2.2,我发现了sdb还没使用,为了省事,我直接把整个磁盘sdb创建成了pv(也可以先创建分区,fdisk /dev/sdb),然后把pv加载到vg,再分配给根目录挂在的lv上边。 (xfs_growfs)
- vgextend可以参考上面
4、扩容大全
4.1 背景
linux使用中经常遇到磁盘空间不足,需要对磁盘进行扩容。根据自己的经验进行归纳整理,多种场景。
分区情况说明:
sda是单独的一块磁盘总大小50G,sda1、sda2是两个分区,sda2下面有三个逻辑分区centos-root 、centos-home、centos-swap (df命令时可以看到的挂载点);
centos-root 对应的挂载点是 根目录
centos-home对应的挂载点是 /home
卷组名称为centos (通过pvdisplay查看)
[root@vm-210 templates]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 40G 0 lvm /
├─centos-home 253:1 0 7G 0 lvm /home
└─centos-swap 253:2 0 2G 0 lvm [SWAP]
[root@vm-210 templates]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
#卷组名称
VG Name centos
PV Size <49.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 12543
Free PE 1
Allocated PE 12542
PV UUID 1Fpioh-HkxD-f4Pd-78An-on4A-vGS1-B9UXr4
4.2 场景一:将centos-home分区移动到根分区centos-root
由于分区时,centos-home分区空间非常大,centos-root分区非常小,需要删除centos-home分区,扩容到centos-root分区
操作思路(括号中是用到的命令):
- 先备份/home下文件
- 卸载(umount) /home (注意:卸载不掉时,请将所有使用/home的进程关闭 )
- 从逻辑卷中删除(lvremove) home 分区
- 扩展:将腾出的空间扩展(lvextend)到 centos-root分区下
- 使扩展生效(xfs_growfs)
- 注释掉fstab中的启动挂载项
- 恢复备份数据到/home 下
#!/bin/bash
#【功能】 将centos-home分区的空间移动到根centos-root分区下
#1.先备份 /home下文件: 将/home下的所有内容备份到/backup下,下面的命令自动创建/backup目录
mkdir /backup && mv /home/* /backup
# 2.卸载 centos-home
umount /home
## 如提示失败则用下面的命令终止/home 分区下的进程 再进行卸载
## fuser 安装方法 yum install -y psmisc
## fuser -m -v -i -k /home
## 判断是哪个进程占用了此目录,请kill掉那个进程也可以
# 3.从逻辑卷中删除(lvremove) centos-home 分区
echo y|lvremove /dev/mapper/centos-home
# 4.扩展:将腾出的空间扩展(lvextend)到 centos-root分区下
lvextend -l+100%FREE /dev/mapper/centos-root
# 5.使扩展生效(xfs_growfs)
xfs_growfs /dev/mapper/centos-root
# 6.注释掉fstab中的启动挂载项
sed -i 's;/dev/mapper/centos-home;#/dev/mapper/centos-home;g' /etc/fstab
# 7.恢复 原来home下的数据 并删除/backup
mv /backup/* /home && rm -rf /backup
# 8.查看
df -H
4.3 新增磁盘扩容到根目录或者home下
磁盘空间不足,新增加了一块硬盘的场景。此处举例新增的一块磁盘名称为/dev/sdb
操作思路(括号中是用到的命令):
- 查看磁盘情况(lsblk、fdisk -l、pvdisplay)
- 创建物理卷(pvcreate)
- 将磁盘扩展到卷组(vgextend)
- 扩展逻辑分区(lvextend)
- 使扩展生效(xfs_growfs)
- 查看(df -H)
# 1.查看磁盘情况(lsblk、fdisk -l、pvdisplay)
lsblk
# 2.创建物理卷(pvcreate)
pvcreate /dev/sdb
# 3.将磁盘扩展到卷组(vgextend)
vgextend centos /dev/sdb
# 4.扩展逻辑分区(lvextend)
# 根据自己的情况选择扩容到centos-root
# 还是centos-home逻辑分区,请修改注释
# 100%是将所有的磁盘空间扩容到指定分区,也可以根据需要进行调整比例
# 也支持指定大小比如10G等等(指定固定值时参数-l需要修改为-L)
lvextend -l+100%FREE /dev/mapper/centos-root
#lvextend -l+100%FREE /dev/mapper/centos-home
# 5.使扩展生效(xfs_growfs)根据扩容的分区进行选择使用
# xfs_growfs /dev/mapper/centos-home
xfs_growfs /dev/mapper/centos-root
# 6.查看(df -H)
df -H
场景三:在原始磁盘上增加空间(常在虚拟化环境中)
虚拟化或者超融合环境中、或者VMware虚拟机中;磁盘空间不足,增加了已有磁盘的大小的场景,把增加的空间扩容到根目录或者centos-home下。
操作思路(括号中是用到的命令):
方法一:fdisk进行分区,操作步骤与场景二基本一样,多了一步分区
查看磁盘情况(lsblk、fdisk -l、pvdisplay)
创建分区(fdisk 磁盘名称)
创建物理卷(pvcreate)
将磁盘扩展到卷组(vgextend)
扩展逻辑分区(lvextend)
使扩展生效(xfs_growfs)
查看(df -H)
方法二:用parted命令调整大小
查看磁盘情况(parted /dev/sda print free)
分配剩余的可用空间(parted /dev/sda resizepart 2 100%)
刷新物理卷(pvresize /dev/sda2)
扩展逻辑分区(lvextend)
使扩展生效(xfs_growfs)
查看(df -H)
出现问题:
出现以下问题参考文章:http://t.csdn.cn/cbViW
扩容磁盘不显示扩容后的磁盘或者磁盘大小两种情况:
情况一:修改原来磁盘大小
情况二:新增磁盘
df 命令显示异常、分区丢失问题
前言:/etc/fstab 和/etc/mtab 的区别和联系。
-
/etc/fstab 文件记录了服务器上硬盘分区信息,启动 Linux 的时候,检查分区的 fsck 命令和挂载分区的 mount 命令都需要 fstab 中的信息,来检查和挂载分区。
-
/etc/mtab 文件记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等,每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。
-
当然我们自己还可以通过读取/proc/mount 也可以来获取当前挂载信息(即使用文章中用到的修复命令 grep -v rootfs /proc/mounts)。
一、df无显示根目录,/etc/mtab文件内容缺失
df -TH看不到,cat /etc/fstab里的内容却是正常的。
看了下 /etc/mtab 文件内容,发现根目录缺失:
[root@10.207.126.12:~]# cat /etc/mtab
proc /proc proc rw 0 0
udev /dev tmpfs rw 0 0
devpts /dev/pts devpts rw,mode=0620,gid=5 0 0
/dev/sda3 /usr/local ext3 rw,noatime,acl,user_xattr 0 0
/dev/sda4 /data ext3 rw,noatime,acl,user_xattr 0 0
nfsd /proc/fs/nfsd nfsd rw 0 0
执行 grep -v rootfs /proc/mounts 命令进行修复:
[root@10.207.126.12:~]# grep -v rootfs /proc/mounts > /etc/mtab
[root@10.207.126.12:~]# cat /etc/mtab
/dev/root / ext3 rw,data=ordered 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
udev /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda3 /usr/local ext3 rw,noatime,data=ordered 0 0
/dev/sda4 /data ext3 rw,noatime,data=ordered 0 0
nfsd /proc/fs/nfsd nfsd rw 0 0
可以看到,根目录已经出现了,再执行 df -h 就正常了:
二、执行 df 命令报如下错误:
df: cannot read table of mounted file systems: No such file or directory
[root@10.12.208.117:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab
grep: write error: No space left on device
看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了:
[root@10.12.208.117:/var/spool/postfix]# du -sh *
4.0K active
4.0K bounce
4.0K corrupt
4.0K defer
4.0K deferred
4.0K flush
4.0K hold
4.0K incoming
9.4G maildrop
8.0K pid
4.0K private
4.0K public
4.0K saved
4.0K trace
直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复:
[root@10.12.208.117:/var/spool/postfix]# grep -v rootfs /proc/mounts > /etc/mtab
[root@10.12.208.117:/var/spool/postfix]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 10.5G 9.5G 53% /
/dev/sda2 20G 1.7G 18G 9% /usr/local
/dev/sda3 103G 63G 35G 65% /data
已经正常了,maildrop 爆满的问题一般是 crontab 未屏蔽错误造成的,于是顺手将 crontab 里面的条目都带上了 2>&1 屏蔽了,下次应该不会出现因为目录爆满导致 mtab 异常的情况了。
标准错误重定向到标准输出