磁盘分区满了,解决方法
根分区满了,总结一下解决方法
[root@apache-web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 17G 17G 194M 99% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 9.0M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 174M 841M 18% /boot
tmpfs 284M 28K 284M 1% /run/user/
解决方法:
- 方法一:排查原因,删除无用文件,释放磁盘空间
- 方法二:排查原因,添加磁盘转移数据,释放磁盘空间
- 方法三:对根分区进行扩容(会另写一篇文章)
那么我就一条一条的写
方法一:排查原因,删除无用文件,释放磁盘空间
用到的命令:du -sh /*|grep G
可以对目录进层层筛选,筛选出大文件,进行删除
[root@apache-web /]# du -sh /*|grep G
du: cannot access ‘/proc/14450/task/14450/fd/4’: No such file or directory
du: cannot access ‘/proc/14450/task/14450/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/14450/fd/4’: No such file or directory
du: cannot access ‘/proc/14450/fdinfo/4’: No such file or directory
8.0G /server
3.3G /usr
2.5G /var
[root@apache-web /]# du -sh /server/*|grep G
2.0G /server/mysql
6.0G /server/tools
[root@apache-web /]# du -sh /server/tools/*|grep G 5.2G /server/tools/mysql-5.7.29 [root@apache-web /]# du -sh /server/tools/*|grep M 522M /server/tools/boost 80M /server/tools/boost_1_59_0.tar.gz 52M /server/tools/mysql-5.7.29.tar.gz 202M /server/tools/php-7.2.28 20M /server/tools/php-7.2.28.tar.gz
用到的命令:du -h -x --max-depth=1(列出你当前所在位置,目录占用磁盘空间的大小)
[root@apache-web /]# du -h -x --max-depth=1|sort -rh
14G .
8.0G ./server
3.3G ./usr
2.5G ./var
37M ./etc
21M ./root
2.1M ./tmp
256K ./home
0 ./srv
0 ./share_dir
0 ./shaaaaa
0 ./server1
0 ./opt
0 ./mount04
0 ./mount03
0 ./mount02
0 ./mount01
0 ./mnt
0 ./media
两个命令结合,对系统文件进行排查,效果更加,如果对文件进行删除,发现磁盘空间没有得到提升,原因:有时候其它程序占用了文件无法真正解决问题,需要释放它们,有两种情况:
情况一:有个文件被删了,里面空间被占用,你知道这个文件叫什么
利用lsof |grep /xxx/xxx/xx进行检查,示例:
[root@apache-web /]# lsof |grep /var/log/messages
abrt-watc 673 root 4r REG 8,3 6240492 38973783 /var/log/messages
rsyslogd 691 root 6w REG 8,3 6240492 38973783 /var/log/messages
in:imjour 691 724 root 6w REG 8,3 6240492 38973783 /var/log/messages
rs:main 691 725 root 6w REG 8,3 6240492 38973783 /var/log/messages
第一列:命令
第二列:进程号
$NF:文件名称
$(NF-1):文件的inode
$(NF-2):文件的大小
解决方法:
- 方法一:systemctl restart 对应的命令
- 方法二:kill -1 ID号
情况二:有个文件被删了,里面空间被占用,你不知道这个文件叫什么,如何找到它
利用:lsof |grep deleted
解决方法:
- 方法一:systemctl restart 对应的命令
- 方法二:kill -1 ID号
方法二:排查原因,添加磁盘转移数据,释放磁盘空间
添加好磁盘,让系统识别到新磁盘,
- 真实服务器输入partprobe
- 虚拟机重启
用 fdisk 指令查看分区情况。
[root@apache-web ~]# fdisk -l
Disk /dev/sdc: 42.9 GB, 42949672960 bytes, 83886080 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 /dev/sda: 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: 0x00002a2f
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 6293503 2097152 82 Linux swap / Solaris
/dev/sda3 6293504 41943039 17824768 8e Linux LVM
Disk /dev/sdb: 6442 MB, 6442450944 bytes, 12582912 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: 0x71136f7e
Device Boot Start End Blocks Id System
建立 LVM 分区
新增物理卷( pvcreate /dev/sdb /dev/sdc)空磁盘
[root@apache-web ~]# pvcreate /dev/sdb /dev/sdc
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
新增卷组(vgcreate 组名 /dev/sdb /dev/sdc)用PV的物理卷
[root@apache-web ~]# vgcreate kk /dev/sdb /dev/sdc
Volume group "kk" successfully created
查看卷组详情(vgdisplay)
[root@apache-web ~]# vgdisplay
--- Volume group ---
VG Name kk
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 45.99 GiB
PE Size 4.00 MiB
Total PE 11774
Alloc PE / Size 0 / 0
Free PE / Size 11774 / 45.99 GiB
VG UUID D7ct8g-NmoW-RBga-quqL-IpjJ-3ldj-NBNsj4
新增逻辑卷LVkk,用于还原旧分区的根目录
(lvcreate -n LVkk -L 45G kk)-n 指定逻辑卷的名字,-L指定最大可以多大,不超过VG+卷组名
- 要是想分多个区域,直接起不同的逻辑卷名字,-L分别指定大小,用一个VG卷组名
- 要是想分多个区域,直接起不同的逻辑卷名字,-L分别指定大小,用一个VG卷组名
- 要是想分多个区域,直接起不同的逻辑卷名字,-L分别指定大小,用一个VG卷组名
[root@apache-web ~]# lvcreate -n LVkk -L 45G kk
Logical volume "LVkk" created.
[root@apache-web ~]# ll /dev/kk/LVkk
lrwxrwxrwx 1 root root 7 Feb 29 03:34 /dev/kk/LVkk -> ../dm-0
查看逻辑卷
[root@apache-web ~]# lvscan
ACTIVE '/dev/kk/LVkk' [45.00 GiB] inherit
格式化创建文件系统
(要是不成功,敲一下xfs_growfs /dev/kk/LVkk,在试mkfs.xfs /dev/kk/LVkk)
[root@apache-web ~]# mkfs.xfs /dev/kk/LVkk
meta-data=/dev/kk/LVkk isize=512 agcount=4, agsize=2949120 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=11796480, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5760, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
查看磁盘UUID
[root@apache-web ~]# blkid
/dev/sda3: UUID="783292fd-b5f5-4be3-acfb-399bbece0484" TYPE="xfs"
/dev/sda1: UUID="81c60d2f-9f5d-4047-a1fe-78344b18c579" TYPE="xfs"
/dev/sda2: UUID="f8997739-681e-462a-bd75-6464926e027e" TYPE="swap"
/dev/sdc: UUID="bEkCou-2WeK-Qe3N-FPkf-q4Ld-nzac-IM8rXY" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdb: UUID="PfDgp6-hkTv-wW1J-rzoy-fPYA-cTTv-en7Amu" TYPE="LVM2_member"
/dev/mapper/kk-LVkk: UUID="20a9d535-ac7a-4b2c-b156-90dea27781c6" TYPE="xfs"
转移数据至LVM分区
备份根目录还原到 LVM 分区
备份数据命令的选择:
- 用 dump 指令和 restore 指令备份及还原根目录到新分区。(centos6)
- 用 xfsdump 指令和 xfsrestore 指令备份及还原根目录到新分区。(centos7)
dump 指令仅针对根目录已占用的 x.xG 数据进行操作,dd 指令针对整个分区(20G)进行操作,太费时。
[root@apache-web ~]# mount /dev/mapper/kk-LVkk /shaaaaa/ [root@apache-web ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 17G 14G 3.2G 82% / devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G 0 1.4G 0% /dev/shm tmpfs 1.4G 9.0M 1.4G 1% /run tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup /dev/sr0 4.3G 4.3G 0 100% /mnt /dev/sda1 1014M 174M 841M 18% /boot tmpfs 284M 32K 284M 1% /run/user/0 /dev/mapper/kk-LVkk 39G 33M 39G 1% /shaaaaa
xfsdump -0f /shaaaaa/rootfs0913.bak / ---备份根目录
[root@apache-web ~]# xfsdump -0f /shaaaaa/rootfs0913.bak /
xfsdump: ending media file
xfsdump: media file size 14337412912 bytes
xfsdump: dump size (non-dir files) : 14209586264 bytes
xfsdump: dump complete: 777 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /shaaaaa/rootfs0913.bak OK (success)
xfsdump: Dump Status: SUCCESS
[root@apache-web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 17G 14G 3.2G 82% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 9.0M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 174M 841M 18% /boot
tmpfs 284M 32K 284M 1% /run/user/0
/dev/mapper/kk-LVkk 39G 14G 26G 35% /shaaaaa
xfsrestore -rf /shaaaaa/rootfs0913.bak--------还原根目录
[root@apache-web ~]# cd /shaaaaa/
------------------------------------------------------------------------------------------------------------------------------------------------
- 用 dd 指令克隆 / 目录到新分区。
dd指令,目录数据占总分区的 87% , 从 dump 备份到 restore 还原,所用的时间与 dd 直接拷贝到新分区的时间几乎一样。但 dump 备份文件需要占用空间,而 dd 指令直接把原分区搬过去。
[root@apache-web /]# dd if=/dev/sda3 of=/dev/mapper/kk-LVkk
17908385+0 records in
17908384+0 records out
9169092608 bytes (9.2 GB) copied, 55.1285 s, 166 MB/s
19100321+0 records in
19100320+0 records out
9779363840 bytes (9.8 GB) copied, 60.0897 s, 163 MB/s
20182654+0 records in
20182653+0 records out
10333518336 bytes (10 GB) copied, 65.0982 s, 159 MB/s
23888545+0 records in
23888544+0 records out
12230934528 bytes (12 GB) copied, 70.4243 s, 174 MB/s
26198689+0 records in
26198688+0 records out
13413728256 bytes (13 GB) copied, 75.555 s, 178 MB/s
27627813+0 records in
27627813+0 records out
14145440256 bytes (14 GB) copied, 80.5788 s, 176 MB/s
30110722+0 records in
30110721+0 records out
15416689152 bytes (15 GB) copied, 85.942 s, 179 MB/s
32205103+0 records in
32205103+0 records out
16489012736 bytes (16 GB) copied, 90.9922 s, 181 MB/s
34330145+0 records in
34330145+0 records out
17577034240 bytes (18 GB) copied, 96.1389 s, 183 MB/s
35649536+0 records in
35649536+0 records out
18252562432 bytes (18 GB) copied, 99.6638 s, 183 MB/s
查看磁盘的UUID。通过备份发现根分区的UUID和逻辑卷的UUID相同
[root@apache-web /]# blkid
/dev/sda3: UUID="783292fd-b5f5-4be3-acfb-399bbece0484" TYPE="xfs"
/dev/sda1: UUID="81c60d2f-9f5d-4047-a1fe-78344b18c579" TYPE="xfs"
/dev/sda2: UUID="f8997739-681e-462a-bd75-6464926e027e" TYPE="swap"
/dev/sdc: UUID="bEkCou-2WeK-Qe3N-FPkf-q4Ld-nzac-IM8rXY" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdb: UUID="PfDgp6-hkTv-wW1J-rzoy-fPYA-cTTv-en7Amu" TYPE="LVM2_member"
/dev/mapper/kk-LVkk: UUID="783292fd-b5f5-4be3-acfb-399bbece0484" TYPE="xfs"
解决方法:
修改UUID
CentOS7修改UUID:(xfs)
- xfs_admin -U generate /dev/mapper/kk-LVkk
可以看到UUID与之前对比已经发生了变化
[root@apache-web ~]# xfs_admin -U generate /dev/mapper/kk-LVkk Metadata corruption detected at xfs_agf block 0x1/0x200 xfs_admin: cannot init perag data (-117). Continuing anyway. Clearing log and setting UUID writing all SBs bad magic number can't read superblock for AG 1 failed to set UUID in AG 1 new UUID = 9d2c82c8-6126-470a-9dcb-f0723b14a1ee cache_purge: shake on cache 0x1e412c0 left 1 nodes!? [root@apache-web ~]# blkid /dev/sdc: UUID="lX2eE3-v6Jw-FmDe-sB2Q-Noc6-C6DX-2VtMKR" TYPE="LVM2_member" /dev/sda1: UUID="81c60d2f-9f5d-4047-a1fe-78344b18c579" TYPE="xfs" /dev/sda2: UUID="f8997739-681e-462a-bd75-6464926e027e" TYPE="swap" /dev/sda3: UUID="783292fd-b5f5-4be3-acfb-399bbece0484" TYPE="xfs" /dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/mapper/kk-LVkk: UUID="9d2c82c8-6126-470a-9dcb-f0723b14a1ee" TYPE="xfs" /dev/sdb: UUID="LJqbbF-Zygb-sFve-yvKi-PeCz-F9by-2RVNIf" TYPE="LVM2_member"
CentOS6修改UUID:(ext4)
- uuidgen | xargs tune2fs /dev/mapper/kk-LVkk -U
-------------------------------------------------------------------------------------------------------------
改完UUID还需要修改两个配置文件
第一:首先修改启动引导配置文件
- CentOS7,/boot/grub2/grub.cfg
- CentOS6,/boot/grub/grub.conf
修改 UUID: root=UUID=9d2c82c8-6126-470a-9dcb-f0723b14a1ee
删除所有 rd_NO_LVM 选项, 这个很重要
第二:修改还原后的根目录所在分区的 /etc/fstab
# # /etc/fstab # Created by anaconda on Tue Sep 3 08:22:38 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 # UUID=9d2c82c8-6126-470a-9dcb-f0723b14a1ee / xfs defaults 0 0 UUID=81c60d2f-9f5d-4047-a1fe-78344b18c579 /boot xfs defaults 0 0 UUID=f8997739-681e-462a-bd75-6464926e027e swap swap defaults 0 0
重启系统
磁盘空间未满,提示储存空间不足,解决方法
磁盘空间没有满,但是提示了磁盘空间不足,这种情况有两个原因:
- inode不数量足,大量小文件消耗
- block不数量足,大量大文件消耗
inode不足,大量小文件消耗
inode=索引节点,相当于书的目录
由于每个文件都必须有一个inode号,因此有可能发生inode已用光,但硬盘未存满的情况。这时就无法在硬盘上创建新的文件。
检查方法:df -i,可以看到每个分区的inode数量,判断是否inode被消耗光
[root@apache-web /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 6809080 272995 6536085 5% /
devtmpfs 358733 410 358323 1% /dev
tmpfs 362405 1 362404 1% /dev/shm
tmpfs 362405 560 361845 1% /run
tmpfs 362405 16 362389 1% /sys/fs/cgroup
/dev/sda1 524288 328 523960 1% /boot
tmpfs 362405 18 362387 1% /run/user/
解决方法:
利用find命令搜索出符合要求的文件,进行批量删除,再次进去检查,如果问题还没有得到解决,我利用lsof 查看一下此文件被谁占用了,把它占用的空间释放一下,这样此问题应该可以解决,参考(磁盘分区满了,解决方法)
block不数量足,大量大文件消耗
block=索引节点指向的位置,书目录所指向的内容
block默认大小:
- / 分区默认大小为4K
- /boot 分区 block默认大小为1K
查看分区block的方法:df
[root@apache-web /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 17814528 14551228 3263300 82% /
devtmpfs 1434932 0 1434932 0% /dev
tmpfs 1449620 0 1449620 0% /dev/shm
tmpfs 1449620 25508 1424112 2% /run
tmpfs 1449620 0 1449620 0% /sys/fs/cgroup
/dev/sda1 1038336 177964 860372 18% /boot
tmpfs 289924 28 289896 1% /run/user/
解决办法:
du -sh /*|grep G命令层层筛,删除后看空间是否恢复,没有恢复看一下进程是否占用,文章前面已经写的很详细了
-----------------------------------------------------------------------------------------------------

评论