CentOS 6 存在一个问题,显示所有空间已用完,但我不知道空间去了哪里。
看来我用完了100%,根据
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_sugar-lv_root 50G 49G 0 100% /
所以这是 50G 中的 49G,这很公平,但是当我尝试查看到底使用了什么时(x 表示删除安装):
du -xsh /*
1.8G /usr
2.0G /var
就这样,这是 2 个最大的目录,所有其他目录加起来都在 1G 以下。
以下是磁盘 /dev/mapper/vg_sugar-lv_root 上的信息,它确实显示接近 50G(这是虚拟机):
fdisk -l
Disk /dev/mapper/vg_sugar-lv_root: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
节点数为 7%:
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_sugar-lv_root 3276800 200552 3076248 7% /
系统已重新启动多次,因此所有日志文件都应该已被删除。我希望得到一些解决此问题的提示。
答案1
好的,那么我将发布解决方案。在本例中,它是安装在本地目录 /mnt/backup 上的网络位置 /mnt/backup。一旦卸载
umount /mnt/backup
它显示本地目录占用了 45G,充满了备份:
cd /mnt/backup/ du -h 39G ./servers-unix-hq/sugar.gnsa.local 39G ./servers-unix-hq 4.5G ./db-mysql-hq/sugar.gnsa.local 4.5G ./db-mysql-hq 44G
我已经删除了一些旧的备份,MySQL 现在可以启动了。
答案2
这通常是由某人删除(而不是截断)正在增长的文件引起的。只有在写入文件的程序将其关闭后,磁盘空间才会被释放。
用于lsof +L1
获取所有已删除但仍打开的文件以及保持它们打开的进程的列表。输出将如下所示:
# lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
php-fpm7. 1364 root 3u REG 0,45 0 0 41658 /tmp/.ZendSem.plytyh (deleted)
COMMAND 和 PID 字段将告诉您哪个进程正在保持文件打开,而 NAME 则指示文件曾经的名称。 TYPE 字段的值为 REG,表示它是一个常规文件。 SIZE/OFF 值可以让您了解已删除文件的大小,但它并不总是可靠(仅当程序不断追加到文件末尾并且不更新中间的任何内容时,幸运的是,这是默认值与大多数日志文件)。
一旦确定了问题的原因,就有几种可能的方法来解决它:
1. 如果可能,调用相关进程的日志轮换功能
如果问题文件是日志文件,并且保持打开状态的进程具有允许日志轮换的功能(即可以告诉进程关闭并重新打开其所有日志文件),则您可以触发日志轮换功能。许多守护进程kill -HUP
为此目的接受一个或一些其他信号。除非您先将其恢复,否则已删除文件中的数据将会丢失(见下文)。
2. 停止并重新启动保持文件打开的进程
停止并重新启动保持文件打开的进程也将修复该问题,并导致已删除文件的内容永久丢失(除非先恢复,请参见下文)。
3.(解决方法)访问已删除但仍打开的文件,将其截断为零大小
使用输出中的 PID 和 FD 编号lsof +L1
,如果您具有 root 访问权限,您仍然可以通过文件系统访问“已删除但仍然打开”的文件/proc
。上面示例中的文件可以作为/proc/1364/fd/3
.
(FD 编号后的任何字母均描述如何该进程正在访问该文件,可以忽略。)
如果您需要恢复已删除文件的内容,您可以将cat
其通过将输出传输到另一个文件(在另一个具有足够可用空间的文件系统上!)。
如果您只需要释放磁盘空间,则可以使用命令将文件截断为零大小> /proc/1364/fd/3
(即没有命令的命令行,只是将输出重定向到要截断的文件)。
笔记:这只会清除现有数据。它不会阻止更多数据累积到已删除的文件中,但可能允许您保持关键服务的运行,直到可以安排维护停机时间。
在日志文件仍在写入时将其删除是初级 Unix 系统管理员的常见错误。几乎每个人在 Unix/Linux 职业生涯中都会至少犯一次这样的错误。好的人会从错误中吸取教训,既能在错误发生时解决问题,又能在未来避免错误。