No space left on device 解决 Cydia 安装应用错误

本文详细记录了一次在iOS设备上通过Cydia安装应用时遇到的failedtowrite(Nospaceleftondevice)错误。尽管显示有8.3GB可用空间,但实际是因为根目录磁盘空间不足导致。通过卸载应用程序释放根目录空间,成功解决了安装问题。

在 Cydia 上搜索应用进行安装,提示错误:failed to write (No space left on device),从字面上的意思看是磁盘空间不够,导致写入错误,但是到 “关于” 里看到磁盘可用空间还剩 8.3G。尝试将 deb 包上传到手机,使用命令手动安装,还是提示相应的错误,信息如下:

# dpkg -i eXfaker.deb
Selecting previously unselected package net.exchen.exfaker.
(Reading database ... 4236 files and directories currently installed.)
Preparing to unpack eXfaker.deb ...
Unpacking net.exchen.exfaker (1.2.5) ...
dpkg: error processing archive eXfaker.deb (--install):
 cannot copy extracted data for './Applications/eXfaker.app/eXfaker' to '/Applications/eXfaker.app/eXfaker.dpkg-new': failed to write (No space left on device)
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe: 13)
Errors were encountered while processing:
 eXfaker.deb

使用 df -h 命令查看磁盘的情况,发现原来文件系统 /dev/disk0s1s1 的挂载点是 / 目录,可用空间果然是没有了,而 /dev/disk0s1s2 的挂载点是 /private/var 目录,可用空间还剩 8.3 G,信息如下:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/disk0s1s1  2.6G  2.6G     0 100% /
devfs            28K   28K     0 100% /dev
/dev/disk0s1s2   13G  4.0G  8.3G  33% /private/var
/dev/disk1      242M   72M  170M  30% /Developer

尝试卸载掉 /Applications 目录的一个应用,发现 / 目录的可用空间多了 6.1MB,再次使用 dpkg -i eXfaker.deb 命令安装应用就没问题了,信息如下:

# dpkg -i eXfaker.deb
Selecting previously deselected package net.exchen.exfaker.
(Reading database ... 2307 files and directories currently installed.)
Unpacking net.exchen.exfaker (from eXfaker.deb) ...
Setting up net.exchen.exfaker (1.2.5) ...
# uicache

原文地址:https://www.exchen.net/ios-hacker-no-space-left-on-device.html

在 dpkg 安装过程中出现 **No space left on device** 错误,通常意味着系统或目标挂载点的磁盘空间不足,无法完成文件写入操作。这种问题可能出现在 `/boot`、根分区 `/` 或其他挂载点上。以下是解决此类问题的几种方法: ### 清理 APT 缓存 APT 在安装软件包时会缓存 `.deb` 文件到 `/var/cache/apt/archives/` 目录中。随着时间推移,这些缓存可能会占用大量磁盘空间。 执行以下命令清理缓存: ```bash sudo apt-get autoclean sudo apt-get clean ``` 前者会删除旧版本的包文件,后者将清除所有已下载的包缓存[^3]。 --- ### 删除无用内核和引导文件 如果错误发生在 `/boot` 分区,通常是由于旧内核文件堆积导致空间耗尽。可以通过以下步骤清理旧内核: 1. 查看当前运行的内核版本: ```bash uname -r ``` 2. 列出所有已安装的内核: ```bash dpkg --list | grep linux-image ``` 3. 删除不需要的旧内核(请确保保留至少一个备用内核): ```bash sudo apt-get remove linux-image-x.x.x-x-generic ``` 4. 更新 GRUB 引导配置并清理依赖项: ```bash sudo update-grub sudo apt-get autoremove --purge ``` 此方法可显著释放 `/boot` 分区的空间[^1]。 --- ### 检查大文件并手动清理 使用 `du` 命令查找占用空间较大的目录或文件: ```bash sudo su cd / du -sh * ``` 逐层深入查看哪些目录占用了过多空间。常见的占用源包括日志文件(如 `/var/log/`)、临时文件或大型软件安装包。可以安全地删除不必要的日志或旧文件以释放空间。 --- ### 更改 TMPDIR 临时路径 如果问题是由于 `/tmp` 空间不足引起的,可以将临时文件路径指向其他有足够空间的目录: ```bash export TMPDIR=/home/<username>/tmp ``` 创建该目录并确保其权限正确: ```bash mkdir -p /home/<username>/tmp chmod 1777 /home/<username>/tmp ``` 将上述 `export` 命令添加到 `~/.bashrc` 或 `/etc/environment` 中使其永久生效。这种方法适用于临时空间受限的情况[^3]。 --- ### 扩展分区容量 如果根分区 `/` 空间接近满载,建议考虑扩展其容量。这可以通过调整 LVM 卷组、重新分区或迁移到更大容量的磁盘来实现。对于虚拟机环境,可以动态扩展磁盘大小并调整分区布局。 --- ### 使用符号链接迁移数据 当某些目录(如 `/var/cache/apt` 或 `/var/log`)占用大量空间且无法直接删除时,可以将其内容迁移到其他分区,并通过符号链接恢复访问路径。例如: ```bash mv /var/log /media/new_partition/log ln -s /media/new_partition/log /var/log ``` 此方法有助于长期管理磁盘空间,避免频繁清理操作。 --- ### 总结 - 清理 APT 缓存是快速释放空间的有效方式。 - 删除旧内核适用于 `/boot` 空间不足的问题。 - 手动检查和清理大文件可定位具体占用源。 - 更改 `TMPDIR` 可绕过临时空间限制。 - 若分区容量持续紧张,建议扩展分区或迁移数据。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值