php mkdir no space left on device,模拟Linux磁盘分区有可用空间无可用Inodes时报错:No space left on device...

本文通过一个具体的示例展示了Linux系统中Inodes的重要性及其与磁盘空间的关系。通过创建大量文件直至Inodes耗尽,演示了即使磁盘空间仍有余量,也无法继续创建新文件的情况。

模拟Linux磁盘分区有可用空间无可用Inodes时报错:No space left on device

参考:磁盘文件系统

1.创建测试脚本:

[Oracle@ocm1 ~]$ vi touchfile.sh

#!/bin/bash

for abc in {1..9}

do

touch /boot/test/$abc

done

"touchfile.sh" 5L, 66C written

2.创建测试目录、测试脚本

[root@ocm1 oracle]# cd /boot

[root@ocm1 boot]# mkdir test

[root@ocm1 boot]# ls

config-2.6.18-308.el5 symvers-2.6.32-300.10.1.el5uek.gz

config-2.6.32-300.10.1.el5uek System.map-2.6.18-308.el5

grub System.map-2.6.32-300.10.1.el5uek

initrd-2.6.18-308.el5.img test

initrd-2.6.32-300.10.1.el5uek.img vmlinuz-2.6.18-308.el5

lost+found vmlinuz-2.6.32-300.10.1.el5uek

symvers-2.6.18-308.el5.gz

[root@ocm1 boot]# cd -

/home/oracle

[root@ocm1 oracle]# sh touchfile.sh

[root@ocm1 oracle]# cd -

/boot

[root@ocm1 boot]# cd test

[root@ocm1 test]# ls

1 2 3 4 5 6 7 8 9

3.查看当前/boot目录可用Inodes数量

[root@ocm1 test]# df -i

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/sda3 7318528 185460 7133068 3% /

/dev/sda1 26104 50 26054 1% /boot

tmpfs 128334 1 128333 1% /dev/shm

4.修改脚本,直接将可用Inodes用光

[root@ocm1 boot]# cd /home/oracle/

[root@ocm1 oracle]# vi touchfile.sh

#!/bin/bash

for abc in {10..26110}

do

touch /boot/test/$abc

done

~

"touchfile.sh" 5L, 71C written

5.执行脚本,脚本未执行完,即报错:No space left on device,

事实上此时用df -h可以看到目录下有可用空间,,可是因为没有Inodes,已经无法新建文件了,报错为:No space left on device

[root@ocm1 oracle]# sh touchfile.sh

[root@ocm1 oracle]# sh touchfile.sh

touch: cannot touch `/boot/test/26064': No space left on device

touch: cannot touch `/boot/test/26065': No space left on device

………………………………………………

touch: cannot touch `/boot/test/26109': No space left on device

touch: cannot touch `/boot/test/26110': No space left on device

[root@ocm1 oracle]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 28G 11G 15G 43% /

/dev/sda1 99M 21M 73M 23% /boot

tmpfs 502M 0 502M 0% /dev/shm

[root@ocm1 oracle]# df -i

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/sda3 7318528 185460 7133068 3% /

/dev/sda1 26104 26104 0 100% /boot

tmpfs 128334 1 128333 1% /dev/shm

手动执行创建目录和文件命令报同样错误:

[root@ocm1 oracle]# cd /boot/

[root@ocm1 boot]# mkdir a

mkdir: cannot create directory `a': No space left on device

[root@ocm1 boot]# touch abc

touch: cannot touch `abc': No space left on device

本文永久更新链接地址:

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

