前言:这几年一直碰到一个问题,就是有大量的工作文件需要备份,有没有什么好的方法来解决这个问题呢?答案就是搭建家庭nas。作为一个动手型选手,在众多的nas方案中,我选择了一个基于openmediavault的DIY的方案。但nas方案还是有很多坑没有趟过,于是,我在19年年初的时候,就在现有的家庭台式机上搭了一个测试环境。但时间实在有限,这个测试环境一直未搬迁到正式环境上。结果最近居然发现不能通过web登录了,该怎么办呢?
一、经过日志分析,发现是磁盘空间满了。
不能web登录的问题出现了有几天了,但一直没有时间去仔细研究。多次采用重启大发也未能解决这个问题。问了一下度娘,“openmediavault web不能登录”,结果在一个查询结果上,看到了查日志的提示。于是我使用下面的命令打开了日志。
命令:
cat /var/log/syslog
日志:
Dec 26 23:56:16 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:56:46 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:57:16 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:57:46 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:58:16 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:58:46 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
Dec 26 23:59:16 omv-qlx monit[773]: 'rootfs' space usage 94.3% matches resource limit [space usage>85.0%]
然后用命令:df –h看了一下,居然磁盘空间100%了。

不怕有问题,就怕找不到问题,既然问题找到了,那么自然就有解决办法。解决方案有两个,要么增加空间,要么清理空间垃圾。
小结:遇到问题时,不要急,不要慌,日志大哥来帮忙。
二、解决方案一,增加磁盘空间
由于台式机是win7系统,openmediavault是在vmware的虚拟机上搭建的。因此,第一步是先在vmware上给虚拟机增加空间。
Step1:在vmware上给虚拟机增加空间。

通过在虚拟机右键菜单选择设置->选中虚拟机的主硬盘->点击右侧的扩展(E)按键,就可以为虚拟机增加磁盘空间了。我之前分配的是12G,此次增加到20G。
Step2:为openmediavault的主分区增加空间。
虚拟机的磁盘空间有了,但没有分配到系统的分区上。如何能够无损现在的硬盘内容进行分区呢?
这里有一个比较好的方式,前提是在刚开始搭建nas的时候,需要使用lvm进行分区管理。通过下列几行命令就可以简单的实现分区扩容。
# pvcreate /dev/sdd
# vgextend vg0 /dev/sdd
# lvextend -l +100%FREE /dev/vg0/vol1
# resize2fs -p /dev/vg0/vol1
但我在安装openmediavault的时候没有使用lvm怎么办呢?急,在线等 ~~。继续度娘“debian 分区空间扩展”,在满山遍野的文章中找到了“莓玩没了”老哥的“不重装无损扩展(调节)Debian分区容量”一文。学会了可以直接用fdisk进行无损分区。
我的主分区是/dev/sda,因此输入命令:fdisk /dev/sda。

p,是查看当前分区信息,我这里是已经重新分区后的信息了,原来是还有一个扩展分区,以及一个专门做swap交换的逻辑分区。

d,是删除分区。在只有一个分区的情况下, 输入d就直接删除分区了。这里可以在没有家长的陪同下独自操作,唯一要记住的是别在没有确定的情况下输入“w”命令写入分区更改信息,如果操作觉得有误,直接“q”不保存退出。

之前有多个分区的时候,需要选择数字,一个一个删,如下图所示。
![]()
n,是新建分区。这里要特别说明的是,我之前是将主分区和交换分区都放在同一个磁盘上,这次我决定另外建一个虚拟机磁盘放交换分区。所以这里我只n了一个分区,一直回车下去了。

如果要将交换分区和主分区放在一个磁盘,那么在进行n的时候,要对扇区进行分配,也可以按大小由fdisk自动分配。

w,保存并退出。最后这一步完成分区表的操作。
Step3:保障磁盘分区和文件系统的一致性
这里有个原理性问题,我还没有彻底理清楚。我们看存储空间有三个方式:fdisk、df和du。fdisk是读取物理磁盘信息。df是从分区表的超级块中读取的数据,基于分区元数据。du是对文件的大小进行逐个统计。du的特征比较明显,但fdisk和df的详细区别我还是有疑问。但不影响我们下一步。
根据莓玩莓了老哥的文章,这里要用resize2fs对fdisk所做的操作和df进行一致性同步。我们可以通过添加一个系统启动脚本来执行,脚本通过实现POSIX规范的start函数来进行工作。
#vi /etc/init.d/resize2fs_once
#!/bin/sh
### BEGIN INIT INFO
# Provides resize2fs_once
# Required-Stat:
# Required-Stop:
# Default-Start:2 3 4 5 S
# Default-Stop:
# Short-Description: Resize the root filesystem to fill partition
# Description:
### END INIT INFO
/lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting resize2fs_once" &&
resize2fs /dev/root &&
rm /etc/init.d/resize2fs_once &&
update-rc.d resize2fs_once remove &&
log_end_msg $?
;;
*)
echo "Usage: $0 Start" >&2
exit3
;;
Esac
将脚本设置为可执行:
#chomod 777 /etc/init.d/resize2fs_once
将脚本加入系统开机启动执行
#update-rc.d resize2fs_once defaults
Step4: 建立swap 分区
由于我没有在sda磁盘中放swap分区,因此我在vmware增加了一块2G的磁盘,来专门做swap分区,对应到openmediavault中是sdf磁盘。
因为一般我们是将独立的操作系统放在主分区,所以在建swap分区时,我是用了逻辑分区。

