服务器大容量磁盘结构需要清理一系列问题解决。

前言

最近服务器出现结构需要清理(structure needs cleaning)的问题,网络上给出的均为fsck -y /dev/磁盘 即可。但是实际上遇到的问题不止这些,由于我的磁盘有一点点大,总是会爆内存,这里我整落了这几天我遇到的问题和解决方式,相对于你们去参考2012年甚至更久的帖子或者千篇一律的复制粘贴会给你们带来更多的帮助。

问题

首先我们需要找到自己出问题的磁盘,一般都是额外挂载上的磁盘出现问题,使用df -h 找到自己对应的磁盘。

(base) root@server-1:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            126G     0  126G   0% /dev
tmpfs            26G  4.8M   26G   1% /run
/dev/sda2       938G  879G   12G  99% /
tmpfs           126G  137M  126G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           126G     0  126G   0% /sys/fs/cgroup
/dev/sda1       511M  5.3M  506M   2% /boot/efi
/dev/sdc        3.7T  1.3T  2.3T  35% /home/data1
/dev/sdb        3.7T  3.4T  136G  97% /home/data
/dev/sdh         15T  132G   14T   1% /home/data6
/dev/sdg         15T  701G   14T   5% /home/data5
/dev/sdd         15T  1.9T   12T  14% /home/data2
/dev/sdf         15T  154G   14T   2% /home/data4
/dev/sde         15T  1.5T   13T  11% /home/data3
/dev/sdi         15T  578G   14T   5% /home/data7

这里一般都是/dev 开头的磁盘,之后使用umount /dev/磁盘 卸载。

磁盘被占用

umount: /xxx: device is busy.

显而易见需要我们结束掉占用磁盘的进程。

使用fuser命令查看, 通过 -mv-kv 进行查看和结束进程。 你也可以使用lsof 命令查看进程并使用kill结束。

-k,--kill kill   processes accessing the named file
-m,--mount    show all processes using the named filesystems or block device
-v,--verbose    verbose output

(base) root@server:~$ fuser -mv /dev/sde
                     USER        PID ACCESS COMMAND
/dev/sde:            root     kernel mount /home/data3
(base) root@server:~$ fuser -kv /dev/sde

内存

Error storing directory block information (inode=2087157, block=0, num=190005956): Memory allocation failed
e2fsck: aborted

这里我贴出一个ubuntu社区帖子,没什么用。不要去分配额外的sawp 不要设置乱七八糟的东西,作为2022年的人类大概率检查是fsck版本问题!

主要先查看自己的fsck的版本,服务器版本为ubuntu16.04 ,通过fsck --version查看到的版本是1.42,这是个非常老的版本,很多问题都是因为老版本的bug导致内存溢出,这里我们需要安装新版本的fsck。官方也给出了安装方式:这里

# for ubuntu
sudo add-apt-repository ppa:daniel-mehrmann/admin
sudo apt-get update
sudo apt-get upgrade

####### 

# for debain
git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs
./debian/rules
dpkg-buildpackage -b -uc -rfakeroot

但是当你执行的时候你就会发现没办法使用,由于系统很老加上是社区版本,会提示:

"Enable UA Infra" notification

如果你是企业版可以直接sudo ua status 查看,然后使用ua disable 相关命令解决。

但是我是社区版本没有这些,直接下载官方的源码自己make一下。Ext2fs Home Page (sourceforge.net),这里我选择下载最新版本1.46 。下载

wget https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.46.5/e2fsprogs-1.46.5.tar.gz
tar -zxf e2fsprogs-1.46.5.tar.gz
cd e2fsprogs-1.46.5但是

编译这里会出现两种情况一种是你正常编译成果

mkdir build
cd build
../configure
make
make install

但是如果出现这些错误·

'lib/blkid/blkid_types.h' is up to date.

等等问题,基本是因为一些库文件版本不对,这里使用他自带的就行

参考github issues

../configure --enable-libblkid # somelibs out of date
make
make install

当你看到这些基本就是安装成功了

make[2]: Leaving directory '/home/root/fsck/e2fsprogs-1.46.5/build/lib/blkid'
making install in lib/support
make[2]: Entering directory '/home/root/fsck/e2fsprogs-1.46.5/build/lib/support'
SUBST ../../lib/dirpaths.h
make[2]: Leaving directory '/home/root/fsck/e2fsprogs-1.46.5/build/lib/support'
making install in lib/ext2fs
make[2]: Entering directory '/home/root/fsck/e2fsprogs-1.46.5/build/lib/ext2fs'
SUBST ../../lib/dirpaths.h
SUBST ext2_err.et
MKDIR_P /usr/lib /usr/include/ext2fs
INSTALL_DATA /usr/lib/libext2fs.a
INSTALL_DATA /usr/include/ext2fs/bitops.h
INSTALL_DATA /usr/include/ext2fs/ext2fs.h
INSTALL_DATA /usr/include/ext2fs/ext2_io.h
INSTALL_DATA /usr/include/ext2fs/ext2_fs.h
INSTALL_DATA /usr/include/ext2fs/ext2_ext_attr.h
INSTALL_DATA /usr/include/ext2fs/ext3_extents.h
INSTALL_DATA /usr/include/ext2fs/tdb.h
INSTALL_DATA /usr/include/ext2fs/qcow2.h
INSTALL_DATA /usr/include/ext2fs/hashmap.h
INSTALL_DATA /usr/include/ext2fs/ext2_err.h
INSTALL_DATA /usr/include/ext2fs/ext2_types.h
INSTALL_DATA /usr/lib/pkgconfig/ext2fs.pc
make[2]: Leaving directory '/home/root/fsck/e2fsprogs-1.46.5/build/lib/ext2fs'
make[1]: Leaving directory '/home/root/fsck/e2fsprogs-1.46.5/build'

这时候检查版本

$ fsck --version
fsck 1.46.5 (30-Dec-2021)

重新运行fsck检查

 fsck -fCy /dev/磁盘

等待一会即可,基本不会出现内存爆炸的问题了。基本内存占用再8g-16g左右,属于常规水平。

之后重启电脑重新挂载即可。

检查坏道

一般看到这里基本是文件系统的问题,偶尔断电导致文件系统出点问题,但是也不排除是硬盘问题,最好查一下坏道。

badblocks -b 5120 -s -v -o ./bb-磁盘.log /dev/磁盘
posted @ 2022-05-30 13:43  kenvision  阅读(1237)  评论(0编辑  收藏  举报