<think>首先,用户的问题是:“解决 mkdir cannot create directory '/root/.ansible' No space left on device 错误”。这是一个错误信息,表明在尝试创建目录,磁盘空间不足。 从系统级指令中,我需要: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户的问题是关于Ansible的错误:“mkdir: cannot create directory '/root/.ansible/tmp/ansible-tmp-...': No space left on device”。这出现在引用[4]中,具体是:“192.168.152.222 | UNREACHABLE! => { "changed": false, "msg": "mkdir: cannot create directory `/root/.ansible/tmp/ansible-tmp-1536203934.77-45972825051570': No space left on device\n", "unreachable": true }”[^4]。 用户的意图是解决这个错误。错误原因是“No space left on device”,意思是磁盘空间不足。 参考其他引用: - 引用[1]提到磁盘空间满了导致问题。 - 引用[4]显示了这个错误。 - 其他引用如[2]、[3]、[5]涉及Ansible服务、SELinux设置、SSH免密码通信,但可能不直接相关。 我应该提供解决磁盘空间不足问题的步骤。既然用户是Ansible用户,我可以从系统管理员的角度给出建议。 回答结构: - 清晰、逐步解决问题。 - 保证真实可靠。 - 使用中文。 步骤: 1. 确认磁盘空间不足。 2. 检查磁盘使用情况。 3. 清理空间。 4. 验证解决。 最后,生成相关问题。 在回答中,如果有引用,添加引用标识。例如,引用[4]直接相关。 可能的解决方案: - 使用命令如df -h检查磁盘使用。 - 查找大文件或日志文件。 - 清理不必要的文件。 - 扩展磁盘空间(如果可能)。 从引用[1],用户提到日志文件导致磁盘满。 所以,回答应包括: - 解释错误原因。 - 提供诊断步骤。 - 给出清理建议。 - 预防措施。 生成相关问题: - 基于主题,如如何监控磁盘空间、Ansible优化等。</think>### 解决 "mkdir cannot create directory '/root/.ansible' No space left on device" 错误 这个错误表示在创建 Ansible 临目录,系统磁盘空间不足(具体错误信息如引用[4]所示:"mkdir: cannot create directory `/root/.ansible/tmp/ansible-tmp-...': No space left on device")。磁盘空间满会导致 Ansible 无法写入临文件,进而使任务失败。以下是逐步解决方法的详细说明,基于系统管理员的最佳实践。整个过程需在目标服务器上以 root 权限操作。 #### 错误原因分析 - **核心问题**:磁盘空间不足($ \text{disk usage} \geq 100\% $),通常由日志文件、临文件或大文件积累引起(如引用[1]中提到的日志文件导致 use% 100%)。 - **影响范围**:Ansible 在运行需要创建临目录(如 `/root/.ansible/tmp`),空间不足会中断 SSH 或任务执行(引用[4]显示节点变为 UNREACHABLE)。 - **常见场景**:服务器长期运行未清理、日志轮转配置不当或应用程序异常写入。 #### 解决步骤 按照以下步骤诊断和修复问题,确保操作安全(建议先备份关键数据)。 1. **确认磁盘空间状态** - 使用 `df -h` 命令检查磁盘使用率: ```bash df -h ``` 输出示例: ``` Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 50G 0B 100% / ``` 如果 Use% 达到 100%(如引用[1]和[4]),则确认空间不足。 - 重点检查根分区(`/`),因为 `/root/.ansible` 位于此。 2. **定位大文件或目录** - 使用 `du` 命令找出占用空间大的文件: ```bash du -sh /* | sort -hr # 检查根目录下各目录大小 du -ah / | sort -hr | head -n 20 # 列出所有文件并按大小排序 ``` - 常见问题源: - 日志文件(如 `/var/log` 下的日志,特别是 Nginx、Apache 或应用日志)。 - 临文件(如 `/tmp` 或 Ansible 缓存)。 - 核心转储文件(`core` 文件)。 - 示例:如果 `/var/log` 占用过高,需清理旧日志(引用[1]中问题即由此引起)。 3. **清理磁盘空间** - **删除不必要的文件**: - 清理日志: ```bash # 清空旧日志(谨慎操作,避免删除正在使用的日志) truncate -s 0 /var/log/*.log # 或使用 logrotate 工具轮转日志 logrotate -f /etc/logrotate.conf ``` - 删除临文件: ```bash rm -rf /tmp/* # 清理 /tmp rm -rf /root/.ansible/tmp/* # 清理 Ansible 临目录(但需先确保空间释放) ``` - 删除大文件: ```bash find / -type f -size +100M -exec rm -f {} \; # 删除大于 100MB 的文件(谨慎使用) ``` - **扩展空间(可选)**: 如果清理后空间仍紧张,考虑: - 添加新磁盘并挂载。 - 使用 LVM 扩展分区(需重启)。 操作前需评估系统环境。 4. **验证修复** - 重新运行 `df -h` 确保 Use% 低于 90%: ```bash df -h | grep / # 检查根分区 ``` - 测试 Ansible 命令: ```bash ansible all -m ping # 简单测试节点连通性 ``` 如果不再报 "No space left on device",则问题解决(引用[4]中错误消失)。 #### 预防措施 - **监控磁盘空间**: 设置 cron 任务定期检查: ```bash # 添加定任务(每天检查) echo "0 0 * * * df -h > /var/log/disk_usage.log" | crontab - ``` - **优化 Ansible**: - 配置 Ansible 使用自定义临目录(空间充足的路径): 在 `ansible.cfg` 中添加: ``` [defaults] remote_tmp = /custom/tmp/path # 改为大空间分区 ``` - 定期清理 Ansible 缓存: ```bash rm -rf /root/.ansible/cp/* ``` - **日志管理**: 配置 logrotate 自动轮转日志(引用[3]中提到 SELinux 上下文调整,但磁盘清理优先): ```bash # 编辑 /etc/logrotate.conf 设置 size 和 rotate 参数 ``` 确保日志不会无限增长。 通过以上步骤,错误应能解决。如果问题持续,检查文件系统 inode 是否耗尽(使用 `df -i`),或排查应用程序异常写入[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值