CentOS 6 空间不足,需要回收它

CentOS 6 空间不足,需要回收它

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 职业生涯中都会至少犯一次这样的错误。好的人会从错误中吸取教训,既能在错误发生时解决问题,又能在未来避免错误。

相关内容