linux系统盘使用率达到100%的问题查找和解决方法

原文地址:https://www.cnblogs.com/jiftle/p/10529280.html

linux系统盘使用率达到100%的问题查找和解决方法

今天公司云服务器报警系统发来短信,系统磁盘空间不够,登录服务器进行查看,磁盘使用虑达到100%,

     

 感觉比较奇怪,所存的东西并不多,怎么会将磁盘占满,而且数据都是存在数据盘下,通过简单的进行查看,总体有了些思路,分为三步走:

一、先对系统盘下所有文件大小进行统计,是否真的是数据存储以达到了磁盘空间

  当时对系统盘所有文件进行统计,总共才5.5G的大小,对数据盘进行统计总共才10G左右,就算数据盘的数据算到系统盘下,也没有超过20G,

      那么磁盘占满的问题并不是所存数据导致的;

二、如果并不是上面问题将磁盘空间占满,那么进行inode的统计查看

     如下图,对inode查看,使用率8%,没有占用磁盘过多,表示正常;

     

三、就是删除正在使用的文件,空间不释放的问题

  上面的两个问题都不是磁盘使用率100%的真正原因,那么现在考虑看下空间释放的问题;

      lsof|grep deleted 命令进行查看,如下图红框中:

 

使用kill -9 7512 杀掉对应的进程,再查看下系统盘的空间,表示正常了

真实的原因就是因为磁盘中比较大并且以有在使用的数据,但是在删除的时候使用的是rm命令直接删除,导致空间不释放!!

注意:删除正在写的文件一般用 cat /dev/null > file,而不是直接rm(直接rm会造成文件删除空间不释放的问题)

