昨天遇到一个感觉很坑的问题,今天总结了一下昨天遇到的问题和解决办法,希望以后的小伙伴,和我一样遇到坑项目后,能快速解决。
遇到的问题如下,tomcat报
java.io.IOException: No space lefton device
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
日志信息不再打印,用户上传信息失败。果断的df –h查看了各分区的情况,当时我就吃惊了,系统盘50G满了,占用率100%,最伤心的是还看到197G的两个盘都没用,这还玩毛线啊,我开始以为日志打印过多导致的盘被占满了,查看了下日志才打了一个多G,又查看了各个文件的占有率,才发现用户所有在前端系统上传的资料也全放在Tomcat工程目录下,不满才怪,由于都是用户上传的信息图片,我不敢乱删,又由于系统已经上线,转盘后怕代码找不到图片路径,后面还要改代码,然后跑去发布更新,这样一来一去,不被骂死才怪。
然后就想用重定向建立软连接的方法来解决这个问题,(软链接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理;软连接可以跨文件系统;软链接有自己的inode,并在磁盘上有一小片空间存放路径名;软连接可以对一个不存在的文件名进行连接; 软连接可以对目录进行连接)就是不改变以前的配置,然后使用链接将所有的数据分配到剩下空间大的盘里面,实现后的效果如下,
建立链接后的图片
由于昨天只是全速去解决问题去了,没有截图,今天只有处理过后的图片了。
下面就教你们如何建立链接,在建立连接的时候,要把服务停掉,不然你操作的时候一边读取拷贝,用户还不停的上传,这个事情做起来就没玩没了了。
具体操作如下啊:
cat /proc/partitions
//先建立两个文件夹:
mkdir vdb2
mkdir vdc2
//进入到opt目录下
cd /opt/
//将vdb2挂做连接点
mount/dev/vdb2 vdb2/
mount/dev/vdc2 vdc2/
//将文件格式化为ext4
mkfs.ext4/dev/vdc2
//在opt目录下再讲文件改名
mvapache-tomcat-6.0.29 apache-tomcat-6.0.29-bak
mvapache-tomcat-6.0.29-task apache-tomcat-6.0.29-task-bak
//进入 vdb2
cd vdb2/
//创建文件夹
mkdir tomcat1
//使用ln –sf建立软连接
ln -sf tomcat1/../apache-tomcat-6.0.29
同上:
cd vdc2/
mkdir tomcat2
ln -sf tomcat2../apache-tomcat-6.0.29-task
cd ../
rmapache-tomcat-6.0.29
rmapache-tomcat-6.0.29-task
//将一个文件链接在另一个文件上
// 其中 vdb2/tomcat1就是源文件, apache-tomcat-6.0.29是链接文件名,其作用是当编辑 apache-tomcat-6.0.29,实际上是链接编辑vdb2/tomcat1。
ln -sf vdb2/tomcat1 apache-tomcat-6.0.29
ln vdc2/tomcat2 -sf apache-tomcat-6.0.29-task
cp apache-tomcat-6.0.29-bak/* apache-tomcat-6.0.29/
//强制复制文件
cp apache-tomcat-6.0.29-task-bak/* apache-tomcat-6.0.29-task/ -fr
cp apache-tomcat-6.0.29-bak/* apache-tomcat-6.0.29/ -fr
复制完毕后进入tomcat原文件
cdapache-tomcat-6.0.29/bin
//启动tomcat
sh startup.sh
//查看进程是否启动成功启动成功就ok了
ps -ef |grep tom
链接建立完毕后,你后面的操作就和以前操作tomcat一样操作就行了,不需要去管理链接,和目标文件。
我只是写了大概的步骤和一些主要的操作的命令,有些简单的操作命名我删除了,也只是给你们一个思路,说不定你有更好的办法解决呢。