一、RAID
1.RAID好处:
可以不用到机房现场,就能够坐在办公室里面远程连接并控制服务器的配件。
-
更多的容量
-
得到更多的冗余(数据更安全)
-
得到更高的性能
数据还是要备份
2.RAID的运行方式:
- 软RAID(了解)
- 硬RAID(看视频,网址 https://www.bilibili.com/video/av46656120?from=search&seid=8213679239129642497)
3.RAID的级别:
- RAID0 :条带卷,容量最大。单块容量*N,读写最快。没有容错机制,坏了一块就全都不能用了。 主要提供访问速度,不存储数据。理论是2块磁盘
具有最高的存储性能(磁盘容量不浪费,读写很快),这些磁盘的总和
要制作RAID 0至少要1块物理磁盘,不做raid不能安装系统
**安全:任何一块硬盘损坏,所有的数据无法使用
- RAID1 : 镜像卷,50%容量,读一般,写特慢,相当于写两分数据,有50%容错机制。只能是两块
镜像:损失50%的数据容量。例如2块1T的盘,做完RAID 1后容量为1T**
raid只能2块硬盘
Mirror不能提高存储性能。理论上写性能和单盘相差不大
- RAID5 : 检验卷 ,总容量的三分之二,读写稍快。容错机制,可以损坏三分之一,最低三块
需要至少3块,损失一块硬盘**
安全:最多可以损坏一块硬盘
**性能:写入速度不快,读取Ok
- RAID10 :10 ,损失一半,读写快。容错50%,只能四块。
最少4块硬盘,增加硬盘必须是2的倍数;所有硬盘容量的一半**
安全:最多损坏一半硬盘
**性能:写入和读取都很快
总结:
性能从高到低:RAID0 -----> RAID10----->RAID4----->RAIID1
安全从高到低: RAID1------>RAID10------>RAID5------>RAID0
价格从高到低: raid10------->RAID1------->RAID5------->RAID0
注意:RAID硬盘失效处理--热备和热插拔
二、RAID实战
软RAID
mdadm 安装
[root@web ~]# yum install -y mdadm
mdadm命令常见选项解释:
-A #激活磁盘阵列
-C #建立一个新阵列
-D #打印阵列设备的信息
-G #改变阵列大小或形态
-S #停止阵列
-r #移除设备
-l #设定磁盘阵列的级别
-n #指定阵列磁盘的数量
-x #指定阵列中备用盘的数量
-f #将设备状态定为故障
-a #添加设备到阵列
-v #显示详细信息软RAID:通过操作系统实现
1.RAID0
创建RAID0实验环境:
Raid种类 磁盘 热备盘
Raid0 sdb、sdc
创建磁盘阵列RAID0
[root@web ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看RAID阵列
[root@web ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jul 18 18:30:52 2019
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:30:52 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : web:0 (local to host web)
UUID : be7fa2cc:94484da2:cb10af97:caa583f0
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
把信息写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
挂载使用
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
[root@web ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid0
[root@web ~]# mount /dev/md0 /raid0
[root@web ~]# df -h |grep /dev/md0
/dev/md0 40G 33M 40G 1% /raid0
[root@web ~]# cp /etc/services /raid0/
2.RAID1
创建RAID0实验环境:
Raid种类 磁盘 热备盘
Raid1 sdd、sde sdf
1)创建RAID1,并添加1个热备盘
2)模拟磁盘故障,看备用盘是否会自动顶替故障盘
3)从raid1中移出故障盘
创建磁盘阵列
[root@web ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[e,d,f]
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: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
查看RAID信息
[root@web ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Thu Jul 18 18:41:45 2019
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:44:23 2019
State : clean, resyncing
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Resync Status : 44% complete
Name : web:1 (local to host web)
UUID : 9d654e3a:12cf017f:eb091033:852f1ea6
Events : 7
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
1 8 64 1 active sync /dev/sde
2 8 80 - spare /dev/sdf
追加到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
挂载使用
[root@web ~]# mkfs.xfs /dev/md1
meta-data=/dev/md1 isize=512 agcount=4, agsize=1309632 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5238528, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid1
[root@web ~]# mount /dev/md1 /raid1
[root@web ~]# df -h |grep /dev/md1
/dev/md1 20G 33M 20G 1% /raid1
[root@web ~]# cp /etc/services /raid1
指定一块盘故障
[root@web ~]# mdadm -f /dev/md1 /dev/
检查数据有没有丢失
[root@web ~]# ll /raid1
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:47 services
移除损坏的盘
[root@web ~]# mdadm -r /dev/md1 /dev/sde
mdadm: hot removed /dev/sde from /dev/md1
添加一块盘
[root@web ~]# mdadm -a /dev/md1 /dev/sde
3.RAID5
创建RAID5实验环境:
Raid种类 磁盘 热备盘
Raid5 sdg、sdh、sdi sdj
1)使用三块盘创建RAID5, 使用-x添加1个热备盘
2)模拟损坏一块磁盘,然后备用盘自动顶上,只能顶一次
3)在模拟损坏,检测数据是否丢失,如果没有再次模拟损坏.
创建阵列
[root@web ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd[g,h,i,j]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看RAID信息
[root@web ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Jul 18 18:54:45 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:56:43 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 36% complete
Name : web:5 (local to host web)
UUID : 42d49a3d:f3dfcbb4:1c44c59c:90b62a9f
Events : 6
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh
4 8 128 2 spare rebuilding /dev/sdi
3 8 144 - spare /dev/sdj
将配置信息写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
挂载使用
[root@web ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid5
[root@web ~]# mount /dev/md5 /raid5
[root@web ~]# cp /etc/services /raid5
[root@web ~]# ll /raid5
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:58 services
模拟一块盘损坏
[root@web ~]# mdadm -f /dev/md5 /dev/sdh
移除损坏的盘
[root@web ~]# mdadm -r /dev/md5 /dev/sdh
添加一块盘
[root@web ~]# mdadm -a /dev/md5 /dev/sdh
4.RAID10
创建RAID10实验环境:
Raid种类 磁盘 热备盘
Raid10 分区:sdk1,sdk2, sdk3.sdk4
分区
[root@web ~]# gdisk /dev/sdk
[root@web ~]# lsblk /dev/sdk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdk 8:160 0 20G 0 disk
├─sdk1 8:161 0 5G 0 part
├─sdk2 8:162 0 5G 0 part
├─sdk3 8:163 0 5G 0 part
└─sdk4 8:164 0 5G 0 part
创建磁盘阵列
[root@web ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
查看RAID信息
[root@web ~]# mdadm -D /dev/md10
写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
挂载使用
[root@web ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=163712 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2618112, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid10
[root@web ~]# mount /dev/md10 /raid10
[root@web ~]# cp /etc/services /raid10
[root@web ~]# ll /raid10
total 656
-rw-r--r--. 1 root root 670293 Jul 18 19:12 services
模拟故障
[root@web ~]# mdadm -f /dev/md10 /dev/sdk3
移除损坏的盘
[root@web ~]# mdadm -r /dev/md10 /dev/sdk2
mdadm: hot removed /dev/sdk2 from /dev/md10
[root@web ~]# mdadm -r /dev/md10 /dev/sdk3
mdadm: hot removed /dev/sdk3 from /dev/md10
添加一块硬盘
[root@web ~]# mdadm -a /dev/md10 /dev/sdk[2,3]
mdadm: added /dev/sdk2
mdadm: added /dev/sdk3
[root@web ~]# mdadm -D /dev/md10
三、LVM介绍
1. 什么是LVM?
LVM是Logical Volume Manager (逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。
最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个 Linux 版本的逻辑卷管理器。
2. LVM解决了什么问题
当我们刚开始安装Linux操作系统是遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。
普通的磁盘分区好之后就无法改变其大小,而遇到出现某个分区空间耗尽时,解决的方法可以是符号链接,或者调整分区大小的工具,但这只是暂时解决方法,没有从根本上解决问题。
随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户可以在无需停机的请款下可以方便的调整各个分区大小。
3.LVM的名词
1.物理卷(PV):
(physical volume),把常规的磁盘设备通过pvcreate命令对其进行初始化,形成了物理卷。其实就是硬盘或分区。(面粉)
2.卷组(VG):
(volume group),把多个物理卷组成一个逻辑的整体,这样卷组的大小就是多个硬盘之和。或者理解就是由一个或多个PV组成的整体。(面团)
3.逻辑卷(LV):
(logical volume),从卷组中划分需要的空间大小出来。用户仅需对其格式化然后即可挂载使用。从VG中切割出的空间用于创建文件系统。(切成馒头)
4.基本单元(PE):
(physical extend),分配的逻辑大小的最小单元,默认为4MB的基本块。(假设分配100MB逻辑空间,则需要创建25个PE)
四、LVM实战
1. 创建物理卷,加入卷组
1) 创建物理卷,将普通磁盘转换为物理卷。
2)创建卷组,将物理卷加入到卷组中。
3)在卷组中划分逻辑卷,然后挂载使用。
#1.准备物理磁盘,如果是虚拟机需要关闭添加磁盘,以便更好的实验
[root@qiudao ~]# lsblk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
#2.下载安装软件包
[root@web ~]# yum install lvm2 -y
#3.将/dev/sdb创建为物理卷
[root@web ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
#4.创建卷组,并将物理卷加入进去卷组--->名字lvm_test
[root@web ~]# vgcreate lvm_test /dev/sdb
#5.检查卷组
[root@web ~]# vgs
#6.检查当前逻辑卷VG中PV使用情况
[root@web ~]# pvs
创建一个逻辑卷,分配名称,以及大小,指定卷组
选项:
-L #逻辑卷大小
-n #逻辑卷名字
#1.创建一个逻辑卷
[root@web ~]# lvcreate -L 1G -n lv1 lvm_test
#2.将lvm_test分配給lv1
[root@qiudao ~]# lvcreate -L 100M -n lv1 lvm_test
#3.检查
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- <20.00g <19.00g
#4.检查当前逻辑卷VG中PV使用情况
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <19.00g
[root@web ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 lvm_test -wi-a----- 1.00g
[root@web ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
└─lvm_test-lv1 253:0 0 1G 0 lvm
#5.格式化逻辑卷
[root@web ~]# mkfs.xfs /dev/lvm_test/lv1
meta-data=/dev/lvm_test/lv1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#6.挂载使用
[root@web ~]# mkdir /lv1
[root@web ~]# mount /dev/lvm_test/lv1 /lv1
[root@web ~]# df -h |grep lv1
/dev/mapper/lvm_test-lv1 1014M 33M 982M 4% /lv1
[root@web ~]# cp /etc/services /lv1
[root@web ~]# ll /lv1
total 656
-rw-r--r--. 1 root root 670293 Jul 18 19:59 services
2.卷组管理,如何扩展卷组大小,如何删除卷组
1. 如何扩大VG卷组
#1.将sdc指定为物理卷
[root@web ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
#2. 添加到卷组中,使用vgextend扩展卷组
[root@web ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
3. 再次检查,发现卷组已经扩大
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 2 1 0 wz--n- 39.99g 38.99g
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <19.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <20.00g
2. 假设想移除/dev/sdb磁盘,建议先将sdb磁盘数据先迁移到sdc磁盘,然后在移除。(同一卷组的磁盘才可以进行在线迁移),(注意卷组的名称---)
#1. 将逻辑卷移动到sdc上面
#pvmove在线数据迁移,将sdb的数据迁移至sdc
[root@web ~]# pvmove /dev/sdb /dev/sdc
/dev/sdb: Moved: 1.95%
/dev/sdb: Moved: 100.00%
#2.检查是否将sdb数据迁移至sdc
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <20.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <19.00g
#4.缩减卷组大小
[root@web ~]# vgreduce lvm_test /dev/sdb
Removed "/dev/sdb" from volume group "lvm_test"
#5. 检查
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- <20.00g <19.00g
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <19.00g
3.逻辑卷管理,动态的调整逻辑卷大小
方法1:
1. 逻辑卷的扩展,是取决于vg卷中是否还有剩余的容量,注意扩展逻辑卷不能超过卷组VG的总大小**
[root@qiudao ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 1020.00m 920.00m
#1.扩展lv逻辑卷,增加800M分配给逻辑卷 {注意: 800M +800M 不一样}
[root@qiudao ~]# lvextend -L +800M /dev/lvm_test/lv1
#或者可以选择分配磁盘池中多少百分比给逻辑卷
[root@qiudao ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
#2.扩展逻辑卷后需要更新fs文件系统
[root@qiudao ~]# xfs_growfs /dev/lvm_testvg/lv1 #xfs文件格式扩容
2. 缩小逻辑卷,不要去操作,因为线上在使用的磁盘真的敢操作吗?
3. 删除逻辑卷,如果不想使用逻辑卷可以选择删除。
[root@qiudao ~]# umount /dev/lvm_test/lv1
[root@qiudao ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1? [y/n]: y
Logical volume "lv1" successfully removed
方法2:
按照百分比增加大小
[root@web ~]# lvextend -l 20%FREE /dev/lvm_test/lv1
Size of logical volume lvm_test/lv1 changed from 2.00 GiB (512 extents) to 3.60 GiB (922 extents).
Logical volume lvm_test/lv1 successfully resized.
#更新文件系统
[root@web ~]# xfs_growfs /dev/lvm_test/lv1
meta-data=/dev/mapper/lvm_test-lv1 isize=512 agcount=8, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 944128
注意:缩减逻辑卷大小 , 企业不会去缩减,一般会直接删除
4.怎样删除?
#1.首先要卸载
[root@web ~]# umount /lv1
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 2.9G 45G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
#2.移除
[root@web ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1? [y/n]: y #是否确认
Logical volume "lv1" successfully removed
#3.检查
[root@web ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
注意:LVM如果有一个磁盘损坏,整个lvm都坏了, lvm只有动态扩展作用,底层用RAID + 上层LVM = 既有冗余又有动态扩展
五、磁盘常见故障
1.block故障(数据满了)
环境准备
先创建一个1G分区,并挂在使用
创建大文件,模拟磁盘空间满
[root@web ~]# dd if=/dev/zero of=/test/test.log bs=100M count=11
dd: error writing ‘/test/test.log’: No space left on device
10+0 records in
9+0 records out
1026621440 bytes (1.0 GB) copied, 18.7358 s, 54.8 MB/s
[root@web ~]# df -h |grep test
/dev/sde1 1014M 1012M 2.8M 100% /test
报错No space left on device
[root@web ~]# cp services /test/
cp: error writing ‘/test/services’: No space left on device
cp: failed to extend ‘/test/services’: No space left on device
检查磁盘
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 2.9G 45G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sde1 1014M 1014M 32K 100% /test
解决思路:
查找大文件,依次往下查找,直到找到大文件为止
[root@web ~]# du -sh /test/*
找到之后,先确认是否可以删除。
rm -f
删除之后,磁盘还是满的,先确认是否有硬链接。
2.inode故障(小文件太多)
#环境准备,创建一个30M的分区
[root@qiudao ~]# df -h |grep sdb1
dev/sdb1 27M 1.6M 26M 6% /test
[root@qiudao ~]# lsblk |grep sdb1
└─sdb1 8:17 0 30M 0 part /test
#批量创建大量的小文件
[root@qiudao ~]# touch /test/data/file/{1..15360}.txt
#再去到该分区中创建新的文件就会报错。
[root@qiudao ~]# touch /test/test.txt
touch: cannot touch ‘/test/test.txt’: No space left on device
#解决思路:查看磁盘分区使用情况,发现磁盘空间是正常的,再次查看inode,发现inode满了。
[root@qiudao ~]# df -h |grep sdb1
/dev/sdb1 27M 9.7M 17M 37% /test
[root@qiudao ~]# df -i |grep sdb1
/dev/sdb1 15424 15424 0 100% /test
#怎样找出大量的小文件呢?首先要找出大目录(小文件过多,会导致目录变大。)
[root@qiudao ~]# find /test -type d -size +300k |xargs ls -lhd
#找到大量小文件之后,首先要确认好之后再删除,不要直接的去删除
先确认是否可以删除。千万不要直接查看目录内容,否则会被刷屏
[root@qiudao ~]# ll /test/data |wc -l
[root@qiudao ~]# find /test/data/file/ -type f -delete