<think>好的,我在需要处理用户的问题Linux根目录下有一个大文件导致系统盘使用率达到100%,用户想把这个文件挂载到其他盘,并在挂载后移动该文件下的内容到新挂载的盘。这应该怎么做呢?首先,我需要理清楚整个流程,确保每个步骤正确,同时避免数据丢失或系统问题。 首先,用户提到的是一个大文件,而不是目录。但通常挂载操作是针对目录的,因为挂载点本身需要是一个目录。如果用户实际上是指一个大目录占用了空间,可能需要澄清。但假设用户确实有一个大文件,比如一个大日志文件或者镜像文件,那么可能需要不同的处理方式,比如移动文件到其他分区,然后创建符号链接。不过用户明确提到挂载到其他盘,所以可能用户是混淆了文件目录的概念,或者可能是指某个目录下的文件太大。需要进一步分析。 假设用户有一个大文件,比如/mylargefile,导致根目录空间不足。但通常挂载是将一个设备挂载到目录,而不是文件。因此,可能用户实际上有一个大目录,比如/mydata,里面有很多大文件,占用了根目录的空间。用户希望将这个目录挂载到另一个分区,从而释放根目录的空间。或者用户可能有一个单独的大文件,想将其移动到其他分区,然后通过挂载的方式让原路径访问。这需要不同的处理步骤。 可能用户的情况是:假设根目录(/)下的某个目录,比如/var或者/home,占用了太多空间,用户想把这个目录挂载到另一个磁盘分区。这种情况下,通常的做法是先将数据移动到新分区,然后修改/etc/fstab挂载该分区到该目录。 但用户的问题描述中提到的是“文件较大”,所以可能用户有一个单独的大文件,例如/opt/bigfile.img,占用了大量空间。这时候,如果用户想将这个文件挂载到另一个位置,可能需要使用loop设备挂载,但这样可能无法直接释放原文件占用的空间,除非移动该文件到其他位置,然后挂载。但这样可能不符合用户需求。 或者,用户可能有一个目录,比如/home/user/data,其中有很多文件,导致根目录空间不足。用户想把这个目录挂载到另一个分区,从而释放根目录空间。此时正确的步骤是: 1. 确认目标分区的可用空间足够。 2. 将原目录下的所有文件移动到新分区。 3. 卸载原目录(如果已挂载)。 4. 挂载新分区到原目录。 5. 配置/etc/fstab实开机自动挂载。 但用户可能已经存在一个文件或目录,需要处理。 可能的误解点在于,用户提到的“挂载到其他盘”是否指的是将有的目录绑定到另一个位置,或者使用另一个分区作为存储。需要明确。 在,按照用户的问题,假设用户有一个大文件(比如/mnt/bigfile)在根目录下,导致系统盘空间满。用户想将这个文件挂载到其他盘(比如/data),然后将该文件下的内容移到挂载盘里。这里可能存在混淆,因为文件本身无法被挂载为一个文件系统,除非它是一个镜像文件,比如ISO或磁盘镜像,并且使用loop设备挂载。如果是这种情况,用户可能需要挂载这个镜像文件到某个目录,然后访问其中的内容。但此时,移动其中的内容到挂载点可能并不会释放原镜像文件的空间,除非用户将镜像中的内容复制到其他位置,并删除原镜像文件。 但更可能的情况是,用户有一个大目录,比如/opt,占用了根分区的空间,用户希望将整个/opt目录挂载到另一个分区。这时需要将原/opt下的内容移动到新分区,然后将新分区挂载到/opt。 因此,正确的步骤可能如下: 1. 确认目标分区的可用空间足够,假设目标分区是/dev/sdb1,挂载到/mnt/newdisk。 2. 将原目录(如/opt)下的所有文件复制到/mnt/newdisk。 3. 备份原目录下的文件,然后删除原目录下的内容以释放空间。 4. 修改/etc/fstab,将/dev/sdb1挂载到/opt。 5. 挂载新分区:mount /dev/sdb1 /opt。 6. 确保文件权限正确。 但用户的问题描述中可能存在的错误点:用户提到的是“文件”而不是目录,所以需要明确。 假设用户有一个大文件,比如/var/log/large.log,占用了空间。此时,用户可能想将这个文件移动到其他分区,并创建一个符号链接,或者挂载一个分区到该文件的位置。但文件无法作为挂载点,只能挂载到目录。 因此,可能的解决方案: 如果用户有一个大文件,可以将其移动到其他分区,然后创建符号链接,例如: mv /path/to/largefile /new/partition/ ln -s /new/partition/largefile /path/to/largefile 但需要注意应用程序是否支持符号链接。 另一种情况,如果用户有一个目录,里面有很多大文件,想将该目录挂载到其他分区,从而释放根空间。此时,正确的步骤是: 假设要移动的目录是/path/to/directory,目标分区是/dev/sdb1,挂载到/new/disk: 1. 创建目标目录:mkdir /new/disk/directory 2. 复制或移动原目录内容到新位置:cp -a /path/to/directory/* /new/disk/directory/ (但cp可能保留权限,或者使用rsync -av) 或者,如果空间允许,可以移动:mv /path/to/directory/* /new/disk/directory/ 3. 卸载原目录所在的分区(如果有必要的话,但可能根目录无法卸载) 4. 挂载新分区到原目录:mount /dev/sdb1 /path/to/directory 5. 配置/etc/fstab以便开机自动挂载。 但需要注意,在移动文件时,如果原目录在根分区,而根分区空间已满,可能需要先清理空间,或者使用临时挂载点。 例如,如果根分区已满,无法进行复制操作,可能需要先挂载新分区到临时位置,移动文件,再挂载到正确位置。 可能的详细步骤: 1. 确认目标分区(例如/dev/sdb1)已经格式化并准备好。 2. 创建临时挂载点:mkdir /mnt/temp 3. 挂载新分区到临时位置:mount /dev/sdb1 /mnt/temp 4. 将原目录的内容复制到临时挂载点:cp -a /path/to/directory/* /mnt/temp/ 5. 确认复制完成后,删除原目录的内容以释放空间:rm -rf /path/to/directory/* 6. 卸载临时挂载点:umount /mnt/temp 7. 挂载新分区到原目录:mount /dev/sdb1 /path/to/directory 8. 配置/etc/fstab,添加条目:/dev/sdb1 /path/to/directory ext4 defaults 0 0 (假设文件系统是ext4) 9. 重启或测试挂载是否正确。 在这个过程中,必须确保在删除原文件之前数据已经正确复制,并且挂载配置正确,否则可能导致数据丢失或系统无法启动。 另外,如果用户在操作过程中遇到权限问题,可能需要使用chown或chmod调整权限。 总结用户可能的步骤: - 确认大文件或目录的位置及目标分区。 - 准备目标分区,挂载到临时位置。 - 移动或复制数据到新分区。 - 修改挂载配置,将新分区挂载到原路径。 - 确保系统启动时自动挂载。 需要注意的是,如果处理的是系统关键目录(如/usr, /var等),可能需要进入救援模式,以免在移动过程中导致服务崩溃。 用户可能的问题点: - 误将文件当作目录处理,导致挂载失败。 - 根目录空间已满,无法执行复制或删除操作。 - 未正确配置/etc/fstab导致系统无法启动。 - 权限问题导致服务无法访问新位置的文件。 因此,在回答中需要详细指导每一步,并提示注意事项,比如备份数据,确认命令正确性,测试挂载等。</think>### 逐步解决方案: 当系统盘因某个大文件(或目录)占满时,可通过将其迁移并挂载到其他磁盘来释放空间。以下是具体步骤: --- #### **1. 确认文件/目录及目标磁盘** - **查找大文件**: 使用命令定位大文件,例如: ```bash sudo du -sh /* 2>/dev/null | sort -rh | head -n 10 ``` 假设目标为 `/data/large_file`。 - **准备目标磁盘**: 确认目标分区(如 `/dev/sdb1`)已格式化且有足够空间,挂载点假设为 `/mnt/new_disk`。 --- #### **2. 迁移数据到新磁盘** - **挂载目标分区**: ```bash sudo mkdir /mnt/new_disk sudo mount /dev/sdb1 /mnt/new_disk ``` - **复制或移动文件**: - **如果是单个大文件**: ```bash sudo cp /data/large_file /mnt/new_disk/ # 复制后需删除原文件 sudo rm /data/large_file ``` - **如果是目录**(如 `/data`): ```bash sudo rsync -av /data/ /mnt/new_disk/ # 保持权限复制 sudo rm -rf /data/* # 确保复制成功后删除原数据 ``` --- #### **3. 挂载新分区到原路径** - **卸载临时挂载点**: ```bash sudo umount /dev/sdb1 ``` - **挂载到原路径**: ```bash sudo mount /dev/sdb1 /data ``` --- #### **4. 配置开机自动挂载** - **获取分区UUID**: ```bash sudo blkid /dev/sdb1 ``` - **编辑 `/etc/fstab`**: 添加一行(以UUID为例): ``` UUID=1234-5678 /data ext4 defaults 0 0 ``` - 文件系统类型(如 `ext4`)需与实际一致。 --- #### **5. 验证操作** - **检查挂载**: ```bash df -h /data ``` 确认已显示新分区的容量。 - **重启测试**: ```bash sudo reboot ``` 重启后检查文件是否正常访问。 --- ### 注意事项: 1. **备份数据**:操作前务必备份重要数据。 2. **根目录空间不足**:若根目录已满导致命令无法执行,可尝试: - 删除临时文件(如 `/var/log/`, `/tmp/`)。 - 启动到救援模式操作。 3. **关键系统目录**:如 `/usr`、`/var`,建议在维护模式下操作。 4. **符号链接替代方案**: 若无法挂载分区,可移动文件后创建符号链接: ```bash sudo ln -s /mnt/new_disk/large_file /data/large_file ``` 通过以上步骤,可将大文件或目录迁移到新磁盘,有效释放系统盘空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值