分区建好输入以下命令:
#mkswap /dev/sdf5
#swapon /dev/sdf5
然后进入fstab挂载分区,这里我用uuid进行挂载。通过blkid命令,找到sdf5对应的uuid,我的是7fb3a2f2-b015-49ef-af1e-785bf10b8b03。
#vi /etc/fstab
进入分区挂载文件,fstab增加如下一行内容。
UUID=7fb3a2f2-b015-49ef-af1e-785bf10b8b03 none swap sw 0 0
然后将系统重启。但很奇怪,我重启后,fdisk看到的是20G,是用df看sda1还是12G,不知道是哪里出了问题。于是我直接执行resize2fs /dev/sda1命令就ok了。
#fdisk /dev/sda1

df -h

Step5:异常消除
我重启的时候出现了异常提示:mdadm: no arrays found in config file or automatically。
解决办法是:
- 删除mdadm.conf
#sudo rm /etc/mdadm/mdadm.conf
- 生成新的mdadm.conf
#update-initramfs -u
小结:这里再一次证明了前期的规划设计非常重要,但是规划设计要做好,又必须建立在对业务非常了解的基础之上。就像阿里的CEO张总所说,一个企业奔着中台做中台,也是死。中台一定是沉淀出来的,而不是从底下成长出来的。
三、解决方案二,清理nas磁盘空间
因为我用了docker,所以空间清理分系统层面的清理和容器清理两个层面。
Step1:系统层面的空间清理
详见参考资料Linux大神博客的Debian/Ubuntu清理硬盘空间的8个技巧。
1、删除残余配置文件:
# dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg –purge
2、删除没有用的deb软件安装包
#sudo apt-get clean
#sudo apt-get autoclean
3、删除孤儿软件包
#deborphan | xargs sudo apt-get purge -y
4、删除过时的软件包
#sudo aptitude purge ~o
5、清理日志文件,用ncdu找出哪些日志文件比较大,再逐个删除
#sudo ncdu /var/log
6、删除大容量软件包
用dpigs –H找出大的软件包,然后用sudo apt-get remove pac1 pac2 pac3… 删除大容量软件包。
Step2:容器空间清理。
我们得先搞清楚要从哪里下手才能事半功倍,所以先通过docker system df查看是那部分的空间占比过高。

从系统信息可以看到Local Volumes明显过大,那我们就进入volumes里面看看是什么情况。
![]()
原来是今天下载的一部电影《小丑》,占了4.8G,这个也正常。也可以不用这么追究,直接用docker system prune/prune-a 来清理空间。Docker system prune会删除未启动的容器,未使用的数据卷、网络和过期的镜像。Docker system prune-a清理得更加彻底,包括没有使用的镜像。
但在docker早期版本(1.13之前),没有Docker system命令,所以必须手动清理。
1、删除未使用的volume
#docker volume rm $(docker volume ls –qf dangling=true)
2、清理/var/lib/docker/tmp
进入目录,直接用rm –rf删除目录中文件
3、删除未启动的容器
#docker ps –a|grep Exit|cut –d ‘’ –f 1|xargs docker rm
4、清理未使用的镜像
#docker rmi $(docker images|grep “^<none>”|awk “{print $3}”
参考资料:
- OpenMediaVault从2.x(最新版本)升级到3.0.87后无法登录,http://www.mobibrw.com/2017/8023,默默的点滴
- 不重装无损扩展(调节)Debian分区容量,http://www.got-blogger.com/bao3/3659630310697043091/,莓玩没了
- debian如何扩大一个分区?,https://www.zhihu.com/question/19968557,李道兵
- W: mdadm: no arrays found in config file or automatically导致开机变慢的解决方案(deepin),https://blog.youkuaiyun.com/KuXiaoQuShiHuai/article/details/99686620,SpadeA_Iverxin
- Debian/Ubuntu清理硬盘空间的8个技巧,https://www.linuxdashen.com/debianubuntu清理硬盘空间的8个技巧,Linux大神博客
- 如何彻底清除docker占用的存储空间,https://blog.youkuaiyun.com/everlasting_188/article/details/80353391,小小她爹
- Docker存储空间清理方法, https://blog.youkuaiyun.com/wangyijie11/article/details/88873356, wangyijie11
本文介绍了当OpenMediaVault NAS遇到无法通过Web登录的问题时,通过日志分析发现是磁盘空间已满。解决方案包括扩展磁盘空间和清理磁盘垃圾。在扩展磁盘空间过程中,详细阐述了如何在VMware中增加虚拟机磁盘空间,使用fdisk和resize2fs调整分区大小,以及创建和挂载swap分区。同时,还提供了清理系统层面和Docker容器层面空间的方法。
1034

被折叠的 条评论
为什么被折叠?



